MongoDB--Linux下搭建的副本集集群(踩过的坑,血和泪的教训)

MongoDB–Linux下搭建的副本集集群(踩过的坑,血和泪的教训)

一:环境准备

centOS6.7,mongoDB 3.6的安装包,三个配置好免密和时间同步的节点

二:安装步骤

1.上传安装包到三个节点

2.解压到指定文件夹

tar -zxvf [安装包]  -C  [指定目录]

3.创建日志存储文件和数据存储目录

mkdir data
mkdir logs
cd logs
touch mongod.log

4.创建配置文件

配置文件放在bin下面
sudo vi conf/mongodb.conf

写入以下内容
dbpath=/home/hadoop/apps/mongodb/data  #数据存储目录
fork = true   #守护线程运行
port = 27017  #端口号
bind_ip=0.0.0.0   #绑定ip,一定要是0.0.0.0
logpath =/home/hadoop/apps/mongodb/logs/mongod.log  #日志存储文件,一定要是文件,不是文件夹
logappend =true #以追加的方式写日志文件
replSet= cqsm1   #复制集名称,自定义
smallfiles =true  #以小文件存储

5.在其他的两个节点也创建对应的文件目录和文件

6.将配置文件发送给其他两个节点

scp -r conf hadoop@hadoop01:/home/mongodb/bin

三:启动

1.关闭防火墙

既要关闭iptables也要关闭seLinux,不然一定会报错

关闭iptable
sudo service iptables stop 

关闭seLinux
/etc/selinux/config
将SELINUX的值修改为disable,重启

如果没有关闭会报如下的错,显示无法通信

"errmsg" : "replSetInitiate quorum check failed because not all proposed set members responded affirmatively: 192.168.145.136:27017 failed with No route to host"
2.三个节点分别启动mongod服务

进入到mongodb的bin下面

./mongod -f conf/mongdn.conf   #以加载配置文件的方式启动,要指定conf的目录

三个节点都要启动,成功启动显示内容如下:

child process started successfully, parent exiting
4.进入其中一个客户端

进入客户端

mongo
创建配置文件:
config={
	"_id":"cqsm1",
    "members":[
        {"_id":0,"host":"192.168.2.101:27017"},
        {"_id":1,"host":"192.168.2.102:27017"},
        {"_id":2,"host":"192.168.2.103:27017"}
    ]
}

加载配置文件
rs.initiate(config)

如出现以下错误,检查其他节点的mongod服务是否开启,防火墙是否关闭
{
        "ok" : 0,
        "errmsg" : "replSetInitiate quorum check failed because not all proposed set members responded affirmatively: 192.168.2.102:27017 failed with Connection refused, 192.168.2.103:27017 failed with Connection refused",
        "code" : 74,
        "codeName" : "NodeNotFound"
}

成功启动应该是这样的:
{
        "ok" : 1,
        "operationTime" : Timestamp(1575431543, 1),
        "$clusterTime" : {
                "clusterTime" : Timestamp(1575431543, 1),
                "signature" : {
                        "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
                        "keyId" : NumberLong(0)
                }
        }
}
5.测试

只有主节点是可以读写的,如果读数据例如,show dbs ;show collections都会报错:

"errmsg" : "not master and slaveOk=false"  //这个是正常的

可以通过设置副本节点可以读
db.getMongo().setSlaveOk(); 

在主节点写入数据

cqsm>db.mongo.insert({"title":"aa"})
WriteResult({ "nInserted" : 1 })

当主节点宕机,副节点会自动变为主节点。

四:常见安装错误总结

1.data目录和log目录不对,要手动创建data文件夹和logs/mongodb.log文件,一个是文件一个是文件夹目录,不能搞错,错误:

child process failed, exited with error number 51
To see additional information in this output, start without the "--fork" option.

2.当节点错误方式关闭,再次启动mongod服务可能也会报错

错误:
child process failed, exited with error number 51
To see additional information in this output, start without the "--fork" option.

解决方案
删除 mongod.lock 文件和日志文件 mongodb.log.2014-11-17T06-55-20 ,如果有必要把 log日志全部删除
使用命令netstat -ntlp 查看mongod占用端口,使用kill -9 [PID]杀掉进程

3.初始化副本集的时候显示连接不上

错误:
{
        "ok" : 0,
        "errmsg" : "replSetInitiate quorum check failed because not all proposed set members responded affirmatively: 192.168.2.102:27017 failed with Connection refused, 192.168.2.103:27017 failed with Connection refused",
        "code" : 74,
        "codeName" : "NodeNotFound"
}

解决方案:
检查其他节点的mongod服务是否开启
是否关闭了iptable和seLinux
配置文件中的bind_ip=0.0.0.0写了没有

4.各个节点上的MongoDB的版本也一定要一致,不然会报错

"stateStr" : "(not reachable/healthy)"
  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值