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操作记录的主要内容,如果未能解决你的问题,请参考以下文章

Elasticsearch1.7.3升级到2.4.2记录

centos下升级git版本的操作记录

记录一次离线下centos7.1升级到指定的centos7.4系统

DS4700磁盘阵列的控制器微码升级操作记录(收录百度文库)

centos7操作系统内核升级

antd从v3升级到v4记录