MongoDB replica set :
A replica set in MongoDB is a group of mongod processes that maintain the same data set. Replica sets provide redundancy and high availability, and are the basis for all production deployments.
简单的说,复制集有多个MongoDB服务器,它们有相同的数据库,如果一个服务器因为网络故障或者停电DOWN了,其他服务器可以继续提供服务,这样可以提高数据源的可靠性和健壮性。详情见这里。
MongoDB复制集包括一个PRIMARY,其他的都是SECONDARY,只有PRIMARY才能接受读写操作。PRIMARY会记录那些写的操作到一个日志当中,oplog,其他SECONDARY会按照这个日志,去操作他们的数据库来保持数据库的一致。
本文适合于CentOS机器,用yum install来安装MongoDB v4.x。
在集群的每台机器(Centos)上用 yum来安装MongoDB4.0, 详见另外一篇文章
https://blog.csdn.net/bigtree_3721/article/details/82768056
注意: 1:先别启动mongDB。
2: 把第一台机器生成的 repl_set.key 同步到集群中所有的mongod节点上。注意本文启动mongod的用户是mongod,它必须对key有400的权限!否则mongo server起不来。
在每个机器上去编辑下面的配置文件。
vi /etc/mongod.conf
配置如下内容:
# mongod.conf
# for documentation of all options, see:
# http://docs.mongodb.org/manual/reference/configuration-options/
# where to write logging data.
systemLog:
destination: file
logAppend: true
path: /data/mongodb/log/mongod.log
# Where and how to store data.
storage:
dbPath: /data/mongodb/data
journal:
enabled: true
# engine:
# mmapv1:
# wiredTiger:
# how the process runs
processManagement:
fork: true # fork and run in background
pidFilePath: /data/mongodb/run/mongod.pid # location of pidfile
timeZoneInfo: /usr/share/zoneinfo
# network interfaces
net:
port: 27017
bindIp: 10.80.2.232 # Enter 0.0.0.0,:: to bind to all IPv4 and IPv6 addresses or, alternatively, use the net.bindIpAll setting.
setParameter:
enableLocalhostAuthBypass: false
#security:
# clusterAuthMode: keyFile
# keyFile: /data/mongodb/key/repl_set.key
# authorization: enabled
#operationProfiling:
replication:
replSetName: bpmRepSet
#sharding:
## Enterprise-Only Options
#auditLog:
#snmp:
注意:security.authorization:enabled注释掉了,这样进去才可以进行复制集初始化、新建用户等操作。
4.启动复制集所有成员的mongod进程
systemctl enable mongod
systemctl start mongod
5.连接其中一个mongod,设置复制集的成员信息
下图添加了3台主机信息(如集群里有更多的主机,则依次按下面的格式加入即可)
mongo --host 10.80.2.232
config = { _id: "my_repl", members: [
{_id: 0, host: "成员机1IP地址:27017"},
{_id: 1, host: "成员机2IP地址:27017"},
{_id: 2, host: "成员机3IP地址:27017"}]
}
rs.initiate(config)
rs.status();
6.创建相关用户 (必须在上面第5这步完成后才能做)
use admin
db.createUser({user:"admin",pwd:"yourpassword",roles:[{role:"userAdminAnyDatabase",db:"admin"}]})
MongoDB规定,创建的第一个用户一定要是在admin数据库、并且角色是userAdminAnyDatabase。
创建完第一个角色,用这个角色登录来创建其他角色。
use admin
db.auth("admin","yourpassword")
db.createUser({user:"clusterAdmin",pwd:"yourpassword",roles:[{role:"clusterAdmin",db:"admin"}]})
#这个角色可以进行复制集的管理(添加成员、查看状态等等)。
7.最后
把集群中所有主机的配置文件的security.authorization:true注释去掉,重启复制集。
systemctl restart mongod
现在要登录才能查看复制集状态了。
mongo --host <集群里的主机IP> --port 27017
> rs.status();
> db.serverStatus().repl.primary