在CentOS6.6上以replSet方式部署MongoDB集群
此文已由作者袁欢授权网易云社区发布。
欢迎访问网易云社区,了解更多网易技术产品运营经验。
部署方式
在3台centos6.6系统上以Replica Set方式部署mongodb3.0.2集群。
官方参考资料:
http://docs.mongodb.org/manual/tutorial/deploy-replica-set/
http://docs.mongodb.org/manual/tutorial/install-mongodb-on-red-hat/
集群的IP地址分配
# node01: 192.168.35.173(PRIMARY node)
# node02: 192.168.35.96(SECONDARY node)
# node03: 192.168.35.174(SECONDARY node)
# 添加mongodb的yum源(所有节点)
echo "[mongodb-org-3.0]" > /etc/yum.repos.d/mongodb-org-3.0.repo
echo "name=MongoDB Repository" >> /etc/yum.repos.d/mongodb-org-3.0.repo
echo "baseurl=http://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.0/x86_64/" >> /etc/yum.repos.d/mongodb-org-3.0.repo
echo "gpgcheck=0" >> /etc/yum.repos.d/mongodb-org-3.0.repo
echo "enabled=1" >> /etc/yum.repos.d/mongodb-org-3.0.repo
# yum安装mongodb(所有节点)
yum install -y mongodb-org-3.0.2 mongodb-org-server-3.0.2 mongodb-org-shell-3.0.2 mongodb-org-mongos-3.0.2 mongodb-org-tools-3.0.2
mkdir -p /data/db && chown -R mongod.mongod /data/
# 修改主机名和hosts文件(所有节点)
# vim /etc/sysconfig/network
# sysctl kernel.hostname=node0001.nemongo.com
# sysctl kernel.hostname=node0002.nemongo.com
# sysctl kernel.hostname=node0003.nemongo.com
echo "192.168.35.173 node0001.nemongo.com" >> /etc/hosts
echo "192.168.35.96 node0002.nemongo.com" >> /etc/hosts
echo "192.168.35.174 node0003.nemongo.com" >> /etc/hosts
# 修改mongodb的配置文件(所有节点)
sed -i 's/bind_ip=127.0.0.1/#bind_ip=127.0.0.1/g' /etc/mongod.conf
sed -i 's/#replSet=setname/replSet=ne_aws_01/g' /etc/mongod.conf
# 启动mongodb(所有节点)
service mongod start
# 在mongodb主节点上配置集群(PRIMARY 节点)
mongo
> rs.initiate() # 只有node0001上面需要执行rs.initiate()
> rs.conf()
> rs.add("node0002.nemongo.com") # node0002上面不要执行rs.initiate(),否则无法添加
> rs.add("node0003.nemongo.com") # node0003上面不要执行rs.initiate(),否则无法添加
> rs.status() # 每个节点上都可以查看集群状态
> rs.initiate() { "info2" : "no configuration explicitly specified -- making one", "me" : "node0001.nemongo.com:27017", "ok" : 0, "errmsg" : "No host described in new configuration 1 for replica set ne_aws_01 maps to this node", "code" : 93 } ne_aws_01:PRIMARY> rs.add("node0002.nemongo.com:27017") { "ok" : 1 } ne_aws_01:PRIMARY> rs.add("node0003.nemongo.com") { "ok" : 1 } ne_aws_01:PRIMARY> rs.status() { "set" : "ne_aws_01", "date" : ISODate("2015-05-08T04:49:30.768Z"), "myState" : 1, "members" : [ { "_id" : 0, "name" : "node0001.nemongo.com:27017", "health" : 1, "state" : 1, "stateStr" : "PRIMARY", "uptime" : 1471, "optime" : Timestamp(1431060383, 1), "optimeDate" : ISODate("2015-05-08T04:46:23Z"), "electionTime" : Timestamp(1431059099, 1), "electionDate" : ISODate("2015-05-08T04:24:59Z"), "configVersion" : 3, "self" : true }, { "_id" : 1, "name" : "node0002.nemongo.com:27017", "health" : 1, "state" : 2, "stateStr" : "SECONDARY", "uptime" : 192, "optime" : Timestamp(1431060383, 1), "optimeDate" : ISODate("2015-05-08T04:46:23Z"), "lastHeartbeat" : ISODate("2015-05-08T04:49:29.756Z"), "lastHeartbeatRecv" : ISODate("2015-05-08T04:49:30.263Z"), "pingMs" : 1, "configVersion" : 3 }, { "_id" : 2, "name" : "node0003.nemongo.com:27017", "health" : 1, "state" : 2, "stateStr" : "SECONDARY", "uptime" : 187, "optime" : Timestamp(1431060383, 1), "optimeDate" : ISODate("2015-05-08T04:46:23Z"), "lastHeartbeat" : ISODate("2015-05-08T04:49:29.756Z"), "lastHeartbeatRecv" : ISODate("2015-05-08T04:49:29.795Z"), "pingMs" : 1, "lastHeartbeatMessage" : "could not find member to sync from", "configVersion" : 3 } ], "ok" : 1 } |
将mongodb主节点停掉:service mongod stop,这时候mongodb集群将会重新选举产生新的primary节点,在node0002上查看集群状态:
ne_aws_01:PRIMARY> rs.status() { "set" : "ne_aws_01", "date" : ISODate("2015-05-08T04:51:13.359Z"), "myState" : 1, "members" : [ { "_id" : 0, "name" : "node0001.nemongo.com:27017", "health" : 0, "state" : 8, "stateStr" : "(not reachable/healthy)", "uptime" : 0, "optime" : Timestamp(0, 0), "optimeDate" : ISODate("1970-01-01T00:00:00Z"), "lastHeartbeat" : ISODate("2015-05-08T04:51:11.361Z"), "lastHeartbeatRecv" : ISODate("2015-05-08T04:51:11.951Z"), "pingMs" : 1, "lastHeartbeatMessage" : "Failed attempt to connect to node0001.nemongo.com:27017; couldn't connect to server node0001.nemongo.com:27017 (192.168.35.173), connection attempt failed", "configVersion" : -1 }, { "_id" : 1, "name" : "node0002.nemongo.com:27017", "health" : 1, "state" : 1, "stateStr" : "PRIMARY", "uptime" : 364, "optime" : Timestamp(1431060383, 1), "optimeDate" : ISODate("2015-05-08T04:46:23Z"), "electionTime" : Timestamp(1431060617, 1), "electionDate" : ISODate("2015-05-08T04:50:17Z"), "configVersion" : 3, "self" : true }, { "_id" : 2, "name" : "node0003.nemongo.com:27017", "health" : 1, "state" : 2, "stateStr" : "SECONDARY", "uptime" : 284, "optime" : Timestamp(1431060383, 1), "optimeDate" : ISODate("2015-05-08T04:46:23Z"), "lastHeartbeat" : ISODate("2015-05-08T04:51:13.159Z"), "lastHeartbeatRecv" : ISODate("2015-05-08T04:51:12.703Z"), "pingMs" : 1, "configVersion" : 3 } ], "ok" : 1 } |
将node0001重新启动:service mongod start,再次查看mongodb集群状态,就会发现node0001变成了SECONDARY节点:
ne_aws_01:SECONDARY> rs.status() { "set" : "ne_aws_01", "date" : ISODate("2015-05-08T04:53:54.550Z"), "myState" : 2, "members" : [ { "_id" : 0, "name" : "node0001.nemongo.com:27017", "health" : 1, "state" : 2, "stateStr" : "SECONDARY", "uptime" : 168, "optime" : Timestamp(1431060383, 1), "optimeDate" : ISODate("2015-05-08T04:46:23Z"), "configVersion" : 3, "self" : true }, { "_id" : 1, "name" : "node0002.nemongo.com:27017", "health" : 1, "state" : 1, "stateStr" : "PRIMARY", "uptime" : 167, "optime" : Timestamp(1431060383, 1), "optimeDate" : ISODate("2015-05-08T04:46:23Z"), "lastHeartbeat" : ISODate("2015-05-08T04:53:53.474Z"), "lastHeartbeatRecv" : ISODate("2015-05-08T04:53:52.881Z"), "pingMs" : 1, "electionTime" : Timestamp(1431060617, 1), "electionDate" : ISODate("2015-05-08T04:50:17Z"), "configVersion" : 3 }, { "_id" : 2, "name" : "node0003.nemongo.com:27017", "health" : 1, "state" : 2, "stateStr" : "SECONDARY", "uptime" : 167, "optime" : Timestamp(1431060383, 1), "optimeDate" : ISODate("2015-05-08T04:46:23Z"), "lastHeartbeat" : ISODate("2015-05-08T04:53:53.474Z"), "lastHeartbeatRecv" : ISODate("2015-05-08T04:53:54.382Z"), "pingMs" : 1, "configVersion" : 3 } ], "ok" : 1 } |
更多网易技术、产品、运营经验分享请点击。
相关文章:
【推荐】 知物由学|AI网络安全实战:生成对抗网络
【推荐】 kubernetes大概的工作原理
【推荐】 OC静态代码检查实战
在CentOS6.6上以replSet方式部署MongoDB集群的更多相关文章
- 基于已有集群动态发现方式部署 Etcd 集群
etcd提供了多种部署集群的方式,在「通过静态发现方式部署etcd集群」 一文中我们介绍了如何通过静态发现方式部署集群. 不过很多时候,你只知道你要搭建一个多大(包含多少节点)的集群,但是并不能事先知 ...
- 基于 DNS 动态发现方式部署 Etcd 集群
使用discovery的方式来搭建etcd集群方式有两种:etcd discovery和DNS discovery.在 「基于已有集群动态发现方式部署etcd集群」一文中讲解了etcd discove ...
- 在Docker中安装和部署MongoDB集群
此文已由作者袁欢授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 在Docker中安装mongodb 采用的mongodb镜像:https://registry.hub.doc ...
- centos7下安装部署mongodb集群(副本集模式)
环境需求:Mongodb集群有三种模式: Replica Set, Sharding,Master-Slaver. 这里部署的是Replica Set模式. 测试环境: 这里副本集(Replica ...
- 通过静态发现方式部署 Etcd 集群
在「etcd使用入门」一文中对etcd的基本知识点和安装做了一个简要的介绍,这次我们来说说如何部署一个etcd集群. etcd构建自身高可用集群主要有三种形式: 静态发现: 预先已知etcd集群中有哪 ...
- 一键部署MongoDB集群Windows版
由于周末在家手头没有虚拟机,所以在windows下单机完毕部署要求,并编写bat执行脚本. 1.创建配置文件及相关文件夹 总的启动脚本例如以下(startmc.bat): rem m1 start m ...
- CentOS6.8部署MongoDB集群及支持auth认证
三个节点的副本集如下图所示: 实验目的: 配置MongoDB的3节点副本集 3个节点的副本集都要开启auth认证,并且开启认证后,能互相通信 第一步 - 准备环境 准备三个虚拟机,其中一个用作Prim ...
- 用配置文件方式启动mongodb集群
- centos6.5环境基于conga的web图形化界面方式配置rhcs集群
一.简介 RHCS 即 RedHat Cluster Suite ,中文意思即红帽集群套件.红帽集群套件(RedHat Cluter Suite, RHCS)是一套综合的软件组件,可以通过在部署时采用 ...
随机推荐
- wlpt的提现功能
1.<transaction id="WithdrawPre" template="pageLoaderTemplate"> <actions ...
- HDU 5145 NPY and girls (莫队分块离线)
题目地址:HDU 5145 莫队真的好奇妙.. 这种复杂度竟然仅仅有n*sqrt(n)... 裸的莫队分块,先离线.然后按左端点分块,按块数作为第一关键字排序.然后按r值作为第二关键字进行排序. 都是 ...
- Redis 3.2.4编译安装
1. 下载安装包 wget url tar zxvf redis-3.2.4.tar.gz 2. 编译安装 cd redis-3.2.4/src/ sudo make && make ...
- Theseven relationsarein threecategories:equivalent, congruent, andsimilar.
http://www.math.pitt.edu/~xfc/math2370/chap5.pdf
- iOS 工程中 Other Linker Flags
对于64位机子和iPhone OS应用 解决方法是使用-all_load 或者 -force_load. -all_load强迫链接器从它能看见的所有文档中加载所有的对象文件,甚至那些没有OC代码的文 ...
- Oracle查询正在执行的SQL语句
查看 Oracle 正在执行的 sql 语句以及发起的用户 SELECT b.sid oracleID, b.username 用户名, b.serial#, paddr, sql_text 正在执行 ...
- charles刷分微信跳一跳小程序对https的理解
以前以为只要安装了https 客户端与服务端的数据会被加密就安全了 事实上 只要任意一款抓包工具 并伪造证书 就可以解密这个被所谓https加密的数据 如 可以下载charles的根证书 作为伪 ...
- Windows程序设计(1)——Win32运行原理(三)
进程控制 1 获得系统进程 2 终止当前进程 3 终止其他进程 4 进程控制 4.1 获得系统进程 使用toolhelp模块可以实现获取系统中当前运行当中的进程列表. 思路如下,使用CreateToo ...
- 专网IP和公网IP的区别是什么
专网ip是自己网内用,公网的话就全球有效 最大区别是公网IP世界只有一个,私网IP可以重复,但是在一个局域网内不能重复 访问互联网是需要IP地址的,IP地址又分为公网IP和私网IP,访问互联网需要公网 ...
- 分布式锁(Redis实现)
1.分布式锁解决方案 1.采用数据库 不建议 性能不好 jdbc 2.基于Redis实现分布式锁(setnx)setnx也可以存入key,如果存入key成功返回1,如果存入的key已经存在了,返回 ...