环境说明:三台centos7虚拟机
Replica Set为副本集模式,(M)为master主节点,(S)为slaver副节点,(A)为arbiter仲裁节点。主节点挂掉后副节点能继续提供服务。仲裁节点不存储数据,客户端不需要连接。
测试时本机各节点信息:
节点 | IP | 端口号 | 数据存储 | 日志存储 |
---|---|---|---|---|
A: master | 192.168.147.131 | 27000 | /usr/local/mongodb/data | /usr/local/mongodb/log/master.log |
B:slaver | 192.168.147.132 | 27000 | /usr/local/mongodb/data | /usr/local/mongodb/log/slaver .log |
C:arbiter | 192.168.147.133 | 27000 | /usr/local/mongodb/data | /usr/local/mongodb/log/arbiter .log |
一、安装Mongodb
在三台虚拟机上都安装Mongodb,过程看MongoDB(一)https://blog.csdn.net/my_miuye/article/details/107959378
二、新建配置文件夹、数据文件夹、日志文件夹
A机上:
# mkdir -p /usr/local/mongodb/conf
# mkdir -p /usr/local/mongodb/data
# mkdir -p /usr/local/mongodb/log
B机上:
# mkdir -p /usr/local/mongodb/conf
# mkdir -p /usr/local/mongodb/data
# mkdir -p /usr/local/mongodb/log
C机上:
# mkdir -p /usr/local/mongodb/conf
# mkdir -p /usr/local/mongodb/data
# mkdir -p /usr/local/mongodb/log
三、写配置文件
A机:
# vi /usr/local/mongodb/conf/master.conf 然后将以下配置写入
dbpath= /usr/local/mongodb/data
logpath=/usr/local/mongodb/log/master.log
directoryperdb=true
logappend=true
replSet=test
bind_ip=0.0.0.0
port=27000
oplogSize=1000
fork=true
B机:
# vi /usr/local/mongodb/conf/slaver.conf 然后将以下配置写入
dbpath= /usr/local/mongodb/data
logpath=/usr/local/mongodb/log/slaver.log
directoryperdb=true
logappend=true
replSet=test
bind_ip=0.0.0.0
port=27000
oplogSize=1000
fork=true
C机:
# vi /usr/local/mongodb/conf/arbiter.conf 然后将以下配置写入
dbpath= /usr/local/mongodb/data
logpath=/usr/local/mongodb/log/arbiter.log
directoryperdb=true
logappend=true
replSet=test
bind_ip=0.0.0.0
port=27000
oplogSize=1000
fork=true
四、启动服务
A机:
# mongod -f /usr/local/mongodb/conf/master.conf
B机:
# mongod -f /usr/local/mongodb/conf/slaver.conf
C机:
# mongod -f /usr/local/mongodb/conf/arbiter.conf
五、开放端口
直接配置会报错:No route to host
因此需先开放防火墙端口:2700
firewall-cmd --zone=public --add-port=27000/tcp --permanent
sudo firewall-cmd --reload
六、配置主节点、副节点、仲裁节点
随便挑一台机器连接mongodb,这里我通过A主机连接了192.168.147.131节点
# mongo 192.168.147.131:27000
>use admin
>config={ _id:"test", members:[ {_id:0,host:'192.168.147.131:27000',priority:2}, {_id:1,host:'192.168.147.131:27000',priority:1},
{_id:2,host:'192.168.147.131:27000',arbiterOnly:true}] };
>rs.initiate(config) #使配置生效
_id:"test"中的test是刚才配置的replica set的名字,
priority为优先级,优先级最高的为主节点
arbiterOnly:true表示该节点是仲裁节点
通过rs.status()命令可以实时看到集群的变化。
七、通过副节点读取数据
先增加副节点可读权限
vi ~/.mongorc.js
在文件中增加:
rs.slaveOk();
然后重新连接副节点即可正常查询。
八、测试
1.主节点挂掉
先用 rs.status() 查看当前各节点状态,可以看到master节点状态为PRIMARY,slaver节点状态为SECONDARY。
在A机关闭master服务
# mongod --shutdown --dbpath=/usr/local/mongodb/data --logpath=/usr/local/mongodb/log/master.log --port=27000 --logappend --fork
在B机mongo连接slaver节点,rs.status() 查看当前各节点状态,可以看到此时slaver节点状态为PRIMARY。说明在master节点挂掉后,slaver节点自动成为新的主节点。