centos mongodb 集群?mongodb可视化管理工具

大家好,今天来为大家解答centos mongodb 集群这个问题的一些问题点,包括mongodb可视化管理工具也一样很多人还不知道,因此呢,今天就来为大家分析分析,现在让我们一起来看看吧!如果解决了您的问题,还望您关注下本站哦,谢谢~

总结遇到的几次MongoDB副本集初始化失败问题

前言:

在之前搭建MongoDB集群中,遇到过几次小问题引起的初始化副本集失败,都是之前初学时踩的坑,做个小结。

1、IP错误引起MongoDB副本集初始化失败

这个错误在另一篇文章已经描述过,这里略过不赘述。

详情见博客:IP错误引起MongoDB副本集初始化失败

2、PRIMARY与SECONDARY主机mongodb-keyfile文件内容不一致,导致在PRIMARY上添加副本集失败

问题描述:

搭建另外一个MongoDB副本集,主机和角色分配如下:

主机IP

角色

系统

131.10.11.106

PRIMARY

centos7

131.10.11.111

SECONDARY

centos7

131.10.11.114

SECONDARY

centos7

MongoDB server version: 3.4.10.1

在PRIMARY上添加SECONDARY主机131.10.11.111,出现下面的报错:

mongotest:PRIMARY> rs.add("131.10.11.111:27017")

{

"ok": 0,

"errmsg":"Quorum check failed because not enough voting nodes responded; required 2 but only the following 1 voting nodes responded: 131.10.11.106:27017; the following nodes did not respond affirmatively: 131.10.11.111:27017 failed with Authentication failed.",

"code": 74,

"codeName":"NodeNotFound"

}

原因分析:

经过排查,发现131.10.11.111主机的mongodb-keyfile和主节点不一致,并且在131.10.11.111主机的配置文件mongo.conf文件没有配置安全认证,所以导致了初始化失败

解决方法:

1、将PRIMARY节点上的mongodb-keyfile文件复制到备节点131.10.11.111上,并且修改权限为400

2、并且修改配置文件/etc/mongodb/mongo.conf如下:

[root@mongodb111 mongodb]# cat mongo.conf

systemLog:

destination: file

path:"/opt/mongodbdata/mongod.log"

logAppend: true

storage:

journal:

enabled: true

dbPath:/opt/mongodbdata

setParameter:

enableLocalhostAuthBypass: true

processManagement:

fork: true

pidFilePath:"/opt/mongodbdata/mongod.pid"

replication:

replSetName: mongotest

#添加下面几行:

security:

authorization: enabled

keyFile:"/etc/mongodb/mongodb-keyfile"

[root@mongodb111 mongodb]#

重启131.10.11.111机器mongodb,然后重新在PRIMARY上执行 rs.add("131.10.11.111:27017"),成功。

3、备节点配置文件没有配置replSet,导致添加副本集失败

问题描述:

这个问题和问题2是在同一个环境中遇到的,在106主机上添加114主机的时候,报下面的错误:

mongotest:PRIMARY> rs.add("131.10.11.114:27017")

{

"ok": 0,

"errmsg":"Quorum check failed because not enough voting nodes responded; required 2 but only the following 1 voting nodes responded: 131.10.11.106:27017; the following nodes did not respond affirmatively: 131.10.11.114:27017 failed with not running with--replSet",

"code": 74,

"codeName":"NodeNotFound"

}

原因分析:

根据提示“the following nodes did not respond affirmatively: 131.10.11.114:27017 failed with not running with--replSe”,查看了114主机的配置文件mongo.conf,发现这是因为备节点上的配置文件里面没有配置副本集,所以无法添加

解决方法:

修改备节点的/etc/mongodb/mongo.conf配置文件如下,加上副本集配置:

[root@mongodb114 mongodb]# cat mongo.conf

systemLog:

destination: file

path:"/opt/mongodbdata/mongod.log"

logAppend: true

storage:

journal:

enabled: true

dbPath:/opt/mongodbdata

setParameter:

enableLocalhostAuthBypass: true

processManagement:

fork: true

pidFilePath:"/opt/mongodbdata/mongod.pid"

security:

authorization: enabled

keyFile:"/etc/mongodb/mongodb-keyfile"

replication:#加上副本集配置,

replSetName: mongotest#name要注意和主节点上保持一致

[root@mongodb114 mongodb]#

重启131.10.11.114机器mongodb,然后重新在PRIMARY上执行 rs.add("131.10.11.114:27017"),成功

4、bindIp默认127.0.0.1,导致MongoDB副本集初始化失败

问题描述:

有一次搭建一个MongoDB副本集,主机和角色分配如下:

主机IP

