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集群(三)-- 深入副本集>搭建后还有两个问题没有解决: 从节点每个上面的数据都是对数据库全量拷贝,从节点压力会不会过大? 数据压力大到机器支撑不了的 ...
随机推荐
- iOS 断点上传文件
项目开发中,有时候我们需要将本地的文件上传到服务器,简单的几张图片还好,但是针对iPhone里面的视频文件进行上传,为了用户体验,我们有必要实现断点上传.其实也不是真的断点,这里我们只是模仿断点机制. ...
- Ubuntu 14.4 Django模型迁移到数据库提示 LookupError: unknown encoding: utf8mb4 解决方法
由于数据库中需要存储emoji表情,因此需要mysql支持utf8mb4,参考前面的文章升级数据库. 但是由于服务器上面的python-mysqldb连接包版本为1.2.3不支持utf8mb4,因此报 ...
- Effective Java 第三版——4. 使用私有构造方法执行非实例化
Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将 ...
- AndroidStudio下gradle的入门介绍与使用
參考: 网易云加密:http://apk.aq.163.com 网易云捕:http://crash.163.com 1 Groovy Groovy 是没有类型的 Java 代码 ,语法更简洁.形式有点 ...
- KMP算法具体解释
这几天学习kmp算法,解决字符串的匹配问题.開始的时候都是用到BF算法,(BF(Brute Force)算法是普通的模式匹配算法,BF算法的思想就是将目标串S的第一个字符与模式串T的第一个字符进行匹配 ...
- SharePoint Framework 简介
作者:陈希章 发表于 2017年12月25日 前言 通过前面几篇文章,我相信大家对于SharePoint Online的开发有了更加全面的认识,上一篇 介绍的SharePoint Add-in的开发, ...
- java 单例模式学习笔记
1.单例模式概述 单例模式就是确保类在内存中只有一个对象,该实例必须自动创建,并且对外提供. 2.优缺点 优点:在系统内存中只存在一个对象,因此可以节约系统资源,对于一些需要频繁创建和销毁的对象单例模 ...
- Python 项目实践一(外星人入侵小游戏)第五篇
接着上节的继续学习,在本章中,我们将结束游戏<外星人入侵>的开发.我们将添加一个Play按钮,用于根据需要启动游戏以及在游戏结束后重启游戏.我们还将修改这个游戏,使其在玩家的等级提高时加快 ...
- 怎样在Spark、Flink应用中使用Protobuf 3的包
如果在在Spark.Flink应用中使用Protobuf 3的包,因为Spark默认使用的是2.5版本的包,提交任务时,可能会报如下异常: com.google.protobuf.CodedInput ...
- 《认知与设计:理解UI设计准则》【PDF】下载
<认知与设计:理解UI设计准则>[PDF]下载链接: https://u253469.pipipan.com/fs/253469-230382276 内容介绍 <图灵交互设计丛书·认 ...