《Linux运维总结:Centos7.6部署二进制mongodb4.2.23三节点副本集群》
创始人
2024-03-13 02:37:55
0

一、Mongodb集群模式

1、三种集群介绍

MongoDB有三种集群部署模式,分别为主从复制(Master-Slaver)、副本集(Replica Set)和分片(Sharding)模式。

1、Master-Slaver 是一种主从副本的模式,目前已经不推荐使用。
2、Replica Set 模式取代了 Master-Slaver 模式,是一种互为主从的关系。Replica Set 将数据复制多份保存,不同服务器保存同一份数据,在出现故障时自动切换,实现故障转移,在实际生产中非常实用。
3、Sharding 模式适合处理大量数据,它将数据分开存储,不同服务器保存不同的数据,所有服务器数据的总和即为整个数据集。

总结:Sharding 模式追求的是高性能,而且是三种集群中最复杂的。在实际生产环境中,通常将 Replica Set 和 Sharding 两种技术结合使用。

2、副本集角色介绍

1、主要要成员(Primary):主要接收所有写操作。就是主节点。
2、副本成员(Replicate):从主节点通过复制操作以维护相同的数据集,即备份数据,不可写操作,但可以读操作(但需要配置)。是默认的一种从节点类型。
3、仲裁者(Arbiter):不保留任何数据的副本,只具有投票选举作用。当然也可以将仲裁服务器维护为副本集的一部分,即副本成员同时也可以是仲裁者。也是一种从节点类型。


二、Mongodb集群部署

2.1、环境信息

主机IP操作系统CPU架构节点角色节点说明文件描述符
192.168.1.191Centos7.6x86_64primary主节点65535
192.168.1.192Centos7.6x86_64secondary从节点65535
192.168.1.193Centos7.6x86_64arbiter仲裁节点65535

说明:由于业务需要,mongodb的最大连接数需要设置为20000,由于系统默认的文件描述符为1024,所以这里都统一设置为65535。

具体设置方式如下所示:

#1、临时生效
ulimit -n 65535#2、永久生效
echo "* soft nofile 65535" >>/etc/security/limits.conf
echo "* hard nofile 65535" >>/etc/security/limits.conf
echo "* soft nproc 65535" >>/etc/security/limits.d/20-nproc.conf
echo "* hard nproc 65535" >>/etc/security/limits.conf

2.2、安装包及配置文件准备

官方下载MongoDB4.2.23二进制安装包

说明:建议mongodb的服务安装目录、数据目录、日志目录都放在磁盘空间最大目录下。

说明:只需在主节点上(192.168.1.191)主机上操作。

1、下载二进制安装包(假设/data磁盘空间最大)

[root@localhost ~]# mkdir /data/pkgs && cd /data/pkgs 
[root@localhost pkgs]# wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.2.23.tgz
[root@localhost pkgs]# tar axf mongodb-linux-x86_64-rhel70-4.2.23.tgz
[root@localhost pkgs]# mv mongodb-linux-x86_64-rhel70-4.2.23 mongodb
[root@localhost pkgs]# ll mongodb
drwxr-xr-x 2 root root    231 12月  2 14:52 bin
-rw-r--r-- 1 root root  30608 9月  29 23:36 LICENSE-Community.txt
-rw-r--r-- 1 root root  16726 9月  29 23:36 MPL-2
-rw-r--r-- 1 root root   2581 9月  29 23:37 README
-rw-r--r-- 1 root root  75405 9月  29 23:37 THIRD-PARTY-NOTICES
-rw-r--r-- 1 root root 183512 9月  29 23:38 THIRD-PARTY-NOTICES.gotools

2、创建数据目录、日志目录、key文件目录、配置文件目录

[root@localhost ~]# cd /data/pkgs/mongodb 
[root@localhost mongodb]# mkdir data logs key conf

3、生成key文件

说明:MongoDB使用keyfile认证,副本集中的每个mongod实例使用keyfile内容作为认证其他成员的共享密码。mongod实例只有拥有正确的keyfile才可以加入副本集。keyFile的内容必须是6到1024个字符的长度,且副本集所有成员的keyFile内容必须相同。

# 400权限是要保证安全性,否则mongod启动会报错
[root@localhost ~]# cd /data/pkgs/mongodb 
[root@localhost mongodb ]# openssl rand -base64 756 > ./key/mongo.key
[root@localhost mongodb ]# chmod 400 ./key/mongo.key

4、编辑配置文件

[root@localhost ~]# cd /data/pkgs/mongodb
[root@localhost mongod]# vim conf/mongod.conf
systemLog:destination: filelogAppend: truepath: /data/pkgs/mongodb/logs/mongod.logstorage:dbPath: /data/pkgs/mongodb/datajournal:enabled: true
#  engine:
#  wiredTiger:# how the process runs
processManagement:fork: true  # fork and run in backgroundpidFilePath: /var/run/mongodb/mongod.pid  # location of pidfiletimeZoneInfo: /usr/share/zoneinfo# network interfaces
net:port: 27017bindIp: 0.0.0.0  # Enter 0.0.0.0,:: to bind to all IPv4 and IPv6 addresses or, alternatively, use the net.bindIpAll setting.security:clusterAuthMode: keyFilekeyFile: /data/pkgs/mongodb/key/mongo.keyauthorization: enabled#operationProfiling:replication:replSetName: mongodb_cluster

