《Linux运维总结:Centos7.6部署二进制mongodb4.2.23三节点副本集群》

一、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.191 Centos7.6 x86_64 primary 主节点 65535
192.168.1.192 Centos7.6 x86_64 secondary 从节点 65535
192.168.1.193 Centos7.6 x86_64 arbiter 仲裁节点 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 -pv /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 122 14:52 bin
-rw-r--r-- 1 root root  30608 929 23:36 LICENSE-Community.txt
-rw-r--r-- 1 root root  16726 929 23:36 MPL-2
-rw-r--r-- 1 root root   2581 929 23:37 README
-rw-r--r-- 1 root root  75405 929 23:37 THIRD-PARTY-NOTICES
-rw-r--r-- 1 root root 183512 929 23:38 THIRD-PARTY-NOTICES.gotools

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

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

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: file
  logAppend: true
  path: /data/pkgs/mongodb/logs/mongod.log

storage:
  dbPath: /data/pkgs/mongodb/data
  journal:
    enabled: true
#  engine:
#  wiredTiger:

# how the process runs
processManagement:
  fork: true  # fork and run in background
  pidFilePath: /data/pkgs/mongodb/pid/mongod.pid  # location of pidfile
  timeZoneInfo: /usr/share/zoneinfo

# network interfaces
net:
  port: 27017
  bindIp: 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: keyFile
  keyFile: /data/pkgs/mongodb/key/mongo.key
  authorization: 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 [email protected]:/data/pkgs
[root@localhost pkgs]# scp -r /data/pkgs/mongodb [email protected]:/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表示优先级,

如下图所示:
《Linux运维总结:Centos7.6部署二进制mongodb4.2.23三节点副本集群》_第1张图片
查询副本集状态

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

如下图所示:
《Linux运维总结:Centos7.6部署二进制mongodb4.2.23三节点副本集群》_第2张图片


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-setup.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 --auth --maxConns=20000
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,已经完成了主从切换。如下图所示:

《Linux运维总结:Centos7.6部署二进制mongodb4.2.23三节点副本集群》_第3张图片

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运维总结:Centos7.6部署二进制mongodb4.2.23三节点副本集群》_第4张图片


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

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

你可能感兴趣的:(《Linux运维实战总结》,mongodb副本集,mongodb集群)