Mongodb replica set模式篇
admin
2023-04-11 17:23:50
0

复制集架构图:

Mongodb replica set模式篇

三节点replicaset配置安装(无仲裁节点)

Replica set 10.10.20.161-10.10.20.163

10.10.20.161-10.10.20.163这三台按下面的安装:

mkdir -p/u01/mongodb/data/replset/

mkdir -p/u01/mongodb/log/

/usr/local/mongodb/bin/mongod--replSet myrepl --fork --port 40001 --dbpath /u01/mongodb/data/replset/--logpath /u01/mongodb/log/replset.log --logappend --oplogSize=4096

 

然后在建立集群,想让哪台当主就登陆哪台的服务器的mongo,然后添加如下配置

/usr/local/mongodb/bin/mongo-port 40001

config ={_id: 'myrepl', members: [{_id: 0, host: '10.10.20.161:40001'}, {_id: 1, host:'10.10.20.162:40001'},{_id: 3, host: '10.10.20.163:40001'}]}

rs.initiate(config)

配置完毕后退出再登陆会显示primary字样

/usr/local/mongodb/bin/mongo-port 40001

MongoDBshell version: 2.2.2

connectingto: 127.0.0.1:40001/test

myrepl:PRIMARY>

而另外两个则显示myrepl:SECONDARY

 

三节点replicaset配置安装(有仲裁节点)

三节点无仲裁的好处就是一个master写,两个slave读。缺点是,我现在只有两台机器,也想做replica set,这样就出现了问题,如果只有两台的话,如果master宕机的话,那么只有slave一台,投票算法无法进行,所以slave无法提升为master只能只读,但是如果有一个仲裁节点的话,就可以完成切换,仲裁节点只负责投票不需要同步数据。

添加仲裁节点也很简单

配置好11从节点后添加rs.add('10.10.20.163:40001',true)或者用rs.addArb('10.10.20.163:40001');

也可在第一次配置时添加

config ={_id: 'myrepl', members: [{_id: 0, host: '10.10.20.161:40001'}, {_id: 1, host:'10.10.20.162:40001'},{_id: 3, host: '10.10.20.163:40001', arbiterOnly: true}]}

rs.initiate(config)

 

读写分离:

默认做好Replica set的时候,slave是不开读的只能做故障切换用,这样比较浪费,为了分担主上的压力,应该让slave可读,方法是在slave服务器上执行rs.slaveOk()

 

手动切换master

如果当前master出现问题,我们想把它降级成slave,那么非常简单,我们只用登陆master上执行rs.stepDown(10),这个命令的意思是10秒不会参与选举master,当执行完后复制集会从其他slave中选一个提升为master。其实手动切换master除了这个命令还有个方法就是比较复杂,就是修改config,设置优先级,然后重新加载。还有个命令某些时候会用到rs.freeze(10)是在slave上使用的,意思是10秒内不参与master的选举,如果我们在手动切换master的时候,我们不想让某些slavemaster可以使用这个命令。

 

replica set相关命令:

rs.status():查看复制集状态信息

rs.conf():查看复制集配置信息

 

replica set节点的删除与添加:

假设我们现在需要对其中一个节点10.10.20.163进行维护,那我们需要,需要执行的命令如下

登陆master

执行rs.remove("10.10.20.163:40001")

等维护完之后再执行rs.add("10.10.20.163:40001")添加节点即可,但是如果下线时间太久,导致oplog已经被覆盖,那么用rs.add添加节点后10.10.20.163的同步将会停止。而且会有报错Thu Feb 28 09:58:00[rsBackgroundSync] replSet not trying to sync from 10.10.20.162:40001, it isvetoed for 133 more seconds

 

replica set节点同步失败处理方法:

接着上面的话题,如果同步出现问题,有两个方法解决

  1. 将一台同步完好的节点remove然后将数据目录scp过来再启动

  2. 将那个不同步的节点的数据目录删除,然后启动,mongodb会自动为你做好同步

 

replicaset何时会切换失效:

这是一个很重要的知识点,就是replica set的成员节点,一旦宕机数量超过一半的时候,PRIMARY会自动降级成为SECONDARY,这时集群里只能只读,这时为了防止由于网络原因集群被分割成多块选出多个主。所以为了保证剩余的机器仍可切换为主,可添加多个仲裁节点。

例如:1+2+1仲裁

一共4个节点,一半就是2,那么如果2个从库宕机之后,那个主就会自动降级为从,这时这个replica set是不可写入的,所以不可用。

那么要解决这个问题就可以采用:1+2+2仲裁,这样的话宕2个从库达不到节点总数的一半,所以也不会对集群有影响。

 

修改slave的同步源(mongo 2.2新特性):

集群搭好之后,一般来说slave都是从master那里同步,如果如果slave很多的话master压力很大,我们可以让某些slave从其他的slave来同步数据,使用rs.syncFrom("10.10.20.163:40001")语句来执行这台slave从哪台同步,要注意如果这台slave重启后这个设置会失效。


相关内容

热门资讯

徐巧芯剖析赖清德:最怕自己丢掉... 海峡导报综合报道 大罢免投票一周年纪念活动26日举行,台北市长蒋万安出席并怒轰,民进党一年过后仍没有...
中国红十字会总会紧急向广东调拨... 记者从中国红十字会总会了解到,针对台风“红霞”给广东造成的灾情,中国红十字会总会启动四级应急响应,紧...
这些少年,正被“毒蛋”围猎 李梦抽了几口电子烟,吐出了白色的烟雾,有一股浓烈的水果香味。随后,她看着自己握电子烟的手,跟身边人说...
蒋万安号召“倒阁”,卢秀燕认为... 海峡导报综合报道 台北市长蒋万安27日抛出震撼议题,表示多名民代向他提议推动“倒阁”,要求台行政机构...
特朗普将在白宫会见两位重要客人 俄乌战争仍未结束,美伊冲突又有升级风险。在此背景下,美国总统特朗普将在白宫接见乌克兰和以色列领导人。...
新租客打扫卧室柜子上掉落4万元... 近日,莲前西路某小区内,张倩签下一套房子的租赁合同。当天上午,她带着12岁的大女儿周馨怡和11岁的小...
六部门通告:禁止涉军队退役报废... 关于禁止涉军队退役报废装备销售活动的通告近年来,部分经营者在线上线下公开销售涉及我军退役报废装备(指...
九寨沟景区发生泥石流,部分道路... 7月26日,九寨沟风景名胜区管理局发布泥石流灾害通报:2026年7月26日15时50分,九寨沟景区局...
空调26度不凉是什么原因 从空调内部元器件来说,不凉的原因有可能是温度传感器出现故障了,也有可能是空调压缩机或者铜管出现问题,...
鲸鸿动能携手香港国际机场、鸿蒙...   2026 年 7 月 25 日,十余位鸿蒙车主组成的车队从珠海出发,经港珠澳大桥通关抵达香港国际...