5步搞定CentOS6.7上MongoDB副本集搭建

如果只有一个节点或者使用Master-Slave模式,存在主机挂掉后“单点失效的问题。通过使用Mongo DB副本集,可以提高容错性和可用性~~

Areplica setin MongoDB is a group ofmongodprocesses that maintain the same data set. Replica sets provide redundancy and high availability

什么是副本集( Repilca Set )?

副本集在Mongo DB中就是一组mongod维护相同的数据集,副本集提供冗余和高可用~~

一个三个节点的副本集如下图所示:

本篇博文主要给出一个搭建三个节点Mongo DB副本集的示例,只要5个步骤即可~废话不说了,直接来战~~~

第一步 - 准备环境

准备三个虚拟机,其中一个用作Primary,另外两个用作Secondary。如上图展示的那样~

虚拟机信息如下:

Primary -172.xx.xx.107

Secondary -172.xx.xx.105172.xx.xx.106

本文的虚拟机装的是CentOS 6.7 ~

第二步 - yum安装Mongo

本文使用yum install mongodb-org命令来安装。

如果遇到No package mongodb-org available.的问题,如:

Loaded plugins: fastestmirror
Setting up Install Process
Loading mirror speeds from cached hostfile
No package mongodb-org available.
Error: Nothing to do

/etc/yum.repos.d/目录下,创建一个mongodb.repo文件,指定MongoDB资源库即可。

使用vim /etc/yum.repos.d/mongodb.repo命令,创建并打开文件mongodb.repo,

[mongodb-org-3.4]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.4/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-3.4.asc

然后,重新使用yum install mongodb-org命令安装即可。

第三步 - 配置副本集

使用vim /etc/mongod.conf配置,每一台虚拟机上的Mongod配置文件。

在replication选项中添加oplogSizeMB 和 replSetName两个属性~

replication:
  oplogSizeMB:  1024
  replSetName:  wang

配置文件mongod.conf如下所示:

# mongod.conf

# for documentation of all options,see:
#   http://docs.mongodb.org/manual/reference/configuration-options/

# where to write logging data.
systemLog:
  destination: file
  logAppend: true
  path: /var/log/mongodb/mongod.log

# Where and how to store data.
storage:
  dbPath: /var/lib/mongo
  journal:
    enabled: true
#  engine:
#  mmapv1:
#  wiredTiger:

# how the process runs
processManagement:
  fork: true  # fork and run in background
  pidFilePath: /var/run/mongodb/mongod.pid  # location of pidfile

# network interfaces
net:
  port: 27017
  bindIp: 0.0.0.0  # Listen to local interface only,comment to listen on all interfaces.


#security:

#operationProfiling:

replication:
  oplogSizeMB:  1024
  replSetName:  wang


#sharding:

## Enterprise-Only Options

#auditLog:

#snmp:

注意:

3台虚拟机,MongoDB配置文件mongod.conf中的replSetName名字要保持一致

在本例中,replSetName的名字为wang,这个名字可以随便取~~

第四步 - 启动

配置好副本集之后,通过mongod --config /etc/mongod.conf命令启动三个虚拟机中的Mongo服务~,如:

[root@dev04 mongodb]# mongod --config /etc/mongod.conf 
about to fork child process,waiting until server is ready for connections.
forked process: 30799
child process started successfully,parent exiting

因为107端口的虚拟机安装的MongoDB要用作Primary节点,所以,我们可以使用mongo命令来连接~

