目录


环境说明:三台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节点自动成为新的主节点。