mongoDB升级成复制集

本文记录实例服务升级,供参考
1.服务器资源规划

10.0.18.1(node3)		10.0.18.2(node2)		10.0.18.3(node1)		10.0.18.4(node4)
mongos(28888)				mongos(28888)				mongos(28888)				mongos(28888)
config(30000)				config(30000)				config(30000)				config(30000)
shard1主节点(40001)			shard1仲裁节点(40001)		shard1副节点(40001)			shard1延时节点(40001)
shard2延时节点(40002)		shard2主节点(40002)			shard2仲裁节点(40002)		shard2副节点(40002)			
shard3副节点(40003)			shard3延时节点(40003)		shard3主节点(40003)			shard3仲裁节点(40003)	
shard4仲裁节点(40004)		shard4副节点(40004)			shard4延时节点(40004)		shard4主节点(40004)
设计已经包含了分片的架构,现在阶段先启用集群服务,保证数据服务稳定,后期实情开启分片。
目前node3内存和带宽资源占用最少,所以设置为主节点,因平滑升级需要,搭建时设置node4 为主节点,后期进行节点切换。

2.每台服务器创建所需文件和目录

mkdir -p /data/mongodb/logs/
mkdir /etc/mongodb/
mkdir /data/mongodb/config/
mkdir /data/mongodb/shard{1,2,3,4}
touch /data/mongodb/logs/shard{1,2,3,4}.log
touch /data/mongodb/logs/mongos.log
touch /data/mongodb/logs/config.log
chmod 777 /data/mongodb/logs/*.log
useradd -M -u 8000 -s /sbin/nologin mongo
chown -R mongo.mongo /usr/local/mongodb
chown -R mongo.mongo /data/mongodb
echo "PATH=/usr/local/mongodb/bin:$PATH" >> /etc/profile
source /etc/profile

3.版本升级+开启复制集
目前node4 mongo运行在docker容器内,容器操作系统为Ubantu 16.0.4 、mongoDB版本为4.0.7,需要先升级成4.2.0
容器内MongoDB是以apt-get形式安装的,直接解压一个Ubantu tgz版MongoDB4.2.0,
然后停止目前Mongo服务,用4.2版的mongod启动配置文件,依然指向原数据目录/data/db
解压MongoDB

cd /usr/local
tar -zxvf mongodb-linux-x86_64-ubuntu1604-4.2.1.tgz
mv mongodb-linux-x86_64-ubuntu1604-4.2.1 mongodb

编写配置文件
vi /etc/mongodb/shard1.conf

pidfilepath = /data/mongodb/logs/shard1.pid
dbpath = /data/mongodb/db/
logpath = /data/mongodb/logs/shard1.log
logappend = true
journal = true
quiet = true
bind_ip = 0.0.0.0
port = 27017
fork = true
replSet=shard1
shardsvr = true
maxConns=20000

停止服务

mongo 
use admin
db.shutdownServer()	

mongo服务重启

启动服务

/usr/local/mongodb/bin/mongod -f /etc/mongodb/shard1.conf

万一启动失败 在容器内重启原4.0数据库

/use/bin/mongod --bind_ip_all

启动成功后还不能访问到数据,因为原数据库是没有配置复制集的,现在重新启动设置了复制集名称,所以要马上将复制集初始化

/usr/local/mongodb/bin/mongo
use admin
config={_id:"shard1",members:[{_id:0,host:"10.0.18.4:28888",priority:5}]}
rs.initiate(config)

初始化完成后就可以正常访问数据库了,之后将其他复制集一个个配置好加入集群

由于用的是原数据db目录,配置还是4.0的版本配置,要启用4.2功能,将功能兼容版本(FCV)设置为4.2
查看兼容版本设置

db.adminCommand( { getParameter: 1, featureCompatibilityVersion: 1 } )

显示当前依然为4.0
修改兼容版本设置

db.adminCommand( { setFeatureCompatibilityVersion: "4.2" } )

4.配置其他复制集
node3作为可选举成主节点的服务器,先给他设置成从节点
创建所需文件和目录
解压centOS的MongoDB4.2
编写配置文件
vi /etc/mongodb/shard1.conf

pidfilepath = /data/mongodb/logs/shard1.pid
dbpath = /data/mongodb/shard1/
logpath = /data/mongodb/logs/shard1.log
logappend = true
journal = true
quiet = true
bind_ip = 0.0.0.0
port = 40001
fork = true
replSet=shard1
shardsvr = true
maxConns=20000

启动服务

/usr/local/mongodb/bin/mongod -f /etc/mongodb/shard1.conf

将node3加入到复制集

rs.add("10.0.18.1:40001")

查看集群状态

rs.status()

接下来配置仲裁节点在node2上
创建所需文件和目录
解压centOS的MongoDB4.2
编写配置文件
vi /etc/mongodb/shard1.conf

pidfilepath = /data/mongodb/logs/shard1.pid
dbpath = /data/mongodb/shard1/
logpath = /data/mongodb/logs/shard1.log
logappend = true
journal = true
quiet = true
bind_ip = 0.0.0.0
port = 40001
fork = true
replSet=shard1
shardsvr = true
maxConns=20000

启动服务

/usr/local/mongodb/bin/mongod -f /etc/mongodb/shard1.conf

在node4 上将node2加入到复制集

rs.addArb("10.0.18.2:40001")

查看集群状态

rs.status()

在node1配置个从节点
操作如上
在node4 上将node1加入到复制集

rs.add("10.0.18.3:40001")

查看集群状态

rs.status()

5.主节点切换
现在node 4依然是主节点,要将node升级为常用主节点

先设置各个节点的priority
将node3的优先级调高

cfg = rs.conf()
cfg.members[x].priority = 10
rs.reconfig(cfg)
rs.status()

此时node3会自动升级成主节点
将nodejs后台服务指向node3的mongo访问,10.0.18.1:40001 后台服务重启
将node1的优先级也调高

cfg = rs.conf()
cfg.members[x].priority = 7
rs.reconfig(cfg)

设置node4 为延时节点

cfg = rs.conf()
cfg.members[x].priority = 0			//优先级为0,不能选举成为主节点
cfg.members[x].hidden = true		//设置隐藏属性
cfg.members[x].slaveDelay = 3600    //设置延时属性
rs.reconfig(cfg)

每执行完rs.reconfig会进行重新选举,数据库会有几秒钟不能访问
复制集配置完毕

将node4的mongo服务停掉,从集群中移除,重新使用40001端口运行,不再使用docker容器运行,切换成本地运行

6.配置分片服务器
部署配置服务器
4台服务器都执行同样的操作
#vi /etc/mongodb/config.conf

pidfilepath = /data/mongodb/logs/config.pid           #pid文件位置
dbpath = /data/mongodb/config/                        #数据文件存放位置
logpath = /data/mongodb/logs/config.log               #日志文件位置
logappend = true                 
bind_ip = 0.0.0.0    #监听地址
port = 30000         #端口号
fork = true 
replSet=configs      #复制集名称
configsvr = true
maxConns=20000       #最大连接数

启动配置服务器
/usr/local/mongodb/bin/mongod -f /etc/mongodb/config.conf

所有服务器都启动config.conf后
在任意服务器进行初始化

/usr/local/mongodb/bin/mongo -port 30000
config={_id:"configs",members:[{_id:0,host:"10.0.18.1:30000"},{_id:1,host:"10.0.18.2:30000"},{_id:2,host:"10.0.18.3:30000"},{_id:2,host:"10.0.18.4:30000"}]}
rs.initiate(config)

部署路由服务器
4台服务器都执行同样的操作
创建配置文件
vi /etc/mongodb/mongos.conf

pidfilepath = /data/mongodb/logs/mongos.pid
logpath=/data/mongodb/logs/mongos.log
logappend = true
bind_ip = 0.0.0.0
port = 28888
fork = true
configdb = configs/10.0.18.1:30000,10.0.18.2:30000,10.0.18.3:30000,10.0.18.4:30000
maxConns=20000

启动mongos实例
/usr/local/mongodb/bin/mongos -f /etc/mongodb/mongos.conf //4台服务器操作一致注意这里是“mongos”而非“mongod”

添加分片

此时可以将后台服务指向任意服务器的28888端口访问

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值