mongodb centos7,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
为什么PostgreSQL比MongoDB还快
PostgreSQL9.4带来了全新的NoSQL特性,并且根据EnterpriseDB的测试,其加载,插入和查询的性能都已经几倍于MongoDB了。
虽然我是PG的铁杆粉丝,但是关系数据库背负了ACID的重型装甲,在性能上居然能打败轻装上阵的NoSQL数据库总觉得有点离谱。
所以我在自己的环境里验证了一下EnterpriseDB的测试结果,并且小探一下PG取胜的原因。
1. EnterpriseDB的测试结果
以下是EnterpriseDB的测试结果(数据量为5000万)
(还可以参考这篇译文: )
2.我的验证结果
测试观点
为了使测试结果更加单纯,我准备单纯比拼CPU消耗(尽量排除IO和网络的干扰),设定以下测试条件。
1)所有数据都要放进内存
2)C/S都跑在同一台单机上
所以,只在单机上进行10万条小数据量的测试。
注)EnterpriseDB的测试环境是32G内存的Amazon Web Services M3.2XLARGE实例,总数据量超过内存了。
测试环境
测试环境为个人PC上的VMware虚拟机
PC
CPU:Intel Core i5-3470 3.2G(4核)
MEM:6GB
SSD:OCZ-VERTEX4 128GB(VMware虚拟机所在磁盘,非系统盘)
OS:Win7
VMware虚拟机
CPU:4核
MEM:1GB
OS:CentOS 6.5
PG:PostgreSQL 9.4.0(shared_buffers= 428MB,其他是默认值)
MG:MongoDB 3.0.2
测试步骤
测试步骤非常简单,可以参考:
但是,在测试前,有些东西要改。
1)把数据量减小到10万
pg_nosql_benchmark-master/pg_nosql_benchmark:
declare-a json_rows=(10000000)
==>
declare-a json_rows=(100000)
2)修改mongo的一处脚本(注)
pg_nosql_benchmark-master/lib/mongo_func_lib.sh:
collectionsize="$(echo${output}|awk-F","'{print$5}'|cut-d":"-f2)"
==>
collectionsize="$(echo${output}|awk-F","'{print$6}'|cut-d":"-f2)"
注)pg_nosql_benchmark原来是基于MongoDB 2.6设计的,MongoDB 3.0的db.json_tables.stats()输出可能变了,所以这边要修改一下。
Linux Centos 7安装MongoDB(简单!详细!)
Linux CentOS 7安装MongoDB指南
为了简化安装流程,我们可以使用Yum源安装MongoDB。以下为几个常用的步骤:
在Linux CentOS 7中,创建一个.repo文件来生成MongoDB的源,添加以下配置信息来确保能够获取MongoDB的最新版本。
详细步骤如下:
1.使用Yum安装MongoDB,执行如下命令进行安装:
执行以下命令来验证MongoDB安装是否成功:
启动MongoDB服务,并检查默认端口是否为27017,以及数据库是否已成功安装。
在安装MongoDB后,我们可以通过以下步骤来配置数据库的连接设置,确保其可以远程访问:
修改配置文件mongodb.conf,将绑定IP从默认的127.0.0.1更改为0.0.0.0,以允许远程连接,然后重启mongodb服务。
开放对外端口,确保MongoDB服务可以正常接收远程连接请求。这里提供两种方法:
完成以上步骤后,我们可以通过以下命令远程连接MongoDB:
默认情况下,MongoDB使用admin数据库中的root用户作为超级账号。其他权限角色包括读、读写、dbAdmin、userAdmin等,具体说明如下:
root:仅在admin数据库中可用,拥有超级账号权限。
Read:允许用户读取指定数据库。
ReadWrite:允许用户读写指定数据库。
dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile。
userAdmin:允许用户向system.users集合写入,用于创建、删除和管理用户。
clusterAdmin:仅在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。
readAnyDatabase:仅在admin数据库中可用,赋予用户所有数据库的读权限。
readWriteAnyDatabase:仅在admin数据库中可用,赋予用户所有数据库的读写权限。
userAdminAnyDatabase:仅在admin数据库中可用,赋予用户所有数据库的userAdmin权限。
dbAdminAnyDatabase:仅在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。