角色

系统

10.0.0.101

PRIMARY

centos7

10.0.0.102

SECONDARY

centos7

10.0.0.103

SECONDARY

centos7

MongoDB server version: 4.0.2

在PRIMARY主机10.0.0.101上加入SECONDARY主机10.0.0.102的时候出现这个错误:

添加从节点失败:

CrystalTest:PRIMARY> rs.add("10.0.0.102:27017")

{

"operationTime": Timestamp(1539054715, 1),

"ok": 0,

"errmsg":"Quorum check failed because not enough voting nodes responded; required 2 but only the following 1 voting nodes responded: 10.0.0.101:27017; the following nodes did not respond affirmatively: 10.0.0.102:27017 failed with Error connecting to 10.0.0.102:27017:: caused by:: Connection refused",

"code": 74,

"codeName":"NodeNotFound",

"$clusterTime":{

"clusterTime": Timestamp(1539054715, 1),

"signature":{

"hash": BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),

"keyId": NumberLong(0)

}

}

}

原因分析:

看到“failed with Error connecting to 10.0.0.102:27017:: caused by:: Connection refused”的时候很疑惑,因为10.0.0.102主机上的27017端口是OK的,服务也能正常使用,防火墙什么的都是关掉了的,尝试在PRIMARY主机10.0.0.101主机上telnet,发现不通:

[root@test101~]# telnet 10.0.0.102 27017

Trying 10.0.0.102...

telnet: connect to address 10.0.0.102: Connection refused

然后到102主机上查看端口,发现bindIp是127.0.0.1,问题应该就是这里了。bindIp是127.0.0.1,因此导致了10.0.0.101主机连不过去:

[root@test102~]# netstat-tlunp|grep mongo

tcp 0 0 127.0.0.1:27017 0.0.0.0:* LISTEN 1065/mongod#显示的是127.0.0.1:27017

解决方法:

修改102主机的mongo.conf加入“bindIp: 0.0.0.0”,然后重启102主机的MongoDB

[root@test102 bin]# cat/etc/mongodb/mongo.conf

systemLog:

destination: file

path:"/opt/mongodbdata/mongod.log"

logAppend: true

storage:

journal:

enabled: true

dbPath:/opt/mongodbdata

setParameter:

enableLocalhostAuthBypass: true

processManagement:

fork: true

pidFilePath:"/opt/mongodbdata/mongod.pid"

replication:

replSetName: CrystalTest

security:

authorization: enabled

keyFile:"/etc/mongodb/mongodb-keyfile"

net:

port: 27017

bindIp: 0.0.0.0#加入这一行

再查看端口:

[root@test102 mongodb]# netstat-tlunp|grep 27017

tcp 0 0 0.0.0.0:27017 0.0.0.0:* LISTEN 3433/mongod#变成了0 0.0.0.0:27017

[root@test102 mongodb]#

然后在101主机上telnet,可以连过去了:

[root@test101~]# telnet 10.0.0.102 27017

Trying 10.0.0.102...

Connected to 10.0.0.102.

Escape character is‘^]‘.

^C^C

Connection closed by foreign host.

[root@test101~]#

重新在PRIMARY主机10.0.0.101添加102主机,就成功了:

CrystalTest:PRIMARY> rs.add("10.0.0.102:27017")

{

"ok": 1,

"operationTime": Timestamp(1539056959, 1),

"$clusterTime":{

"clusterTime": Timestamp(1539056959, 1),

"signature":{

"hash": BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),

"keyId": NumberLong(0)

}

}

}总结遇到的几次MongoDB副本集初始化失败问题

标签:headcentosnectelnetnodalt修改mongodtry

使用ansible一键部署MongoDB分片集群

Mongodb部署信息:

os: centos7.7 x64配置好NTP,防火墙默认不做任何限制.

mongos部署两个点,config3个点,和3个分片集群(每个分片一主一副一仲裁)

注意:因为判断逻辑的问题,不要在任何节点同时运行两种服务的主点

ansible的hosts文件配置:

环境变量全部都在这里设置,需要都写入到ansible的hosts文件里

变量中

server_1_ip都设置为主点

server_2_ip都设置为副点

server_3_ip都设置为仲裁节点(config server没有仲裁节点,但是也要写,不然mongos的配置文件模板会报错)

这些IP的配置后面在初始化时会用到.

ansible文件夹结构:

首先是模板文件:

mongod.conf.mongos.j2 mongos的配置文件模板

mongod.conf.normal.j2 shard server和config server的配置文件模板

mongod.service.j2 service文件模板

mongo.key直接手动生成,用户MongoDB集群之间的加密连接,记得权限改为600

