此文已由作者袁欢授权网易云社区发布。

欢迎访问网易云社区,了解更多网易技术产品运营经验。

部署方式
在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集群的更多相关文章

  1. 基于已有集群动态发现方式部署 Etcd 集群

    etcd提供了多种部署集群的方式,在「通过静态发现方式部署etcd集群」 一文中我们介绍了如何通过静态发现方式部署集群. 不过很多时候,你只知道你要搭建一个多大(包含多少节点)的集群,但是并不能事先知 ...

  2. 基于 DNS 动态发现方式部署 Etcd 集群

    使用discovery的方式来搭建etcd集群方式有两种:etcd discovery和DNS discovery.在 「基于已有集群动态发现方式部署etcd集群」一文中讲解了etcd discove ...

  3. 在Docker中安装和部署MongoDB集群

    此文已由作者袁欢授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 在Docker中安装mongodb 采用的mongodb镜像:https://registry.hub.doc ...

  4. centos7下安装部署mongodb集群(副本集模式)

    环境需求:Mongodb集群有三种模式:  Replica Set, Sharding,Master-Slaver.  这里部署的是Replica Set模式. 测试环境: 这里副本集(Replica ...

  5. 通过静态发现方式部署 Etcd 集群

    在「etcd使用入门」一文中对etcd的基本知识点和安装做了一个简要的介绍,这次我们来说说如何部署一个etcd集群. etcd构建自身高可用集群主要有三种形式: 静态发现: 预先已知etcd集群中有哪 ...

  6. 一键部署MongoDB集群Windows版

    由于周末在家手头没有虚拟机,所以在windows下单机完毕部署要求,并编写bat执行脚本. 1.创建配置文件及相关文件夹 总的启动脚本例如以下(startmc.bat): rem m1 start m ...

  7. CentOS6.8部署MongoDB集群及支持auth认证

    三个节点的副本集如下图所示: 实验目的: 配置MongoDB的3节点副本集 3个节点的副本集都要开启auth认证,并且开启认证后,能互相通信 第一步 - 准备环境 准备三个虚拟机,其中一个用作Prim ...

  8. 用配置文件方式启动mongodb集群

  9. centos6.5环境基于conga的web图形化界面方式配置rhcs集群

    一.简介 RHCS 即 RedHat Cluster Suite ,中文意思即红帽集群套件.红帽集群套件(RedHat Cluter Suite, RHCS)是一套综合的软件组件,可以通过在部署时采用 ...

随机推荐

  1. linux新建文件和文件夹命令

    1.touch命令 touch命令用来修改文件的访问时间.修改时间.如果没有指定时间,则将文件时间属性改为当前时间. 当指定文件不存在,touch命令变为创建该文件. 语法: touch [-acm] ...

  2. EasyRTMP实现RTMP异步直播推送之环形缓冲区设计

    本文转自EasyDarwin团队kim的博客:http://blog.csdn.net/jinlong0603 EasyRTMP的推送缓冲区设计 EasyRTMP内部也同样采用的环形缓冲的设计方法,将 ...

  3. 九度OJ 1134:密码翻译 (翻译)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:1988 解决:810 题目描述: 在情报传递过程中,为了防止情报被截获,往往需要对情报用一定的方式加密,简单的加密算法虽然不足以完全避免情报 ...

  4. Linux就该这么学--命令集合1(常用系统工作命令)

    1.用echo命令查看SHELL变量的值(前面有$符号): echo $SHELL 2.查看本机主机名: echo $HOSTNAME 3.查看当前的系统时间: date 4.按照“年-月-日 时:分 ...

  5. vim学习之以退为进——可反复移动和可反复改动的美妙结合

    时间:2014.06.29 地点:基地 -------------------------------------------------------------------------------- ...

  6. runtime之实现对象序列化

    /* iOS序列化,将对象转成二进制,保存到本地 */ 定义一个对象,让它实现NSCoding协议,保证对象的编码和解码,person有三个属性 @interface Person : NSObjec ...

  7. FFmpeg big changes. ffmpeg 接口的一些改变

    Big changes have been made from FFmpeg 0.5.1… Refer to http://cekirdek.pardus.org.tr/~ismail/ffmpeg- ...

  8. html5--6-1 引入外部样式表

    html5--6-1 引入外部样式表 实例 学习要点 掌握引入外部样式表方法 插入样式的三种方法 内联样式表(行内) 内部样式表(style中) 外部样式表 创建一个外部样式表 在head中使用lin ...

  9. H3C-端口镜像

    本地端口镜像配置举例 配置Switch: <Sysname> system-view [Sysname] mirroring-group 1 local # 创建本地镜像组 [Sysnam ...

  10. 七号信令中TUP协议的主要消息和故障问题

      CIC码说明: TUP消息的路由标记: 为OPC 24位 DPC24位 CIC 12位,12位CIC 的低5为时隙号,其中后4位为SLC,高7位为系统号.     CIC配置需要注意几个问题:   ...