5、将/data/pkgs目录下的mongodb目录远程拷贝到192.168.1.192和192.168.1.193主机上,远程主机如果没有/data/pkgs目录,则请先创建该目录

[root@localhost pkgs]# scp -r /data/pkgs/mongodb root@192.168.1.192:/data/pkgs
[root@localhost pkgs]# scp -r /data/pkgs/mongodb root@192.168.1.193:/data/pkgs

2.3、启动服务

说明:分别在192.168.1.191、192.168.1.192、192.168.1.193主机上启动mongodb服务,启动命令相同。

[root@localhost pkgs]# cd /data/pkgs/mongodb/
[root@localhost mongodb]# ./bin/mongod -f ./conf/mongod.conf --auth --maxConns=20000
about to fork child process, waiting until server is ready for connections.
forked process: 97708
child process started successfully, parent exiting

2.4、配置副本集

说明:只需在主节点上(192.168.1.191)添加副本集信息。

[root@localhost mongodb]# ./bin/mongo --eval "rs.initiate({_id : 'mongodb_cluster',members: [{ _id : 0, host : \"192.168.1.191:27017\", priority: 2 },{ _id : 1,  host : \"192.168.1.192:27017\", priority: 1 },{ _id : 2, host : \"192.168.1.193:27017\", arbiterOnly: true }]})"

说明:

1、“_id” : “mongodb_cluster” :副本集的配置数据存储的主键值,默认就是副本集的名字
2、““members” :副本集成员数组,priority表示优先级,

如下图所示:
在这里插入图片描述
查询副本集状态

[root@localhost mongodb]#  ./bin/mongo --eval "rs.status()"

如下图所示:
在这里插入图片描述


2.5、创建用户

说明:只需在主节点上(192.168.1.191)创建用户。

1、新建管理员root

[root@localhost pkgs]# cd /data/pkgs/mongodb/
[root@localhost mongodb]# vim admin-setup.js
db.createUser({user: "admin",pwd: "admin@123",roles: [ { role: "root", db: "admin" } ]}
)[root@localhost mongodb]# ./bin/mongo admin ./admin.js 
MongoDB shell version v4.2.23
connecting to: mongodb://127.0.0.1:27017/admin?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("9962547e-7264-485b-a4f8-62752722b246") }
MongoDB server version: 4.2.23
Successfully added user: {"user" : "admin","roles" : [{"role" : "root","db" : "admin"}]
}[root@localhost mongodb]# ./bin/mongo --host 192.168.1.191 --port 27017 -u admin -p admin@123 --authenticationDatabase admin
MongoDB shell version v4.2.23
connecting to: mongodb://192.168.1.191:27017/?authSource=admin&compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("71df4b04-fafc-4408-aa14-a36be94c09d0") }
MongoDB server version: 4.2.23
Server has startup warnings: 

如下图所示:

在这里插入图片描述

2、数据库possecu,新建普通(读写权限)用户lolaage

[root@localhost pkgs]# cd /data/pkgs/mongodb/
[root@localhost mongodb]# vim possecu-setup.js
db.createUser({user: "lolaage",pwd: "lolaage@123",roles: [{ role: "readWrite", db: "possecu" }]}
)
[root@localhost mongodb]# ./bin/mongo -u admin -p admin@123 --authenticationDatabase admin possecu ./possecu-setup.js
MongoDB shell version v4.2.23
connecting to: mongodb://127.0.0.1:27017/possecu?authSource=admin&compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("ca7ad103-bdbc-40dd-a237-31e1c653d9c4") }
MongoDB server version: 4.2.23
Successfully added user: {"user" : "lolaage","roles" : [{"role" : "readWrite","db" : "possecu"}]
}[root@localhost mongodb]# ./bin/mongo --host 192.168.1.191 --port 27017 -u lolaage -p lolaage@123 --authenticationDatabase possecu
MongoDB shell version v4.2.23
connecting to: mongodb://192.168.1.191:27017/?authSource=possecu&compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("c19599e2-5aef-4b4b-942d-557f4c619b63") }
MongoDB server version: 4.2.23

如下图所示:
在这里插入图片描述

3、开启从节点临时读权限

[root@localhost mongodb]# ./bin/mongo --host  192.168.1.192 --port 27017 -u admin -p admin@123  --authenticationDatabase admin
mongodb_cluster:SECONDARY> rs.secondaryOk();

2.6、设置system开机自启

#1、创建服务脚本mongodb.service
[root@localhost ~]# vim /etc/systemd/system/mongod.service
[Unit]
Description=Mongodb Service
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
ExecStart=/data/pkgs/mongodb/bin/mongod --config /data/pkgs/mongodb/conf/mongod.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/data/pkgs/mongodb/bin/mongod --config /data/pkgs/mongodb/conf/mongod.conf --shutdown
PrivateTmp=true[Install]
WantedBy=multi-user.target#2、刷新配置(在启动前,必须先执行,否则报警告)
[root@localhost ~]# systemctl daemon-reload#3、启动服务
[root@localhost ~]# systemctl start mongod#4、停止服务
[root@localhost ~]# systemctl stop mongod#5、服务加入开机自启
[root@localhost ~]# systemctl enable mongod

