mongodb副本集介绍
MongoDB早期版本使用master-slave,一主一从和MySQL主从基本是一致的,但salve在此架构中为只读,当主库宕机后,从库不能自动切换为主.
目前已经淘汰master-salve模式,改为副本集,副本集架构也是为了实现MongoDB的高可用,这种模式下有一个主(primary),和多个从(secondary)只读,支持他们设置权重,当主宕机后,权重最高的从切换为主.
在此架构中还可以建立一个仲裁(arbiter)的角色,它只负责裁决,而不存储数据.
在此架构中读写数据都是在主上,要想实现负载均衡的目的需要手动指定读库的目标server.
MongoDB副本集架构图
原理很简单一个primary,secondary至少是一个,也可以是多个secondary,除了多个secondary之外,还可以加一个Arbiter,Arbiter叫做仲裁,当Primary宕机后,Arbiter可以很准确的告知Primary宕掉了,但可能Primary认为自己没有宕掉,这样的话就会出现脑裂,为了防止脑裂就增加了Arbiter这个角色,尤其是数据库坚决不能出现脑裂的状态,脑裂会导致数据会紊乱,数据一旦紊乱恢复就非常麻烦.
变迁图
说明:Primary宕机后,其中secondary就成为一个新的Primary,另外一个secondary依然是secondary的角色. 对于MySQL主从来讲,即使做一主多从,万一master宕机后,可以让从成为新的主,但这过程是需要手动的更改的. 但是在MongoDB副本集架构当中呢,它完全都是自动的,rimary宕机后,其中secondary就成为一个新的Primary,另外一个secondary可以自动识别新的primary.
mongodb副本集搭建
准备三台机器: 192.168.193.130 (primary)
192.168.193.131 (secondary)
192.168.193.132 (secondary)
三台机器都需要安装MongoDB,primary已安装过,两台secondary需要安装,因步骤一样,在此不做演示.
编辑三台机器的配置文件
[root@aminglinux-130 ~]# vim /etc/mongod.conf
# network interfaces
net:
port: 27017
bindIp: 127.0.0.1,192.168.193.130 # Listen to local interface only, comment to listen on all interfaces.
"/etc/mongod.conf" 44L, 784C
说明:做副本集bindIp 要监听本机IP和内网IP
#replication: //把#去掉,并增两行
replication:
oplogSizeMB: 20 //前面两个空格
replSetName;annalinux //定义副本集的名字 前面两个空格
重启MongoDB服务:
[root@aminglinux-130 ~]# systemctl restart mongod
启动从主机
[root@aminglinux-131 ~]# vim /etc/mongod.conf
net:
port: 270