Mongodb集群【三】
Mongodb常用三种集群
1 主从(Master/Slave) 不推荐,但是mongodb依然保留有。一主多从,不支持链式结构。简单主从,没有裁仲者不能自动恢复。
2 副本集(Relica Set) 推荐 主从备份,分流。一主多从,一主一从一从-从,支持链式结构。可设仲裁者,主服务挂了,从从服务器选一台当主服务器。
3 分片(Sharding) 大数据储存方案。通过横向扩展增加分片,组成集群。有配置服务器,路由服务器,分片服务器。分片服务器可以是单个mongodb实例,也可以是一个副本集。
代码展示
/// <summary> /// 省份城市 /// </summary> public class ProvinceCity { /// <summary> /// 省份 /// </summary> public string Province { set; get; } /// <summary> /// 城市 /// </summary> public string City { set; get; } }
/// <summary> /// 订单表 /// </summary> public class TbOrders { /// <summary> /// Id /// </summary> public BsonObjectId Id { set; get; } /// <summary> /// 订单编号 /// </summary> public string OrderNo { set; get; } /// <summary> /// 货主ID /// </summary> public int ShipperID { set; get; } /// <summary> /// 车主ID /// </summary> public int CarOwnerID { set; get; } /// <summary> /// 发货省份 /// </summary> public string SendProvince { set; get; } /// <summary> /// 发货城市 /// </summary> public string SendCity { set; get; } /// <summary> /// 收货省份 /// </summary> public string DestProvince { set; get; } /// <summary> /// 收货城市 /// </summary> public string DestCity { set; get; } /// <summary> /// 运输价格 /// </summary> public decimal TranPrice { set; get; } /// <summary> /// 取消订单(1正常 2申请取消 3己取消) /// </summary> public int CancelStatus { set; get; } /// <summary> /// 订单状态,"待支付":100,"待运输":200,"运输中":300,"已签收":400,"已结算":500 /// </summary> public int Status { set; get; } /// <summary> /// 结算时间 /// </summary> public DateTime? SettlementDate { set; get; } /// <summary> /// 结算价格 /// </summary> public decimal? SettleTranPrice { set; get; } /// <summary> /// 保价(保险费用) /// </summary> public decimal SafePrice { set; get; } /// <summary> /// 总价格 /// </summary> public decimal TotalPrice { set; get; } /// <summary> /// 搬运价格 /// </summary> public decimal? CarryPrice { set; get; } /// <summary> /// 创建时间 /// </summary> public DateTime CreateTime { set; get; } }
这一段JSON数据用来随获取城市
[{'Province':'北京市','City':'北京市'},{'Province':'天津市','City':'天津市'},{'Province':'河北省','City':'石家庄市'},{'Province':'河北省','City':'唐山市'},{'Province':'河北省','City':'秦皇岛市'},{'Province':'河北省','City':'邯郸市'},{'Province':'河北省','City':'邢台市'},{'Province':'河北省','City':'保定市'},{'Province':'河北省','City':'张家口市'},{'Province':'河北省','City':'承德市'},{'Province':'河北省','City':'沧州市'},{'Province':'河北省','City':'廊坊市'},{'Province':'河北省','City':'衡水市'},{'Province':'山西省','City':'太原市'},{'Province':'山西省','City':'大同市'},{'Province':'山西省','City':'阳泉市'},{'Province':'山西省','City':'长治市'},{'Province':'山西省','City':'晋城市'},{'Province':'山西省','City':'朔州市'},{'Province':'山西省','City':'晋中市'},{'Province':'山西省','City':'运城市'},{'Province':'山西省','City':'忻州市'},{'Province':'山西省','City':'临汾市'},{'Province':'山西省','City':'吕梁市'},{'Province':'内蒙古自治区','City':'呼和浩特市'},{'Province':'内蒙古自治区','City':'包头市'},{'Province':'内蒙古自治区','City':'乌海市'},{'Province':'内蒙古自治区','City':'赤峰市'},{'Province':'内蒙古自治区','City':'通辽市'},{'Province':'内蒙古自治区','City':'鄂尔多斯市'},{'Province':'内蒙古自治区','City':'呼伦贝尔市'},{'Province':'内蒙古自治区','City':'巴彦淖尔市'},{'Province':'内蒙古自治区','City':'乌兰察布市'},{'Province':'内蒙古自治区','City':'兴安盟'},{'Province':'内蒙古自治区','City':'锡林郭勒盟'},{'Province':'内蒙古自治区','City':'阿拉善盟'},{'Province':'辽宁省','City':'沈阳市'},{'Province':'辽宁省','City':'大连市'},{'Province':'辽宁省','City':'鞍山市'},{'Province':'辽宁省','City':'抚顺市'},{'Province':'辽宁省','City':'本溪市'},{'Province':'辽宁省','City':'丹东市'},{'Province':'辽宁省','City':'锦州市'},{'Province':'辽宁省','City':'营口市'},{'Province':'辽宁省','City':'阜新市'},{'Province':'辽宁省','City':'辽阳市'},{'Province':'辽宁省','City':'盘锦市'},{'Province':'辽宁省','City':'铁岭市'},{'Province':'辽宁省','City':'朝阳市'},{'Province':'辽宁省','City':'葫芦岛市'},{'Province':'吉林省','City':'长春市'},{'Province':'吉林省','City':'吉林市'},{'Province':'吉林省','City':'四平市'},{'Province':'吉林省','City':'辽源市'},{'Province':'吉林省','City':'通化市'},{'Province':'吉林省','City':'白山市'},{'Province':'吉林省','City':'松原市'},{'Province':'吉林省','City':'白城市'},{'Province':'吉林省','City':'延边朝鲜族自治州'},{'Province':'黑龙江省','City':'哈尔滨市'},{'Province':'黑龙江省','City':'齐齐哈尔市'},{'Province':'黑龙江省','City':'鸡西市'},{'Province':'黑龙江省','City':'鹤岗市'},{'Province':'黑龙江省','City':'双鸭山市'},{'Province':'黑龙江省','City':'大庆市'},{'Province':'黑龙江省','City':'伊春市'},{'Province':'黑龙江省','City':'佳木斯市'},{'Province':'黑龙江省','City':'七台河市'},{'Province':'黑龙江省','City':'牡丹江市'},{'Province':'黑龙江省','City':'黑河市'},{'Province':'黑龙江省','City':'绥化市'},{'Province':'黑龙江省','City':'大兴安岭地区'},{'Province':'上海','City':'上海市'},{'Province':'江苏省','City':'南京市'},{'Province':'江苏省','City':'无锡市'},{'Province':'江苏省','City':'徐州市'},{'Province':'江苏省','City':'常州市'},{'Province':'江苏省','City':'苏州市'},{'Province':'江苏省','City':'南通市'},{'Province':'江苏省','City':'连云港市'},{'Province':'江苏省','City':'淮安市'},{'Province':'江苏省','City':'盐城市'},{'Province':'江苏省','City':'扬州市'},{'Province':'江苏省','City':'镇江市'},{'Province':'江苏省','City':'泰州市'},{'Province':'江苏省','City':'宿迁市'},{'Province':'浙江省','City':'杭州市'},{'Province':'浙江省','City':'宁波市'},{'Province':'浙江省','City':'温州市'},{'Province':'浙江省','City':'嘉兴市'},{'Province':'浙江省','City':'湖州市'},{'Province':'浙江省','City':'绍兴市'},{'Province':'浙江省','City':'金华市'},{'Province':'浙江省','City':'衢州市'},{'Province':'浙江省','City':'舟山市'},{'Province':'浙江省','City':'台州市'},{'Province':'浙江省','City':'丽水市'},{'Province':'安徽省','City':'合肥市'},{'Province':'安徽省','City':'芜湖市'},{'Province':'安徽省','City':'蚌埠市'},{'Province':'安徽省','City':'淮南市'},{'Province':'安徽省','City':'马鞍山市'},{'Province':'安徽省','City':'淮北市'},{'Province':'安徽省','City':'铜陵市'},{'Province':'安徽省','City':'安庆市'},{'Province':'安徽省','City':'黄山市'},{'Province':'安徽省','City':'滁州市'},{'Province':'安徽省','City':'阜阳市'},{'Province':'安徽省','City':'宿州市'},{'Province':'安徽省','City':'六安市'},{'Province':'安徽省','City':'亳州市'},{'Province':'安徽省','City':'池州市'},{'Province':'安徽省','City':'宣城市'},{'Province':'福建省','City':'福州市'},{'Province':'福建省','City':'厦门市'},{'Province':'福建省','City':'莆田市'},{'Province':'福建省','City':'三明市'},{'Province':'福建省','City':'泉州市'},{'Province':'福建省','City':'漳州市'},{'Province':'福建省','City':'南平市'},{'Province':'福建省','City':'龙岩市'},{'Province':'福建省','City':'宁德市'},{'Province':'江西省','City':'南昌市'},{'Province':'江西省','City':'景德镇市'},{'Province':'江西省','City':'萍乡市'},{'Province':'江西省','City':'九江市'},{'Province':'江西省','City':'新余市'},{'Province':'江西省','City':'鹰潭市'},{'Province':'江西省','City':'赣州市'},{'Province':'江西省','City':'吉安市'},{'Province':'江西省','City':'宜春市'},{'Province':'江西省','City':'抚州市'},{'Province':'江西省','City':'上饶市'},{'Province':'山东省','City':'济南市'},{'Province':'山东省','City':'青岛市'},{'Province':'山东省','City':'淄博市'},{'Province':'山东省','City':'枣庄市'},{'Province':'山东省','City':'东营市'},{'Province':'山东省','City':'烟台市'},{'Province':'山东省','City':'潍坊市'},{'Province':'山东省','City':'济宁市'},{'Province':'山东省','City':'泰安市'},{'Province':'山东省','City':'威海市'},{'Province':'山东省','City':'日照市'},{'Province':'山东省','City':'莱芜市'},{'Province':'山东省','City':'临沂市'},{'Province':'山东省','City':'德州市'},{'Province':'山东省','City':'聊城市'},{'Province':'山东省','City':'滨州市'},{'Province':'山东省','City':'菏泽市'},{'Province':'河南省','City':'郑州市'},{'Province':'河南省','City':'开封市'},{'Province':'河南省','City':'洛阳市'},{'Province':'河南省','City':'平顶山市'},{'Province':'河南省','City':'安阳市'},{'Province':'河南省','City':'鹤壁市'},{'Province':'河南省','City':'新乡市'},{'Province':'河南省','City':'焦作市'},{'Province':'河南省','City':'济源市'},{'Province':'河南省','City':'濮阳市'},{'Province':'河南省','City':'许昌市'},{'Province':'河南省','City':'漯河市'},{'Province':'河南省','City':'三门峡市'},{'Province':'河南省','City':'南阳市'},{'Province':'河南省','City':'商丘市'},{'Province':'河南省','City':'信阳市'},{'Province':'河南省','City':'周口市'},{'Province':'河南省','City':'驻马店市'},{'Province':'湖北省','City':'武汉市'},{'Province':'湖北省','City':'黄石市'},{'Province':'湖北省','City':'十堰市'},{'Province':'湖北省','City':'宜昌市'},{'Province':'湖北省','City':'襄阳市'},{'Province':'湖北省','City':'鄂州市'},{'Province':'湖北省','City':'荆门市'},{'Province':'湖北省','City':'孝感市'},{'Province':'湖北省','City':'荆州市'},{'Province':'湖北省','City':'黄冈市'},{'Province':'湖北省','City':'咸宁市'},{'Province':'湖北省','City':'随州市'},{'Province':'湖北省','City':'恩施土家族苗族自治州'},{'Province':'湖北省','City':'仙桃市'},{'Province':'湖北省','City':'潜江市'},{'Province':'湖北省','City':'天门市'},{'Province':'湖北省','City':'神农架林区'},{'Province':'湖南省','City':'长沙市'},{'Province':'湖南省','City':'株洲市'},{'Province':'湖南省','City':'湘潭市'},{'Province':'湖南省','City':'衡阳市'},{'Province':'湖南省','City':'邵阳市'},{'Province':'湖南省','City':'岳阳市'},{'Province':'湖南省','City':'常德市'},{'Province':'湖南省','City':'张家界市'},{'Province':'湖南省','City':'益阳市'},{'Province':'湖南省','City':'郴州市'},{'Province':'湖南省','City':'永州市'},{'Province':'湖南省','City':'怀化市'},{'Province':'湖南省','City':'娄底市'},{'Province':'湖南省','City':'湘西土家族苗族自治州'},{'Province':'广东省','City':'广州市'},{'Province':'广东省','City':'韶关市'},{'Province':'广东省','City':'深圳市'},{'Province':'广东省','City':'珠海市'},{'Province':'广东省','City':'汕头市'},{'Province':'广东省','City':'佛山市'},{'Province':'广东省','City':'江门市'},{'Province':'广东省','City':'湛江市'},{'Province':'广东省','City':'茂名市'},{'Province':'广东省','City':'肇庆市'},{'Province':'广东省','City':'惠州市'},{'Province':'广东省','City':'梅州市'},{'Province':'广东省','City':'汕尾市'},{'Province':'广东省','City':'河源市'},{'Province':'广东省','City':'阳江市'},{'Province':'广东省','City':'清远市'},{'Province':'广东省','City':'东莞市'},{'Province':'广东省','City':'中山市'},{'Province':'广东省','City':'东沙群岛'},{'Province':'广东省','City':'潮州市'},{'Province':'广东省','City':'揭阳市'},{'Province':'广东省','City':'云浮市'},{'Province':'广西壮族自治区','City':'南宁市'},{'Province':'广西壮族自治区','City':'柳州市'},{'Province':'广西壮族自治区','City':'桂林市'},{'Province':'广西壮族自治区','City':'梧州市'},{'Province':'广西壮族自治区','City':'北海市'},{'Province':'广西壮族自治区','City':'防城港市'},{'Province':'广西壮族自治区','City':'钦州市'},{'Province':'广西壮族自治区','City':'贵港市'},{'Province':'广西壮族自治区','City':'玉林市'},{'Province':'广西壮族自治区','City':'百色市'},{'Province':'广西壮族自治区','City':'贺州市'},{'Province':'广西壮族自治区','City':'河池市'},{'Province':'广西壮族自治区','City':'来宾市'},{'Province':'广西壮族自治区','City':'崇左市'},{'Province':'海南省','City':'海口市'},{'Province':'海南省','City':'三亚市'},{'Province':'海南省','City':'三沙市'},{'Province':'海南省','City':'五指山市'},{'Province':'海南省','City':'琼海市'},{'Province':'海南省','City':'儋州市'},{'Province':'海南省','City':'文昌市'},{'Province':'海南省','City':'万宁市'},{'Province':'海南省','City':'东方市'},{'Province':'海南省','City':'定安县'},{'Province':'海南省','City':'屯昌县'},{'Province':'海南省','City':'澄迈县'},{'Province':'海南省','City':'临高县'},{'Province':'海南省','City':'白沙黎族自治县'},{'Province':'海南省','City':'昌江黎族自治县'},{'Province':'海南省','City':'乐东黎族自治县'},{'Province':'海南省','City':'陵水黎族自治县'},{'Province':'海南省','City':'保亭黎族苗族自治县'},{'Province':'海南省','City':'琼中黎族苗族自治县'},{'Province':'重庆','City':'重庆市'},{'Province':'四川省','City':'成都市'},{'Province':'四川省','City':'自贡市'},{'Province':'四川省','City':'攀枝花市'},{'Province':'四川省','City':'泸州市'},{'Province':'四川省','City':'德阳市'},{'Province':'四川省','City':'绵阳市'},{'Province':'四川省','City':'广元市'},{'Province':'四川省','City':'遂宁市'},{'Province':'四川省','City':'内江市'},{'Province':'四川省','City':'乐山市'},{'Province':'四川省','City':'南充市'},{'Province':'四川省','City':'眉山市'},{'Province':'四川省','City':'宜宾市'},{'Province':'四川省','City':'广安市'},{'Province':'四川省','City':'达州市'},{'Province':'四川省','City':'雅安市'},{'Province':'四川省','City':'巴中市'},{'Province':'四川省','City':'资阳市'},{'Province':'四川省','City':'阿坝藏族羌族自治州'},{'Province':'四川省','City':'甘孜藏族自治州'},{'Province':'四川省','City':'凉山彝族自治州'},{'Province':'贵州省','City':'贵阳市'},{'Province':'贵州省','City':'六盘水市'},{'Province':'贵州省','City':'遵义市'},{'Province':'贵州省','City':'安顺市'},{'Province':'贵州省','City':'铜仁市'},{'Province':'贵州省','City':'黔西南布依族苗族自治州'},{'Province':'贵州省','City':'毕节市'},{'Province':'贵州省','City':'黔东南苗族侗族自治州'},{'Province':'贵州省','City':'黔南布依族苗族自治州'},{'Province':'云南省','City':'昆明市'},{'Province':'云南省','City':'曲靖市'},{'Province':'云南省','City':'玉溪市'},{'Province':'云南省','City':'保山市'},{'Province':'云南省','City':'昭通市'},{'Province':'云南省','City':'丽江市'},{'Province':'云南省','City':'普洱市'},{'Province':'云南省','City':'临沧市'},{'Province':'云南省','City':'楚雄彝族自治州'},{'Province':'云南省','City':'红河哈尼族彝族自治州'},{'Province':'云南省','City':'文山壮族苗族自治州'},{'Province':'云南省','City':'西双版纳傣族自治州'},{'Province':'云南省','City':'大理白族自治州'},{'Province':'云南省','City':'德宏傣族景颇族自治州'},{'Province':'云南省','City':'怒江傈僳族自治州'},{'Province':'云南省','City':'迪庆藏族自治州'},{'Province':'西藏自治区','City':'拉萨市'},{'Province':'西藏自治区','City':'昌都地区'},{'Province':'西藏自治区','City':'山南地区'},{'Province':'西藏自治区','City':'日喀则地区'},{'Province':'西藏自治区','City':'那曲地区'},{'Province':'西藏自治区','City':'阿里地区'},{'Province':'西藏自治区','City':'林芝地区'},{'Province':'陕西省','City':'西安市'},{'Province':'陕西省','City':'铜川市'},{'Province':'陕西省','City':'宝鸡市'},{'Province':'陕西省','City':'咸阳市'},{'Province':'陕西省','City':'渭南市'},{'Province':'陕西省','City':'延安市'},{'Province':'陕西省','City':'汉中市'},{'Province':'陕西省','City':'榆林市'},{'Province':'陕西省','City':'安康市'},{'Province':'陕西省','City':'商洛市'},{'Province':'甘肃省','City':'兰州市'},{'Province':'甘肃省','City':'嘉峪关市'},{'Province':'甘肃省','City':'金昌市'},{'Province':'甘肃省','City':'白银市'},{'Province':'甘肃省','City':'天水市'},{'Province':'甘肃省','City':'武威市'},{'Province':'甘肃省','City':'张掖市'},{'Province':'甘肃省','City':'平凉市'},{'Province':'甘肃省','City':'酒泉市'},{'Province':'甘肃省','City':'庆阳市'},{'Province':'甘肃省','City':'定西市'},{'Province':'甘肃省','City':'陇南市'},{'Province':'甘肃省','City':'临夏回族自治州'},{'Province':'甘肃省','City':'甘南藏族自治州'},{'Province':'青海省','City':'西宁市'},{'Province':'青海省','City':'海东市'},{'Province':'青海省','City':'海北藏族自治州'},{'Province':'青海省','City':'黄南藏族自治州'},{'Province':'青海省','City':'海南藏族自治州'},{'Province':'青海省','City':'果洛藏族自治州'},{'Province':'青海省','City':'玉树藏族自治州'},{'Province':'青海省','City':'海西蒙古族藏族自治州'},{'Province':'宁夏回族自治区','City':'银川市'},{'Province':'宁夏回族自治区','City':'石嘴山市'},{'Province':'宁夏回族自治区','City':'吴忠市'},{'Province':'宁夏回族自治区','City':'固原市'},{'Province':'宁夏回族自治区','City':'中卫市'},{'Province':'新疆维吾尔自治区','City':'乌鲁木齐市'},{'Province':'新疆维吾尔自治区','City':'克拉玛依市'},{'Province':'新疆维吾尔自治区','City':'吐鲁番地区'},{'Province':'新疆维吾尔自治区','City':'哈密地区'},{'Province':'新疆维吾尔自治区','City':'昌吉回族自治州'},{'Province':'新疆维吾尔自治区','City':'博尔塔拉蒙古自治州'},{'Province':'新疆维吾尔自治区','City':'巴音郭楞蒙古自治州'},{'Province':'新疆维吾尔自治区','City':'阿克苏地区'},{'Province':'新疆维吾尔自治区','City':'克孜勒苏柯尔克孜自治州'},{'Province':'新疆维吾尔自治区','City':'喀什地区'},{'Province':'新疆维吾尔自治区','City':'和田地区'},{'Province':'新疆维吾尔自治区','City':'伊犁哈萨克自治州'},{'Province':'新疆维吾尔自治区','City':'塔城地区'},{'Province':'新疆维吾尔自治区','City':'阿勒泰地区'},{'Province':'新疆维吾尔自治区','City':'石河子市'},{'Province':'新疆维吾尔自治区','City':'阿拉尔市'},{'Province':'新疆维吾尔自治区','City':'图木舒克市'},{'Province':'新疆维吾尔自治区','City':'五家渠市'},{'Province':'台湾','City':'台北市'},{'Province':'台湾','City':'高雄市'},{'Province':'台湾','City':'台南市'},{'Province':'台湾','City':'台中市'},{'Province':'台湾','City':'金门县'},{'Province':'台湾','City':'南投县'},{'Province':'台湾','City':'基隆市'},{'Province':'台湾','City':'新竹市'},{'Province':'台湾','City':'嘉义市'},{'Province':'台湾','City':'新北市'},{'Province':'台湾','City':'宜兰县'},{'Province':'台湾','City':'新竹县'},{'Province':'台湾','City':'桃园县'},{'Province':'台湾','City':'苗栗县'},{'Province':'台湾','City':'彰化县'},{'Province':'台湾','City':'嘉义县'},{'Province':'台湾','City':'云林县'},{'Province':'台湾','City':'屏东县'},{'Province':'台湾','City':'台东县'},{'Province':'台湾','City':'花莲县'},{'Province':'台湾','City':'澎湖县'},{'Province':'台湾','City':'连江县'},{'Province':'香港特别行政区','City':'香港岛'},{'Province':'香港特别行政区','City':'九龙'},{'Province':'香港特别行政区','City':'新界'},{'Province':'澳门特别行政区','City':'澳门半岛'},{'Province':'澳门特别行政区','City':'离岛'}]
class Program { , , , , }; private static Random _rand = new Random(); private static string _cityJson = "上面的JSON数据,自行拷到这里来"; private static List<ProvinceCity> _cityItems = JsonConvert.DeserializeObject<List<ProvinceCity>>(_cityJson); ; , Timeout.Infinite); static void Main(string[] args) { Task.Run(AddOrder); Task.Run(AddOrder); while (true) { Console.ReadKey(); } } #region 创建订单 public static TbOrders CreateOrder() { //收,发货城市 , _cityItems.Count)]; //订单状态 , _statusItems.Count())]; //结算时间 DateTime? settlementDate = null; ) settlementDate = DateTime.Now; return new TbOrders { OrderNo = DateTime.Now.Ticks.ToString(), ShipperID = _rand.Next(, ), CarOwnerID = _rand.Next(, ), SendProvince = city.Province, SendCity = city.City, DestProvince = city.Province, DestCity = city.City, TranPrice = _rand.Next(, ), CancelStatus = _rand.Next(, ), Status = status, SettlementDate = settlementDate, SettleTranPrice = _rand.Next(, ), SafePrice = _rand.Next(, ), TotalPrice = _rand.Next(, ), CarryPrice = _rand.Next(, ), CreateTime = DateTime.Now }; } #endregion #region 添加订单 public static async Task AddOrder() { var client = new MongoClient("mongodb://192.168.99.5"); var database = client.GetDatabase("shop"); while (true) { //添加订单 TbOrders order = CreateOrder(); await database.GetCollection<TbOrders>("Order").InsertOneAsync(order); //数量+1 Interlocked.Increment(ref _addCount); } } #endregion #region 定期输出统计结果 public static void OutputResult(object state) { Console.WriteLine($"时间:{DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss")},每分钟写入速度为:{_addCount}"); _addCount = ; _timer.Change(, System.Threading.Timeout.Infinite); } #endregion }
大吉大利,今晚吃鸡,先写在这里,明晚再写。
模式一 主从(Master/Slave)
主服务器配置
dbpath = /home/mongodbData logpath = /home/mongodbLogs/mongodb.log port = fork = true nohttpinterface = true directoryperdb=true master=true
从服务器配置
dbpath = /home/mongodbData logpath = /home/mongodbLogs/mongodb.log port = 27017 fork = true nohttpinterface = true directoryperdb=true source = 192.168.99.5:27017 slave = true
C# 连接地址
var client = new MongoClient("mongodb://192.168.99.5");
一主8从,192.168.99.5为主服务器,其它为从服务器。从服务器,只读属性。
模式二 副本集(Relica Set)
一主6从。192.168.99.5为主服务器,其它为从服务器。从服务器至少1台,最多不能超过7台
3台从服务器(192.168.99.6,192.168.99.7,192.168.99.8)
2台链式从服务器(192.168.99.11,192.168.99.12),源分别是192.168.99.6 <-- 192.168.99.11 <-- 192.168.99.12 一共三层。
1台仲裁服务器(192.168.99.13)
所有服务器配置如下
dbpath = /home/mongodbData logpath = /home/mongodbLogs/mongodb.log port = fork = true nohttpinterface = true directoryperdb=true replSet=replSetName
随机登陆一台服务器,进行初始化副本集群
rs.initiate({"_id":"replSetName","members":[ {"_id":0, "host":"192.168.99.5:27017", "priority":2 }, {"_id":1, "host":"192.168.99.6:27017", "priority":1 }, {"_id":2, "host":"192.168.99.7:27017", "priority":1 }, {"_id":3, "host":"192.168.99.8:27017", "priority":1 }, {"_id":4, "host":"192.168.99.11:27017", "priority":1, }, {"_id":5, "host":"192.168.99.12:27017", "priority":1, }, {"_id":6, "host":"192.168.99.13:27017", "priority":0, "arbiterOnly":true } ]})
添加链式服务器
登陆192.168.99.11,192.168.99.12 输入
rs.syncFrom("192.168.99.6:27017")
rs.syncFrom("192.168.99.11:27017")
重新查看状态
{ "set" : "replSetName", "date" : ISODate("2017-12-06T12:44:29.768Z"), , ), ), "optimes" : { "lastCommittedOpTime" : { , ), ) }, "appliedOpTime" : { , ), ) }, "durableOpTime" : { , ), ) } }, "members" : [ { , "name" : "192.168.99.5:27017", , , "stateStr" : "PRIMARY", , "optime" : { , ), ) }, "optimeDate" : ISODate("2017-12-06T12:44:22Z"), , ), "electionDate" : ISODate("2017-12-06T12:29:01Z"), , "self" : true }, { , "name" : "192.168.99.6:27017", , , "stateStr" : "SECONDARY", , "optime" : { , ), ) }, "optimeDurable" : { , ), ) }, "optimeDate" : ISODate("2017-12-06T12:44:22Z"), "optimeDurableDate" : ISODate("2017-12-06T12:44:22Z"), "lastHeartbeat" : ISODate("2017-12-06T12:44:27.802Z"), "lastHeartbeatRecv" : ISODate("2017-12-06T12:44:28.263Z"), ), "syncingTo" : "192.168.99.5:27017", }, { , "name" : "192.168.99.7:27017", , , "stateStr" : "SECONDARY", , "optime" : { , ), ) }, "optimeDurable" : { , ), ) }, "optimeDate" : ISODate("2017-12-06T12:44:22Z"), "optimeDurableDate" : ISODate("2017-12-06T12:44:22Z"), "lastHeartbeat" : ISODate("2017-12-06T12:44:29.744Z"), "lastHeartbeatRecv" : ISODate("2017-12-06T12:44:28.006Z"), ), "syncingTo" : "192.168.99.5:27017", }, { , "name" : "192.168.99.8:27017", , , "stateStr" : "SECONDARY", , "optime" : { , ), ) }, "optimeDurable" : { , ), ) }, "optimeDate" : ISODate("2017-12-06T12:44:22Z"), "optimeDurableDate" : ISODate("2017-12-06T12:44:22Z"), "lastHeartbeat" : ISODate("2017-12-06T12:44:29.742Z"), "lastHeartbeatRecv" : ISODate("2017-12-06T12:44:28.294Z"), ), "syncingTo" : "192.168.99.5:27017", }, { , "name" : "192.168.99.11:27017", , , "stateStr" : "SECONDARY", , "optime" : { , ), ) }, "optimeDurable" : { , ), ) }, "optimeDate" : ISODate("2017-12-06T12:44:22Z"), "optimeDurableDate" : ISODate("2017-12-06T12:44:22Z"), "lastHeartbeat" : ISODate("2017-12-06T12:44:27.954Z"), "lastHeartbeatRecv" : ISODate("2017-12-06T12:44:27.896Z"), ), "syncingTo" : "192.168.99.6:27017", }, { , "name" : "192.168.99.12:27017", , , "stateStr" : "SECONDARY", , "optime" : { , ), ) }, "optimeDurable" : { , ), ) }, "optimeDate" : ISODate("2017-12-06T12:44:22Z"), "optimeDurableDate" : ISODate("2017-12-06T12:44:22Z"), "lastHeartbeat" : ISODate("2017-12-06T12:44:28.178Z"), "lastHeartbeatRecv" : ISODate("2017-12-06T12:44:28.776Z"), ), "syncingTo" : "192.168.99.11:27017", }, { , "name" : "192.168.99.13:27017", , , "stateStr" : "ARBITER", , "lastHeartbeat" : ISODate("2017-12-06T12:44:27.971Z"), "lastHeartbeatRecv" : ISODate("2017-12-06T12:44:27.202Z"), ), } ], }
副本集群搭建完毕,明天测试。
大吉大利,今晚吃鸡,先写在这里,明晚再写。
继续测试,在副本集当然,连接字符串可以连接在主服务器即可,最好连上成员列表,mongodb会自动判断谁是主服务器,即在在主服务器离线,依然能自行认别新服务器
var client = new MongoClient("mongodb://192.168.99.5");
var addressItems = new MongoClientSettings(); addressItems.ReplicaSetName = "replSetName"; addressItems.Servers = new List<MongoServerAddress> { ), ), ), ), ), ) }; var client = new MongoClient(addressItems);
我们现在断开主服务器,或重新选举新主服务器,程序是否受影响中断
果然,断开服务器之后,陷入大概10秒左右的连接失败之后,选举新主服务器之后,连接正常写入。现在重启断开的服务器,看看数据是否自动同步。重新查看一下总行数,数据完全同步过来。
并且,发现个有趣的现象,如果你继续有数据输入,副本集并不会把主服务器切换回原来的主服务器,一旦断开所有连接,副本集将自动将主服务器切换到原来的主服务器。
副本集可以设置读取偏好。设置读取操作到某个从服务器,实现读写分离。
client.WithReadPreference(ReadPreference.Secondary);//读取将被重定向辅助服务器节点
注意:你一旦设置了读取偏好,将有可能从从服务器读取,这就意味数据可能并不是最新的。
副本集可以设置写安全
client.WithWriteConcern(WriteConcern.W1); //写入操作必须得到主服务器确认。
挂 着写了一天,好像没有出什么问题
模式三 分片集群(Sharding)
分片集群解决三个问题:1数据平均分发到每台服务器,2容忍单个分片宕机,3运行中进行集群扩展
结成组构:
控制器服务器(也叫路由服务器) 1台
作用:作为代理服务器,入口处。接受和处理客户端请求。
配置服务器 1台,推荐2台以上,如果配置服务器漰溃,将无法知道数据储存在那个分片上面。
作用:记录分片服务器的信息。
分片服务器 N台
作用:储存数据。
好先实现一个简单的分片集群
分片控制器 192.168.99.5
配置服务器 192.168.99.6 192.168.99.7 192.168.99.8
分片服务器 192.168.99.10 192.168.99.11 192.168.99.12
配置服务器(最新版强制使用副本集)
dbpath = /home/mongodbData logpath = /home/mongodbLogs/mongodb.log port = fork = true nohttpinterface = true directoryperdb=true configsvr = true replSet=replSetName
控制器服务器(路由器服务器)
logpath = /home/mongodbLogs/mongodb.log port = 27017 fork = true nohttpinterface = true configdb = replSetName/192.168.99.6:27017,192.168.99.7:27017,192.168.99.8:27017
分片机配置文件
dbpath = /home/mongodbData logpath = /home/mongodbLogs/mongodb.log port = 27017 fork = true nohttpinterface = true directoryperdb=true shardsvr=true
继续添加分片机
sh.addShard("192.168.99.10:27017") sh.addShard("192.168.99.11:27017") sh.addShard("192.168.99.12:27017") sh.addShard("192.168.99.13:27017")
sh.enableSharding("shop")
sh.shardCollection("shop.Order", { _id : 1 } )
目前最基本的分片集群己经搭建好了,我们运行程序,写一宿吧,
大吉大利,今晚吃鸡!
挂着一宿,8小时,就写了8千万条。好慢的速度。
再加一个mongos服务器吧,同样的配置文件
logpath = /home/mongodbLogs/mongodb.log port = fork = true nohttpinterface = true configdb = replSetName/,,
启动空闲的192.168.99.9 立即把数据配置同步过来啦,无需额外做什么操作
原来的192.168.99.5 CPU有点承受不住,增加多一台强劲的mongos服务器
每10秒写5W条。但是我发现一个现象,虽然有四个分片服务器,只有一个在忙,其它几个闲得不行。把我气得啊
我决定把块弄小点,看看效果,默认是64M,重新设置为10M吧。
纳闷啊,无论我怎么把压力提升(提升到每10秒写入10W条),同时,好像只有一台分片机在工作。回头我找找资料,先不测试了
挂着连写二,三天,写20亿数据。
终于找到原因,时间几台服务器时间不同步,批量写入工作的时候,只有一台分片在接受数据,其它都闲着,把时间同步北京之后,再启动mongodb,
分片之间开始自动同步数据,观察到分片在不断移动数据。最大的一个分片16亿数据。现在先不写入,等他移完数据之后,我们再看看,数据是否平分到各个分片上面。
移了一天,妈蛋,我发现移动的速度比写入,慢多了。一怒之下20亿全删了。然后重新整理了一下集群。
分片服务器
192.168.99.6 192.168.99.7 192.168.99.8 192.168.99.11
mogos
192.168.99.9
192.168.99.5(本来是配置两个mongos由于资源有限,这个服务器改回模拟数据生成服务器,负责生成模拟数据写入mongodb)
配置服务器
192.168.99.10 192.168.99.12 192.168.99.13
大概连续不间断写了15天,一共写入100亿条数据。期间没有发生任何异常。看来mongodb并没有想像中的脆,还挺稳的。
打算再写一遍文章,关于100亿mongodb集体的写入,查询,统计的性能测试,有兴趣的朋友,可以查看这个文章。
下面进行mongodb集群,全新设计,达到高可用。上面的设计大家也看到除了配置服务器强迫使用副本集之外,mongos和分片都是单机的,一旦宕机,系统无法正常工作。
谢天谢地,测试写有100亿,并没有发异常。但是长期运行的肯定需要高可用设计方案。
下面将针对mongos和分片,加入副本集。达到高可用。由于涉及机器太多,资源有限,不得,不采用虚拟机的方式组建集群。只求原理通过,可用即可。
当然,这样设计似乎很高成本,233,仲裁服务器配置不用太高。基本没有什么用。
参与测试的机器
Mongodb集群【三】的更多相关文章
- 搭建高可用mongodb集群(三)—— 深入副本集内部机制
在上一篇文章<搭建高可用mongodb集群(二)—— 副本集> 介绍了副本集的配置,这篇文章深入研究一下副本集的内部机制.还是带着副本集的问题来看吧! 副本集故障转移,主节点是如何选举的? ...
- 搭建高可用mongodb集群(三)—— 深入副本集内部机制
在上一篇文章<搭建高可用mongodb集群(二)-- 副本集> 介绍了副本集的配置,这篇文章深入研究一下副本集的内部机制.还是带着副本集的问题来看吧! 副本集故障转移,主节点是如何选举的? ...
- 搭建高可用mongodb集群(四)—— 分片(经典)
转自:http://www.lanceyan.com/tech/arch/mongodb_shard1.html 按照上一节中<搭建高可用mongodb集群(三)-- 深入副本集>搭建后还 ...
- [转]搭建高可用mongodb集群(四)—— 分片
按照上一节中<搭建高可用mongodb集群(三)—— 深入副本集>搭建后还有两个问题没有解决: 从节点每个上面的数据都是对数据库全量拷贝,从节点压力会不会过大? 数据压力大到机器支撑不了的 ...
- [转]搭建高可用mongodb集群(二)—— 副本集
在上一篇文章<搭建高可用MongoDB集群(一)——配置MongoDB> 提到了几个问题还没有解决. 主节点挂了能否自动切换连接?目前需要手工切换. 主节点的读写压力过大如何解决? 从节点 ...
- 搭建高可用mongodb集群(四)—— 分片
按照上一节中<搭建高可用mongodb集群(三)—— 深入副本集>搭建后还有两个问题没有解决: 从节点每个上面的数据都是对数据库全量拷贝,从节点压力会不会过大? 数据压力大到机器支撑不了的 ...
- 搭建高可用mongodb集群(二)—— 副本集
在上一篇文章<搭建高可用MongoDB集群(一)——配置MongoDB> 提到了几个问题还没有解决. 主节点挂了能否自动切换连接?目前需要手工切换. 主节点的读写压力过大如何解决? 从节点 ...
- MongoDB集群架构及搭建
MongoDB分布式集群 MongDB分布式集群能够对数据进行备份,提高数据安全性,以及提高集群提高读写服务的能力和数据存储能力.主要通过副本集(replica)对数据进行备份,通过分片(shardi ...
- 搭建高可用mongodb集群(四)—— 分片
按照上一节中<搭建高可用mongodb集群(三)-- 深入副本集>搭建后还有两个问题没有解决: 从节点每个上面的数据都是对数据库全量拷贝,从节点压力会不会过大? 数据压力大到机器支撑不了的 ...
随机推荐
- float和double的区别
1.float是单精度类型,精度有效数字为6位,超出则会四舍五入,取值范围为10的-38次方到10的38次方,float占用存储空间为4个字节. 2.double是双精度类型,精度有效数字为15位,超 ...
- webpack入门之打包html,css,js,img(一)
webpack到底是什么,网上一大堆介绍的东西,越看越不知道说的什么,所以今天打算自己来记录一下这段时间学习webpack的成果, webpack就是打包文件用的,html,css,js,img,为什 ...
- 数据结构与算法(C/C++版)【树与二叉树】
第六章<树与二叉树> 树结构是一种非线性存储结构,存储的是具有"一对多"关系的数据元素的集合. 结点: A.B.C等,结点不仅包含数据元素,而且包含指向子树的分支.例如 ...
- NDK开发过程自认为好的一些参考资料
虽然NDK开发时间很短, 但也接触了一些自认为还不错的资料, 记录下来. 一.首先就说官方文档吧 网上资料好多过时了, 并且有点参差不齐. 所以看官方文档还是很有必要的,我根据我的需求整理了两个的链接 ...
- android面试总结01 activity生命周期
面试常常会被问到的: Q:能说一下Activity的生命周期吗? Activity生命周期例如以下: onCreat onStart onResume onPause onStop onDestory ...
- xml基本语法(2)
本节要点: 了解XML的文档声明 了解XML的元素.命名规则.属性.元素内容.处理指令等概念 1 XML文档声明 表示该文档是一个XML文档,以及遵循哪个XML版本的规范. 规范:<?xml 版 ...
- ViewPager+Fragment 懒加载
转载于: 作者:尹star链接:http://www.jianshu.com/p/c5d29a0c3f4c來源:简书 ViewPager+Fragment的模式再常见不过了,以国民应用微信为例,假 ...
- springboot学习笔记-4 整合Druid数据源和使用@Cache简化redis配置
一.整合Druid数据源 Druid是一个关系型数据库连接池,是阿里巴巴的一个开源项目,Druid在监控,可扩展性,稳定性和性能方面具有比较明显的优势.通过Druid提供的监控功能,可以实时观察数据库 ...
- JavaScript操作符(布尔操作符、乘性操作符和加性操作符)
布尔操作符 布尔操作符用来测试两个值的关系,布尔操作符有三个,逻辑非(!).逻辑与(&&),逻辑或(||). 逻辑非由一个叹号(!)组成,可以应用于JavaScript任何值.逻辑非首 ...
- 随聊——Python的前世今生
1989年圣诞节前夕,山雨欲来风满楼,计算机程序设计语言界隐隐有大事要发生,果然不出所料.江湖人称龟叔(Guido von Rossum),就是这位祖籍荷兰的大能,在圣诞节百无聊赖的期间,发明了Pyt ...