[root@dev04 mongodb]# mongo
MongoDB shell version v3.4.2
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.4.2
Server has startup warnings: 
2017-02-17T09:19:20.240+0800 I STORAGE  [initandlisten] 
2017-02-17T09:19:20.240+0800 I STORAGE  [initandlisten] ** WARNING: Using the XFS filesystem is strongly recommended with the WiredTiger storage engine
2017-02-17T09:19:20.240+0800 I STORAGE  [initandlisten] **          See http://dochub.mongodb.org/core/prodnotes-filesystem
2017-02-17T09:19:20.964+0800 I CONTROL  [initandlisten] 
2017-02-17T09:19:20.964+0800 I CONTROL  [initandlisten] ** WARNING: Access control is not enabled for the database.
2017-02-17T09:19:20.964+0800 I CONTROL  [initandlisten] **          Read and write access to data and configuration is unrestricted.
2017-02-17T09:19:20.964+0800 I CONTROL  [initandlisten] ** WARNING: You are running this process as the root user,which is not recommended.
2017-02-17T09:19:20.965+0800 I CONTROL  [initandlisten] 
2017-02-17T09:19:20.965+0800 I CONTROL  [initandlisten] 
2017-02-17T09:19:20.965+0800 I CONTROL  [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'.
2017-02-17T09:19:20.965+0800 I CONTROL  [initandlisten] **        We suggest setting it to 'never'
2017-02-17T09:19:20.965+0800 I CONTROL  [initandlisten] 
2017-02-17T09:19:20.965+0800 I CONTROL  [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.
2017-02-17T09:19:20.965+0800 I CONTROL  [initandlisten] **        We suggest setting it to 'never'
2017-02-17T09:19:20.965+0800 I CONTROL  [initandlisten]

使用use admin,切换到时admin数据库,

> use admin
switched to db admin

然后通过config配置设置副本集节点成员~~

config={_id:"wang",members:[{_id:0,host:"172.xxx.xxx.107:27017"},{_id:1,host:"172.xxx.xxx.106:27017"},{_id:2,host:"172.xxx.xxx.105:27017"}]}

注:

_id:"wang",wang是副本集中取得名字。

members中添加每个副本集Mongod的_id和host信息

执行完上述信息,会出现如下信息:

> config={_id:"wang",host:"172.xxx.xxx.105:27017"}]}
{
	"_id" : "wang","members" : [
		{
			"_id" : 0,"host" : "172.xxx.xxx.107:27017"
		},{
			"_id" : 1,"host" : "172.xxx.xxx.106:27017"
		},{
			"_id" : 2,"host" : "172.xxx.xxx.105:27017"
		}
	]
}
>

然后,执行配置初始化,看到{ "ok" : 1 },则表明初始化成功~

> rs.initiate(config)
{ "ok" : 1 }

使用rs.status()查看副本节点状态~~

