mongo 集群(副本)搭建过程记录
最近搭建mongo集群,回忆总结,作以记录。
整个过程主要参考以下两篇文章,但是过程并不顺利,有些问题需要记录。
https://www.cnblogs.com/dba-devops/p/7130710.html
https://blog.csdn.net/thinktik/article/details/82118190
选择一台服务器,进行如下操作,最后再用scp命令复制到其他服务器,方便迅速。
我选择的二进制包的安装方式,先把tgz包上传到linux,然后解压。
然后创建文件夹data、logs、etc,分别用于存放mongo的数据、日志、配置文件。
logs目录下新建文件 touch mongo.log
etc目录下新建文件 mongo.conf
编辑vi mongo.conf
填写一下配置:
dbpath = /usr/mongodb/data logpath = /usr/mongodb/logs/mongo.log logappend = true journal = true quiet = true port = bind_ip = 0.0.0.0 # 改为0.0.0.0监听所有ip的访问 fork=true #副本集名称 replSet=tcl
由于第一次配置,不知道都要 配置写什么,参考了许多文文章,最终我的配置如上。其它文章中的一些配置最后导致mongo无法启动,具体报错就是说,配置中的 某个关键字 无法识别云云。具体环境具体对待吧。具体的话就要涉及到mongo配置只是的学习了。上述最基本的数据路径、日志路径、追加方式、端口、是否后台运行 等。
为了方便,吧mongo的环境变量配置一下,
#java export JAVA_HOME=/usr/java/jdk1..0_181-cloudera export CLASSPATH=.:$CLASSPATH:$JAVA_HOME/lib export PATH=$PATH:$JAVA_HOME/bin export PATH=$PATH:/usr/mongodb/detailFileMongoDBv4./:/usr/mongodb/detailFileMongoDBv4./bin
碰到一个问题,就是突然发现linux的各种命令失效了,提示 command not found。
原因就是环境变量写的有问题,导致系统环境变量失效。具体解决方案很多文章都有介绍,很容容易搜到。不再赘述。
使用scp命令拷贝mongo文件到其他服务器,并修改环境变量。
启动mongo服务器。到mongo文件目录下的bin目录下;
./mongod -f /usr/mongodb/etc/mongo.conf
-f 指定要使用的配置文件(就是上面自己配置的mongo.conf),启动mongo。
启动成功后可以使用ps查看状态
[root@master01 bin]# ps -ef|grep mongodb
root 7588 28412 0 09:54 pts/0 00:00:00 grep --color=auto mongodb
root 17932 1 0 Aug30 ? 00:18:02 ./mongod -f /usr/mongodb/etc/mongo.conf
接下来,我按照文章中步骤,准备往mongo中写入数据:
命令:mongo 进入mongo服务器,
1、创建副本集配置
config= {
"_id" : "tcl",
"members" : [
{
"_id" : 0,
"host" : "xxx.xx.xx.xx:27017"
},
{
"_id" : 1,
"host" : "xxx.xx.xx.xx:27017"
},
{
"_id" : 2,
"host" : "xxx.xx.xx.xx:27017"
}
]
}
2、 初始化副本集
> rs.initiate(config)
这一步,出现 "ok" : 1, ,表示成功,失败的话会有errormsg提示。成功表示副本集设置成功。
3、当前这台mongo是从机,我们可以再手动设置它为主机
tcl:SECONDARY> rs.isMaster()
4、查看副本集状态
tcl:PRIMARY> rs.status()
5、验证同步功能
# 主库建一个库和表并插入一条数据
tcl:PRIMARY> use testdb;
switched to db testdb
tcl:PRIMARY> db.synctable.insert({name:"验证"});
但是我这边执行失败了。提示异常 can't create user databases on a --configsvr instance"
具体原因也没搞明白,【有知道的小伙伴欢迎指正】加上mongo.conf当时一直在修改,所以决定终止mongo进程再重启。
接下来蛋疼的事情出现了,我想关闭mongo服务,但是由于对mongo并不了解,没有足够重视,直接老样子 kill -9 。这下坏了,mongo再也起不来了。一启动就报错:
couldn't connect to server 127.0.0.1:27017 src/mongo/shell/mongo.js:91
然后就搜索mongo异常关闭的处理办法,这个过程中才发现意识到,mongo不能kill -9 的重要性。
网上的办法大多都是删除data下的mongod.lock文件,还有重新指定数据目录的方式启动:
./mongod --dbpath=/usr/local/mongodb/data/db/ ,
这种方式的确能启动,但是当前窗口已关闭,一切照旧老样子,这肯定不行。
这篇文章中涵盖了上述办法:用作详细参考:https://blog.csdn.net/wangli61289/article/details/44459467
首先,data下的mongod.lock文件,肯定是要先删除掉的。然后,修复启动,指定配置文件的方式秀启动 :
./mongod -f /usr/mongodb/etc/mongo.conf --repair
如果不指定配置文件 修复启动,就会出现如下异常:mongo默认为数据目录在/mongo/data,所以找不到这个目录,报错。
'exception in initAndListen: NonExistentPath: Data directory /data/db not found., terminating'
还有,mongo的关闭,一定要先切换到admin库,再关闭。https://www.cnblogs.com/gaopeng527/p/5117188.html
> use admin;
switched to db admin
> db.shutdownServer();
Wed Nov 14 06:07:33 DBClientCursor::init call() failed
Wed Nov 14 06:07:33 query failed : admin.$cmd { shutdown: 1.0 } to: 127.0.0.1:27017
server should be down...
Wed Nov 14 06:07:33 trying reconnect to 127.0.0.1:27017
Wed Nov 14 06:07:33 reconnect 127.0.0.1:27017 failed couldnt connect to server 127.0.0.1:27017。
继续测试数据同步,在主库写入数据:【摘抄自https://blog.csdn.net/thinktik/article/details/82118190】
# 主库建一个库和表并插入一条数据
tcl:PRIMARY> use testdb;
switched to db testdb
tcl:PRIMARY> db.synctable.insert({name:"验证"});
WriteResult({ "nInserted" : 1 })
# 进入从库
# 报错,正常。因为SECONDARY是不允许读写的,可以执行rs.slaveOk();解除
tcl:SECONDARY>
tcl:SECONDARY> show dbs;
2018-08-27T14:13:17.963+0800 E QUERY [js] Error: listDatabases failed:{
"operationTime" : Timestamp(1535350391, 1),
"ok" : 0,
"errmsg" : "not master and slaveOk=false",
"code" : 13435,
"codeName" : "NotMasterNoSlaveOk",
"$clusterTime" : {
"clusterTime" : Timestamp(1535350391, 1),
"signature" : {
"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"keyId" : NumberLong(0)
}
}
} :
_getErrorWithCode@src/mongo/shell/utils.js:25:13
Mongo.prototype.getDBs@src/mongo/shell/mongo.js:67:1
shellHelper.show@src/mongo/shell/utils.js:876:19
shellHelper@src/mongo/shell/utils.js:766:15
@(shellhelp2):1:1
# 解除限制
tcl:SECONDARY> rs.slaveOk();
tcl:SECONDARY> show dbs;
admin 0.000GB
config 0.000GB
local 0.000GB
testdb 0.000GB
tcl:SECONDARY> use testdb;
switched to db testdb
tcl:SECONDARY> db.synctable.find();
{ "_id" : ObjectId("5b8395ae80365b296a69ddc0"), "name" : "验证" }
mongo 集群(副本)搭建过程记录的更多相关文章
- Vertica集群扩容实验过程记录
需求: 将3个节点的Vertica集群扩容,额外增加3个节点,即扩展到6个节点的Vertica集群. 实验环境: RHEL 6.5 + Vertica 7.2.2-2 步骤: 1.三节点Vertica ...
- kafka 集群环境搭建 java
简单记录下kafka集群环境搭建过程, 用来做备忘录 安装 第一步: 点击官网下载地址 http://kafka.apache.org/downloads.html 下载最新安装包 第二步: 解压 t ...
- 搭建高可用mongo集群3.4版本
搭建高可用mongo集群3.4版本 说在开始之前:在搭建这个环境之前,已经有了一个师兄搭好的环境,虽然一样很棒,但是没有经过自己的手出来的东西,还是不属于自己,所以摸索着自己搭建一个吧,好巧不巧的是, ...
- Mongo集群搭建
1.集群角色及架构 在搭建集群之前,需要首先了解几个概念:路由,分片.副本集.配置服务器等 mongos,数据库集群请求的入口,所有的请求都通过mongos进行协调,不需要在应用程序添加一个路由选择器 ...
- 高可用性的mongo集群搭建
mongoDB安装 参照:https://docs.mongodb.com/manual/tutorial/install-mongodb-on-red-hat/ 配置yum管理包 在路径/etc/y ...
- 大数据 -- Hadoop集群环境搭建
首先我们来认识一下HDFS, HDFS(Hadoop Distributed File System )Hadoop分布式文件系统.它其实是将一个大文件分成若干块保存在不同服务器的多个节点中.通过联网 ...
- Mongodb分布式集群副本集+分片
目录 简介 1. 副本集 1.1 MongoDB选举的原理 1.2 复制过程 2. 分片技术 2.1 角色 2.2 分片的片键 2.3 片键分类 环境介绍 1.获取软件包 2.创建路由.配置.分片等的 ...
- MongoDBV3.0.7版本(shard+replica)集群的搭建及验证
集群的模块介绍: 从MongoDB官方给的集群架构了解,整个集群主要有4个模块:Config Server.mongs. shard.replica set: Config Server:用来存放集群 ...
- redis安装、测试&集群的搭建&踩过的坑
1 redis的安装 1.1 安装redis 版本说明 本教程使用redis3.0版本.3.0版本主要增加了redis集群功能. 安装的前提条件: 需要安装gcc:yum install gcc- ...
随机推荐
- Win10系统下MySQL压缩版安装配置教程
MySQL分为安装版和压缩.为了以后MySQL出问题想重装时的各种不必要的麻烦,我个人推荐压缩版MySQL.下面进入教程: 进入官网下载MySQL压缩包,并解压如下 配置环境变量---将bin文件的目 ...
- 抽象工厂模式(C++)
#include <iostream> using namespace std; class Fruit { public: ; }; class AbstractFactory { pu ...
- opensuse安装Tomcat碰到的问题
已经安装好JDE,并配置好环境变量 从官网下载Tomcat tar包,解压到用户目录,进入运行bin下的start.sh,显示运行成功,但是浏览器中输入localhost:8080连接不上 检查一番发 ...
- 原生js实现音乐列表(隔行换色、全选)
一.实现原理: 1.使用 % 运算符实现各行换色,规律:当%前面的值和后面的值相同时 结果为0: 2.使用开关思想,实现在同一个元素上反复点击时的条件判断,并且把开关以属性方式绑定在每个元素上: 3 ...
- JUnit 5和Selenium基础(二)
使用Selenium内置的PageFactory实现页面对象模式 在这一部分中,将通过Selenium的内置PageFactory支持类来介绍Page Object模式的实现.PageFactory提 ...
- python递归(函数)
递归:一个过程或函数调用自身的一种方法. 1. 效果图 2. 代码 def factorial(n): ''' 该函数用来求任意数的阶乘 参数: n 要求阶乘的数字 ''' # 基线条件 判断n是否为 ...
- cogs 495. 滑动窗口 单调队列
495. 滑动窗口 ★★ 输入文件:window.in 输出文件:window.out 简单对比时间限制:2 s 内存限制:256 MB [问题描述] 给你一个长度为N的数组,一个长为 ...
- 字符串转hash进阶版
#include<bits/stdc++.h> using namespace std; ,mod=; vector<unsigned> H[mod]; void Add(un ...
- 《C# 爬虫 破境之道》:第一境 爬虫原理 — 第五节:数据流处理的那些事儿
为什么说到数据流了呢,因为上一节中介绍了一下异步发送请求.同样,在数据流的处理上,C#也为我们提供几个有用的异步处理方法.而且,爬虫这生物,处理数据流是基础本能,比较重要.本着这个原则,就聊一聊吧. ...
- 异数OS 织梦师-纤手(二)-- LPC RPC篇
异数OS 织梦师-纤手(二)– LPC RPC篇 本文来自异数OS社区 github: https://github.com/yds086/HereticOS 异数OS社区QQ群: 652455784 ...