设为首页 收藏本站
查看: 966|回复: 0

[经验分享] Mongodb replica set模式篇

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-11-5 08:57:47 | 显示全部楼层 |阅读模式
复制集架构图:
QQ截图20151105085736.png
三节点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只能只读,但是如果有一个仲裁节点的话,就可以完成切换,仲裁节点只负责投票不需要同步数据。
添加仲裁节点也很简单
配置好1主1从节点后添加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的时候,我们不想让某些slave做master可以使用这个命令。

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节点同步失败处理方法:
接着上面的话题,如果同步出现问题,有两个方法解决
  • 将一台同步完好的节点remove然后将数据目录scp过来再启动
  • 将那个不同步的节点的数据目录删除,然后启动,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重启后这个设置会失效。


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-135202-1-1.html 上篇帖子: Mongodb sharding模式篇 下篇帖子: mongodb主从复制安装文档
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表