mongodb
副本集集群
mongo 常用命令
了解mongo
MongoDB增删改查基本操作
MongoDB日常运维之用户管理
本文档使用 MrDoc 发布
-
+
首页
副本集集群
副本集(Replication )是一组维护相同数据集合的 mongod 实例。副本集包含了若干个数据节点和仲裁节点(Arbiter )。在数据节点中,有且仅有一个成员为主节点(Primary),其他节点为从节点(Secondary)。 ![](/media/202307/2023-07-04_014936_7881720.5544038437874627.png) * 主节点(Primary) 副本集中唯一的节点,支持读写操作。写入操作一般会记录在 oplog 中。 * 从节点(Secondary) 数据节点,拥有和主节点一样的数据副本,一般情况下只读。从节点会异步的从主节点的 oplog 中同步数据。从节点可不参与投票(priority: 0) * 仲裁节点(Arbiter ) 一个仅用于投票的节点,不存储数据副本,在资源紧张的情况下可部署,资源充足下不建议。 ## mongo 下载 CentOS 7.0 x64 下载地址列表 https://www.mongodb.com/download-center/community/releases ### mongo 5.0 Server Package: mongodb-org-server-5.0.18-1.el7.x86_64.rpm https://repo.mongodb.org/yum/redhat/7/mongodb-org/5.0/x86_64/RPMS/mongodb-org-server-5.0.18-1.el7.x86_64.rpm Mongos Package: mongodb-org-mongos-5.0.18-1.el7.x86_64.rpm https://repo.mongodb.org/yum/redhat/7/mongodb-org/5.0/x86_64/RPMS/mongodb-org-mongos-5.0.18-1.el7.x86_64.rpm Mongo Shell Package: mongodb-org-shell-5.0.18-1.el7.x86_64.rpm https://repo.mongodb.org/yum/redhat/7/mongodb-org/5.0/x86_64/RPMS/mongodb-org-shell-5.0.18-1.el7.x86_64.rpm ### mongo 6.0 Server Package: mongodb-org-server-6.0.7-1.el7.x86_64.rpm https://repo.mongodb.org/yum/redhat/7/mongodb-org/6.0/x86_64/RPMS/mongodb-org-server-6.0.7-1.el7.x86_64.rpm Mongos Package: mongodb-org-mongos-6.0.7-1.el7.x86_64.rpm https://repo.mongodb.org/yum/redhat/7/mongodb-org/6.0/x86_64/RPMS/mongodb-org-mongos-6.0.7-1.el7.x86_64.rpm ## 先安装 mongodb rpm包 ## 三台均先启动mongodb ``` systemctl daemon-reload systemctl enable mongod.service systemctl start mongod.service systemctl --type=service --state=active | grep mongod firewall-cmd --add-port=27017/tcp --permanent --zone=public firewall-cmd --reload ``` ## 主节点生成授权认证keyfile文件并拷贝到其它节点 ``` openssl rand -base64 756 > /var/lib/mongo/access.keyfile chown mongod:mongod /var/lib/mongo/access.keyfile chmod 600 /var/lib/mongo/access.keyfile scp -rp /var/lib/mongo/access.keyfile root@graylog02:/var/lib/mongo/ scp -rp /var/lib/mongo/access.keyfile root@graylog03:/var/lib/mongo/ ``` ## vi修改/etc/mongod.conf 以主节点为例,修改配置文件 ``` vi /etc/mongod.conf systemLog: #日志输出的目标指定为文件 destination: file #日志存放目录 path: "/data/replica_sets/myrs_27017/log/mongod.log" #当mongos或mongod实例重新启动时,mongos或mongod会将新条目附加到现有日志文件的末尾 logAppend: true storage: #mongod实例存储其数据的目录 dbPath: "/data/replica_sets/myrs_27017/data/db" journal: #启用或禁用持久性日志已确保数据文件保持有效和可恢复 enabled: true processManagement: #启用在后台运行mongos或mongod进程的守护进程模式 fork: true #指定用于保存mongos或mongod进程的进程ID的文件位置 pidFilePath: "/data/replica_sets/myrs_27017/log/mongod.pid" net: port: 27017 bindIp: 192.168.31.211 # 可以为 0.0.0.0 security: keyFile: /var/lib/mongo/access.keyfile replication: replSetName: graylog-rs ## 定义副本集的名称 ``` ## 初始化集群 这里为了本地能登录mongo ``` 先将bindIp: 192.168.31.211修改为bindIp: 0.0.0.0 并重启服务 systemctl restart mongod.service #如果 已经设定 bindIp为 0.0.0.0 省略该步骤 ``` ## 输入mongo进数据库 ``` # mongo 命令进入 mongodb ,需要安装 mongo shell # 记得修改id 为 replSetName use admin rs.initiate( { _id : "graylog-rs", members: [ { _id: 0, host: "192.168.31.211:27017" }, { _id: 1, host: "192.168.31.212:27017" }, { _id: 2, host: "192.168.31.213:27017" } ] }) rs.status()查看集群状态 ``` ![](/media/202307/2023-07-04_014006_2227990.06121763183420803.png) ## 创建graylog数据库并设置密码 ### 修改admin用户密码 ``` use admin db.createUser({user: "admin", pwd: "Admin@2021", roles: ["root"]}) db.auth("admin","Admin@2021") ``` ### 创建graylog数据库并设置密码 ``` use graylog db.createUser({ user: "graylog", pwd: "Graylog2021", "roles" : [{ "role" : "dbOwner", "db" : "graylog" }, { "role" : "readWrite", "db" : "graylog" }] }) ``` ![](/media/202307/2023-07-04_014054_5509050.3977111341269608.png) ## 将主节点bindIp配置恢复并重启mongod服务 将graylog01的bindIp修改成192.168.31.211并重启服务 这时使用账号和密码登录mongo ![](/media/202307/2023-07-04_014227_0918520.8030680414643645.png) ## 验证集群状态 登录 mongo ![](/media/202307/2023-07-04_014603_4707230.7878006709488737.png) ## 副本集常用命令 ``` # 副本集初始化 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() ``` ## 副本集设置节点的优先级 ``` 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> } ] }) ```
admin
2023年7月4日 02:03
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
分享
链接
类型
密码
更新密码