这篇文章介绍的是 Primary + Secondary + Arbiter 的架构,架构图如下:
Secondary 持续复制 Primary 节点的数据;Arbiter 用于心跳检测和选举,不接收数据。
实验环境:
| 节点 | 角色 | 环境 |
|---|---|---|
| 192.168.150.123 | Primary | CentOS 7.4、MongoDB 5.0.2 |
| 192.168.150.232 | Secondary | CentOS 7.4、MongoDB 5.0.2 |
| 192.168.150.253 | Arbiter | CentOS 7.4、MongoDB 5.0.2 |
在三台机器配置 yum 源:
vim /etc/yum.repos.d/mongo.repo加入如下内容:
[mongodb-org-5.0]name=MongoDB Repositorybaseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/5.0/x86_64/gpgcheck=1enabled=1gpgkey=https://www.mongodb.org/static/pgp/server-5.0.asc
yum install -y mongodb-orgmkdir -p /data/{mongodb27001/data/configdb,mongodb27001/data/sharddb,mongodb27001/conf,mongodb27001/run,mongodb27001/logs}vim /data/mongodb27001/conf/mongod.conf加入如下内容:
systemLog:destination: filelogAppend: truepath: /data/mongodb27001/logs/mongod.logstorage:dbPath: /data/mongodb27001/datajournal:enabled: trueprocessManagement:fork: true # fork and run in backgroundpidFilePath: /data/mongodb27001/run/mongod.pid # location of pidfiletimeZoneInfo: /usr/share/zoneinfonet:port: 27001bindIp: 0.0.0.0
在其中一台机器执行下面语句
openssl rand -base64 745 > /data/mongodb27001/conf/keyfilechmod 600 /data/mongodb27001/conf/keyfile
然后将生成的 keyfile 复制到另外两台机器的 /data/mongodb27001/conf/ 目录下。
mongod -f /data/mongodb27001/conf/mongod.conf登录 MongoDB
mongo --port 27001创建管理员账户
use admindb.createUser({user: "root",pwd: "xxxxxx",roles: [ { role: "root",db:"admin" } ]})
创建业务用户
use xxx# xxx 表示业务使用的 DBdb.createUser({user: "xxx_user",pwd: "xxxxxx",roles: [ { role: "readWriteAnyDatabase",db:"admin" } ]})
编辑配置文件:
vim /data/mongodb27001/conf/mongod.conf增加集群及认证相关配置:
systemLog:destination: filelogAppend: truepath: /data/mongodb27001/logs/mongod.logstorage:dbPath: /data/mongodb27001/datajournal:enabled: trueprocessManagement:fork: true # fork and run in backgroundpidFilePath: /data/mongodb27001/run/mongod.pid # location of pidfiletimeZoneInfo: /usr/share/zoneinfonet:port: 27001bindIp: 0.0.0.0replication:oplogSizeMB: 4096replSetName: xxx_replsecurity:authorization: enabledclusterAuthMode: keyFilekeyFile: /data/mongodb27001/conf/keyfile
登录 MongoDB
mongo --port 27001 -uroot -pxxxxxx admin关闭 MongoDB
db.shutdownServer() 重新启动 MongoDB
mongod -f /data/mongodb27001/conf/mongod.conf在第一个节点上登录 MongoDB:
mongo --port 27001 -uroot -pxxxxxx admin执行下面命令增加集群配置:
config={_id:'xxx_repl',members:[{_id: 0, host: '192.168.150.123:27001',priority:1},{_id: 1, host: '192.168.150.232:27001',priority:1},{_id: 2, host: '192.168.150.253:27001',arbiterOnly:true},]}
初始化配置
rs.initiate(config)rs.status()如果一切顺利,就可以看到如下结果:
{"set" : "xxx_repl",......"members" : [{"_id" : 0,"name" : "192.168.150.123:27001","health" : 1,"state" : 1,"stateStr" : "PRIMARY",......},{"_id" : 1,"name" : "192.168.150.232:27001","health" : 1,"state" : 2,"stateStr" : "SECONDARY",......},{"_id" : 2,"name" : "192.168.150.253:27001","health" : 1,"state" : 7,"stateStr" : "ARBITER",......}......}
到这里,MongoDB 5.x 副本集就搭建完成啦。