wang:PRIMARY> rs.status() 
{
	"set" : "wang","date" : ISODate("2017-02-17T01:30:53.128Z"),"myState" : 1,"term" : NumberLong(1),"heartbeatIntervalMillis" : NumberLong(2000),"optimes" : {
		"lastCommittedOpTime" : {
			"ts" : Timestamp(1487295047,1),"t" : NumberLong(1)
		},"appliedOpTime" : {
			"ts" : Timestamp(1487295047,"durableOpTime" : {
			"ts" : Timestamp(1487295047,"t" : NumberLong(1)
		}
	},"name" : "172.xxx.xxx.107:27017","health" : 1,"state" : 1,"stateStr" : "PRIMARY","uptime" : 693,"optime" : {
				"ts" : Timestamp(1487295047,"t" : NumberLong(1)
			},"optimeDate" : ISODate("2017-02-17T01:30:47Z"),"infoMessage" : "could not find member to sync from","electionTime" : Timestamp(1487294966,"electionDate" : ISODate("2017-02-17T01:29:26Z"),"configVersion" : 1,"self" : true
		},"name" : "172.xxx.xxx.106:27017","state" : 2,"stateStr" : "SECONDARY","uptime" : 96,"optimeDurable" : {
				"ts" : Timestamp(1487295047,"optimeDurableDate" : ISODate("2017-02-17T01:30:47Z"),"lastHeartbeat" : ISODate("2017-02-17T01:30:52.708Z"),"lastHeartbeatRecv" : ISODate("2017-02-17T01:30:51.674Z"),"pingMs" : NumberLong(0),"syncingTo" : "172.xxx.xxx.107:27017","configVersion" : 1
		},"name" : "172.xxx.xxx.105:27017","lastHeartbeatRecv" : ISODate("2017-02-17T01:30:51.745Z"),"syncingTo" : "172.xxx.xxx.106:27017","configVersion" : 1
		}
	],"ok" : 1
}
wang:PRIMARY>

从上图圈出来的信息可以看出,一个Primary 和两个Secondary的副本集已经完成~~~

第五步 - 验证

最后一步就是用来验证了,看看数据能否同步过来~~~

写的操作是在Primary节点上操作的

在107节点上,创建一个messages的数据库,然后在message Collection中插入两条message。

wang:PRIMARY> show dbs
admin  0.000GB
local  0.000GB
wang:PRIMARY> use messages
switched to db messages
wang:PRIMARY> db.message.insert({"name":"This is a test message"})
WriteResult({ "nInserted" : 1 })
wang:PRIMARY> show dbs
admin     0.000GB
local     0.000GB
messages  0.000GB
wang:PRIMARY> db.message.insert({"name":"This is a test message111"})
WriteResult({ "nInserted" : 1 })
wang:PRIMARY>

通过可视化工具查看,Secondary节点105和106上是否可以同步Primary节点107上messages数据库的信息~~

详细信息如下:

从可视化工具的截图可以看出,两个Secondary节点105和106,与Primary节点107,拥有同样的数据集~~ 至此,Mongo DB副本集的环境搭建完成~~~

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


linux下开机自启: 在/etc/init.d目录下新建文件elasticsearch 并敲入shell脚本: 注意, 前两行必须填写,且要注释掉。 第一行为shell前行代码,目的告诉系统使用shell。 第二行分别代表运行级别、启动优先权、关闭优先权,且后面添加开机服务会用到。 shell脚本
1、因为在centos7中/etc/rc.d/rc.local的权限被降低了,所以需要赋予其可执行权 chmod +x /etc/rc.d/rc.local 2、赋予脚本可执行权限假设/usr/local/script/autostart.sh是你的脚本路径,给予执行权限 chmod +x /usr
最简单的查看方法可以使用ls -ll、ls-lh命令进行查看,当使用ls -ll,会显示成字节大小,而ls- lh会以KB、MB等为单位进行显示,这样比较直观一些。 通过命令du -h –max-depth=1 *,可以查看当前目录下各文件、文件夹的大小,这个比较实用。 查询当前目录总大小可以使用d
ASP.NET Core应用程序发布linux在shell中运行是正常的。可一但shell关闭网站也就关闭了,所以要配置守护进程, 用的是Supervisor,本文主要记录配置的过程和过程遇到的问题 安装Supervisor 1 yum install python-setuptools
设置时区(CentOS 7) 先执行命令timedatectl status|grep 'Time zone'查看当前时区,如果不是时区(Asia/Shanghai),则需要先设置为中国时区,否则时区不同会存在时差。 #已经是Asia/Shanghai,则无需设置 [root@xia
vim /etc/sysconfig/network-scripts/ifcfg-eth0 BOOTPROTO="static" ONBOOT=yes IPADDR=192.168.8.106 NETMASK=255.255.252.0 GATEWAY=192.168.
一、安装gcc依赖 由于 redis 是用 C 语言开发,安装之前必先确认是否安装 gcc 环境(gcc -v),如果没有安装,执行以下命令进行安装 [root@localhost local]# yum install -y gcc 二、下载并解压安装包 [root@localhost local
第一步 On CentOS/RHEL 6.*: $ sudo rpm -Uvh http://li.nux.ro/download/nux/dextop/el6/x86_64/nux-dextop-release-0-2.el6.nux.noarch.rpm On CentOS/RHEL 7: $
/// <summary> /// 取小写文件名后缀 /// </summary> /// <param name="name">文件名</param> /// <returns>返回小写后缀,不带“.”</ret
which nohup .bash_profile中并source加载 如果没有就安装吧 yum provides */nohup nohup npm run start & nohup ./kibana &
1.1 MySQL安装 1.1.1 下载wget命令 yum -y install wget 1.1.2 在线下载mysql安装包 wget https://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpm 1.1.3 安装My
重启 reboot shutdown -r now init 6 关闭 init 0 shutdown -h now shutdown -h 20:25 #8点25关机查看内存 free CPU利用率 top 日期 date 设置时间 date 033017002015 #月日时间年 日历 cal
1、firewalld的基本使用 启动: systemctl start firewalld 关闭: systemctl stop firewalld 查看状态: systemctl status firewalld 开机禁用 : systemctl disable firewalld 开机启用 :
1 下载并安装MySQL官方的 Yum Repository wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm 使用上面的命令就直接下载了安装用的Yum Repository,大概
CentOS6.x CentOS6中转用Upstrat代替以前的init.d/rcX.d的线性启动方式。 一、相关命令 通过initctl help可以查看相关命令 [root@localhost ~]# initctl help Job commands: start Start job. sto
1、使用命令:df -lk 找到已满磁盘 2、使用命令:du --max-depth=1 -h 查找大文件,删除
ifconfig:查看网卡信息 网卡配置文件位置: /etc/sysconfig/network-scripts/文件夹 nmtui:配置网卡 netstat -tlunp:查看端口信息 端口信息存储位置: /etc/services文件 route:查看路由信息 wget:下载网路文件,例如 wg
ps -ef:查看所有进程, ps -ef |grap firewalld 查看与firewalld相关的进程 which :查看进程:which firewalld kill 进程id:杀掉进程 kill 640,强制杀:kill -9 640 man:查看帮助,例如 man ps 查看
useradd:添加用户 useradd abc,默认添加一个abc组 vipw:查看系统中用户 groupadd:添加组groupadd ccna vigr:查看系统中的组 gpasswd:将用户abc添加到ccna组 gpasswd -a abc ccna groups abc:查看用户abc属