本篇主要讲解mongodb副本集的搭建,在学习本篇之前,先在本地安装mongodb的客户端,具体参考之前文章:linux环境下mongodb客户端的安装和链接
1、创建需要的文件目录
这里我们创建一主两从,共三个节点,所有集群的搭建一般都是奇数个节点,这样是出于选举的最优解,偶数故障的状态会造成机器的浪费。
创建目录的语句,主要是data(数据目录)、conf(配置文件)、logs(日志目录):
mkdir -p /usr/local/mongodb/db27017/data
mkdir -p /usr/local/mongodb/db27017/conf
mkdir -p /usr/local/mongodb/db27017/logs
mkdir -p /usr/local/mongodb/db27018/data
mkdir -p /usr/local/mongodb/db27018/conf
mkdir -p /usr/local/mongodb/db27018/logs
mkdir -p /usr/local/mongodb/db27019/data
mkdir -p /usr/local/mongodb/db27019/conf
mkdir -p /usr/local/mongodb/db27019/logs
执行之后查看下目录是否正常创建:
2、为每个节点编辑配置文件
这里我在搭建的时候遇到了一些问题,大家注意几点!!!
- conf下面的配置文件mongod.conf格式分为yml和properties两种,使用的时候注意自己安装mongodb的版本和两种配置方式对应的写法。我这里使用的mongodb客户端是v3.4.24
- 如果配置文件编辑之后不能启动,第一思路回去检查配置文件并逐个比对
本篇为大家说的是 properties这种配制方式,话不多说,先上配置文件的内容:
/usr/local/mongodb/db27018/conf/mongod.conf:
#指定MongoDB日志文件
logpath=/usr/local/mongodb/db27017/logs/mongo.log
# 使用追加的方式写日志
logappend= true
#数据保存路径
dbpath=/usr/local/mongodb/db27017/data
#启用日志文件
journal=true
#以后台方式运行进程
fork=true
# PID File 的完整路径,如果没有设置,则没有PID文件
pidfilepath=/usr/local/mongodb/db27017/logs/mongod.pid
#mongodb所绑定的ip地址
bind_ip=0.0.0.0
#端口号 默认为27017
port=27017
replSet=rs0
在对应三个节点的/usr/local/mongodb/db27017/conf下面创建mongod.conf配置文件
具体的执行语句vi .mongod.conf 进入编辑页面,然后把上面提供的配置文件直接粘贴进去(不同节点的配置文件粘贴的时候注意修改下路径和端口为对应的,上面是对应27017的配置文件)
点击insert开始编辑,粘贴上面的配置文件内容,然后直接ESC退出编辑,:wq 回车保存文件。
然后依次执行/usr/local/mongodb/db27018/conf和/usr/local/mongodb/db27019/conf下面的配置文件:
/usr/local/mongodb/db27018/conf/mongod.conf:
#指定MongoDB日志文件
logpath=/usr/local/mongodb/db27018/logs/mongo.log
# 使用追加的方式写日志
logappend= true
#数据保存路径
dbpath=/usr/local/mongodb/db27018/data
#启用日志文件
journal=true
#以后台方式运行进程
fork=true
# PID File 的完整路径,如果没有设置,则没有PID文件
pidfilepath=/usr/local/mongodb/db27018/logs/mongod.pid
#mongodb所绑定的ip地址
bind_ip=0.0.0.0
#端口号 默认为27017
port=27018
replSet=rs0
/usr/local/mongodb/db27019/conf/mongod.conf:
#指定MongoDB日志文件
logpath=/usr/local/mongodb/db27019/logs/mongo.log
# 使用追加的方式写日志
logappend= true
#数据保存路径
dbpath=/usr/local/mongodb/db27019/data
#启用日志文件
journal=true
#以后台方式运行进程
fork=true
# PID File 的完整路径,如果没有设置,则没有PID文件
pidfilepath=/usr/local/mongodb/db27019/logs/mongod.pid
#mongodb所绑定的ip地址
bind_ip=0.0.0.0
#端口号 默认为27017
port=27019
replSet=rs0
3、启动三个节点
3个节点的配置文件创建完成后,进入客户端的bin目录
cd /usr/local/mongodb/mongodb-linux-x86_64-rhel70-3.4.24/bin/
然后分别启动三个节点
./mongod -f /usr/local/mongodb/db27017/conf/mongod.conf
./mongod -f /usr/local/mongodb/db27018/conf/mongod.conf
./mongod -f /usr/local/mongodb/db27019/conf/mongod.conf
查看启动是否成功
4、建立链接,并初始化副本集节点
链接客户端的指令:
#不指定端口号的时候默认链接27017
./mongo --port 27017
建立链接之后,初始化副本集,对应指令
rs.initiate()
如果rs0后面显示primary则为主节点,显示secondary则为从节点
添加从节点,把27018和27019添加为27107的从节点:
#设置从节点的时候建议使用主机名,不建议使用ip
rs.add("主机名/ip":port)
从节点设置成功之后返回ok:1
查看主机的下面的从节点成员member下面可以看到对应的从节点:
rs.status()
5、主从节点数据验证
在主节点27017插入一条数据,然后去从节点27018和27019查询
去从节点27018下查询在主节点插入的数据
进入从节点如果直接查询的话或报错 not master and slaveOk=false,原因是shell类似于驱动的一个初始化导致。需要在从节点下执行指令开启读权限就可以正常查询了。
#不同客户端版本执行不用的指令
rs.secondaryOk();
或者
rs.slaveOk()
使用compass客户端查看从节点的时候是不需要执行查看权限,也可以正常看到的
6主节点宕机,从节点重新选举的过程
- 从节点的数据是主动拉取过来的,不是通过主节点推送的
- 主节点重新选举的过程大概10S
重新查看另外两个从节点的状态存活的另外两个从节点会被选举为主节点:
以上是mongodb整个副本集搭建的全过程和验证,欢迎大家分享讨论