MongoDB 4.0 复制集 replica set 搭建 (CentOS)

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。

1. 在集群中每个机器上安装MongodDB

   在集群的每台机器(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起不来。

2.  集群配置

 在每个机器上去编辑下面的配置文件。

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 

 

你可能感兴趣的:(mongodb)