mongodb调优那些事(三)-副本集

还是接着上面的业务继续进行优化,这次准备搭建副本集。好处很多,一个是可以做高可用,一个是由于系统读写都很频繁可以做读写分离(不是所有系统都适合,需要业务能够忍受数据复制的延迟)。

不过这次做副本集最大的作用不是上面这些,只是为了能够无缝切换服务器。因为之前的服务器是虚拟机,磁盘比较小 想切换到一个配置更好的服务器上。本来想把整个mongo目录传输到那台服务器,但是尝试了一下内网传输速度只有10m/s,mongo已经有了700多g的数据,等到传输完成要10几个小时。最重要的是这种方式要保证两边数据完全一样就要把原服务器上的mongo停用一段时间,这是无法接受的。后面突然想到用mongo副本集复制,等复制完成后切换下主从节点即可。另外在开始使用mongo的时候很多配置没有做,比如directoryperdb(每个数据库数据文件放在单独的文件夹)、storageEngine(使用wireTiger引擎,速度更快)等都没有增加,经过测试后发现slave可以跟master的配置不一样,数据照样可以复制过来,所以趁这次机会一起改了。

由于数据库服务器只有两台,所以只做了主从+仲裁节点。源服务器(192.168.0.5)的mongo做master,目标服务器(192.168.0.6)做slaver和arbiter 。

搭建副本集的步骤如下:

1. 目标服务器配置

从节点slaver.conf文件

port = 21700
fork = true
dbpath = data/info
logpath = logs/info.log
storageEngine = wiredTiger
pidfilepath = info.pid
maxConns = 2000
logappend = true
logRotate = reopen
directoryperdb=true
#replica set
replSet=info-web
#操作日志记录表的大小限制,单位mb
oplogSize=10000

从节点启动脚本start-info.sh(脚本中加入了第一章中所讲的linux系统参数)

#禁用hugepage_transparent
if test -f /sys/kernel/mm/transparent_hugepage/enabled; then
   echo never > /sys/kernel/mm/transparent_hugepage/enabled
fi
if test -f /sys/kernel/mm/transparent_hugepage/defrag; then
   echo never > /sys/kernel/mm/transparent_hugepage/defrag
fi
echo 0 > /proc/sys/vm/zone_reclaim_mode
#修改numa默认配置后再启动mongo
numactl --interleave=all bin/mongod --config=conf/info.conf

仲裁节点arbiter.conf配置:

#由于跟从节点在同一台服务器,所以使用不同的端口号
port = 31700
fork = true
dbpath = data/info-arbiter
logpath = logs/info-arbiter.log
storageEngine = wiredTiger
pidfilepath = info-arbiter.pid
maxConns = 2000
logappend = true
logRotate = reopen
directoryperdb=true
#replica set
replSet=info-web
#操作日志记录表的大小限制,单位mb
oplogSize=10000

仲裁节点启动脚本start-info-arbiter.sh

#禁用hugepage_transparent
if test -f /sys/kernel/mm/transparent_hugepage/enabled; then
   echo never > /sys/kernel/mm/transparent_hugepage/enabled
fi
if test -f /sys/kernel/mm/transparent_hugepage/defrag; then
   echo never > /sys/kernel/mm/transparent_hugepage/defrag
fi
echo 0 > /proc/sys/vm/zone_reclaim_mode
#修改numa默认配置后再启动mongo
numactl --interleave=all bin/mongod --config=conf/info-arbiter.conf

2. 源服务器配置

主节点master.conf配置

port = 27017
#对于fork这种命令行选项,需要用true来表示打开了。
fork = true
dbpath = data
logpath = logs/info.log
#由于原来没有使用wireTiger引擎,所以此参数注释掉
#storageEngine = wiredTiger
pidfilepath = nyk.pid
maxConns = 2000
logappend = true
logRotate = reopen
#原来没有分库,参数注释
#directoryperdb=true
#replica set
replSet=info-web
oplogSize=10000

主节点启动脚本start-info.sh

if test -f /sys/kernel/mm/transparent_hugepage/enabled; then
   echo never > /sys/kernel/mm/transparent_hugepage/enabled
fi
if test -f /sys/kernel/mm/transparent_hugepage/defrag; then
   echo never > /sys/kernel/mm/transparent_hugepage/defrag
fi
echo 0 > /proc/sys/vm/zone_reclaim_mode
numactl --interleave=all bin/mongod --config=conf/info.conf

3. 启动副本集

首先执行目标服务器中的start-info.sh和start-info-arbiter.sh脚本,启动从节点和仲裁节点。再执行源服务器的start-info.sh脚本启动主节点。 
使用mongo shell登录主节点服务器,执行下面的脚本:

//_id参数要跟mongo配置文件中的replSet值一样,priority值大的会作为master
>config = {_id:"info-web",members:[{_id:0,host:"192.168.0.5:27017",priority:2},{_id:1,host:"192.168.0.6:27017",priority:1},{_id:2,host:"192.168.0.6:37017",arbiterOnly:true}]};
//使用上面配置进行初始化
>rs.initiate(config);

这样mongo副本集就搭建完成了,从节点会对主节点的数据进行一次完全同步。

猜你喜欢

转载自blog.csdn.net/qq_35396905/article/details/81015543