博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
每天一篇,深入学习MongoDB复制集
阅读量:7085 次
发布时间:2019-06-28

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

复制集概念:

复制集是额外的数据副本,是跨多个服务器同步数据的过程,提供了冗余并增加了数据的可用性,通过它可以对硬件故障和中断的服务进行数据恢复

复制集工作原理:

MongoDB复制集最少需要两个节点。主节点:负责处理客户端的请求,从节点:负责复制主节点上的数据搭配方式:一主一从或一主多从注:客户端在主节点写入数据,在从节点读取数据,主从进行数据交互,保证数据的一致性

MongoDB复制集部署

(1)配置复制集
[root@localhost ~]# mkdir -p /data/moongodb/mongodb{2,3,4}   //创建多实例[root@localhost ~]# cd /data/mongodb/[root@localhost mongodb]# mongo  mongod2.log  mongodb2  mongodb3  mongodb4[root@localhost mongodb]# mkdir logs[root@localhost mongodb]# lslogs  mongo  mongodb2  mongodb3  mongodb4[root@localhost mongodb]# touch logs/mongodb{2,3,4}.log[root@localhost mongodb]# cd logs/[root@localhost logs]# lsmongodb2.log  mongodb3.log  mongodb4.log[root@localhost logs]# chmod 777 *.log  //赋予最大权限[root@localhost logs]# lsmongodb2.log  mongodb3.log  mongodb4.log[root@localhost logs]# ll总用量 0-rwxrwxrwx. 1 root root 0 7月  17 08:59 mongodb2.log-rwxrwxrwx. 1 root root 0 7月  17 08:59 mongodb3.log-rwxrwxrwx. 1 root root 0 7月  17 08:59 mongodb4.log
(2)编辑4个MongoDB实例的配置文件
[root@localhost etc]# vim mongod.confreplication:                    //注释此项  replSetName: root123         //添加复制集名称(自取),注意前面空两格  [root@localhost etc]# mongod -f /etc/mongod.conf  --shutdown  //关闭服务killing process with pid: 1084[root@localhost etc]# mongod -f /etc/mongod.conf  //开启服务about to fork child process, waiting until server is ready for connections.forked process: 11329child process started successfully, parent exiting注:修改配置文件后需重启服务,文件生效[root@localhost etc]# cp -p mongod.conf mongod2.conf cp:是否覆盖"mongod2.conf"? y[root@localhost etc]# vim mongod2.confpath:/data/mongodb/logs/mongodb2.log        //日志存放位置dbpath:/data/mongodb/mongodb2               //数据存放位置port:                                      //修改端口号,端口号不能相同[root@localhost etc]# cp -p mongod2.conf mongod3.conf  [root@localhost etc]# cp -p mongod2.conf mongod4.conf [root@localhost etc]# vim mongod3.conf         //改序号和端口号即可,其它和2相同配置[root@localhost etc]# vim mongod4.conf [root@localhost etc]# mongod -f /etc/mongod2.conf[root@localhost etc]# mongod -f /etc/mongod3.conf[root@localhost etc]# mongod -f /etc/mongod4.conf[root@localhost etc]# netstat -antp | grep mongod      //四台实例都已开启tcp        0      0 0.0.0.0:27019           0.0.0.0:*               LISTEN      11599/mongod        tcp        0      0 0.0.0.0:27020           0.0.0.0:*               LISTEN      11627/mongod        tcp        0      0 0.0.0.0:27017           0.0.0.0:*               LISTEN      11459/mongod        tcp        0      0 0.0.0.0:27018           0.0.0.0:*               LISTEN      10252/mongod
(3)配置三个节点的复制集
[root@localhost etc]# systemctl stop firewalld.service    //关闭防火墙[root@localhost etc]# setenforce 0[root@localhost etc]#mongo> show dbs> cfg={"_id":"root123","members":[{"_id":0,"host":"192.168.200.184:27017"},{"_id":1,"host":"192.168.200.184:27018"},{"_id":2,"host":"192.168.200.184:27019"}]}                             //配置节点复制集{    "_id" : "root123",    "members" : [        {            "_id" : 0,            "host" : "192.168.200.184:27017"        },        {            "_id" : 1,            "host" : "192.168.200.184:27018"        },        {            "_id" : 2,            "host" : "192.168.200.184:27019"        }    ]}> db.stats()                                       {    "db" : "test",    "collections" : 0,    "views" : 0,    "objects" : 0,    "avgObjSize" : 0,    "dataSize" : 0,    "storageSize" : 0,    "numExtents" : 0,    "indexes" : 0,    "indexSize" : 0,    "fileSize" : 0,    "fsUsedSize" : 0,    "fsTotalSize" : 0,    "ok" : 1,                                  //状态ok=1,复制成功    "$clusterTime" : {        "clusterTime" : Timestamp(0, 0),        "signature" : {            "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),            "keyId" : NumberLong(0)        }    }}123:SECONDARY> rs.status()                  //查看复制集状态{    "set" : "root123",    "date" : ISODate("2018-07-17T03:24:03.253Z"),    "myState" : 1,    "term" : NumberLong(1),    "syncingTo" : "",    "syncSourceHost" : "",    "syncSourceId" : -1,    "heartbeatIntervalMillis" : NumberLong(2000),    "optimes" : {        "lastCommittedOpTime" : {            "ts" : Timestamp(1531797840, 1),            "t" : NumberLong(1)        },        "readConcernMajorityOpTime" : {            "ts" : Timestamp(1531797840, 1),            "t" : NumberLong(1)        },        "appliedOpTime" : {            "ts" : Timestamp(1531797840, 1),            "t" : NumberLong(1)        },        "durableOpTime" : {            "ts" : Timestamp(1531797840, 1),            "t" : NumberLong(1)        }    },    "members" : [        {            "_id" : 0,            "name" : "192.168.200.184:27017",            "health" : 1,            "state" : 1,            "stateStr" : "PRIMARY",                //状态1为主            "uptime" : 980,            "optime" : {                "ts" : Timestamp(1531797840, 1),                "t" : NumberLong(1)            },            "optimeDate" : ISODate("2018-07-17T03:24:00Z"),            "syncingTo" : "",            "syncSourceHost" : "",            "syncSourceId" : -1,            "infoMessage" : "could not find member to sync from",            "electionTime" : Timestamp(1531797808, 1),            "electionDate" : ISODate("2018-07-17T03:23:28Z"),            "configVersion" : 1,            "self" : true,            "lastHeartbeatMessage" : ""        },        {            "_id" : 1,            "name" : "192.168.200.184:27018",            "health" : 1,            "state" : 2,                    "stateStr" : "SECONDARY",               //状态2为从            "uptime" : 45,            "optime" : {                "ts" : Timestamp(1531797840, 1),                "t" : NumberLong(1)            },            "optimeDurable" : {                "ts" : Timestamp(1531797840, 1),                "t" : NumberLong(1)            },            "optimeDate" : ISODate("2018-07-17T03:24:00Z"),            "optimeDurableDate" : ISODate("2018-07-17T03:24:00Z"),            "lastHeartbeat" : ISODate("2018-07-17T03:24:02.633Z"),            "lastHeartbeatRecv" : ISODate("2018-07-17T03:24:02.920Z"),            "pingMs" : NumberLong(0),            "lastHeartbeatMessage" : "",            "syncingTo" : "192.168.200.184:27017",            "syncSourceHost" : "192.168.200.184:27017",            "syncSourceId" : 0,            "infoMessage" : "",            "configVersion" : 1        },        {            "_id" : 2,            "name" : "192.168.200.184:27019",            "health" : 1,            "state" : 2,            "stateStr" : "SECONDARY",              //状态2为从            "uptime" : 45,            "optime" : {                "ts" : Timestamp(1531797840, 1),                "t" : NumberLong(1)            },            "optimeDurable" : {                "ts" : Timestamp(1531797840, 1),                "t" : NumberLong(1)            },            "optimeDate" : ISODate("2018-07-17T03:24:00Z"),            "optimeDurableDate" : ISODate("2018-07-17T03:24:00Z"),            "lastHeartbeat" : ISODate("2018-07-17T03:24:02.633Z"),            "lastHeartbeatRecv" : ISODate("2018-07-17T03:24:02.896Z"),            "pingMs" : NumberLong(0),            "lastHeartbeatMessage" : "",            "syncingTo" : "192.168.200.184:27017",            "syncSourceHost" : "192.168.200.184:27017",            "syncSourceId" : 0,            "infoMessage" : "",            "configVersion" : 1        }    ],    "ok" : 1,    "operationTime" : Timestamp(1531797840, 1),    "$clusterTime" : {        "clusterTime" : Timestamp(1531797840, 1),        "signature" : {            "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),            "keyId" : NumberLong(0)        }    }}root123:PRIMARY>            //最后显示此状态注:初始化配置时保证从节点没有数据
(4)添加和删除节点
root123:PRIMARY> rs.add("192.168.200.184:27020"){    "ok" : 1,    "operationTime" : Timestamp(1531799035, 1),    "$clusterTime" : {        "clusterTime" : Timestamp(1531799035, 1),        "signature" : {            "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),            "keyId" : NumberLong(0)        }    }}root123:PRIMARY> rs.stats()"_id" : 3,            "name" : "192.168.200.184:27020",     //添加成功            "health" : 1,            "state" : 2,            "stateStr" : "SECONDARY",             //也为从节点            "uptime" : 26,            "optime" : {                "ts" : Timestamp(1531799060, 1),                "t" : NumberLong(1)            },root123:PRIMARY> rs.remove("192.168.200.184:27020"){    "ok" : 1,                                   //删除成功    "operationTime" : Timestamp(1531799257, 1),    "$clusterTime" : {        "clusterTime" : Timestamp(1531799257, 1),        "signature" : {            "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),            "keyId" : NumberLong(0)        }    }}
(5)模拟故障自动转移
[root@localhost mongodb]# ps aux | grep mongodroot      12342  1.3  5.8 1465664 58768 ?       Sl   11:07   0:38 mongod -f /etc/mongod3.confroot      12387  1.0  5.9 1442988 59124 ?       Sl   11:07   0:29 mongod -f /etc/mongod4.confroot      12428  1.4  6.4 1582772 64516 ?       Sl   11:07   0:40 mongod -f /etc/mongod.confroot      12667  1.5  6.2 1459800 62268 ?       Sl   11:17   0:35 mongod -f /etc/mongod2.confroot      13655  0.0  0.0 112676   984 pts/0    S+   11:55   0:00 grep --color=auto mongod[root@localhost mongodb]# kill -9 12428[root@localhost mongodb]# mongoroot123:SECONDARY> rs.status()"members" : [        {            "_id" : 0,            "name" : "192.168.200.184:27017",            "health" : 0,                  //第一台健康值为0,已经不存在            "state" : 8,            "stateStr" : "(not reachable/healthy)",            "uptime" : 0,            "optime" : {                "ts" : Timestamp(0, 0),                "t" : NumberLong(-1)            },            "optimeDurable" : {                "ts" : Timestamp(0, 0),                "t" : NumberLong(-1)            },{            "_id" : 2,            "name" : "192.168.200.184:27019",            "health" : 1,            "state" : 1,            "stateStr" : "PRIMARY",         //27019跳为主节点                    "uptime" : 2039,            "optime" : {                "ts" : Timestamp(1531799828, 1),                "t" : NumberLong(2)            },            "optimeDurable" : {                "ts" : Timestamp(1531799828, 1),                "t" : NumberLong(2)            },

