MongoDB 副本集(3)

测试在次节点(Secondary)进行数据删除。是删除不了的。

fymongodb:SECONDARY> db.test.drop() 2019-04-19T21:48:38.140+0800 E QUERY [js] Error: drop failed: { "operationTime" : Timestamp(1555681711, 1), "ok" : 0, "errmsg" : "not master", "code" : 10107, "codeName" : "NotMaster", "$clusterTime" : { "clusterTime" : Timestamp(1555681711, 1), "signature" : { "hash" : BinData(0,"I+dFkOHcdqW+La7xvy8JFij+5CY="), "keyId" : NumberLong("6681517989155569665") } } } : _getErrorWithCode@src/mongo/shell/utils.js:25:13 DBCollection.prototype.drop@src/mongo/shell/collection.js:707:1 @(shell):1:1 配置副本集登录验证

副本集配置用户和密码,登录主节点,添加admin 用户。

> use admin switched to db admin > db.createUser({ user: "admin", pwd: "9toc7tpji8", roles: [{ role: "root", db: "admin" }] }) Successfully added user: { "user" : "admin", "roles" : [ { "role" : "root", "db" : "admin" } ] }

在主节点生成 keyflie 并复制到其它两个节点

# 生成 keyFile openssl rand -base64 90 -out /opt/mongodb/keyfile #并复制到其它两个节点 scp /opt/mongodb/keyfile fymongodb002:/opt/mongodb/ scp /opt/mongodb/keyfile fymongodb003:/opt/mongodb/

更改三个节点的 keyFile 文件权限和所有者

chmod 600 /opt/mongodb/keyfile # 一定要更改成 600 权限,否正会报错 chown mongodb:mongodb /opt/mongodb/keyfile # 更改文件所有者

更改三个节点的 mongodb_rep.yaml 配置文件,将 security 的参数 authorization 设置为 enabled,并配置

keyFile 的路径。

security: authorization: "enabled" keyFile: '/opt/mongodb/keyfile' clusterAuthMode: "keyFile"

然后依次重启 fymongodb001、 fymongodb002、 fymongodb003 。

# fymongodb001 systemctl restart mongodb # fymongodb002 systemctl restart mongodb # fymongodb003 systemctl restart mongodb

登陆 fymongodb001,我们使用 db.auth() 进行登陆验证。

fymongodb:PRIMARY> show dbs; fymongodb:PRIMARY> use admin switched to db admin fymongodb:PRIMARY> db.auth('admin','9toc7tpji8') 1 fymongodb:PRIMARY> show dbs; admin 0.000GB config 0.000GB local 0.000GB 三 、副本集维护 副本集成员如何以单节点启动

副本集当做单节点启动需要更改配置文件,主要的配置文件有以下几点:

注释副本集名称设置,replSet=fymongodb

更改端口

如果是分片储存的,那么还需要注释分片配置,添加 skipShardingConfigurationChecks = true。

然后我们执行维护完后,关闭节点

use admin db.shutdownServer()

然后还原原来的配置,然后作为副本集成员加入副本集。

副本集设置节点的优先级

如果我们想让某个节点成为主节点,或者是当主节点 down 了后,你想指定某个节点 优先级更高地成为 次节点。

cfg = rs.conf() cfg.members[0].priority = 0.5 cfg.members[1].priority = 0.5 cfg.members[2].priority = 1 rs.reconfig(cfg) 副本集使用备份数据进行启动 # 使用备份数据进行启动 mongod --dbpath /data/db # 删除 local 数据库 use local db.dropDatabase() # 指定副本集名称并以备份数据 启动 mongod --dbpath /data/db --replSet <replName> # 启动副本集 rs.initiate( { _id : <replName>, members: [ { _id : 0, host : <host:port> } ] }) 副本集数据量比较大时如何添加次节点

当副本集的数据量比较大的时候,我们添加新的节点的时候,如果使用初始化同步的话,会给主节点造成比较大的压力。我们有以下选择:

暂停当前副本集中的一个次节点,然后将 次节点的数据(data)复制到要新添加的节点的数据目录。然后再将两个节点启动。(建议先测试)

如果要复制数据文件,请确保您的副本包含local数据库的内容。

指定同步节点 rs.syncFrom(hostportstr),指定同步节点为次节点,默认的是同步节点 是主节点。

但是该设置在重新启动节点,或者同步指定的新节点的连接被关闭了,是会失效的。(建议先测试)

如果我们决定还是从主节点进行同步数据。

副本集延迟节点

延迟节点在此未记录,详细见官方文档。

副本集常用命令 # 副本集初始化 rs.initiate( { _id : "rs0", members: [ { _id: 0, host: "mongodb0.example.net:27017" }, { _id: 1, host: "mongodb1.example.net:27017" }, { _id: 2, host: "mongodb2.example.net:27017" } ] }) # 副本集添加成员 rs.add('mongodb3.example.net:27017') # 副本集添加仲裁节点 rs.addArb('mongodb4.example.net:27017') # 移除节点 rs.remove('hostportstr') # 查看当前的配置 rs.conf() # 查看各个节点状态和身份 rs.status() # 设定某个节点多少秒不可成为主节点 rs.freeze(secs) # 设置次节点从指定节点同步数据 rs.syncFrom(hostportstr) # 降低主节点为次节点,只能在主节点上运行 rs.stepDown([stepdownSecs, catchUpSecs]) # 查看帮助 rs.help() # 次节点执行,表示允许次节点读取数据 rs.slaveOk() # 判断当前节点是否是主节点 rs.isMaster() # 查看 Oplog 信息 rs.printReplicationInfo() # 查看副本集的次节点与主节点延迟 db.printSlaveReplicationInfo() # 移除原有副本集命令 use local db.system.replset.remove({}) # 关闭 mongodb进程服务 use admin db.shutdownServer() 四、注意事项

建议将副本集至少部署在3个可用区。

配置副本集成员,使用的是主机名而不是 ip,因为 ip 可能变动。

副本集包含奇数个投票成员。

错误问题

报错内容:

Failed global initialization: BadValue: replication.replSetName is not allowed when storage.indexBuildRetry is specified

storage 参数 indexBuildRetry 不能与 副本集共存,当开启 副本集的时候,就需要将indexBuildRetry 参数注释。

Changed in version 4.0: The setting cannot be used in conjunction with.

Linux公社的RSS地址https://www.linuxidc.com/rssFeed.aspx

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/5b57ab8d4f4723c3236b77c4f930147a.html