这几天在学习mongodb的副本集的配置。在这个过程中,我和同学们都出现了各种问题。因此,在这里我记录总结下总体流程和注意的事项。(此处假设已至少有一台配置好mongodb的主机)
第一步:配置primary的linux主机相关配置。
首先登录(切换)root用户,执行以下命令:
vim /etc/hostname
将文件内容修改为自己想要的主机名。例如:mongodb1。
然后:配置网卡中ip地址信息(当然你的不一定是ens33)
vim /etc/sysconfig/network-scripts/ifcfg-ens33
修改ip地址为:192.168.xxx.100(如果100你没有用过的话,用过了那你就换个别的数字,例如101、102什么的,xxx那要看你本地上ip地址是什么样的了)
紧接着:
vim /etc/hosts
在文件中添加入主机的ip地址和主机名,实现映射
例如:192.xxx.129.100 mongodb01
192.xxx.129.101 mongodb02
192.xxx.129.102 mongodb03
(依次是需要配置的三台主机)保存文件后,退出。
之后打开mongodb的conf配置文件(请不要盲目参考以下,要以你的conf文件的路径为准):
vim /opt/servers/mongodb_demo/mongodb/conf
进行添加以下的副本集内容:其中replSetName为自定义的副本集名称,在此处,举例将副本集命名为mongodb。注意conf文件中的缩进要正确合规,并且和之前配置的缩进保持一致。
replication:
replSetName: mongodb
第二步:关机这台主机,并进行克隆(如果已有,则对对应的文件进行修改操作即可,注意hosts文件需要和第一台主机刚才配置的hosts文件内容保持一致)。
关机:
init 0
进行克隆,克隆选择完全克隆。
以下以克隆后的第一部主机为例进行说明。
打开克隆后的主机,以root账户登录。
将第一步中配置的hostname文件中主机名修改为这台主机自定义的一个名字。例如:mongodb2
将第一步中配置的ifcfg-ens33文件中ip地址修改为对应这台主机的。例如:192.168.xx.101,注意:此处的ip地址要和第一步中配置的hosts文件中mongodb2的ip地址保持一致。
将第一步中配置mongodb下的conf文件中的bindIp进行修改。注意,bindIp也需要和ifcfg-ens33、hosts文件中mongodb2的ip地址,三者间地保持一致。注意,之前配置好的副本集名字replSetName不需要修改。
修改完成后执行以下命令:
shutdown -r now
使得修改生效(不然的话有可能主机名修改未生效导致后续出现问题)。
同理操作第三台主机。
第三步:启动副本集
切换到mongodb的bin目录下(还是以你自己的路径为准):
cd /opt/servers/mongodb_demo/mongodb/bin
执行命令:
./mongod --replSet 你设置的副本集名称 --dbpath=你创建的mongodb中的data文件路径/ --logpath=你mongodb中的mongodb.log文件的路径 --port 27017 --bind_ip mongodb01(你当前操作想作为primary结点的主机的名字,因为之前已经配置了主机名和ip地址间的映射,此处可以直接填写主机名,当然你也可以填写ip地址) --logappend --fork
进行初始化步骤:
./mongo --host 你当前使用的主机的名字或当前主机ip地址 --port 27017
rs.initiate()
发现其已将自己选举为primary。
随后:
依次对其他主机执行操作:
切换到mongodb的bin目录下(还是以你自己的路径为准):
cd /opt/servers/mongodb_demo/mongodb/bin
执行命令:
./mongod --replSet 你设置的副本集名称 --dbpath=你创建的mongodb中的data文件路径/ --logpath=你mongodb中的mongodb.log文件的路径 --port 27017 --bind_ip mongodb02(你当前操作想作为primary结点的主机的名字,因为之前已经配置了主机名和ip地址间的映射,此处可以直接填写主机名,当然你也可以填写ip地址) --logappend --fork
./mongo --host 你当前使用的主机的名字或当前主机ip地址 --port 27017
注意,此处不要执行rs.initiate()命令!例如,如果执行了,可能会导致副本集中无法选举出primary,或者primary被其他主机替代。
继续使用刚才选举好的primary结点的主机,执行命令:
依次完成将其余节点加入到副本集的add命令。
rs.add("加进来的主机名:27017")
查询状态:
rs.status()
发现,mongodb01 mongodb02 mongodb03都已进入副本集中,且健康值为1,则此时副本集已成功配置并启动成功。