MongoDB高可用部署

常用的MongoDB高可用架构方案一般是基于副本集的一主N从架构,本文使用一主一从一仲裁的架构做部署。使用一主一从一仲裁而不是一主二从的架构原因是,一主一从基本可以满足需求,仲裁节点无硬件配置要求,仲裁节点服务器可以继续做其他服务。

假设目前拥有三台服务器内网IP分别为:

10.0.0.1 主节点
10.0.0.2 从节点
10.0.0.3 仲裁节点

安装MongoDB

三台服务均安装最新版MongoDB(最好版本保证一致),安装见官方说明

修改配置

生成 keyFile

keyFile 用于副本集间的验证,三台服务器使用同一个keyFile

openssl rand -base64 756 > /var/lib/mongodb/keys/mongo.key
chmod 400 /var/lib/mongodb/keys/mongo.key

节点配置

/etc/mongod.conf 添加以下内容,三个节点配置一致

security:
  keyFile: /var/lib/mongodb/keys/mongo.key
  # authorization: enabled 

replication:
  replSetName: rs0

添加bindIp

/etc/mongod.conf 修改 bindIp添加内网IP,三台服务器分别修改为自己的内网IP

net:
  port: 27017
  bindIp: 127.0.0.1,10.0.0.1

配置修改完成后,重启MongDB

sudo systemctl start mongod

添加从节点、仲裁节点

连接主节点

mongosh 10.0.0.1

初始化及添加节点

#初始化集群
rs.initiate({_id: "rs0",members: [{ _id: 0 , host: "10.0.0.1:27017" }]})
#添加副节点
rs.add("10.0.0.2:27017")
#添加仲裁节点
rs.addArb("10.0.0.3:27017")

到此为止基本的部署工作已经完成,下面继续做一些开启验证、新建用户的基本操作。

开启验证

默认情况下MongoDB,是不需要验证即可进行读写操作,为提高安全性我们开启验证。

连接主节点,创建root用户,该用户将作为我们后序操作数据库的root用户。

db.createUser({
 user:"root",
 pwd:"pwd",
 roles: [ { role: "root",db:"admin"}]
})

修改三台服务器的 /etc/mongod.conf,打开 authorization

security:
  keyFile: /var/lib/mongodb/keys/mongo.key
  authorization: enabled 

配置修改完成后,重启MongDB

sudo systemctl start mongod

创建业务用户

连接主节点

mongosh 10.0.0.1

认证

use admin
db.auth("root","pwd")

新建数据库 app1

use app1 

创建数据库 app1 用户

db.createUser({
  user: "app1user",
  pwd: 'pwd',
  roles: [ {role: "readWrite", db:"app1"} ]
})

至此,已经完成新建业务数据库 app1,并创建用户 app1user,客户端即可通过创建的用户和密码连接数据库。

客户连接地址

mongodb://center:pwd@10.0.0.1:27017,10.0.0.2:27017/app1?replicaSet=rs0

参考文章

安装MongoDB文档:https://www.mongodb.com/docs/manual/installation/

副本集通过Kefile验证:https://www.mongodb.com/docs/v6.0/tutorial/deploy-replica-set-with-keyfile-access-control/