mongodb2.2.0升级到3.4.10操作记录
Posted 阿兄杂谈
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mongodb2.2.0升级到3.4.10操作记录相关的知识,希望对你有一定的参考价值。
1. 环境情况说明
2. 升级思路
3. 注意事项
4. 操作步骤
4.1. MongoDB2.2.0升级到2.4.9操作
4.2. MongoDB2.4.9升级到2.6.9
4.3. MongoDB2.6.9升级到3.0.2
4.4. MongoDB3.0.2升级到3.2.17
3.5. MongoDB3.2.12升级到3.4.10
5. 总结
1. 环境情况说明
开发环境MongoDB部署在三个主机节点上,分了两个片,每个片是一个副本集,架构为:
1、有三个mongos 分别在:
192.168.100.191:30000
192.168.100.192:30000
192.168.100.193:30000
2、configs的分别是:
192.168.100.191:20000
192.168.100.192:20000
192.168.100.193:20000
3、Mongod分为两个片(shard),每个片是一个副本集,分别是:
- shard1副本集:
192.168.100.191:27017
192.168.100.192:27017
192.168.100.193:27017
- shard2副本集:
192.168.100.191:27018
192.168.100.192:27018
192.168.100.193:27018
2. 升级思路
MongoDB升级不支持跨越几个大的关键版本升级,升级版本顺序必须是逐级升,如:2.2 -> 2.4.x -> 2.6.x -> 3.0.x -> 3.2.x -> 3.4.x。就我们目前的情况要从2.2.0版本升级到3.4.10版本,必要经历2.4、2.6、3.0、3.2这些中间的版本。
根据官方的各版本的升级方案,从2.2版本升级到2.6版本,只是MongoDB应用二进制文件的升级,数据文件支持平滑的过度;从2.6版本升级到3.0版本由于存在的数据存储引擎变更为wiredTiger(当然也是可以保留mmapv1存储引擎,但强烈是建议升级为wiredTiger存储引擎),在数据格式上不支持平滑过度,需要先导出数据然后再导入到新的版本中,这个过程不支持写入操作包括数据更新操作,考虑数据安全性建议停止对业务的支撑服务。3.0后的版本升级支持数据的平滑过度,只要升级二进制应用文件即可。
从2.2升级到3.4版本,中间要经过四个版本,对升级的相关数据做了目录结构约定:
#MongoDB数据目录结构规划摘要:
├── conf
│ ├── v2.2.0
│ ├── v2.4.9
│ ├── v2.6.9
│ ├── v3.0.2
│ ├── v3.2.17
│ └── v3.4.10
├── data
│ └── v3.4.10
│ ├── config_20000
│ ├── mongod_s1_27017
│ └── mongod_s2_27018
└── logs
└── v3.4.10
├── 20000
├── 27017
├── 27018
└── 30000
#MongoDB应用目录规划:
/data/app/mongo #当前默认版本,用软链接方式实现
/data/app/mongodb-2.2.0
/data/app/mongodb-2.4.9
/data/app/mongodb-2.6.9
/data/app/mongodb-3.0.2
/data/app/mongodb-3.2.17
/data/app/mongodb-3.4.10
3. 注意事项
验证现在业务驱动对MongoDB新版本的支持测试;
检查mongo数据是否可兼容升级;
每个版本升级前要先停止平衡器;
确保每个版本的升级必须是版本一致才能升级;
2.6到版本升级到3.0版本数据的存储引擎变更,数据需要做转换,转换方案是先在2.6版本导出,完成3.0的版本升级后再导入数据;
升级到3.4版本前要把configs的配置修改副本集方式;
升级前强烈建议完整的阅读所有版本官方升级方案,完成阅读后做好升级规则,最后再开始操作,各版本的升级链接:
2.2升级到2.4:https://docs.mongodb.com/v2.4/release-notes/2.4-upgrade/;
2.4升级到2.6:https://docs.mongodb.com/v2.6/release-notes/2.6-upgrade/;
2.6升级到3.0:https://docs.mongodb.com/v3.0/release-notes/3.0-upgrade/;
3.0升级到3.2:https://docs.mongodb.com/master/release-notes/3.2-upgrade/;
Config SCCC 修改为 CSRS:https://docs.mongodb.com/master/tutorial/upgrade-config-servers-to-replica-set/;
3.2升级到3.4:https://docs.mongodb.com/master/release-notes/3.4-upgrade-sharded-cluster/;
升级过程中不要执行下列指令操作
sh.enableSharding();
sh.shardCollection();
sh.addShard();
db.createCollection();
db.collection.drop();
db.dropDatabase();
任何创建数据库的操作;
任何修改集群元数据的操作,有关分片命令完成性查看指令;
升级过程可能需要更多的存储空间,在升级之前根据空间的使用量,建议可用存储空间是已使用空间的1.5倍;
升级后php mongo报错:’Failed to connect to: XXXXX: Remote server has closed the connection’的解决方法,重启了php-fpm解决。
4. 操作步骤
本次升级前,提前验证了业务的驱动对目前所有要升级的版本都是支持和兼容。升级思路是:mongos切换升级,mongod升级从节点再切换主从升级。
4.1. MongoDB2.2.0升级到2.4.9操作
升级概要:
检查mongo是否支持升级;
关闭balancer;
升级mongos路由节点;
升级config配置节点;
升级分片和复制集节点;
启动balancer;
下载MongoDB应用文件,我这选择的版本是:2.4.9。下载到 /data/app/ 目录下,解压后目录命名为:mongodb-2.4.9。
4.1.1. 检查mongo是否支持升级,检查时长与数据量有关,数据量越大需要时间越长。
cd /data/app/mongodb-2.4.9/bin
./mongo --port 27017
> use admin
> db.upgradeCheckAllDBs()
# 结果如果都为true则支持;
4.1.2. 关闭平衡器balancer。
通过mongos关闭平衡器,可以在任意节点上连接mongos操作,我们这在192.168.100.193节点上操作:
cd /data/app/mongodb-2.4.9/bin
./mongo --port 3000
> use admin
> sh.stopBalancer()
> sh.getBalancerState()
# 结果如果都为true则支持,为false;
4.1.3. 升级mongos路由节点。
关闭2.2版本的mongos -> 2.4版本启动mongos,步骤:
cd /data/app/mongodb-2.2.0/bin
./mongo --port 30000
> use admin
> db.shutdownServer()
> exit
cd /data/app/mongodb-2.4.9/bin
# /data/mongodb/conf/v2.4.9/mongos_30000.conf文件的配置与2.2版本一样,避免在升级过程中有差异化及方便回滚,每个版本的配置独立化。
./mongos -f /data/mongodb/conf/v2.4.9/mongos_30000.conf --upgrade
# 可以正常实例化应用启动则支持升级,把升级模式切换为正常模式
./mongo --port 30000
> use admin
> db.shutdownServer()
> exit
./mongos -f /data/mongodb/conf/v2.4.9/mongos_30000.conf
# 以上操作要在所有mongos上操作,一个一个升级,完成mongos的升级。
4.1.4. 升级config配置节点。
关闭2.2版本三个配置服务器中的两个,最好是configdb字符串中列出的最后两个,2.2版本mongod配置 -> 2.4版本启动配置,步骤:
cd /data/app/mongodb-2.2.0/bin
./mongo --port 20000
> use admin
> db.shutdownServer()
> exit
cd /data/app/mongodb-2.4.9/bin
./mongod -f /data/mongodb/conf/v2.4.9/mongos_20000.conf --upgrade
./mongod -f /data/mongodb/conf/v2.4.9/mongos_20000.conf
# 其他配置节点相同操作
4.1.5. 升级分片和复制集节点。
先升级secondry,关闭服务。
cd /data/app/mongodb-2.2.0/bin
./mongo --port 27017
shard0:SECONDARY> rs.status()
{
"set" : "shard0",
"date" : ISODate("2018-01-18T04:18:26.803Z"),
"myState" : 2,
"term" : NumberLong(-1),
"syncingTo" : "192.168.100.192:27017",
"heartbeatIntervalMillis" : NumberLong(2000),
"optimes" : {
"lastCommittedOpTime" : {
"ts" : Timestamp(0, 0),
"t" : NumberLong(-1)
},
"appliedOpTime" : Timestamp(1516249104, 1),
"durableOpTime" : Timestamp(1516249104, 1)
},
"members" : [
{
"_id" : 0,
"name" : "192.168.100.191:27017",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 4393078,
"optime" : Timestamp(1516249104, 1),
"optimeDate" : ISODate("2018-01-18T04:18:24Z"),
"syncingTo" : "192.168.100.192:27017",
"configVersion" : 109325,
"self" : true
},
{
"_id" : 2,
"name" : "192.168.100.193:27017",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 4393075,
"optime" : Timestamp(1516249104, 1),
"optimeDurable" : Timestamp(1516249104, 1),
"optimeDate" : ISODate("2018-01-18T04:18:24Z"),
"optimeDurableDate" : ISODate("2018-01-18T04:18:24Z"),
"lastHeartbeat" : ISODate("2018-01-18T04:18:25.039Z"),
"lastHeartbeatRecv" : ISODate("2018-01-18T04:18:25.887Z"),
"pingMs" : NumberLong(0),
"electionTime" : Timestamp(1510719368, 1),
"electionDate" : ISODate("2017-11-15T04:16:08Z"),
"configVersion" : 109325
},
{
"_id" : 3,
"name" : "192.168.100.192:27017",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 4393075,
"optime" : Timestamp(1516249104, 1),
"optimeDurable" : Timestamp(1516249104, 1),
"optimeDate" : ISODate("2018-01-18T04:18:24Z"),
"optimeDurableDate" : ISODate("2018-01-18T04:18:24Z"),
"lastHeartbeat" : ISODate("2018-01-18T04:18:25.039Z"),
"lastHeartbeatRecv" : ISODate("2018-01-18T04:18:24.925Z"),
"pingMs" : NumberLong(0),
"syncingTo" : "192.168.100.193:27017",
"configVersion" : 109325
}
],
"ok" : 1
}
# 查看集合的信息,从上面信息从节点:191,192,主节点:193,我们升级顺序为:191、192、193。
shard0:SECONDARY> use admin
switched to db admin
shard0:SECONDARY> db.shutdownServer()
# 默认当前所有的节点是191节点。
cd /data/app/mongodb-2.4.9/bin
./mongod -f /data/mongodb/conf/v2.4.9/mongod_s1_27017.conf --upgrade
./mongod -f /data/mongodb/conf/v2.4.9/mongod_s1_27017.conf
# 在192节点重复以上升级操作,操作步骤不再赘述。完成两个从节点升级,切换主节点,升级之前的193主节点,操作步骤如下:
shard0:PRIMARY> rs.stepDown()
shard0:PRIMARY> rs.status()
# 等到当前primary变成 SECONDARY ,其他有的 SECONDARY 变成primary,这时升级
shard0:SECONDARY> db.shutdownServer()
./mongod -f /data/mongodb/conf/v2.4.9/mongod_s1_27017.conf --upgrade
./mongod -f /data/mongodb/conf/v2.4.9/mongod_s1_27017.conf
4.1.5. 启动balancer。
/data/app/mongodb-2.4.9/bin/mongo --port 30000
mongos> sh.startBalancer()
完成2.2到2.4版本的升级。
4.2. MongoDB2.4.9升级到2.6.9
从2.4升级到2.6基本与2.2升级到2.4的过程一致,升级前要检查数据的兼容性,2.6 mongoshell 连接到MongoDB 2.4 mongos或mongod运行 db.upgradeCheckAllDBs()检查数据集的兼容性。这里就不再详细赘述,下简要列出升级的关键步骤:
检查MongoDB数据的兼容性:将2.6 mongoshell 连接到MongoDB 2.4 mongos运行 db.upgradeCheckAllDBs()以检查数据集的兼容性;
关闭balancer:mongoshell 连接到MongoDB 2.4 mongos运行sh.stopBalancer();
升级mongos路由节点:./mongos -f /data/mongodb/conf/v2.6.9/mongos_30000.conf –upgrade升级完成后正常启动命令 ./mongos -f /data/mongodb/conf/v2.6.9/mongos_30000.conf,mongos_30000.conf文件与2.4版本的一样,可以直接复制2.4版本的,为什么是一样的配置,不同版本还要一个独立的文件,只要考虑是后期的维护与升级过程中有问题回滚不破坏之前的配置;
升级config配置节点:升级所有3个mongod配置服务器实例,使参数中的第一个系统最后升级,升级时至少保持一个config在线;
升级分片和复制集节点:先升级secondry,其次升级primary(先切primary.stepDown());
启动balancer:2.6 mongoshell连接到2.6 mongos运行sh.startBalancer();
完成2.4升级到2.6版本的升级。
4.3. MongoDB2.6.9升级到3.0.2
MongoDB3.0版本开始用新引擎,升级的方案不像之前2.2 -> 2.4 -> 2.6一样,新存储引擎不兼容mmapv1数据格式,升级过程主要就是替换MongoDB的二进制应用文件,新引擎wiredTiger不兼容之前的存储数据格式,需要把数据导出,在完成升级后再导入数据。但基本上升级的步骤相差不大,详细如下:
升级概要:
关闭balancer;
升级集群元数据,mongos 路由服务器Upgrade the cluster’s meta data;
升级配置服务器Upgrade the config servers;
升级分片,复制集Upgrade the shards;
启动balancer;
下载MongoDB 3.0.2版本应用文件,下载到 /data/app/ 目录下,解压后目录命名为:mongodb-3.0.2。
4.3.1. 关闭平衡器balancer。
通过mongos关闭平衡器,可以连接到任意mongos节点上操作,我们在192.168.100.193节点上操作:
cd /data/app/mongodb-2.6.9/bin
./mongo --port 3000
mongos> use admin
switched to db admin
mongos> sh.stopBalancer()
{ "ok" : 1 }
mongos> sh.getBalancerState()
false
# 检查平衡器状态,结果false则关闭,为true则开启;
4.3.2. 升级集群元数据,mongos 路由服务器Upgrade the cluster’s meta data。
mongos一个一个升级,关闭2.6版mongos -> 3.0.2版本启动mongos,步骤:
cd /data/app/mongodb-2.6.9/bin
./mongo --port 30000
mongos> use admin
mongos> db.shutdownServer()
mongos> exit
cd /data/app/mongodb-3.0.2/bin
# /data/mongodb/conf/v3.0.2/mongos_30000.conf文件的配置与2.6版本一样。
./mongos -f /data/mongodb/conf/v3.0.2/mongos_30000.conf --upgrade
# 可以正常实例化应用启动则支持升级,把升级模式切换为正常模式
./mongo --port 30000
> use admin
> db.shutdownServer()
> exit
./mongos -f /data/mongodb/conf/v3.0.2/mongos_30000.conf
# 以上操作要在所有mongos上操作,完成所有mongos的升级。
4.3.3. 升级配置服务器Upgrade the config servers。
导出2.6版本的配置数据 -> 2.6版本升级到3.0版本 -> 导入数据,步骤:
# 导出数据
cd /data/app/mongodb-2.6.9/bin
mkdir -p /data/mongodb/data/v2.6.9/cnf_back/
.mongodump --port 20000 -o /data/mongodb/data/v2.6.9/cnf_back/
# 关闭配置
./mongo --port 20000
configsvr> use admin
configsvr> db.shutdownServer()
configsvr> exit
# 修改配置,启动3.0版本配置
cd /data/app/mongodb-3.0.2/bin
cp /data/mongodb/conf/v2.4.9/config_20000.conf /data/mongodb/conf/v3.0.2/config_20000.conf
vim /data/mongodb/conf/v3.0.2/config_20000.conf
# 修改dbpath为
dbpath = /data/mongodb/data/v3.0.2/config_20000
# 存储引擎修改为 wiredTiger,配置的最后一行增加:
storageEngine = wiredTiger
# 保存退出vim
./mongod -f /data/mongodb/conf/v3.0.2/config_20000.conf
# 导入数据
./mongorestore --port 20000 --dir /data/mongodb/data/v2.6.9/cnf_back/
# 其他配置节点相同操作
4.3.4. 升级分片,复制集Upgrade the shards。
先升级secondry,其次升级primary,注意使用新引擎开启storageEngine wiredTiger。
查看分片的集合,详细操作略去,当前的片1集为:192.168.100.191、192.168.100.192为从,192.168.100.193为主。升级的顺序为 192.168.100.191、192.168.100.192、192.168.193。
# 关闭191 mongod
cd /data/app/mongodb-2.6.9/bin/
./mongo --port 27017
shard0:SECONDARY> use admin
switched to db admin
shard0:SECONDARY> db.shutdownServer()
# 修改配置
cp /data/mongodb/conf/v2.6.9/mongod_s1_27017.conf /data/mongodb/conf/v3.0.2/mongod_s1_27017.conf
vim /data/mongodb/conf/v3.0.2/mongod_s1_27017.conf
port = 27017
data/mongodb/data/v3.0.2/mongod_s1_27017
logpath = /data/mongodb/logs/v3.0.2/27017/mongod_s1_27017.log
logappend = true
oplogSize = 100
shardsvr = true
replSet = shard0
fork = true
httpinterface=true
rest=true
storageEngine = wiredTiger
maxConns=20000
# 保存退出vim
./mongod -f /data/mongodb/conf/v3.0.2/mongod_s1_27017.conf
./mongo --port 27017
shard0:STARTUP2> rs.status()
# 等待数据同步完成,状态转换为SECONDARY,升级下一个SECONDARY节点。
shard0:SECONDARY>exit
# 192 SECONDARY节点的升级同上操作过程,详细操作略过。
# 升级primary 193节点,先切primary.stepDown(),等切换完成。操作操作与上面操作雷同,详细操作略过。
# 升级完成片1的所有集合,升级其他片,一片完成再升级一片,完成所有片的升级。
4.3.5. 开启 均衡器Re-enable the balancer。
./mongo --port 30000
mongos> sh.startBalancer()
完成3.0版本的升级。
4.4. MongoDB3.0.2升级到3.2.17
MongoDB3.0以上的版本完成了新引擎的升级后,其他版本的升级如前2.x类似,只要升级MongoDB二进制应用文件,对于3.2版本分片群集的配置服务器可以部署为副本集,3.4以上的版本分片群集的配置必须是要副本集的方式,所有3.2版本的配置将升级为副本集。
升级概要:
检查数据兼容性;
关闭balancer;
升级分片,复制集Upgrade the shards;
升级配置服务器Upgrade the config servers;
升级集群元数据,mongos 路由服务器Upgrade the cluster’s meta data;
配置服务器SCCC升级为SCRS;
启动balancer;
下载MongoDB 3.2.17版本应用文件,下载到 /data/app/ 目录下,解压后目录命名为:mongodb-3.2.17。
4.4.1. 检查mongo是否支持升级,检查时长与数据量有关,数据量越大需要时间越长。
cd /data/app/mongodb-3.2.17/bin
./mongo --port 27017
> use admin
> db.upgradeCheckAllDBs()
# 结果如果都为true则支持;
4.4.2. 关闭平衡器balancer。
通过mongos关闭平衡器,可以在任意节点上连接mongos操作,我们这在192.168.100.193节点上操作:
./mongo --port 3000
mongos> use admin
switched to db admin
mongos> sh.stopBalancer()
{ "ok" : 1 }
mongos> sh.getBalancerState()
false
# 检查平衡器状态,结果false则关闭,为true则开启;
4.4.3. 升级分片,复制集Upgrade the shards。
先升级secondry,其次升级primary。
查看分片的集合,详细操作略去,当前的片1集为:192.168.100.191、192.168.100.192为从,192.168.100.193为主。升级的顺序为 192.168.100.191、192.168.100.192、192.168.193。
# 关闭191 mongod
cd /data/app/mongodb-3.2.17/bin/
./mongo --port 27017
shard0:SECONDARY> use admin
switched to db admin
shard0:SECONDARY> db.shutdownServer()
# 修改配置
cp /data/mongodb/conf/v3.0.2/mongod_s1_27017.conf /data/mongodb/conf/v3.2.17/mongod_s1_27017.conf
vim /data/mongodb/conf/v3.port = 27017
dbpath = /data/mongodb/data/v3.0.2/mongod_s1_27017
logpath = /data/mongodb/logs/v3.0.2/27017/mongod_s1_27017.log
logappend = true
oplogSize = 100
shardsvr = true
replSet = shard0
fork = true
httpinterface = true
rest = true
storageEngine = wiredTiger
maxConns = 20000
# 保存退出vim
./mongod -f /data/mongodb/conf/v3.2.17/mongod_s1_27017.conf
./mongo --port 27017
shard0:STARTUP2> rs.status()
shard0:SECONDARY>exit
# 等待数据同步完成,状态从STARTUP2转换为SECONDARY,升级下一个SECONDARY节点。
# 192 SECONDARY节点的升级同上操作过程,详细操作略过。
# 升级primary 193节点,先切rs.stepDown(),等切换完成。操作与上面从节点操作雷同,详细操作略过。
# 升级完成片1的所有集合,升级其他片,一片完成再升级一片,完成所有片的升级。
4.4.4. 升级配置服务器Upgrade the config servers。
配置升级,MongoDB二制应用文件从3.0升级到3.2;
配置节点3.0升级到3.2顺序是mongos启动时配置的反序,如mongos启动 –configdb列表:configdb = configs/192.168.100.191:20000,192.168.100.192:20000,192.168.100.193:20000,我们升级的顺序为 193,192,191。
# 升级193配置
cd /data/app/mongodb-3.0.2/bin
# 关闭配置
./mongo --port 20000
configsvr> use admin
configsvr> db.shutdownServer()
configsvr> exit
# 修改配置,启动3.2版本配置
cd /data/app/mongodb-3.2.17/bin
cp /data/mongodb/conf/v3.0.2/config_20000.conf /data/mongodb/conf/v3.2.17/config_20000.conf
vim /data/mongodb/conf/v3.2.17/config_20000.conf
port = 20000
dbpath = /data/mongodb/data/v3.2.17/config_20000
logpath = /data/mongodb/logs/v3.2.17/20000/config_20000.log
configsvr = true
replSet = configs
maxConns = 20000
fork = true
storageEngine = wiredTiger
# 保存退出vim
./mongod -f /data/mongodb/conf/v3.2.17/config_20000.conf
# 接着升级配置节点192、191,操作步骤相同,略过详细过程。
4.4.5. 升级集群元数据,mongos路由服务器Upgrade the cluster’s meta data。
mongos一个一个升级。
cd /data/app/mongodb-3.0.2/bin
./mongo --port 30000
mongos> use admin
mongos> db.shutdownServer()
mongos> exit
cd /data/app/mongodb-3.2.17/bin
# /data/mongodb/conf/v3.2.17/mongos_30000.conf文件的配置与3.0.2版本一样。
./mongos -f /data/mongodb/conf/v3.2.17/mongos_30000.conf
# 以上升级操作要在所有mongos上操作,完成所有mongos的升级。
4.4.6. 配置服务器SCCC模式升级为SCRS模式。
SCCC升级为SCRS前提条件是:
1、分片群集中的所有二进制文件必须至少为3.2.4版本 ,我们前面已经完成升级,升级后的版本为3.2.17满足升级条件;
2、现有的配置服务器必须同步。
升级操作根据mongos配置configDB设置列表定义配置服务器的有顺序,如配置为:configdb = configs/192.168.100.191:20000,192.168.100.192:20000,192.168.100.193:20000,则第一个配置服务器为191,第二个配置服务器192,第三个配置服务器193,根据这定义升级的操作的顺序为:191,192,193;
升级操作步骤:
# mongo shell 连接到191配置服务器
/data/app/mongodb-3.2.17/mongo --port 20000
configsvr> config = {
"_id" : "configs",
"configsvr" : true,
"members" : [ { "_id": 0, "host": "192.168.100.191:20000" } ]
}
configsvr>rs.initiate(config)
rs.initiate( {
_id: "configs",
configsvr: true,
version: 1,
members: [ { _id: 0, host: "192.168.100.191:20000" } ]
} )
configsvr>db.shutdownServer()
configsvr>exit
vim /data/mongodb/conf/v3.2.17/config_20000.conf
port = 20000
dbpath = /data/mongodb/data/v3.2.17/config_20000
logpath = /data/mongodb/logs/v3.2.17/20000/config_20000.log
configsvr = true
replSet = configs
maxConns = 20000
fork = true
storageEngine = wiredTiger
# 保存退出vim
./mongod -f /data/mongodb/conf/v3.2.17/config_20000.conf
# 升级192配置服务器,ssh连接到192过程略过。
cd /data/app/mongodb-3.2.17/
/data/app/mongodb-3.2.17/mongo --port 20000
configsvr>db.shutdownServer()
configsvr>exit
vim /data/mongodb/conf/v3.2.17/config_20000.conf
port = 20000
dbpath = /data/mongodb/data/v3.2.17/config_20000
logpath = /data/mongodb/logs/v3.2.17/20000/config_20000.log
configsvr = true
replSet = configs
maxConns = 20000
fork = true
storageEngine = wiredTiger
# 保存退出vim
./mongod -f /data/mongodb/conf/v3.2.17/config_20000.conf
./mongo --host 192.168.100.191 --port 27017
configs:PRIMARY> rs.add("192.168.100.192:20000")
# 查看副本集的成员状态
configs:PRIMARY> rs.status()
# 配置服务器193的操作与192一样,不再赘述,完成SCRS升级后,修改mongos配置,重启mongos:
vim /data/mongodb/conf/v3.2.17/mongos_30000.conf
# configdb = 192.168.100.191:20000,192.168.100.192:20000,192.168.100.193:20000 修改为
configdb = configs/192.168.100.191:20000,192.168.100.192:20000,192.168.100.193:20000
# 保存退出vim
./mongo --port 30000
mongos> use admin
switched to db admin
mongos> db.shutdownServer()
mongos> exit;
./mongos -f /data/mongodb/conf/v3.2.17/mongos_30000.conf
# 完成其他所有节点mongos的配置变更及重启操作。
完成配置服务器SCCC变更为SCRS模式。
4.4.7. 启动balancer。
# mongo shell 连接到任意的mongos
/data/app/mongodb-3.2.17/bin/mongo --host 192.168.100.191 --port 30000
mongos> sh.startBalancer()
完成3.0到3.2版本的升级。
3.5. MongoDB3.2.12升级到3.4.10
升级到MongoDB3.4版本必备条件之一是配置服务器作为副本集(CSRS),我们在3.2版本升级已经完成了操作,所有符合升级的条件。升级前建议备份config数据库,但不强制备份。
升级概要:
关闭balancer;
升级配置服务器Upgrade the config servers;
升级分片,复制集Upgrade the shards;
升级集群元数据,mongos 路由服务器Upgrade the cluster’s meta data;
启动balancer;
启用向后不兼容的3.4功能;
下载MongoDB 3.4.10版本应用文件,下载到 /data/app/ 目录下,解压后目录命名为:mongodb-3.4.10。
3.5.1. 关闭balancer。
# mongo shell 连接任意mongos,我们默认连接191节点
cd /data/app/mongodb-3.2.17/bin/
./mongo --port 30000
mongos> sh.stopBalancer()
3.5.2. 置服务器Upgrade the config servers。
先升级副本集的从节点成员,再切换主节点为,升级之前的主节点。
# 查看配置服务器状态,mongo
cd /data/app/mongodb-3.2.17/bin/
./mongo --port 20000
configs:PRIMARY> rs.status()
# 191、192是从节点,193是主节点,升级的顺序:191、192、193,mongo shell连接到191配置服务器
configs:SECONDARY>use admin
switched to db admin
configs:SECONDARY> db.shutdownServer()
cd /data/app/mongodb-3.4.10/bin/
cp /data/mongodb/conf/v3.2.17/config_20000.conf /data/mongodb/conf/v3.4.10/
vim /data/mongodb/conf/v3.4.10/
port = 20000
dbpath = /data/mongodb/data/v3.4.10/config_20000
logpath = /data/mongodb/logs/v3.4.10/20000/config_20000.log
configsvr = true
replSet = configs
maxConns = 20000
fork = true
storageEngine = wiredTiger
# 保存退出vim
./mongod -f /data/mongodb/conf/v3.4.10/config_20000.conf
./mongo --port 20000
configs:SECONDARY> rs.status()
# 等待数据同步完成,状态由STATUS2变更为SECONDARY,升级192从节点,完成192节点升级后,193节点 rs.stepDown()先切换为从节点,然后升级,升级的操作步骤同上,不再赘述。
3.5.3. 升级分片,复制集Upgrade the shards。
一次升级一个分片,副本集先升级secondry,其次升级primary。
查看分片的集合,详细操作略去,当前的片1集为:192.168.100.191、192.168.100.192为从,192.168.100.193为主。升级的顺序为 192.168.100.191、192.168.100.192、192.168.193。
# 关闭191 mongod
cd /data/app/mongodb-3.0.2/bin/
./mongo --port 27017
shard0:SECONDARY> use admin
switched to db admin
shard0:SECONDARY> db.shutdownServer()
# 修改配置
cp /data/mongodb/conf/v3.0.2/mongod_s1_27017.conf /data/mongodb/conf/v3.4.10/mongod_s1_27017.conf
vim /data/mongodb/conf/v3.4.10/mongod_s1_27017.conf
port = 27017
data/mongodb/data/v3.4.10/mongod_s1_27017
logpath = /data/mongodb/logs/v3.4.10/27017/mongod_s1_27017.log
logappend = true
oplogSize = 100
shardsvr = true
replSet = shard0
fork = true
httpinterface=true
rest=true
storageEngine = wiredTiger
maxConns=20000
# 保存退出vim
./mongod -f /data/mongodb/conf/v3.4.10/mongod_s1_27017.conf
./mongo --port 27017
shard0:STARTUP2> rs.status()
# 等待数据同步完成,状态转换为SECONDARY,升级下一个SECONDARY节点。
shard0:SECONDARY>exit
# 192 SECONDARY节点的升级同上操作过程,详细操作略过。
# 升级primary 193节点,先切primary.stepDown(),等切换完成。操作操作与上面操作雷同,详细操作略过。
# 升级完成片1的所有集合,升级其他片,一片完成再升级一片,完成所有片的升级。
3.5.4. 升级集群元数据,mongos 路由服务器Upgrade the cluster’s meta data。
mongos一个一个升级,关闭3.2版mongos -> 3.3版本启动mongos,步骤:
cd /data/app/mongodb-3.2.17/bin
./mongo --port 30000
mongos> use admin
mongos> db.shutdownServer()
mongos> exit
cd /data/app/mongodb-3.4.10/bin
vim /data/mongodb/conf/v3.2.17/mongos_30000.conf
port = 30000
logpath = /data/mongodb/logs/v3.4.10/30000/mongos_30000.log
configdb = configs/192.168.100.191:20000,192.168.100.192:20000,192.168.100.193:20000
fork = true
maxConns=800
# 保存退出vim。
./mongos -f /data/mongodb/conf/v3.4.10/mongos_30000.conf
# 以上操作要在所有mongos上操作,完成所有mongos的升级。
3.5.5. 开启 均衡器Re-enable the balancer。
./mongo --port 30000
mongos> sh.startBalancer()
3.5.6. 启用向后不兼容的3.4功能。
./mongo --prot 30000
mongos> db.adminCommand( { setFeatureCompatibilityVersion: "3.4" } )
{ "ok" : 1 }
完成3.4版本的升级。
5. 总结
至此完成2.2至3.4版本的升级操作,每个版本的升级操作步骤基本上类似,注意不同版本之间升级的顺序有所不同,2版本到3版本比较大的差异是存储引擎的不同,3.2版本到3.4版本是配置服务器不再支持SCCC模式。升级过程中要求注意的问题前面已经做了归纳,提前做好规划,注意服务器的使用空间,尽量在业务使用比较低时升级,这个方案基本支持不停机操作,但还是有所影响,特别是在数据量比较大的情况下,数据的同步还容易引起带宽占用的问题。
完成升级后建议mongos、mongod的实例化用numactl –interleave=all参数启动,如:
sudo numactl --interleave=all ./mongos -f /data/mongodb/conf/v3.4.10/mongos_30000.conf
以上是关于mongodb2.2.0升级到3.4.10操作记录的主要内容,如果未能解决你的问题,请参考以下文章
记录一次离线下centos7.1升级到指定的centos7.4系统