文章目录
配置mongodb 复制集
一,什么是复制集
复制集(Replica Sats)是额外的数据副本,是跨多个服务器同步数据的过程,复制集提供了冗余并增加了数据可用性,可以对硬件故障和终端的服务进行恢复
优势:
1)让数据更加安全
- 高数据可用性
3)灾难恢复
4)无停机维护
- 都缩放(额外的副本读取)
6)副本集对应用程序是透明的
二,工作原理
mongodb 的复制集至少需要两个节点。一个主,负责处理客户端的请求,其余都是从节点服务器,负责主节点上的数据
mongodb 个节点常见的搭配方式:一主一从或一主多从
三,配置复制集
环境
mongodb | 端口 | ip |
---|---|---|
1 | 27017 | 192.168.211.141 |
2 | 27018 | 192.168.211.141 |
3 | 27019 | 192.168.211.141 |
4 | 27020 | 192.168.211.141 |
创建数据文件目录
[root@localhost bin]# mkdir -p /data/mongdb{2,4}/
[root@localhost bin]# touch -p /data/logs/mongodb/mongodb{2,4}.log
修改配置文件
port=27017
# 默认服务器端口号
dbpath=/data/mongdb1
# 数据储存目录
logpath=/data/logs/mongodb/mongodb1.log
日志文件
fork=true
后台运行
maxConns=5000
最大同时连接数,默认为2000
storageEngine=mmapv1
指定储存引擎为映射文件
#auth=true
replSet=nius
然后将配置文件复制3份
cp mongodb1.conf mongodb2.conf
[root@localhost bin]# cp mongodb1.conf mongodb3.conf
[root@localhost bin]# cp mongodb1.conf mongodb4.conf
然后将mongodb2.conf中的port参数配置为27018
mongodb3.conf中的port参数配置为27019
mongodb4.conf中的port参数配置为27020
同样也将dbpath和logpath参数修改为刚刚创建的路径
过后启动服务
./mongod -f /usr/local/mongodb/bin/mongodb1.conf
./mongod -f /usr/local/mongodb/bin/mongodb2.conf
./mongod -f /usr/local/mongodb/bin/mongodb3.conf
./mongod -f /usr/local/mongodb/bin/mongodb4.conf
[root@localhost bin]# netstat -nlpt # 查看
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:27017 0.0.0.0:* LISTEN 2289/./mongod
tcp 0 0 0.0.0.0:27018 0.0.0.0:* LISTEN 2536/./mongod
tcp 0 0 0.0.0.0:27019 0.0.0.0:* LISTEN 2403/./mongod
tcp 0 0 0.0.0.0:27020 0.0.0.0:* LISTEN
初始化配置集
chen={"_id":"nius","members":[{"_id":0,"host":"192.168.211.141:27017"},{"_id":1,"host":"192.168.211.141:27018"},{"_id":2,"host":"19 2.168.211.141:27019"}]}{ "_id" : "nius", "members" : [ { "_id" : 0, "host" : "192.168.211.141:27017" }, { "_id" : 1, "host" : "192.168.211.141:27018" }, { "_id" : 2, "host" : "192.168.211.141:27019" } ] } # 最后通过rs.initiate(chen)命令启动复制集 > rs.initiate(chen) { "ok" : 1 } nius:OTHER> rs.status()命令查看
增加和删除节点
nius:PRIMARY> rs.add("192.168.211.141:27020")
{ "ok" : 1 }
rs.remove("192.168.211.141:27020")
模拟故障自动转移
[root@localhost bin]# ./mongod -f /usr/local/mongodb/bin/mongodb1.conf -shutdown
2021-04-19T14:19:20.737+0800 I CONTROL [main] log file "/data/logs/mongodb/mongodb1.log" exists; moved to "/data/logs/mongodb/mongod
b1.log.2021-04-19T06-19-20".killing process with pid: 2289
[root@localhost bin]# netstat -nplt
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:27018 0.0.0.0:* LISTEN 2536/./mongod
tcp 0 0 0.0.0.0:27019 0.0.0.0:* LISTEN 2403/./mongod
tcp 0 0 0.0.0.0:27020 0.0.0.0:* LISTEN 2515/./mongod
登录27018端口
[root@localhost bin]# mongo --port 27018 --host 192.168.211.141
{
"_id" : 1,
"name" : "192.168.211.141:27018",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY", #标准节点
"uptime" : 11334,
"optime" : {
"ts" : Timestamp(1618813372, 1),
"t" : NumberLong(2)
},
"optimeDate" : ISODate("2021-04-19T06:22:52Z"),
"electionTime" : Timestamp(1618813171, 1),
"electionDate" : ISODate("2021-04-19T06:19:31Z"),
"configVersion" : 2,
"self" : true
},
"_id" : 2,
"name" : "192.168.211.141:27019",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY", #被动节点
"uptime" : 8547,
"optime" : {
"ts" : Timestamp(1618813372, 1),
"t" : NumberLong(2)
},
"optimeDurable" : {
"ts" : Timestamp(1618813372, 1),
"t" : NumberLong(2)
},
"optimeDate" : ISODate("2021-04-19T06:22:52Z"),
"optimeDurableDate" : ISODate("2021-04-19T06:22:52Z"),
"lastHeartbeat" : ISODate("2021-04-19T06:22:54.012Z"),
"lastHeartbeatRecv" : ISODate("2021-04-19T06:22:53.909Z"),
"pingMs" : NumberLong(0),
"syncingTo" : "192.168.211.141:27020",
"configVersion" : 2
},
{
"_id" : 3,
"name" : "192.168.211.141:27020",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 687,
"optime" : {
"ts" : Timestamp(1618813372, 1),
"t" : NumberLong(2)
},
"optimeDurable" : {
"ts" : Timestamp(1618813372, 1),
"t" : NumberLong(2)
},
手动进行主从切换
rs.freeze() #30秒不参加选举
rs.stepDown(60,30) #告诉主节点交出主节点位置然后维持节点状态不少于60秒,同时等待30秒以使主和从节点日志同步
mongodb 复制选举原理
1)复制原理
复制是基于操作日志oplog,相当于MYSQL中的二进制日志,只记录发生改变的记录。复制是将主节点的oplog日志同步并应用到其他节点的过程。
2)选举的原理
节点类型: 标准节点;被动节点;和仲裁节点。
1}
节点 | ||
---|---|---|
标准节点 | 可能被选举乘成活跃节点(priority),有选举权, | |
被动节点 | 有完整副本,不可能成为活跃节点,有选举权, | |
仲裁节点 | 不复制数据,不可能成为活跃节点,只有选举权 |
2} ,标准节点与被动节点的区别:priority值高者是标准节点,低者则为被动节点。
3}优先权为(01000)相当与额外增加01000的票数,票数高获胜
配置复制集的优先级
cfg={"_id":"yandada","members": [{"_id":0,"host":"ip:27017","priority":100},{"_id":1,"host":"ip:27018","priority":100},{"_id":2,"host":"ip:27019","priority":0},{"_id":3,"host":"ip:27020","arbiterOnly":true}]}
rs.reconfig(cfg)
mongodb复制集管理
- 配置允许在从节点读取数据
rs.slaveOK() 命令允许从节点读取数据
可以使用rs.prinkReplicationInfo()和rs.printSlicationInfo()命令来查看复制集状态
部署认证的复制
生成密钥文件
echo “密码” > 密钥文件1
echo “密码” > 密钥文件2
echo “密码” > 密钥文件3
echo “密码” > 密钥文件4
配置文件中加入,(每一个节点)
clusterAuthMode=keyFile
keyFile=密钥文件路经
重启即可