千家信息网

MongoDB复制集配置步骤

发表于:2024-10-19 作者:千家信息网编辑
千家信息网最后更新 2024年10月19日,1. 配置三个节点的配置文件(/etc/28001.conf)28002.conf#bind_ip=192.168.20.144port=28001logpath=/data/db/mongodb_l
千家信息网最后更新 2024年10月19日MongoDB复制集配置步骤

1. 配置三个节点的配置文件(/etc/28001.conf

28002.conf

#bind_ip=192.168.20.144

port=28001

logpath=/data/db/mongodb_log/28001.log

logappend=true

pidfilepath=/data/db/mongodb_data28001/28001.pid

oplogSize=500

dbpath=/data/db/mongodb_data28001

replSet=imooc

fork=true

28002.conf

#bind_ip=192.168.20.144

port=28002

logpath=/data/db/mongodb_log/28002.log

logappend=true

pidfilepath=/data/db/mongodb_data28002/28002.pid

oplogSize=500

dbpath=/data/db/28002

replSet=imooc

fork=true

28003.conf

#bind_ip=192.168.20.144

port=28003

logpath=/data/db/mongodb_log/28003.log

logappend=true

pidfilepath=/data/db/mongodb_data28003/28003.pid

oplogSize=500

dbpath=/data/db/28003

replSet=imooc

fork=true

2. 使用配置文件启动mongod服务

/usr/local/mongodb/bin/mongod -f /usr/local/mongodb/conf/28001.conf

/usr/local/mongodb/bin/mongod -f /usr/local/mongodb/conf/28002.conf

/usr/local/mongodb/bin/mongod -f /usr/local/mongodb/conf/28003.conf

3. 登录到运行的monogd机器

/usr/local/mongodb/bin/mongo 127.0.0.1:28001/admin

4. 配置复制集节点配置文件

config={_id : "imooc",members : [{_id : 1, host : "127.0.0.1:28001"},{_id : 2, host : "127.0.0.1:28002"},{_id : 3, host : "127.0.0.1:28003"}]}

5. 查看节点成员

config.members

6. 设置3节点为仲裁节点

config.members[3] ={"_id":3,"host":"127.0.0.1:28003",arbiterOnly:true}

或在主节点中输入:

rs.addArb("127.0.0.1:28003")

7. 初始化副本集

rs.initiate(config) (如果初始化一直报已经初始化过,需要将数据备份后,重新创建主节点。)

8. 重新加载config参数(每次修改config之后都要reconfig一次,但reconfig会使复制集的连接短暂断开,要避免在生产环境中随便执行,需要维护时间窗口才可执行)

rs.reconfig(cnf,{force:true})

(运行此命令必须在primary节点,如果不是显示primary,可能是other,则需要加上force的参数)

9. 查看复制集状态

rs.status()

10. mongodb的前端引用程序是通过isMaster命令来区分主从节点的(隐藏节点可以通过rs.status()看到其信息,而rs.isMaster是没法看到的)

rs.isMaster()

维护:

添加副本,在登录到主节点下输入:

rs.add("ip:port")

删除副本

rs.remove("ip:port")

(前提是这个ip:port必须是使用了同一个relpSet名称的mongodb实例即可)

导入原有数据后,导入命令

mongorestore -h 127.0.0.1:12345 -d syt --directoryperdb /mnt/mongo_data/

其中/mnt/mongo_data为要导入的json文件,后发现从节点都变成recovering状态。

问题原因
出现这个问题的原因主要是secondary节点同步oplog的速度追不上primary几点的速度,造成一直处于recovering状态。

解决办法:
首先停掉从节点mongod进程,然后删除目录(rs)下面所有的数据,然后重启mongod进程,这里有一点需要注意,如果有arbitermongod进程也需要停掉,启动的时候,先启动replSetmongod进程,再启动arbitermongod进程,启动之后,会自动由recovering状态切换为startup2状态,最后切换为secondary状态

第二种办法就是先将recovering节点下的data目录删除,再将primary里的data都拷贝到该节点下,再重启就好了!操作前,务必要停止所有的mongodb数据库!

可以看到,在从节点使用show tables 报错,显示"此节点非主节点,从节点的ok状态是失败的"。如果需要在从节点读取数据的话,需要将slave做设置:


rs.slaveOk(true)

再执行show tables就可以成功了。

模拟宕机:

在主节点执行:db.shutdownServer()

出现报错"errmsg" : "shutdown must run from localhost when running db without auth",

此报错说明在没有开启验证的情况下需要到localhost下执行,如果启动配置文件里指定了bin_ip,则只能通过bin_ip去执行,这里我们没法登录localhost执行,只能通过kill的方式。

通过查看ps -ef|grep ****查找到对应进程号

使用kill -2 **** (不到万不得已不建议使用kill来关闭进程实例,即使是要使用,也要用较温和的方式kill -2 {SIGINT} 的方式来关闭, kill -2 会把实例中所有队列的进程都关闭后再关闭实例)

关闭之后测试:

查看原先主节点,敲enter已经出现报错

查看原先从节点,在两个从节点中敲enter,可发现有一个节点已经变为PRIMARY

通过show log rs可以看到节点的切换情况。

MongoDB Enterprise imooc:PRIMARY> show log rs

2017-10-30T01:53:15.617-0700 I REPL [replExecDBWorker-0] New replica set config in use: { _id: "imooc", version: 1, protocolVersion: 1, members: [ { _id: 1, host: "127.0.0.1:28001", arbiterOnly: false, buildIndexes: true, hidden: false, priority: 1.0, tags: {}, slaveDelay: 0, votes: 1 }, { _id: 2, host: "127.0.0.1:28002", arbiterOnly: false, buildIndexes: true, hidden: false, priority: 1.0, tags: {}, slaveDelay: 0, votes: 1 }, { _id: 3, host: "127.0.0.1:28003", arbiterOnly: false, buildIndexes: true, h


2017-10-30T01:53:15.617-0700 I REPL [replExecDBWorker-0] transition to STARTUP2

2017-10-30T01:53:15.618-0700 I REPL [rsSync] transition to RECOVERING

2017-10-30T01:53:15.619-0700 I REPL [rsSync] transition to SECONDARY

2017-10-30T01:53:15.621-0700 I REPL [ReplicationExecutor] Member 127.0.0.1:28001 is now in state SECONDARY

2017-10-30T01:53:20.624-0700 I REPL [ReplicationExecutor] Member 127.0.0.1:28003 is now in state SECONDARY

2017-10-30T01:53:25.625-0700 I REPL [ReplicationExecutor] Member 127.0.0.1:28001 is now in state PRIMARY

2017-10-30T02:13:53.329-0700 I REPL [rsBackgroundSync] could not find member to sync from

2017-10-30T02:14:01.816-0700 I REPL [ReplicationExecutor] transition to PRIMARY

2017-10-30T02:14:03.033-0700 I REPL [rsSync] transition to primary complete; database writes are now permitted

(待验证)

如果出现有一个节点找不到oplog(通过日志看出),可通过将主节点的oplog 复制到从节点上

1. 备份出来:
./mongodump --port 28011 -d local -c oplog.rs -o /opt/backup/0706local/

2. 恢复到另外一台单节点MONGODB服务器

./mongorestore --port 28011 -d temp_local -c shard1_oplog --dir /opt/backup/0706local/local/oplog.rs.bson

如果恢复时出现报错Failed: error connecting to db server: no reachable servers

…………….

…………..

如果出现有一个节点有问题,删除monogd.lock 在启动时加上-repair,再启动还是启动不了,而且只是作为一个不存储数据的仲裁节点的话,最简单粗暴的方法是通过将节点下的data数据都删除,然后再重启,则可启动成功。


节点 进程 数据 状态 配置 文件 实例 副本 命令 方式 问题 切换 登录 成功 办法 原因 参数 备份 情况 目录 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 软件开发最火的语言 交控科技工业互联网 新乡佳迅网络技术 网络安全域管理系统 网络安全的威胁不包括什么 我的世界口袋妖怪服务器价格指令 南京恒山系列鲲鹏服务器什么价格 软件开发uml图形有哪些 嵌入式数据库技术教学大纲 乙方删除数据库需要付法律责任吗 小李老师谈互联网科技 贵州交警app数据库异常 以下关于数据库的描述错误的是 redis从服务器配置 网络安全学情分析调查问卷 孙绍宁网络安全 丰台戴尔服务器回收价格表 服务器制作企业设备材料管理系统 数据库的装填因子 套号和引入数据库 网络安全不是一个 如何查询国外数据库资料 江西省青少年网络安全科技大赛 广州门禁软件开发费用 贵州交警app数据库异常 服务器如何备份 福师大数据库的题和答案 信息安全中的网络安全包括内容 数据库信息安全 四川一佰分网络技术有限公司
0