搭建mongoDB replSet副本集群

搭建环境
mongodb版本:v4.4.6
Platform OS : Centos7.X
关闭系统防火墙
各主机节点配置SSH互信
主机名称 IP 角色
node1 172.16.20.201 主节点(PRIMARY)
node2 172.16.20.202 从节点(SECONDARY)
node3 172.16.20.203 仲裁节点(SECONDARY)

(1)、安装mongoDB
在node1,node2,node3三台主机上安装MongoDB,都做相同的配置操作,如下:

mongoDB 社区版 官方下载页面
https://www.mongodb.com/try/download/community
进入该页面后,选择mongoDB版本、操作系统平台、软件包的格式
例如:
version:
4.46(current)

Platform:
redhat/CentOS7.0

Package:
tgz

1. 解压 mongodb-linux-x86_64-rhel70-4.4.6.tgz 软件包到 /usr/local/mongodb
2. 创建mongodb目录
mkdir /usr/local/mongodb/data
mkdir /usr/local/mongodb/conf
mkdir /usr/local/mongodb/log

3. 创建mongodb配置文件
注意:复制名称的replSet的“S”需要大写
搭建mongoDB replSet副本集群

4. 配置mongodb环境变量
编辑/etc/profile 配置文件,在文件末尾添加:
搭建mongoDB replSet副本集群

然后
source /etc/profile 使得mongodb环境变量生效。

5. 启动mongodb
# mongod --config /usr/local/mongodb/conf/mongodb.conf

搭建mongoDB replSet副本集群

6. 配置mongodb 服务
6.1、mongodb服务文件 /usr/lib/systemd/system/mongod.service
[Unit]
Description=mongodb
After=network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
PIDFile=/usr/local/mongodb/data/mongod.lock
ExecStart=/usr/local/mongodb/bin/mongod --config /usr/local/mongodb/conf/mongodb.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target

6.2、通过systemctl控制mongod服务
# systemctl daemon-reload // 重新加载mongod.service配置文件
# systemctl enable mongod // 设置mongod.service服务开机自行启动
# systemctl start mongod // 启动mongod.service服务

搭建mongoDB replSet副本集群

(2)、初始化复制集
在想设置primary的节点node1上初始化复制集rep0
命令如下:
# mongo
> config_repl={_id:"rep0", members:[{_id:0, host:"node1:27017", priority:1}, {_id:1, host:"node2:27017"}, {_id:2, host:"node3:27017", arbiterOnly:true}]}
> rs.initiate(config_repl);

正常初始化复制集之后,可以看到:
node1节点变更为PRIMARY
node2节点变更为SECONDARY
node3节点变更为ARBITER(仲裁节点)。
(3)、数据同步测试
首先向PRIMRY(主节点)写入一条数据
在node1主机上登入mongodb
执行下面命令操作:
# mongo
> use yang
> db.say.insert({"text":"Hello Yang"}) 插入后可以使用db.say.find()查看一下插入结果。
搭建mongoDB replSet副本集群

进入SECONDARY(副节点)查看数据是否同步
默认情况下SECONDARY节点不能读写, replSet里只能有一个Primary节点,只能在Primary写数据,不能在SECONDARY写数据。
需要设置slaveOk为true才可以从SECONDARY节点读取数据。
设置过之后, 查看结果,可以看到Primary节点的数据同步到了SECONDARY节点上。
搭建mongoDB replSet副本集群

删除文档命令
MongoDB最早删除文档使用的是remove()方法,后来官方把它移除了因为remove()并不会真正释放空间。需要继续执行 db.repairDatabase() 来回收磁盘空间.
MongoDB删除文档的方法主要有:
deleteOne()只能删除匹配到的第一条记录,即使匹配到多个也只删除一条。
deleteMany()方法的用法与deleteOne()一样,只是删除所有符合条件的文档。

db.say.deleteOne({ "_id" : ObjectId("60d1a8ba4c18e1fca34e5ce9"), "text" : "Hello Yang" })

db.say.deleteMany({ "_id" : ObjectId("60d1a8ba4c18e1fca34e5ce9"), "text" : "Hello Yang" })

(4)、故障切换测试
副本集还有个重要的功能就是故障切换,
如果把主节点关闭,看看副节点是否能接替主节点进行工作。
4.1关闭主节点
在node1主机上登入mongodb
执行命令
use admin
db.shutdownServer()

4.2 去从节点上查看状态
在node2主机上登入mongodb
执行命令
rs.status()
以下是输出的状态信息:
搭建mongoDB replSet副本集群
可以看到
Node1变为:not reachable/healthy
Node2变为:PRIMARY

相关新闻

联系我们

全国服务热线

400-033-9553

电子邮件:admin@example.com
工作时间:09:00-17:00 周一至周五

在线客服
关注微信
关注微信
分享本页
返回顶部