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- ...
随机推荐
- JSON小记
json: { "1" : "2", "1" : "3" } 在json中如果有重复的key,会取最后一个key的值,如 ...
- 一些常用查询SQL语句以及显示格式
1.查询当前年.月.周相关时间 1.1.查询当前年份 SELECT TO_CHAR(SYSDATE,'YYYY') AS YEAR FROM DUAL--查询当前年份 SELECT TO_CHAR(S ...
- 有哪些让人相见恨晚的Python库(一)
对于我这个经常用python倒腾数据的人来说,下面这个库是真·相见恨晚 记得有一次我在服务器上处理数据时,为了解决Pandas读取超过2000W条数据就内存爆炸的问题,整整用了两天时间来优化.最后通过 ...
- 分享一款基于aui框架的图文发布界面
本文出自APICloud官方论坛, 感谢论坛版主 川哥哥 的分享. 分享一款基于aui框架的图文发布界面,可以添加多张图可以删除,类似qq空间发布说说,没做服务器后端,只演示前端操作.需要用到UIMe ...
- CDQ 入门
推荐博客 :https://blog.csdn.net/wu_tongtong/article/details/78785836 https://www.cnblogs.com/mlystdcall/ ...
- 解决 VS Code 中 golang.org 被墙导致的 Go 插件安装失败问题
微软官方开发的 Go for Visual Studio Code 插件为 Go 语言 提供了丰富的支持.在 VS Code 中首次打开 Go 工作区后,VS Code 会自动检测当前开发环境为 Go ...
- webpack构建工具初始化并运行简单的demo
webpack官网:https://webpack.js.org/ webpack是构建工具 安装webpack的前提:node,npm要安装 初始化项目 首先是初始化项目,创建一个文件夹,并且进入文 ...
- 【杂项】各类文件头结合winhex使用-转载
———常用文件头——— JPEG (jpg),文件头:FFD8FFE1 PNG (png),文件头:89504E47 (0D0A1A0A) GIF (gif),文件头:47494638 ZIP Arc ...
- 可视化限流管理,Sentinel 控制台启动和接入
Sentinel 的使用可以分为核心库和控制台两个部分. 核心库不依赖任何框架/库,集成了主流框架,可以进行单机限流降级等功能, 控制台Dashboard提供了可视化的管理限流规则.对集群进行监控,集 ...
- 深入浅出WPF笔记
数据层(Database,Oracle等) 业务逻辑层(Service,Data Access Layer,WCF) 表示层(WPF,Win Form,ASP.net,Silverlight) [WP ...