passwd.j2用于配置MongoDB的root用户名密码

执行:

按提示输入服务器密码

包含了系统优化相关设置,注意中间会重启一次让一些系统优化项生效

注意:因为判断逻辑的问题,不要在任何节点同时运行两种服务的主点

执行:

如果执行有问题建议多检查变量配置

全部完成后可以验证一下集群环境:

登陆分片集群:

分片的状态显示正常

登陆mongos

可以看到mongos的状态也正常,分片也全部都添加进去.全部安装至此完成.

一键删除MongoDB安装及相关数据,方便重装...

一键启动整个MongoDB集群

一键停止所有MongoDB集群

以上就是ansible在MongoDB的一键部署脚本,而且附带了对服务器的优化相关配置

MongoDB复制集/副本集(Replica Set)搭建

mongo副本集/复制集是mongo高可用性特征之一,是有自动故障恢复功能的主要集群。由一个Primary节点和一个或多个Secondary节点组成。

复制是在多台服务器之间同步数据的过程,由一组Mongod实例(进程)组成,包含一个Primary节点和多个Secondary节点

Mongodb Driver(客户端)的所有数据都写入Primary,Secondary从Primary同步写入的数据

通过上述方式来保持复制集内所有成员存储相同的数据集,提供数据的高可用

Failover(故障转移,故障切换,故障恢复)

Redundancy(数据冗余)

避免单点,用于灾难时恢复,报表处理,提升数据可用性

读写分离,分担读压力

对用户透明的系统维护升级

主节点记录所有的变更到oplog日志

辅助节点(Secondary)复制主节点的oplog日志并且将这些日志在辅助节点进行重放(做)

各个节点之间会定期发送心跳信息,一旦主节点宕机,则触发选举一个新的主节点,剩余的辅助节点指向新的主

10s内各辅助节点无法感知主节点的存在,则开始触发选举

通常1分钟内完成主辅助节点切换,10-30s内感知主节点故障,10-30s内完成选举及切换

用户恢复数据,防止数据丢失,实现灾难恢复

人为误操作导致数据删除,程序Bug导致数据损坏等

首要复制节点,由选举产生,提供读写服务的节点,产生oplog日志

备用(辅助)复制节点,Secondary可以提供读服务,增加Secondary节点可以提供复制集的读服务能力

在故障时,备用节点可以根据设定的优先级别提升为首要节点。提升了复制集的可用性

Arbiter节点只参与投票,不能被选为Primary,并且不从Primary同步数据

Arbiter本身不存储数据,是非常轻量级的服务。

当复制集成员为偶数时,最好加入一个Arbiter节点,以提升复制集可用性

Mongodb版本3.0以上,三台服务器均为64位

三台服务器  -------- Primary(Centos7)、 Secondary(Centos7)、 Secondary(Debian8);架设IP分别为 192.168.1.1、1.2、 1.3

三台服务器关闭防火墙  -------- systemctl stop firewalld.service

三台服务器修改mongo配置文件  -------- vi /etc/mongod.conf 

    侦听地址除了 localhost外再加上服务器IP;设置复制集名字(RepliSetName)。

开启mongod服务: mongod

三台服务器mongo各自初始化: rs.initiate()

Primary上副本集配置:

rsconf(配置名称,可随意取)={_id:"副本集名",member:[{_id:0,host:"IP:port",priority:2},{_id:1,host:"IP:port",priority:1},{_id:2,host:"IP:port",priority:1}]}

在初始化:rs.initiate(变量名,如下面的config)

Secondary上配置:

rs.slaveOk()  #承认自己是Secondary

三台服务器上互相添加副本集成员:

rs.add("IP:port"),如在Primary上 rs.add("192.168.1.2:27017"), rs.add("192.168.1.3:27017")

查看状态

rs.status()

3、rs(replication set)常用命令:

初始化副本集 ---- rs.initiate()

mongo查看状态---- rs.status()

初始化副本集配置

rsconf={_id:"rs0",

members: [{

_id: 0,

host:":27017"}]}

rs.initiate( rsconf)

验证副本集配置 ---- rs.config()

增加副本集成员 ---- rs.add("Ip:port")

移除副本集成员 ---- rs.remove("IP:port")  #此步骤在Primary上操作

改变成员变量的优先级

cfg= rs.conf()

cfg.members[0].priority= 3

cfg.members[1].priority= 1

cfg.members[2].priority= 2

rs.reconfig(cfg)

配置延迟副本集

cfg= rs.conf()

cfg.members[0].priority= 0

cfg.members[0].hidden= true

cfg.members[0].slaveDelay= 3600

rs.reconfig(cfg)

# 07/03/2017

阅读剩余
THE END