首页  :: 新随笔  :: 管理

MongoDB Replica Set(CentOS安装)

Posted on 2022-02-09 21:46  高&玉  阅读(326)  评论(0编辑  收藏  举报

1 介绍

       MongoDB Replica Set中文名为副本集,通俗地讲是集群当中包含了多份数据,保证主节点挂掉了,备节点能继续提供数据服务,提供的前提就是数据需要和主节点一致。

       Mongodb(M)表示主节点,Mongodb(S)表示备节点,Mongodb(A)表示仲裁节点(Arbiter)。主备节点存储数据,仲裁节点不存储数据。客户端同时连接主节点与备节点,不连接仲裁节点。

       默认设置下,主节点提供所有增删查改服务,备节点不提供任何服务。但是可以通过设置使备节点提供查询服务,这样就可以减少主节点的压力,当客户端进行数据查询时,请求自动转到备节点上。这个设置叫做Read Preference Modes,同时Java客户端提供了简单的配置方式,可以不必直接对数据库进行操作。

       仲裁节点是一种特殊的节点,它本身并不存储数据,主要的作用是决定哪一个备节点在主节点挂掉之后提升为主节点,所以客户端不需要连接此节点。这里虽然只有一个备节点,但是仍然需要一个仲裁节点来提升备节点级别。我开始也不相信必须要有仲裁节点,但是自己也试过没仲裁节点的话,主节点挂了备节点还是备节点,所以咱们还是需要它的。

2 部署MongoDB Replica Set

2.1 准备工作

部署环境:

IP 角色 端口
192.168.5.131 PRIMARY 27017
192.168.5.132 SECONDARY 27017
192.168.5.133 SECONDARY 27017
192.168.5.131 ARBITER 27018
192.168.5.132 ARBITER 27018
192.168.5.133 ARBITER 27018

 

创建mongo用户

[root]# useradd mongo
[root]# passwd mongo

 

生成keyfile,确保每个服务的keyfile一样

[root]# mkdir -p /etc/mongod
[root]# openssl rand -base64 765 > /etc/mongod/key.file
[root]# chmod 400 /etc/mongod/key.file
[root]# chown mongo:mongo /etc/mongod/key.file

2.2 编辑配置文件

编辑mongod.conf

[root]# vi /etc/mongod/mongod.conf
systemLog:
  destination: file
  path: "/data/mongodb/db/mongod.log"
  logAppend: true

storage:
  dbPath: /data/mongodb/db
  wiredTiger:
    engineConfig:
      cacheSizeGB: 1

processManagement:
   fork: true

net:
  bindIpAll: true
  port: 27017

#security:
#  keyFile: /etc/mongod/key.file
#  authorization: enabled

replication:
  replSetName: replicas
  oplogSizeMB: 2048

 

编辑arbiter.conf

[root]# vi /etc/mongod/arbiter.conf
systemLog:
  destination: file
  path: "/data/mongodb/arbiter/arbiter.log"
  logAppend: true

storage:
  dbPath: /data/mongodb/arbiter
  wiredTiger:
    engineConfig:
      cacheSizeGB: 0.25

processManagement:
   fork: true

net:
  bindIpAll: true
  port: 27018

#security:
#  keyFile: /etc/mongod/key.file

replication:
  replSetName: replicas
  oplogSizeMB: 2048

 2.3 安装MongoDB

下载介质并安装

[root]# wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.4.12.tgz
[root]# tar -zxvf mongodb-linux-x86_64-rhel70-4.4.12.tgz -C /usr/local/
[root]# ln -s /usr/local/mongodb-linux-x86_64-rhel70-4.4.12 /usr/local/mongodb
[root]# chown -R mongo:mongo /usr/local/mongodb-linux-x86_64-rhel70-4.4.12.tgz
[root]# chown -R mongo:mongo /usr/local/mongodb

 

配置环境变量

[root]# echo "export PATH=$PATH:/usr/local/mongodb/bin" >> /etc/profile
[root]# source /etc/profile

 

启动服务

[root]# mongod -f /etc/mongod/mongod.conf
[root]# mongod -f /etc/mongod/arbiter.conf

2.4 配置复制集

初始化MongoDB复制集

> rs.initiate(
  {
    _id : "replicas",
    members: [
      { _id : 0, host : "192.168.5.131:27017" },
      { _id : 1, host : "192.168.5.132:27017" },
      { _id : 2, host : "192.168.5.133:27017" },
      { _id : 3, host : "192.168.5.131:27018", arbiterOnly:true },
	  { _id : 4, host : "192.168.5.132:27018", arbiterOnly:true },
	  { _id : 5, host : "192.168.5.133:27018", arbiterOnly:true }
    ]
  }
)

 

查看集群配置信息

replicas:SECONDARY> rs.conf()
{
	"_id" : "replicas",
	"version" : 1,
	"term" : 1,
	"protocolVersion" : NumberLong(1),
	"writeConcernMajorityJournalDefault" : true,
	"members" : [
		{
			"_id" : 0,
			"host" : "192.168.5.131:27017",
			"arbiterOnly" : false,
			"buildIndexes" : true,
			"hidden" : false,
			"priority" : 1,
			"tags" : {
				
			},
			"slaveDelay" : NumberLong(0),
			"votes" : 1
		},
		{
			"_id" : 1,
			"host" : "192.168.5.132:27017",
			"arbiterOnly" : false,
			"buildIndexes" : true,
			"hidden" : false,
			"priority" : 1,
			"tags" : {
				
			},
			"slaveDelay" : NumberLong(0),
			"votes" : 1
		},
		{
			"_id" : 2,
			"host" : "192.168.5.133:27017",
			"arbiterOnly" : false,
			"buildIndexes" : true,
			"hidden" : false,
			"priority" : 1,
			"tags" : {
				
			},
			"slaveDelay" : NumberLong(0),
			"votes" : 1
		},
		{
			"_id" : 3,
			"host" : "192.168.5.131:27018",
			"arbiterOnly" : true,
			"buildIndexes" : true,
			"hidden" : false,
			"priority" : 0,
			"tags" : {
				
			},
			"slaveDelay" : NumberLong(0),
			"votes" : 1
		},
		{
			"_id" : 4,
			"host" : "192.168.5.132:27018",
			"arbiterOnly" : true,
			"buildIndexes" : true,
			"hidden" : false,
			"priority" : 0,
			"tags" : {
				
			},
			"slaveDelay" : NumberLong(0),
			"votes" : 1
		},
		{
			"_id" : 5,
			"host" : "192.168.5.133:27018",
			"arbiterOnly" : true,
			"buildIndexes" : true,
			"hidden" : false,
			"priority" : 0,
			"tags" : {
				
			},
			"slaveDelay" : NumberLong(0),
			"votes" : 1
		}
	],
	"settings" : {
		"chainingAllowed" : true,
		"heartbeatIntervalMillis" : 2000,
		"heartbeatTimeoutSecs" : 10,
		"electionTimeoutMillis" : 10000,
		"catchUpTimeoutMillis" : -1,
		"catchUpTakeoverDelayMillis" : 30000,
		"getLastErrorModes" : {
			
		},
		"getLastErrorDefaults" : {
			"w" : 1,
			"wtimeout" : 0
		},
		"replicaSetId" : ObjectId("62032c3f782afe1fd1364616")
	}
}

3 MongoDB Replica Set测试

3.1 数据同步测试

MASTER端创建测试数据

[root]# mongo
replicas:PRIMARY> use test
replicas:PRIMARY> db.t1.insert( { name : "gaoyu" } )

 

SECONDARY端查看数据是否同步

[root]# mongo
replicas:SECONDARY> use test
replicas:SECONDARY> rs.secondaryOk()	#开启可读
replicas:SECONDARY> show collections
t1
replicas:SECONDARY> db.t1.find()
{ "_id" : ObjectId("61e6d385c8ca480d8b12f836"), "name" : "gaoyu" }

3.2 测试MASTER自动切换

模拟故障MASTER意外宕机,然后观察MASTER是否能自动切换。

 

查看MASTER

replicas:SECONDARY> rs.isMaster()

4 开启认证登录

第一步:MASTER创建管理员账号,账号会自动同步到所有SECONDARY节点

> use admin
> db.createUser(
	{
		user:"root",
		pwd:"Your_passwd",
		roles:[{role:"root",db:"admin"}]
	}
	)

 

第二步:将mongod.cof arbiter.conf文件中security:的注释去掉

 

第三步:重启所有mongo服务