配置mongodb 复制集

配置mongodb 复制集

一,什么是复制集

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

优势:

1)让数据更加安全

  1. 高数据可用性

3)灾难恢复

4)无停机维护

  1. 都缩放(额外的副本读取)

6)副本集对应用程序是透明的

二,工作原理

mongodb 的复制集至少需要两个节点。一个主,负责处理客户端的请求,其余都是从节点服务器,负责主节点上的数据

mongodb 个节点常见的搭配方式:一主一从或一主多从

三,配置复制集

环境

mongodb端口ip
127017192.168.211.141
227018192.168.211.141
327019192.168.211.141
427020192.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复制集管理
  1. 配置允许在从节点读取数据

rs.slaveOK() 命令允许从节点读取数据

可以使用rs.prinkReplicationInfo()和rs.printSlicationInfo()命令来查看复制集状态

部署认证的复制

生成密钥文件

echo “密码” > 密钥文件1

echo “密码” > 密钥文件2

echo “密码” > 密钥文件3

echo “密码” > 密钥文件4

配置文件中加入,(每一个节点)

clusterAuthMode=keyFile

keyFile=密钥文件路经

重启即可

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值