多学多练,快乐无限~!!!

转载于:https://blog.51cto.com/13687553/2145361

你可能感兴趣的文章
苹果紧急发布新系统iOS 11.0.1 修复多种BUG
查看>>
输得太不光彩!Uber司机把算法当游戏
查看>>
亚信安全成为 “上海网络与信息安全监测预警平台” 首批发起单位
查看>>
浪潮HF系列固态存储的独门绝活儿
查看>>
“雪花”项目:Microsoft探索在.NET中实现手工内存管理
查看>>
构建基于容器的本机监控系统 应该注意什么?
查看>>
从CSE Asia 2016亚洲消费电子展看智能设备安全
查看>>
未来五年存储发展趋势猜想
查看>>
浪潮IPF2016宣布一系列举措背后的思考是什么?
查看>>
每一个程序员要遵守的一些优秀编程风格
查看>>
大数据化雨落地 BDA万唤始出来
查看>>
三头狗又来了 Windows再现毁灭级漏洞
查看>>
企业安全需警惕:流行APP均遭恶意软件克隆
查看>>
IDG评2008十大IT新闻 蓝光标准胜出入围
查看>>
阿里CEO张勇:网络安全需要全生态协作
查看>>
光纤已落伍?英国实现100Gbps空间光通信!
查看>>
Petya勒索病毒安全预警通告
查看>>
中国人工智能学会通讯——智力测试与智能测评的对比思考
查看>>
Linux 动态库相关知识总结
查看>>
Docker 基础技术:Linux Namespace(下)
查看>>