部署MongoDB副本集

2022-10-04 14:22:02 浏览数 (1)

一主两备

默认设置下,主节点提供所有增删查改服务,备节点不提供任何服务。但是可以通过设置使备节点提供查询服务,这样就可以减少主节点的压力,当客户端进行数据查询时,请求自动转到备节点上。

环境配置

IP

端口

角色

主机名

192.168.1.163

27017

主节点

mongo01

192.168.1.126

27017

备节点

mongo02

192.168.1.41

27017

备节点

mongo03

安装mongodb

在三个节点上安装mongodb

修改配置文件

代码语言:javascript复制
vim 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
#  traceAllExceptions: true	#打印异常详细信息

# Where and how to store data.
storage:
  dbPath: /data/mongodb
  journal:
    enabled: true
  directoryPerDB: false|true	#当为true时,mongodb使用单独的目录存储每个数据库,每个目录名称对应于数据库名称
#  engine:
#  mmapv1:
#  wiredTiger:
#    engineConfig:
#      cacheSizeGB: 1
#      directoryForIndexes: true
#    collectionConfig:
#      blockCompressor: zlib
#    indexConfig:
#      prefixCompression: true

# how the process runs
processManagement:
  fork: true 		#允许程序在后台运行
  pidFilePath: /var/run/mongodb/mongod.pid

# network interfaces
net:
  port: 27017
  bindIp: 0.0.0.0
  maxIncomingConnections: 65535		#最大连接数
  wireObjectCheck: true 		#mongod实例在收到客户端时验证所有请求,以防止客户端将格式错误或无效的bson插入到mongod数据库
  ipv6: false|true	#启用或禁用ipv6支持,默认禁用
  unixDomainSocket:
    enabled: true 	#启用或禁用unix套接字上的侦听
    pathPrefix: /tmp	#unix套接字的路径,默认/tmp目录下


#security:

#operationProfiling:

replication:
#  oplogSizeMB: 2048
  replSetName: xbd		#副本集名称,按需修改
 
#sharding:
#  clusterRole: shardsvr	#把此实例作为分片
#  clusterRole: configsvr	#把此实例作为配置服务器

## Enterprise-Only Options

#auditLog:

#snmp:

初始化副本集(登录任意一个节点)

mongo 192.168.1.163:27017

代码语言:javascript复制
> config = {_id:"xbd",members:[
... {_id:0,host:"192.168.1.163:27017"},
... {_id:1,host:"192.168.1.126:27017"},
... {_id:2,host:"192.168.1.41:27017"}]
... }

> rs.initiate(config);	# 如果结果返回1,说明初始化成功

常用命令

代码语言:javascript复制
rs.status()	#查看副本集,所有节点都可以操作

db.isMaster()	#查看当前节点是否为主节点

rs.remove("192.168.1.41:27017")	#移除一个节点,需要在主节点操作

rs.add("192.168.1.41:27017")	#添加一个节点,需要在主节点操作
	
rs.addArb("192.168.10.108:27017")   #添加一个仲裁节点

模拟宕机测试

副本集更新权重模拟宕机

默认三台的权重都为1,如果任何一个权重比其他的高,则该台机器切换为primary角色 在primary节点上执行

代码语言:javascript复制
cfg = rs.conf()
cfg.members[0].priority = 3
cfg.members[1].priority = 2
cfg.members[2].priority = 1
rs.reconfig(cfg)
登录备节点查询数据

备节点是不能直接查询数据的,执行此命令把自己提升为从节点才可以查询数据

代码语言:javascript复制
rs.slaveOk()

一主一备一仲裁

仲裁节点是一种特殊的节点,它本身并不存储数据,主要的作用是决定哪一个备节点在主节点挂掉之后提升为主节点,所以客户端不需要连接此节点。这里虽然只有一个备节点,但是仍然需要一个仲裁节点来提升备节点级别。

初始化副本集(登录任意一个节点)

代码语言:javascript复制
cfg = {_id:"xbd",members:[
{_id:0,host:"192.168.1.126:27017",priority:2},
{_id:1,host:"192.168.1.163:27017",priority:1},	{_id:2,host:"192.168.1.41:27017",arbiterOnly:true}]
}

rs.initiate(cfg)

仲裁节点有一个特别的配置--arbiterOnly:true,这个不能少,否则主备不生效

mongodb默认是从主节点读写数据的,副本节点上不允许读,需要设置副本节点可以读

代码语言:javascript复制
repset:SECONDARY> db.getMongo().setSlaveOk();

0 人点赞