Mongodb副本集模式搭建
本文采用三个mongodb节点进行测试,一个primary(主节点),一个secondary(从节点),一个arbiter(裁判)
目录
虽然有三个节点,但每个节点的配置文件内容形式基本一致,区别就是数据、日志路径和监听地址。一个最终的配置文件内容如下
- # mongod.conf
-
- # for documentation of all options, see:
- # http://docs.mongodb.org/manual/reference/configuration-options/
-
- # Where and how to store data.
- storage:
- dbPath: D:\Program Files\MongoDB\Server\6.0\bin\1\data
- journal:
- enabled: true
- # engine:
- # wiredTiger:
-
- # where to write logging data.
- systemLog:
- destination: file
- logAppend: true
- path: D:\Program Files\MongoDB\Server\6.0\bin\1\log\mongod.log
-
- # network interfaces
- net:
- port: 27017
- bindIp: 0.0.0.0
-
-
- #processManagement:
-
- security:
- keyFile: D:\Program Files\MongoDB\Server\6.0\bin\mongodb.keyfile
- authorization: enabled
-
- #operationProfiling:
-
- replication:
- replSetName: rs1
-
- #sharding:
-
- ## Enterprise-Only Options:
-
- #auditLog:
-
- #snmp:
配置好各个节点的配置文件后,就可以分别启动实例,我们先把下面配置注释掉,然后只启动准备做为主节点的实例,因为要先创建
用户,创建好后再打开重启。
- #security:
- # keyFile: D:\Program Files\MongoDB\Server\6.0\bin\mongodb.keyfile
- # authorization: enabled
注意:等副本集搭建好后,从节点和裁判会共用主节点创建的用户。
启动:mongod --config path/mongod1.cfg
使用mongodb的ssh客户端(比如MongoSH或MongoDB Compass)连接启动的主实例,以Mongosh为例,命令如下:
mongosh "mongodb://ip:port"
这里不需要使用用户名和密码.
连接成功后,可以先查看数据库列表
show dbs
admin这个数据库肯定会有的,切换到admin
use admin
创建一个超级管理员用户
- db.createUser({
- user: 'admin', // 用户名
- pwd: '123456', // 密码
- roles:[{
- role: 'root', // 角色
- db: 'admin' // 数据库
- }]
- })
可以使用MongoDB Compass连接到上面的主实例,连接字符串如下:
mongodb://admin:123456@ip:port
连接成功后,在Compass的DataBase选项卡下Create DataBase
然后顺带在Compass的底部,使用Mongosh,键入如下代码,创建该库的用户
- db.createUser({
- user: 'program', // 用户名
- pwd: '123456', // 密码
- roles:[{
- role: 'dbOwner', // 角色
- db: 'mydb' //数据库
- }]
- })
keyFile用于副本集节点间的验证。
使用openssl命令生成一个keyfile,并且分别关联到各个节点的配置文件,并打开验证,如下:
- security:
- keyFile: D:\Program Files\MongoDB\Server\6.0\bin\mongodb.keyfile
- authorization: enabled
首先要设置副本集名字,在本质文件中添加如下配置:
replication:
replSetName: rs1
Name随意,但三个节点的配置文件中的这个配置必须一致。
我们还是先只操作主实例,关闭主实例,并重启(因为改了配置文件,开启了验证)
mongod --config path/mongod1.cfg
使用Mongosh连接到主实例
mongosh "mongodb://ip:port"
切换到admin库
use admin
认证
db.auth('admin', '123456')
初始化
rs.initiate()
我们先启动从节点和裁判,启动命令同主节点:
mongod --config path/mongodXXX.cfg //使用各自的配置文件
添加从节点:
rs.add("ip:port") // 填入从节点ip和端口
添加裁判:
rs.addArb("ip:port") // 填入裁判ip和端口,这里用的是addArb
rs.status()
理论上这时候应该看到三个节点的stateStr分别是:PRIMARY、SECONDARY和ARBITER。
如果不行,就把三个节点重启,重新通过mongosh连接主节点使用rs.status()查看,连上后要
先切换到admin库进行认证。
我的测试结果如下图:
使用mongosh连接到从库,使用db.auth()测试之前在主库上创建的账户,理论上应该返回'OK'
以golang客户端为例,连接副本集的连接字符串如下:
const uri = "mongodb://program:123456@10.1.28.23:27017,10.1.28.23:27018,10.1.28.23:27019/?replicaSet=rs1&authMechanism=SCRAM-SHA-1&authSource=mydb"
连接成功后,就可以使用副本集的Watch特性以及其它常规操作。