+
80
-

mongodb副本怎么设置?

mongodb副本怎么设置?与主从复制有什么不同?

网友回复

+
0
-

mongodb副本集(Replica Set)是一组MongoDB实例组成的集群,由一个主(Primary)服务器和多个备份(Secondary)服务器构成。

通过复制(Replication),将数据的更新由Primary推送到其他实例上,在一定的延迟之后,每个MongoDB实例维护相同的数据集副本。

通过维护冗余的数据库副本,能够实现数据的异地备份,读写分离和自动故障转移。

安装

我们准备3台centos7.4服务器,IP段 192.168.0.128 - 130 ,下面的配置在多台服务器中相同

1:下载 mongodb-linux-x86_64-3.4.12 文件,上传到linxu服务器,并解压,改名,然后配置环境变量

2:解压和重命名:tar -xvzf mongodb-linux-x86_64-3.4.12 mv mongodb-linux-x86_64-3.4.12 mongodb

3:把mongodb配置到环境变量中:

vi /etc/profile

export MONGODB_HOME=/usr/local/mongodb

export PATH=$MONGODB_HOME/bin:$PATH

# 使立即生效

source /etc/profile 4:在重命名mongodb文件夹中创建存放配置文件的目录和存放数据的目录 mkdir -p /usr/local/mongodb/conf mkdir -p /usr/local/mongodb/data/data mkdir -p /usr/local/mongodb/data/log mkdir -p /usr/local/mongodb/rs 5:在mongodb/conf 下创建mongodb.conf文件,最新版的mongodb支持yaml语法 systemLog: destination: file logAppend: true path: /usr/local/mongodb/data/log/mongod.log storage: dbPath: /usr/local/mongodb/data/data journal: enabled: true processManagement: fork: true # 后台启动fork and run in background pidFilePath: /usr/local/mongodb/data/log/mongod.pid # location of pidfile # network interfaces net: port: 27017 bindIp: 0.0.0.0 # Listen to local interface only, comment to listen on all interfaces. security: authorization: enabled clusterAuthMode: keyFile keyFile: /usr/local/mongodb/rs/keyfile replication: replSetName: zypcy 在 mongodb/rs/ 执行:使用 openssl生成一个key文件, openssl rand -base64 741 > keyfile

给 keyfile 文件设置权限 chmod 600 keyfile ,然后把keyfile文件传到各个服务器mongodb/rs 文件夹下

6:启动与停止mongodb 启动:mongod -f /usr/local/mongodb/conf/mongodb.conf 停止:mongod -f /usr/local/mongodb/conf/mongodb.conf --shutdown 以上配置在多台服务器中同时配置好,并启动mongodb 7、配置只需要登录任意一台配置服务器,进行初始化副本集即可 进入mongodb中进行配置副本集 连接: mongo config变量 , 定义副本集配置,第三个节点的 “arbiterOnly”:true 代表其为仲裁节点 config = { _id : "zypcy", members : [ {_id : 0, host : "192.168.0.128:27017" }, {_id : 1, host : "192.168.0.129:27017" }, {_id : 2, host : "192.168.0.130:27017" , arbiterOnly: true} ] } 初始化副本集:rs.initiate(config) , 出现 { "ok" : 1} 表示副本集配置成功 查看副本集: rs.status() 说明:"_id" : "configs"应与配置文件中配置的 replicaction.replSetName 一致,"members" 中的 "host" 为三个节点的 ip 和 port

先进入admin数据库,创建root用户,再创建目标数据库

use admin

db.createUser({user:"admin",pwd:"admin",roles:[{role:"root",db:"admin"}]}) db.auth("admin","admin")

再在业务数据库中创建用户 (要注意的是“dbAdmin”其实是没有读写权限的)

use ai db.createUser({user:"zhuyu",pwd:"zhuyu",roles:[{role:"dbAdmin",db:"ai"},{role:"readWrite",db:"ai"}]})

8:测试插入数据 use ai db.users.insert({name:“zhuyu”}); 这样就会在其他几个副本都插入数据

分别到其他几个去查数据可以查到,但会报not master slaveOk=false这样的错,莫认是不可读,需要设一下:

使用命令;db.getMongo().setSlaveOk();就可以了
我知道答案,我要回答