生成共用keyfile文件
生成 keyfile文件到/var/mongodb/pki
目录
# 生成目录
sudo mkdir -p /var/mongodb/pki
# 更该目录所有者为个人账户
sudo chown usename:username-R /var/mongodb
# 生成秘钥文件
openssl rand -base64 741 > /var/mongodb/pki/m103-keyfile
chmod 600 /var/mongodb/pki/m103-keyfile
创建集群配置文件
以三个服务的复制集群配置文件为例, 同时创建node1.conf、node2.conf、node3.conf,3个配置文件。三个配置文件只需要更改部分配置内容即可。
其中需要修改的配置有storage.dbpath
、net.port
、systemLog.path
; 而replication.replSetName
复制集名是需要一样的。
- node1.conf
storage:
dbPath: /var/mongodb/db/node1
net:
bindIp: 192.168.103.100,localhost
port: 27011
security:
authorization: enabled
keyFile: /var/mongodb/pki/m103-keyfile
systemLog:
destination: file
path: /var/mongodb/db/mongod1.log
logAppend: true
processManagement:
fork: true
replication:
replSetName: m103-example
- node2.conf
storage:
dbPath: /var/mongodb/db/node2
net:
bindIp: 192.168.103.100,localhost
port: 27012
security:
authorization: enabled
keyFile: /var/mongodb/pki/m103-keyfile
systemLog:
destination: file
path: /var/mongodb/db/mongod2.log
logAppend: true
processManagement:
fork: true
replication:
replSetName: m103-example
- node3.conf
storage:
dbPath: /var/mongodb/db/node3
net:
bindIp: 192.168.103.100,localhost
port: 27013
security:
authorization: enabled
keyFile: /var/mongodb/pki/m103-keyfile
systemLog:
destination: file
path: /var/mongodb/db/mongod3.log
logAppend: true
processManagement:
fork: true
replication:
replSetName: m103-example
在启动mongod实例之前,要先创建配置文件中指定的dbpath目录:
mkdir /var/mongodb/db/{node1,node2,node3}
启动第一个实例添加必要配置
- 启动并连接到第一个mongod
mongod -f node1.conf
由于配置文件中是以后台方式运行的,因此启动mongod服务后可在当前终端启动客户端:
mongo --port 27011
- 启动副本集并查看状态
执行下面命令启动副本集,该节点会自动完成默认副本集配置并选举自己为主节点:
rs.initiate()
执行下面命令查看副本集状态,初始化完成后,你会看到shell中的提示符显示为了PRIMARY
,即主节点:
rs.status()
- 创建超级管理员用户
由于配置文件中是开启了身份验证的,因此第一次登陆只是临时登陆,必须要先创建用户后重新使用身份认证登陆:
# 切换到admin
use admin
# 创建root账户
db.createUser({
user: "m103-admin",
pwd: "m103-pass",
roles: [
{role: "root", db: "admin"}
]
})
使用认证客户端添加复制集成员
- 重新使用身份认证登陆
使用exit
命令退出当前客户端,使用新建的管理员账号登陆mongo:
mongo --port 27011 -u m103-admin -p m103-pass --authenticationDatabase admin
再使用另外两个配置文件登陆其他两个节点,其他节点不再需要额外创建账号的操作:
mongo --port 27012
mongo --port 27013
- 添加节点到复制集
在第一个主节点内,执行命令添加其他两个节点到复制集:
rs.add("192.168.103.100:27012")
rs.add("192.168.103.100:27013")
由于使用的是vagrant虚拟环境,因此此处我的IP地址为192.168.103.100,填写自己实际的地址即可。
添加完成后使用rs.status()
查看复制集状态,可以看到已经成功有了一个PRIMARY
和两个SECONDARY
了。
到此,一个简单的本地MONGODB高可用复制集就创建成功了。
其他操作
- 查看复制集结构
rs.isMaster()
- 强制降级当前主节点
使用命令强制将当前主节点降级:
rs.stepDown()
降级后复制集将自动选举一个新的主节点并切换到该主节点位置上,可以再次使用rs.isMaster()
查看当前复制集结构,可发现主节点已经变化,之前的PRIMARY
变成了SECONDARY
。
以上。
网友评论