2.7、集群测试

1、故障转移

#1、停止主节点mongodb服务
# 说明:停止前主节点为192.168.1.191
[root@localhost mongodb]# ./bin/mongod -f ./conf/mongod.conf --auth --maxConns=20000 --shutdown
killing process with pid: 99828#2、登录从节点查看当前节点状态
[root@localhost mongodb]# ./bin/mongo --host 192.168.1.192 --port 27017 -u admin -p admin@123 --authenticationDatabase admin
mongodb_cluster:PRIMARY> rs.status()

说明:此时应该可以看到,主节点为192.168.1.192,已经完成了主从切换。如下图所示:

在这里插入图片描述

2、数据一致性

#1、主节点登录插入一条数据
[root@localhost mongodb]# ./bin/mongo --host 192.168.1.191 --port 27017 -u admin -p admin@123 --authenticationDatabase admin
mongodb_cluster:PRIMARY> db.users.insert({name:"jack",age:0,addr:"guangzhou",country:"China"})
WriteResult({ "nInserted" : 1 })mongodb_cluster:PRIMARY> db.users.find()
{ "_id" : ObjectId("6389c03ceec47300d932c1aa"), "name" : "jack", "age" : 0, "addr" : "guangzhou", "country" : "China" }
mongodb_cluster:PRIMARY> #2、从节点查看数据是否同步
[root@localhost mongodb]# ./bin/mongo --host 192.168.1.192 --port 27017 -u admin -p admin@123 --authenticationDatabase admin
mongodb_cluster:SECONDARY> rs.secondaryOk()
mongodb_cluster:SECONDARY> db.users.find()
{ "_id" : ObjectId("6389c03ceec47300d932c1aa"), "name" : "jack", "age" : 0, "addr" : "guangzhou", "country" : "China" }

说明:此时应该看到这条记录了, 证明我们的主从复制功能已经成功了。


三、Mongodb集群常用命令

1、查看全局所有账户

mongodb_cluster:PRIMARY> use admin
switched to db admin
mongodb_cluster:PRIMARY> db.system.users.find()

**2、查看当前库下的账户 **

mongodb_cluster:PRIMARY> use possecu
switched to db possecu
mongodb_cluster:PRIMARY> show users

3、查看最大连接数

mongodb_cluster:PRIMARY> db.serverStatus().connections
{ "current" : 8, "available" : 19992, "totalCreated" : 30, "active" : 2 }

4、修改密码

mongodb_cluster:PRIMARY> use admin
switched to db admin
mongodb_cluster:PRIMARY> db.changeUserPassword("admin", "admin@123456")

5、通过密码登陆mongo

[root@localhost mongodb]# ./bin/mongo --host 192.168.1.191 --port 27017 -u admin -p admin@123 --authenticationDatabase admin

四、Mongodb集群管理命令

在这里插入图片描述


总结:整理不易,如果对你有帮助,可否点赞关注一下?

更多详细内容请参考:Linux运维实战总结

相关内容

热门资讯

美国2年期国债收益率上涨15个... 原标题:美国2年期国债收益率上涨15个基点 美国2年期国债收益率上涨15个基...
汽车油箱结构是什么(汽车油箱结... 本篇文章极速百科给大家谈谈汽车油箱结构是什么,以及汽车油箱结构原理图解对应的知识点,希望对各位有所帮...
嵌入式 ADC使用手册完整版 ... 嵌入式 ADC使用手册完整版 (188977万字)💜&#...
重大消息战皇大厅开挂是真的吗... 您好:战皇大厅这款游戏可以开挂,确实是有挂的,需要了解加客服微信【8435338】很多玩家在这款游戏...
盘点十款牵手跑胡子为什么一直... 您好:牵手跑胡子这款游戏可以开挂,确实是有挂的,需要了解加客服微信【8435338】很多玩家在这款游...
senator香烟多少一盒(s... 今天给各位分享senator香烟多少一盒的知识,其中也会对sevebstars香烟进行解释,如果能碰...
终于懂了新荣耀斗牛真的有挂吗... 您好:新荣耀斗牛这款游戏可以开挂,确实是有挂的,需要了解加客服微信8435338】很多玩家在这款游戏...
盘点十款明星麻将到底有没有挂... 您好:明星麻将这款游戏可以开挂,确实是有挂的,需要了解加客服微信【5848499】很多玩家在这款游戏...
总结文章“新道游棋牌有透视挂吗... 您好:新道游棋牌这款游戏可以开挂,确实是有挂的,需要了解加客服微信【7682267】很多玩家在这款游...
终于懂了手机麻将到底有没有挂... 您好:手机麻将这款游戏可以开挂,确实是有挂的,需要了解加客服微信【8435338】很多玩家在这款游戏...