欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

MongoDB 副本集复制

程序员文章站 2022-07-05 17:13:22
MongoDB是当下比较流行的NoSQL 数据库.提供了副本集复制应对数据的可扩展性,可靠性及提供了隔离性. 下面讲讲一般情况下的副本集复制的配置。 1.环境 Centos 7MongoDB 3.6 2.机器配置 IP hostname port path is arbiter 192.168.11 ......

MongoDB是当下比较流行的NoSQL 数据库.提供了副本集复制应对数据的可扩展性,可靠性及提供了隔离性. 下面讲讲一般情况下的副本集复制的配置。

1.环境

Centos 7
MongoDB 3.6

2.机器配置
----------------------------------------------------------------------------
IP hostname port path is arbiter
----------------------------------------------------------------------------
192.168.11.100 mongodbr0 27017 /data/replset1/r0 false
192.168.11.101 mongodbr1 27017 /data/replset1/r1 false
192.168.11.102 mongodbr2 27017 /data/replset1/r2 true

3.配置步骤
3.1 开放端口或关闭防火墙
firewall-cmd --permanent --add-port=27017/tcp
firewall-cmd --reload
3.2 在每台机器上建立对应的目录
mkdir -p /data/replset1/r0|r1|r2 ##不同的机器对应不同的目录,参考第二部分的path
mkdir -p /data/replset1/key
mkdir -p /data/replset1/log

修改每台机器的hosts
vi /etc/hosts 并添加如下内容

192.168.11.100 mongodbr0
192.168.11.101 mongodbr1
192.168.11.102 mongodbr2

3.3 复制MongoDB安装包到每台机器上,并解压
例如本例子解压到 /usr/local/mongodb
3.4 初始化复制集
进入到每个机器的 /usr/local/mongodb/bin/
分别执行如下的命令
./mongod --port 27017 --dbpath /data/replset1/r0 --logpath /data/replset1/log/r0.log --logappnd --fork --bind_id localhost,192.168.11.100 --replSet replset1

./mongod --port 27017 --dbpath /data/replset1/r1 --logpath /data/replset1/log/r1.log --logappnd --fork --bind_id localhost,192.168.11.101 --replSet replset1

./mongod --port 27017 --dbpath /data/replset1/r2 --logpath /data/replset1/log/r2.log --logappnd --fork --bind_id localhost,192.168.11.102 --replSet replset1

注意: --bind_id 一定要指明绑定的IP,因为每台机器可能有多个IP,所以要一定有这个参数,否则可能会报错

3.5 开始复制
进入任意一台机器,以 mongodbr0为例
3.5.1
/usr/local/mongodb/bin/mongo --port 27017
3.5.2
a.运行 rs.initiate()
b.运行 rs.add("mongodbr1:27017")
c.运行 rs.addArb("mongodbr2:27017") #仲裁集

至此,复制集配置完成

3.6 测试
3.6.1 测试数据复制
a.进入mongodbr0 ,运行 /usr/local/mongodb/bin/mongo --port 27017
b.默认是进入 test
c.插入新的数据 e.g. db.foo.insert({"name":"zhangshan","gender":"Male","age":"20","address":"suzhou"})
d.进入mongodbr1,运行 /usr/local/mongodb/bin/mongo --port 27017
e.由于r1 是secondary,所以不能直接访问数据,需要运行 rs.slaveOk() 或 db.getMongo().setSlaveOk()
f.执行 db.foo.find(); 刚才插入的数据会显示在这里
3.6.2 故障迁移测试
a.进入mongodbr0 ,运行 /usr/local/mongodb/bin/mongo --port 27017
b.执行 use admin 进入admin
c.执行 db.shutdownServer()
d.进入mongodbr1,运行 /usr/local/mongodb/bin/mongo --port 27017
e.这时候会发现这台已经变成primary 了 replset1:PRIMARY