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状态说明链接

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

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

继续测试,在副本集当然,连接字符串可以连接在主服务器即可,最好连上成员列表,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集群【三】的更多相关文章

  1. 搭建高可用mongodb集群(三)—— 深入副本集内部机制

    在上一篇文章<搭建高可用mongodb集群(二)—— 副本集> 介绍了副本集的配置,这篇文章深入研究一下副本集的内部机制.还是带着副本集的问题来看吧! 副本集故障转移,主节点是如何选举的? ...

  2. 搭建高可用mongodb集群(三)—— 深入副本集内部机制

    在上一篇文章<搭建高可用mongodb集群(二)-- 副本集> 介绍了副本集的配置,这篇文章深入研究一下副本集的内部机制.还是带着副本集的问题来看吧! 副本集故障转移,主节点是如何选举的? ...

  3. 搭建高可用mongodb集群(四)—— 分片(经典)

    转自:http://www.lanceyan.com/tech/arch/mongodb_shard1.html 按照上一节中<搭建高可用mongodb集群(三)-- 深入副本集>搭建后还 ...

  4. [转]搭建高可用mongodb集群(四)—— 分片

    按照上一节中<搭建高可用mongodb集群(三)—— 深入副本集>搭建后还有两个问题没有解决: 从节点每个上面的数据都是对数据库全量拷贝,从节点压力会不会过大? 数据压力大到机器支撑不了的 ...

  5. [转]搭建高可用mongodb集群(二)—— 副本集

    在上一篇文章<搭建高可用MongoDB集群(一)——配置MongoDB> 提到了几个问题还没有解决. 主节点挂了能否自动切换连接?目前需要手工切换. 主节点的读写压力过大如何解决? 从节点 ...

  6. 搭建高可用mongodb集群(四)—— 分片

    按照上一节中<搭建高可用mongodb集群(三)—— 深入副本集>搭建后还有两个问题没有解决: 从节点每个上面的数据都是对数据库全量拷贝,从节点压力会不会过大? 数据压力大到机器支撑不了的 ...

  7. 搭建高可用mongodb集群(二)—— 副本集

    在上一篇文章<搭建高可用MongoDB集群(一)——配置MongoDB> 提到了几个问题还没有解决. 主节点挂了能否自动切换连接?目前需要手工切换. 主节点的读写压力过大如何解决? 从节点 ...

  8. MongoDB集群架构及搭建

    MongoDB分布式集群 MongDB分布式集群能够对数据进行备份,提高数据安全性,以及提高集群提高读写服务的能力和数据存储能力.主要通过副本集(replica)对数据进行备份,通过分片(shardi ...

  9. 搭建高可用mongodb集群(四)—— 分片

    按照上一节中<搭建高可用mongodb集群(三)-- 深入副本集>搭建后还有两个问题没有解决: 从节点每个上面的数据都是对数据库全量拷贝,从节点压力会不会过大? 数据压力大到机器支撑不了的 ...

随机推荐

  1. float和double的区别

    1.float是单精度类型,精度有效数字为6位,超出则会四舍五入,取值范围为10的-38次方到10的38次方,float占用存储空间为4个字节. 2.double是双精度类型,精度有效数字为15位,超 ...

  2. webpack入门之打包html,css,js,img(一)

    webpack到底是什么,网上一大堆介绍的东西,越看越不知道说的什么,所以今天打算自己来记录一下这段时间学习webpack的成果, webpack就是打包文件用的,html,css,js,img,为什 ...

  3. 数据结构与算法(C/C++版)【树与二叉树】

    第六章<树与二叉树> 树结构是一种非线性存储结构,存储的是具有"一对多"关系的数据元素的集合. 结点: A.B.C等,结点不仅包含数据元素,而且包含指向子树的分支.例如 ...

  4. NDK开发过程自认为好的一些参考资料

    虽然NDK开发时间很短, 但也接触了一些自认为还不错的资料, 记录下来. 一.首先就说官方文档吧 网上资料好多过时了, 并且有点参差不齐. 所以看官方文档还是很有必要的,我根据我的需求整理了两个的链接 ...

  5. android面试总结01 activity生命周期

    面试常常会被问到的: Q:能说一下Activity的生命周期吗? Activity生命周期例如以下: onCreat onStart onResume onPause onStop onDestory ...

  6. xml基本语法(2)

    本节要点: 了解XML的文档声明 了解XML的元素.命名规则.属性.元素内容.处理指令等概念 1 XML文档声明 表示该文档是一个XML文档,以及遵循哪个XML版本的规范. 规范:<?xml 版 ...

  7. ViewPager+Fragment 懒加载

    转载于: 作者:尹star链接:http://www.jianshu.com/p/c5d29a0c3f4c來源:简书   ViewPager+Fragment的模式再常见不过了,以国民应用微信为例,假 ...

  8. springboot学习笔记-4 整合Druid数据源和使用@Cache简化redis配置

    一.整合Druid数据源 Druid是一个关系型数据库连接池,是阿里巴巴的一个开源项目,Druid在监控,可扩展性,稳定性和性能方面具有比较明显的优势.通过Druid提供的监控功能,可以实时观察数据库 ...

  9. JavaScript操作符(布尔操作符、乘性操作符和加性操作符)

    布尔操作符 布尔操作符用来测试两个值的关系,布尔操作符有三个,逻辑非(!).逻辑与(&&),逻辑或(||). 逻辑非由一个叹号(!)组成,可以应用于JavaScript任何值.逻辑非首 ...

  10. 随聊——Python的前世今生

    1989年圣诞节前夕,山雨欲来风满楼,计算机程序设计语言界隐隐有大事要发生,果然不出所料.江湖人称龟叔(Guido von Rossum),就是这位祖籍荷兰的大能,在圣诞节百无聊赖的期间,发明了Pyt ...