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- ...
随机推荐
- Sample Codes之Query features from a FeatureLayer
除了地图基本的放大缩小等功能,在webgis上的二次开发中,查询功能 通常作为需求的一部分需要我们去实现,今天就给大家详细的分析实例代码中的查询功能:Query features from a Fea ...
- C语言之运算符和表达式
运算符优先级: 求余运算用法: 声明变量的名字和类型: 变量的类型决定占用内存空间的大小.数据的存储形式,合法的表数范围.可参与的运算种类.变量名标识了内存中的一个存储单元. 自动类型转换: 运算符和 ...
- 从源码角度来看BeanFactory和ApplicationContext的关系
大家好,我是小黑,这是年前的最后一篇推文,提前祝大家新年快乐~~ 这次我们从源码角度来聊聊BeanFactory和ApplicationContext的关系,讲一些网上文章不曾提到的点. 官方描述 先 ...
- i3s 一种开源的三维地理数据规范 简单解读
i3s,esri主推到ogc的一种三维开源GIS数据标准. 版权声明:原创.博客园/B站/小专栏/知乎/CSDN @秋意正寒 转载请标注原地址并声明转载: https://www.cnblogs.co ...
- Java 数据结构快速入门
数据结构:栈 简介 栈(stack),又称堆栈,它是运算受限的线性表. 限制 栈(stack)的限制是仅允许在标的一端进行插入和删除操作,不允许在其他任何位置进行添加.查找.删除等操作. 采用该结构的 ...
- 【Tool】---ubuntu18.04配置oh-my-zsh工具
作为Linux忠实用户,应该没有人不知道bash shell工具了吧,其实除了bash还有许多其他的工具,zsh就是一款很好得选择,基于zsh shell得基础之上,oh-my-zsh工具更是超级利器 ...
- 各种小的 dp (精)
Q~ 抛一枚硬币 n 次,每次可能是正面或者反面向上,求没有连续超过 k 次硬币向上的方案数 A : dp[ i ] 表示到 i 位置的方案数, 1 . 当 i < k 时, dp[i] = d ...
- 基于AOP和ThreadLocal实现的一个简单Http API日志记录模块
Log4a 基于AOP和ThreadLocal实现的一个简单Http API日志记录模块 github地址 : https://github.com/EalenXie/log4a 在API每次被请求时 ...
- 2.Java程序运行机制
1.编译型:compile,把所有东西翻译好,若有更新需要重新全部翻译.执行速度够快,对操作系统要求比较低.开发操作系统时用到编译型语言,例如c/c++...运行时需编译整个程序 2.解释性:运行一个 ...
- 基于javaSwing的贪食蛇游戏
这个项目时,是我好几年前写的了.但对刚入门,或者想瞧瞧java的图形的界面swing的同学,还是有点用处的. 在这推荐给你. 涉及技术点 swing,多线程,文件读写,多媒体文件播放等 游戏简介 该游 ...