Mongodb 3.x 多副本集群配置

    xiaoxiao2021-03-25  99

    1主2从的模式在数据量不大的情况下完全能满足生产要求,所以考虑生产上使用mongodb首先应该是搭建3副本的集群。

    1. Mongodb多副本集群基本概念

    Mongodb在多副本集群(Replic set)中,提供了自动Failover机制。Replic set会自动选举一个可写的PRIMARY(Master),其他机器为SECONDARY(Slave)。如果PRIMARY不能提供服务时,会重新选举。具体原理

    2. 集群搭建步骤

    1)为每台机器配置HostName

    假设mongo集群搭建在如下3台机器上 172.16.48.101 172.16.48.102 172.16.48.103

    在/etc/hosts 文件中追加: 172.16.48.101 mongdb1.app.company 172.16.48.102 mongdb2.app.company 172.16.48.103 mongdb3.app.company

    2)配置文件

    port=27017 logpath=/mongodb/mongodb.log logappend=true dbpath=/mongodb/data fork=true replSet=rs0 #auth = true keyFile=/mongodb/etc/mongo.pass

    以上配置分发到3台服务器上。 replSet:集群名字 keyFile:集群间通讯密码文件,3台机器使用同样的文件

    3)创建keyFile

    openssl rand -base64 521 > /mongod/etc/mongo.pass chmod 600 /mongod/etc/mongo.pass

    将mongo.pass文件同步到3台机器/mongod/etc目录下。

    4)创建用户及权限

    step1. 选择一台机器(以101为例),修改配置文件,去掉集群相关的配置后启动mongod
    port=27017 logpath=/mongodb/mongodb.log logappend=true dbpath=/mongodb/data #fork=true #replSet=rs0 #auth = true #keyFile=/mongodb/etc/mongo.pass

    step2. 使用mongo客户端连接服务器后,创建admin账户,并给予userAdminAnyDatabase + clusterAdmin角色
    use admin db.createUser({ user: 'admin', pwd: 'admin', roles: [{ role: 'userAdminAnyDatabase', db: 'admin' }, { role: 'clusterAdmin', db: 'admin' }] })

    step3. 修改101机器的配置文件后重启mongod

    修改后配置文件如下

    port=27017 logpath=/mongodb/mongodb.log logappend=true dbpath=/mongodb/data fork=true replSet=rs0 auth = true keyFile=/mongodb/etc/mongo.pass

    ps. 关闭mongod的方法

    #操作系统kill命令 kill `ps -ef | grep mongo | grep -v grep | awk '{print $2}'` #客户端方式 use admin db.shutdownServer()

    step4. 启动并配置集群

    启动102,103后,使用mongo客户端连接101,并构建集群

    use admin db.auth('admin','admin') #使用admin登录 rs.initiate() #初始化集群 rs.add("mongdb2.app.company") #添加集群成员,使用hostname rs.add("mongdb3.app.company")

    step5. 验证集群

    分别登录101,102,103,可以看到 101 rs0:PRIMARY> 102 rs0:SECONDARY> 103 rs0:SECONDARY> 则说明集群已经搭建完毕,主从状态已经确定。

    step6. 设置从库可读

    默认SECONDARY是不可读的,在从库上执行如下命令

    use admin db.auth('admin','admin') db.getMongo().setSlaveOk()
    转载请注明原文地址: https://ju.6miu.com/read-11946.html

    最新回复(0)