博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Mongodb集群【三】
阅读量:6672 次
发布时间:2019-06-25

本文共 30265 字,大约阅读时间需要 100 分钟。

Mongodb常用三种集群

1 主从(Master/Slave) 不推荐,但是mongodb依然保留有。一主多从,不支持链式结构。简单主从,没有裁仲者不能自动恢复。

2 副本集(Relica Set)  推荐 主从备份,分流。一主多从,一主一从一从-从,支持链式结构。可设仲裁者,主服务挂了,从从服务器选一台当主服务器。

3 分片(Sharding) 大数据储存方案。通过横向扩展增加分片,组成集群。有配置服务器,路由服务器,分片服务器。分片服务器可以是单个mongodb实例,也可以是一个副本集。

代码展示

///     /// 省份城市    ///     public class ProvinceCity    {        ///         /// 省份        ///         public string Province { set; get; }        ///         /// 城市        ///         public string City { set; get; }    }

 

///     /// 订单表    ///     public class TbOrders    {        ///         /// Id        ///         public BsonObjectId Id { set; get; }        ///         /// 订单编号        ///         public string OrderNo { set; get; }        ///         /// 货主ID        ///         public int ShipperID { set; get; }        ///         /// 车主ID        ///         public int CarOwnerID { set; get; }        ///         /// 发货省份        ///         public string SendProvince { set; get; }        ///         /// 发货城市        ///         public string SendCity { set; get; }        ///         /// 收货省份        ///         public string DestProvince { set; get; }        ///         /// 收货城市        ///         public string DestCity { set; get; }        ///         /// 运输价格        ///         public decimal TranPrice { set; get; }                ///         /// 取消订单(1正常 2申请取消 3己取消)        ///         public int CancelStatus { set; get; }        ///         /// 订单状态,"待支付":100,"待运输":200,"运输中":300,"已签收":400,"已结算":500        ///         public int Status { set; get; }        ///         /// 结算时间        ///         public DateTime? SettlementDate { set; get; }        ///         /// 结算价格        ///         public decimal? SettleTranPrice { set; get; }                ///         /// 保价(保险费用)        ///         public decimal SafePrice { set; get; }        ///         /// 总价格        ///         public decimal TotalPrice { set; get; }        ///         /// 搬运价格        ///         public decimal? CarryPrice { set; get; }        ///         /// 创建时间        ///         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 int[] _statusItems = new[] { 100, 200, 300, 400, 500 };        private static Random _rand = new Random();        private static string _cityJson = "上面的JSON数据,自行拷到这里来";        private static List
_cityItems = JsonConvert.DeserializeObject
>(_cityJson); private static int _addCount = 0; static Timer _timer= new Timer(OutputResult, null, 10000, Timeout.Infinite); static void Main(string[] args) { Task.Run(AddOrder); Task.Run(AddOrder); while (true) { Console.ReadKey(); } } #region 创建订单 public static TbOrders CreateOrder() { //收,发货城市 var city = _cityItems[_rand.Next(0, _cityItems.Count)]; //订单状态 var status = _statusItems[_rand.Next(0, _statusItems.Count())]; //结算时间 DateTime? settlementDate = null; if (status == 500) settlementDate = DateTime.Now; return new TbOrders { OrderNo = DateTime.Now.Ticks.ToString(), ShipperID = _rand.Next(1000, 9000), CarOwnerID = _rand.Next(1000, 9000), SendProvince = city.Province, SendCity = city.City, DestProvince = city.Province, DestCity = city.City, TranPrice = _rand.Next(1000, 9000), CancelStatus = _rand.Next(1, 4), Status = status, SettlementDate = settlementDate, SettleTranPrice = _rand.Next(1000, 9000), SafePrice = _rand.Next(100, 900), TotalPrice = _rand.Next(1000, 9000), CarryPrice = _rand.Next(100, 900), 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
("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 = 0; _timer.Change(10000, System.Threading.Timeout.Infinite); } #endregion }

 大吉大利,今晚吃鸡,先写在这里,明晚再写。

模式一 主从(Master/Slave) 

主服务器配置

dbpath = /home/mongodbDatalogpath = /home/mongodbLogs/mongodb.logport = 27017fork = truenohttpinterface = truedirectoryperdb=truemaster=true

 从服务器配置

dbpath = /home/mongodbDatalogpath = /home/mongodbLogs/mongodb.logport = 27017fork = truenohttpinterface = truedirectoryperdb=truesource = 192.168.99.5:27017slave = 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/mongodbDatalogpath = /home/mongodbLogs/mongodb.logport = 27017fork = truenohttpinterface = truedirectoryperdb=truereplSet=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"),        "myState" : 1,        "term" : NumberLong(1),        "heartbeatIntervalMillis" : NumberLong(2000),        "optimes" : {                "lastCommittedOpTime" : {                        "ts" : Timestamp(1512564262, 1),                        "t" : NumberLong(1)                },                "appliedOpTime" : {                        "ts" : Timestamp(1512564262, 1),                        "t" : NumberLong(1)                },                "durableOpTime" : {                        "ts" : Timestamp(1512564262, 1),                        "t" : NumberLong(1)                }        },        "members" : [                {                        "_id" : 0,                        "name" : "192.168.99.5:27017",                        "health" : 1,                        "state" : 1,                        "stateStr" : "PRIMARY",                        "uptime" : 2216,                        "optime" : {                                "ts" : Timestamp(1512564262, 1),                                "t" : NumberLong(1)                        },                        "optimeDate" : ISODate("2017-12-06T12:44:22Z"),                        "electionTime" : Timestamp(1512563341, 1),                        "electionDate" : ISODate("2017-12-06T12:29:01Z"),                        "configVersion" : 1,                        "self" : true                },                {                        "_id" : 1,                        "name" : "192.168.99.6:27017",                        "health" : 1,                        "state" : 2,                        "stateStr" : "SECONDARY",                        "uptime" : 939,                        "optime" : {                                "ts" : Timestamp(1512564262, 1),                                "t" : NumberLong(1)                        },                        "optimeDurable" : {                                "ts" : Timestamp(1512564262, 1),                                "t" : NumberLong(1)                        },                        "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"),                        "pingMs" : NumberLong(0),                        "syncingTo" : "192.168.99.5:27017",                        "configVersion" : 1                },                {                        "_id" : 2,                        "name" : "192.168.99.7:27017",                        "health" : 1,                        "state" : 2,                        "stateStr" : "SECONDARY",                        "uptime" : 939,                        "optime" : {                                "ts" : Timestamp(1512564262, 1),                                "t" : NumberLong(1)                        },                        "optimeDurable" : {                                "ts" : Timestamp(1512564262, 1),                                "t" : NumberLong(1)                        },                        "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"),                        "pingMs" : NumberLong(0),                        "syncingTo" : "192.168.99.5:27017",                        "configVersion" : 1                },                {                        "_id" : 3,                        "name" : "192.168.99.8:27017",                        "health" : 1,                        "state" : 2,                        "stateStr" : "SECONDARY",                        "uptime" : 939,                        "optime" : {                                "ts" : Timestamp(1512564262, 1),                                "t" : NumberLong(1)                        },                        "optimeDurable" : {                                "ts" : Timestamp(1512564262, 1),                                "t" : NumberLong(1)                        },                        "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"),                        "pingMs" : NumberLong(0),                        "syncingTo" : "192.168.99.5:27017",                        "configVersion" : 1                },                {                        "_id" : 4,                        "name" : "192.168.99.11:27017",                        "health" : 1,                        "state" : 2,                        "stateStr" : "SECONDARY",                        "uptime" : 939,                        "optime" : {                                "ts" : Timestamp(1512564262, 1),                                "t" : NumberLong(1)                        },                        "optimeDurable" : {                                "ts" : Timestamp(1512564262, 1),                                "t" : NumberLong(1)                        },                        "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"),                        "pingMs" : NumberLong(0),                        "syncingTo" : "192.168.99.6:27017",                        "configVersion" : 1                },                {                        "_id" : 5,                        "name" : "192.168.99.12:27017",                        "health" : 1,                        "state" : 2,                        "stateStr" : "SECONDARY",                        "uptime" : 939,                        "optime" : {                                "ts" : Timestamp(1512564262, 1),                                "t" : NumberLong(1)                        },                        "optimeDurable" : {                                "ts" : Timestamp(1512564262, 1),                                "t" : NumberLong(1)                        },                        "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"),                        "pingMs" : NumberLong(1),                        "syncingTo" : "192.168.99.11:27017",                        "configVersion" : 1                },                {                        "_id" : 6,                        "name" : "192.168.99.13:27017",                        "health" : 1,                        "state" : 7,                        "stateStr" : "ARBITER",                        "uptime" : 939,                        "lastHeartbeat" : ISODate("2017-12-06T12:44:27.971Z"),                        "lastHeartbeatRecv" : ISODate("2017-12-06T12:44:27.202Z"),                        "pingMs" : NumberLong(0),                        "configVersion" : 1                }        ],        "ok" : 1}

副本集群搭建完毕,明天测试。

大吉大利,今晚吃鸡,先写在这里,明晚再写。

继续测试,在副本集当然,连接字符串可以连接在主服务器即可,最好连上成员列表,mongodb会自动判断谁是主服务器,即在在主服务器离线,依然能自行认别新服务器

var client = new MongoClient("mongodb://192.168.99.5");

 

var addressItems = new MongoClientSettings();addressItems.ReplicaSetName = "replSetName";addressItems.Servers = new List
{ new MongoServerAddress("192.168.99.5", 27017), new MongoServerAddress("192.168.99.6",27017), new MongoServerAddress("192.168.99.7",27017), new MongoServerAddress("192.168.99.8",27017), new MongoServerAddress("192.168.99.11",27017), new MongoServerAddress("192.168.99.12",27017)};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/mongodbDatalogpath = /home/mongodbLogs/mongodb.logport = 27017fork = truenohttpinterface = truedirectoryperdb=trueconfigsvr = truereplSet=replSetName

 

控制器服务器(路由器服务器)

logpath = /home/mongodbLogs/mongodb.logport = 27017fork = truenohttpinterface = trueconfigdb = replSetName/192.168.99.6:27017,192.168.99.7:27017,192.168.99.8:27017

  

分片机配置文件

dbpath = /home/mongodbDatalogpath = /home/mongodbLogs/mongodb.logport = 27017fork = truenohttpinterface = truedirectoryperdb=trueshardsvr=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.logport = 27017fork = truenohttpinterface = trueconfigdb = replSetName/192.168.99.6:27017,192.168.99.7:27017,192.168.99.8:27017

 

启动空闲的192.168.99.9 立即把数据配置同步过来啦,无需额外做什么操作

 

原来的192.168.99.5 CPU有点承受不住,增加多一台强劲的mongos服务器

每10秒写5W条。但是我发现一个现象,虽然有四个分片服务器,只有一个在忙,其它几个闲得不行。把我气得啊

我决定把块弄小点,看看效果,默认是64M,重新设置为10M吧。

纳闷啊,无论我怎么把压力提升(提升到每10秒写入10W条),同时,好像只有一台分片机在工作。回头我找找资料,先不测试了

挂着连写二,三天,写20亿数据。

终于找到原因,时间几台服务器时间不同步,批量写入工作的时候,只有一台分片在接受数据,其它都闲着,把时间同步北京之后,再启动mongodb,

分片之间开始自动同步数据,观察到分片在不断移动数据。最大的一个分片16亿数据。现在先不写入,等他移完数据之后,我们再看看,数据是否平分到各个分片上面。

 移了一天,妈蛋,我发现移动的速度比写入,慢多了。一怒之下20亿全删了。然后重新整理了一下集群。

 分片服务器

192.168.99.6192.168.99.7192.168.99.8192.168.99.11

mogos

192.168.99.9 192.168.99.5(本来是配置两个mongos由于资源有限,这个服务器改回模拟数据生成服务器,负责生成模拟数据写入mongodb)

配置服务器

192.168.99.10192.168.99.12192.168.99.13

 

大概连续不间断写了15天,一共写入100亿条数据。期间没有发生任何异常。看来mongodb并没有想像中的脆,还挺稳的。

打算再写一遍文章,关于100亿mongodb集体的写入,查询,统计的性能测试,有兴趣的朋友,可以查看这个文章。

 

下面进行mongodb集群,全新设计,达到高可用。上面的设计大家也看到除了配置服务器强迫使用副本集之外,mongos和分片都是单机的,一旦宕机,系统无法正常工作。

谢天谢地,测试写有100亿,并没有发异常。但是长期运行的肯定需要高可用设计方案。

下面将针对mongos和分片,加入副本集。达到高可用。由于涉及机器太多,资源有限,不得,不采用虚拟机的方式组建集群。只求原理通过,可用即可。

 

当然,这样设计似乎很高成本,233,仲裁服务器配置不用太高。基本没有什么用。

 

参与测试的机器

转载于:https://www.cnblogs.com/NET-BLOG/p/7688885.html

你可能感兴趣的文章
tar.gz安装
查看>>
Centos6.5 glibc 升级
查看>>
排序——C++函数调用
查看>>
Pandownload关了,还有更牛逼的百度网盘全速下载方法
查看>>
【转】C++文件流の添加数字到指定文件中
查看>>
在网络设备上暂挂会话
查看>>
SQL中访问远程数据库(MSSQL)
查看>>
Django学习
查看>>
python excel操作
查看>>
我的友情链接
查看>>
孙杨赢在“天才+努力+机遇”
查看>>
OC @property 指示符assign、atomic、copy、retain、strong、week、等
查看>>
apt-get常用命令
查看>>
linux下查看文件编码及修改编码
查看>>
trip数据库的建立
查看>>
2012年上半年网工考试试题分析
查看>>
Eclipse中将tomcat日志输出重定向
查看>>
Ubuntu 14.04安装Nginx1.60
查看>>
神奇犁头草,治疗肿毒效如神
查看>>
ORA-06553: PLS-553: character set name is not recognized, while starting Content Store
查看>>