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

前端之家收集整理的这篇文章主要介绍了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.的问题,如:

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

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

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

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

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

@H_403_120@

第三步 - 配置副本集

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

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

  1. replication:
  2. oplogSizeMB: 1024
  3. replSetName: wang

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

  1. # mongod.conf
  2.  
  3. # for documentation of all options,see:
  4. # http://docs.mongodb.org/manual/reference/configuration-options/
  5.  
  6. # where to write logging data.
  7. systemLog:
  8. destination: file
  9. logAppend: true
  10. path: /var/log/mongodb/mongod.log
  11.  
  12. # Where and how to store data.
  13. storage:
  14. dbPath: /var/lib/mongo
  15. journal:
  16. enabled: true
  17. # engine:
  18. # mmapv1:
  19. # wiredTiger:
  20.  
  21. # how the process runs
  22. processManagement:
  23. fork: true # fork and run in background
  24. pidFilePath: /var/run/mongodb/mongod.pid # location of pidfile
  25.  
  26. # network interfaces
  27. net:
  28. port: 27017
  29. bindIp: 0.0.0.0 # Listen to local interface only,comment to listen on all interfaces.
  30.  
  31.  
  32. #security:
  33.  
  34. #operationProfiling:
  35.  
  36. replication:
  37. oplogSizeMB: 1024
  38. replSetName: wang
  39.  
  40.  
  41. #sharding:
  42.  
  43. ## Enterprise-Only Options
  44.  
  45. #auditLog:
  46.  
  47. #snmp:

注意:

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

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

第四步 - 启动

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

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

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

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

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

  1. > use admin
  2. 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信息

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

  1. > config={_id:"wang",host:"172.xxx.xxx.105:27017"}]}
  2. {
  3. "_id" : "wang","members" : [
  4. {
  5. "_id" : 0,"host" : "172.xxx.xxx.107:27017"
  6. },{
  7. "_id" : 1,"host" : "172.xxx.xxx.106:27017"
  8. },{
  9. "_id" : 2,"host" : "172.xxx.xxx.105:27017"
  10. }
  11. ]
  12. }
  13. >

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

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

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

  1. wang:PRIMARY> rs.status()
  2. {
  3. "set" : "wang","date" : ISODate("2017-02-17T01:30:53.128Z"),"myState" : 1,"term" : NumberLong(1),"heartbeatIntervalMillis" : NumberLong(2000),"optimes" : {
  4. "lastCommittedOpTime" : {
  5. "ts" : Timestamp(1487295047,1),"t" : NumberLong(1)
  6. },"appliedOpTime" : {
  7. "ts" : Timestamp(1487295047,"durableOpTime" : {
  8. "ts" : Timestamp(1487295047,"t" : NumberLong(1)
  9. }
  10. },"name" : "172.xxx.xxx.107:27017","health" : 1,"state" : 1,"stateStr" : "PRIMARY","uptime" : 693,"optime" : {
  11. "ts" : Timestamp(1487295047,"t" : NumberLong(1)
  12. },"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
  13. },"name" : "172.xxx.xxx.106:27017","state" : 2,"stateStr" : "SECONDARY","uptime" : 96,"optimeDurable" : {
  14. "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
  15. },"name" : "172.xxx.xxx.105:27017","lastHeartbeatRecv" : ISODate("2017-02-17T01:30:51.745Z"),"syncingTo" : "172.xxx.xxx.106:27017","configVersion" : 1
  16. }
  17. ],"ok" : 1
  18. }
  19. wang:PRIMARY>

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

第五步 - 验证

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

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

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

  1. wang:PRIMARY> show dbs
  2. admin 0.000GB
  3. local 0.000GB
  4. wang:PRIMARY> use messages
  5. switched to db messages
  6. wang:PRIMARY> db.message.insert({"name":"This is a test message"})
  7. WriteResult({ "nInserted" : 1 })
  8. wang:PRIMARY> show dbs
  9. admin 0.000GB
  10. local 0.000GB
  11. messages 0.000GB
  12. wang:PRIMARY> db.message.insert({"name":"This is a test message111"})
  13. WriteResult({ "nInserted" : 1 })
  14. wang:PRIMARY>

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

详细信息如下:

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

猜你在找的CentOS相关文章