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集群(三)-- 深入副本集>搭建后还有两个问题没有解决: 从节点每个上面的数据都是对数据库全量拷贝,从节点压力会不会过大? 数据压力大到机器支撑不了的 ...
随机推荐
- SQL基础教程读书笔记-1
查询基础 2.2 算数运算符和比较运算符 2.2.1算数运算符 + - * / 需要注意NULL 5 + NULL 10 - NULL 1 * NULL 4 / NULL NULL / 9 NULL ...
- nginx HTTP/2.0 配置
1.前言 最近无意中看到http2.0消息,发现自己的博客虽然配了https,但并没有配置http2.0,所以搞了个玩玩,本以为配个参数就搞定了,结果还是折腾了一个小时. 2.过程 nginx并没有默 ...
- iOS开发证书都显示“此证书的签发者无效”,更新WWDR Certificate证书后还是显示无效
1.首先iOS开发证书显示"此证书的签发者无效".是因为WWDR Certificate证书过期导致的,须要更新WWDR Certificate证书! 1)下载最新WWDR Cer ...
- Spring之AOP实现面向切面编程
近期在学Java的动态代理和Spring面向切面编程,越来越认为Spring设计的真的是太完美了.于是,想一个最简单的样例来跑一下.但问题多多,显示缺少,Aspectj里面的相应的类.导入Aspect ...
- JAVA入门[21]-Jedis操作redis示例
本节目标 通过JedisPool获取Jedis示例,并完成对redis 简单的Key-value读写操作. 完整代码结构如下: redis服务端 在本地运行redis-server.exe,然后在re ...
- (转)JVM工作原理和流程
作为一名Java使用者,掌握JVM的体系结构也是必须的. 说起Java,人们首先想到的是Java编程语言,然而事实上,Java是一种技术,它由四方面组成:Java编程语言.Java类文件格式.Java ...
- 自学Zabbix3.5.1-监控项item-key详解
自学Zabbix3.5.1-监控项item-key详解个人觉得艰难理解,故附上原文档:https://www.zabbix.com/documentation/3.0/manual/config/it ...
- MVC(二)
一: 在新接触MVC的时候可以先使用VS建一个MVC项目(不是空项目哟),MVC特别人性化的建一个示例,展示了MVC项目的基本组成.如下: App_Data 数据库文件,需根据数据库变动而变更. Ap ...
- 「mysql优化专题」这大概是一篇最好的mysql优化入门文章(1)
优化,一直是面试最常问的一个问题.因为从优化的角度,优化的思路,完全可以看出一个人的技术积累.那么,关于系统优化,假设这么个场景,用户反映系统太卡(其实就是高并发),那么我们怎么优化? 如果请求过多, ...
- js判断文件类型大小并给出提示
上传文件是工作中常用的功能,不同的场景对不同的文件类型和文件大小都有不同的要求: <form id="uploadForm" method="post" ...