MongoDB副本集部署(Replica Set)
MongoDB使用手册:https://www.runoob.com/mongodb/mongodb-tutorial.html
MongoDB源码包下载地址:https://www.mongodb.com/try#community
MongoDB官网文档:https://docs.mongodb.com/v4.0/sharding/
服务规划:
MongoDB副本集部署(Replica Set)
该部署使用的Red Hat 7为例
MongoDB副本集相当于MySQL的主从复制,一主多从,与MySQL不同的是,MongoDB的副本集实例的数量需要有三个,一主一从一仲裁。但是仲裁节点(Arbiter)它其实并不保存数据,并且不能被选举为主节点,但是具有投票权。仲裁节点使用最小的资源,不能将Arbiter部署在同一个数据集节点中。然后主节点负责处理客户端请求。其余的都是从节点,负责复制主节点上的数据
MongoDB副本集的选举机制:参与选举的节点数量必须大于副本集总节点数量的一半,如果已经小于一半了所有节点保持只读状态。所以说,理论上其实副本集中最好是有奇数个成员节点
前提工作
所有设备都要做如下操作。
1.关闭防火墙
systemctl stop firewalld.service
systemctl disable firewalld.service
2.关闭SELinux
setenforce 0 //临时关闭
vim /etc/selinux/config //永久关闭
SELINUX=enforcing改为SELINUX=disabled
3.解压MongoDB包
注意选择对应的系统版本的MongoDB包,在这里我使用的是Centos7的环境,所以下载的也是rhel70的MongoDB包
tar -zxvf /opt/install/mongodb-linux-x86_64-rhel70-3.4.24.tgz
mv /opt/install/mongodb-linux-x86_64-rhel70-3.4.24/ /usr/local/mongodb
部署副本集Relica Set
三台设备都要部署,最后部署完成的结果是:192.168.36.137为主(PRIMARY),138为从(SECONDARY),139为仲裁(ARBITER)。
1.创建数据文件和日志文件
mkdir -p /usr/local/mongodb/data
mkdir -p /usr/local/mongodb/logs
mkdir -p /usr/local/mongodb/etc
2.配置MongoDB配置文件
vi /usr/local/mongodb/etc/mongodb.conf
dbpath=/usr/local/mongodb/data logpath=/usr/local/mongodb/logs/mongodb.log logappend=true pidfilepath=/usr/local/mongodb/mongodb.pid port=27017 //端口可以根据节点进行修改,这里我三台设备分别使用的27017、27018、27019端口 fork=true //守护进程开启,也就是后台运行 replSet=myrs //副本集名称,各节点的副本集名称需要一致
3.启动MongoDB
cd /usr/local/mongodb/bin/
./mongod --config /usr/local/mongodb/etc/mongodb.conf
4.进入MongoDB创建副本集
#随便使用一台设备,这里我采用的192.168.36.137设备
./mongo
> use admin // priority越大的为主节点,myrs需要是集群的名字 > rs.initiate({ _id:"myrs", members:[ {_id:0,host:"192.168.36.137:27017","priority":2}, {_id:1,host:"192.168.36.138:27018","priority":1}, {_id:2,host:"192.168.36.139:27019",arbiterOnly:true} ] }) myrs:OTHER> myrs:SECONDARY>
这里稍等一会,退出重进,我们的192.168.36.137就会被选举成主节点了。
5.查看节点配置和状态命令
#查看节点状态(主:PRIMARY 从:SECONDARY 仲裁:ARBITER) myrs:PRIMARY> rs.status() #查看节点配置 myrs:PRIMARY> rs.config()
副本集验证
#首先进入主节点建一个数据,当前也就是192.168.36.137
cd /usr/local/mongodb/bin/
./mongo
myrs:PRIMARY> use test1 myrs:PRIMARY> db.c1.insert({uname:"webopenfather",age:18}) myrs:PRIMARY> show dbs admin 0.000GB local 0.000GB test1 0.000GB
#然后进入从节点查看,当前也就是192.168.36.137,这里因为我们改了端口,所以从节点这里进入MongoDB需要指定端口
./mongo --port 27018
myrs:SECONDARY> rs.slaveOk() //启动从节点的读功能,默认是关闭的,仲裁也是如此,只是仲裁不会同步主节点数据 myrs:SECONDARY> show dbs //可以看到,我们数据已经同步过来了 admin 0.000GB local 0.000GB test1 0.000GB
这时候,当PRIMARY节点挂掉时,SECONDARY节点就会变为PRIMARY,至此,我们的MongoDB副本集就搭建完成了!
若要做密码验证,请参考MongoDB设置密码验证。