mongodb 升级到3.0.2
考虑到mongoDB 3.0推出不久,上个月还不想冒然进行升级,虽然性能说得很诱人。
现看到版本已到3.0.2,是到要升级的时候了。
开始在测试环境先做一个升级,没有问题后,再把生产环境升级到3.0.2
测试环境:
版本号:MONGODB 2.6.5
2台服务器,做成2个分片,每个分片有一个集群(1+1+1),
集群中有2台数据存储服务器+1台仲裁服务器
把仲裁服务器分别放在2台服务器中
host ip 端口信息 arbiterOnly
---------------------------------------------------------------------------------------
tm1 192.168.10.91 mongod shard1:28011
mongod shard1:28012 ------------ True
mongod shard2:28021
mongod config1:28010
mongs1:28000
mongs2:28001
tm2 192.168.10.93 mongod shard1:28013
mongod shard2:28022
mongod shard2:28023 ------------ True
mongod config:28010
mongod config2:28020
mongs2:28000
一、准备工作:
1.对 tm1 分片中的集群做升级:
1.配置新版本,建立新的目录
1.1 [192.168.10.93 服务器]
su - mongo
cd /opt/
tar -xvzf mongodb-linux-x86_64-enterprise-rhel57-3.0.2.gz
mv mongodb-linux-x86_64-enterprise-rhel57-3.0.2 mongodb3.0.2 #更改目录名称
mkdir -p /opt/mongodb3.0.2/data/shard13
mkdir -p /opt/mongodb3.0.2/data/shard22
mkdir -p /opt/mongodb3.0.2/data/shard23
mkdir -p /opt/mongodb3.0.2/logs
mkdir -p /opt/mongodb3.0.2/config
mkdir -p /opt/mongodb3.0.2/config2
1.2 先配置好3个节点及两个配置服务器的参数:
[mongo@tm2 bin]$ cat shard13_start.sh
numactl --interleave=all /opt/mongodb3.0.2/bin/mongod -f shard13.conf
[mongo@tm2 bin]$ cat shard22_start.sh
numactl --interleave=all /opt/mongodb3.0.2/bin/mongod -f shard22.conf
[mongo@tm2 bin]$ cat shard23_start.sh
numactl --interleave=all /opt/mongodb3.0.2/bin/mongod -f shard23.conf
#配置文件 (注意:配置文件中的冒号后面一定要有空格)
[mongo@tm2 bin]$ cat shard13.conf
systemLog:
destination: file
path: "/opt/mongodb3.0.2/logs/shard13.log"
logAppend: true
storage:
journal:
enabled: true
directoryPerDB: true
dbPath: "/opt/mongodb3.0.2/data/shard13"
processManagement:
fork: true
net:
#bindIp: 127.0.0.1
port: 28013
setParameter:
enableLocalhostAuthBypass: false
#分片服务器节点类型
sharding:
clusterRole: shardsvr #configsvr
replication
replSetName: shard1
同理,另外两个节点:shard22,shard23的配置文件,只是指定的文件目录,日志文件名,
集群名不一样而已。
systemLog.path: "/opt/mongodb3.0.2/logs/shard22.log"
storage.dbPath: "/opt/mongodb3.0.2/data/shard22"
replication.replSetName: shard2
1.3 两个配置服务器的启动文件及配置文件
[mongo@tm2 bin]$ cat configd_start.sh
numactl --interleave=all /opt/mongodb3.0.2/bin/mongod -f configsvr.conf
[mongo@tm2 bin]$ cat configd2_start.sh
numactl --interleave=all /opt/mongodb3.0.2/bin/mongod -f configsvr2.conf
[mongo@tm2 bin]$ cat configsvr.conf
systemLog:
destination: file
path: "/opt/mongodb3.0.2/logs/config.log"
logAppend: true
storage:
journal:
enabled: true
dbPath: "/opt/mongodb3.0.2/config"
processManagement:
fork: true
net:
#bindIp: 127.0.0.1
port: 28010
setParameter:
enableLocalhostAuthBypass: false
sharding:
clusterRole: configsvr
[mongo@tm2 bin]$ cat configsvr2.conf
systemLog:
destination: file
path: "/opt/mongodb3.0.2/logs/config2.log"
logAppend: true
storage:
journal:
enabled: true
dbPath: "/opt/mongodb3.0.2/config2"
processManagement:
fork: true
net:
#bindIp: 127.0.0.1
port: 28020
setParameter:
enableLocalhostAuthBypass: false
sharding:
clusterRole: configsvr
#拷贝文件到 91服务器
[mongo@tm2 opt]$ scp mongodb-linux-x86_64-enterprise-rhel57-3.0.2.gz tm1:/opt/
1.2 [192.168.10.91 服务器]
su - mongo
cd /opt/
tar -xvzf mongodb-linux-x86_64-enterprise-rhel57-3.0.2.gz
mv mongodb-linux-x86_64-enterprise-rhel57-3.0.2 mongodb3.0.2 #更改目录名称
mkdir -p /opt/mongodb3.0.2/data/shard11
mkdir -p /opt/mongodb3.0.2/data/shard12
mkdir -p /opt/mongodb3.0.2/data/shard21
mkdir -p /opt/mongodb3.0.2/logs
mkdir -p /opt/mongodb3.0.2/config
同理,在91服务器中的各节点统计文件等不再列出。
二、升级步骤:
2.1 关闭 均衡器
mongo -port 28000
sh.stopBalancer()
sh.getBalancerState()
2.2.升级集群元数据(Upgrade the cluster’s meta data)
/opt/mongodb3.0.2/bin/mongos --configdb 192.168.10.91:28010,192.168.10.93:28010,192.168.10.93:28020 --port 28080 --logpath /opt/mongodb3.0.2/logs/mongos.log --upgrade
如果出现以下提示,说明升级成功:
<timestamp> I SHARDING [mongosMain] upgrade of config server to v6 successful
...
<timestamp> I - [mongosMain] Config database is at version v6
2.3.升级config server
升级完成mongos 后,对config server 进行升级操作。
方法:
2.3.1 逐个导出数据,
mongodump --out <exportDataDestination>
/opt/mongodb2.6.4/bin/mongodump --port 28010 -o /opt/backup/config2.6
connected to: 127.0.0.1:28010
2015-04-21T15:54:04.603+0800 all dbs
2015-04-21T15:54:04.604+0800 DATABASE: config to /opt/backup/config2.6/config
2015-04-21T15:54:04.680+0800 config.system.indexes to /opt/backup/config2.6/config/system.indexes.bson
2015-04-21T15:54:04.682+0800 19 documents
......
2.3.2 config server 关闭,
2.3.3使用 --storageEngine wiredTiger 参数打开 3.0版本
#文件参数如下:
[mongo@tm1 bin]$ cat configd_start.sh
numactl --interleave=all /opt/mongodb2.6.5/bin/mongod --configsvr --config configsvr.conf
[mongo@tm1 bin]$ cat configsvr.conf
dbpath = /opt/mongodb2.6.5/config
port = 28010
logpath = /opt/mongodb2.6.5/logs/config.log
logappend =true
fork = true
[mongo@tm1 bin]$ ./configd_start.sh
2.3.4 导入数据
mongorestore <exportDataDestination>
/opt/mongodb3.0.2/bin/mongorestore --port 28010 --dir /opt/backup/config2.6
2015-04-21T15:56:29.394+0800 building a list of dbs and collections to restore from /opt/backup/config2.6 dir
2015-04-21T15:56:29.408+0800 reading metadata file from /opt/backup/config2.6/config/changelog.metadata.json
......
2015-04-21T15:56:37.882+0800 finished restoring config.lockpings
2015-04-21T15:56:37.882+0800 done
2.4.升级各分片中的集群节点
2.4.1 关闭主节点:
可以通过replSetStepDown命令下架主节点。这个命令可以登录主节点使用
1.db.adminCommand({replSetStepDown : 1})
以下操作是把primary 切换到secondary,并关闭服务器,
/opt/mongodb2.6.4/bin/mongo -port 28022
shard2:PRIMARY>
shard2:PRIMARY> rs.stepDown()
2015-04-21T18:12:48.777+0800 DBClientCursor::init call() failed
2015-04-21T18:12:48.780+0800 Error: error doing query: failed at src/mongo/shell/query.js:81
2015-04-21T18:12:48.783+0800 trying reconnect to 127.0.0.1:28022 (127.0.0.1) failed
2015-04-21T18:12:48.784+0800 reconnect 127.0.0.1:28022 (127.0.0.1) ok
shard2:SECONDARY> rs.status()
{
"set" : "shard2",
"date" : ISODate("2015-04-21T10:12:56Z"),
"myState" : 2,
"members" : [
{
"_id" : 0,
"name" : "192.168.10.91:28021",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 9470,
"optime" : Timestamp(1429581793, 1),
"optimeDate" : ISODate("2015-04-21T02:03:13Z"),
"lastHeartbeat" : ISODate("2015-04-21T10:12:54Z"),
"lastHeartbeatRecv" : ISODate("2015-04-21T10:12:54Z"),
"pingMs" : 37,
"syncingTo" : "192.168.10.93:28022"
},
{
"_id" : 1,
"name" : "192.168.10.93:28022",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 13065,
"optime" : Timestamp(1429581793, 1),
"optimeDate" : ISODate("2015-04-21T02:03:13Z"),
"self" : true
},
{
"_id" : 2,
"name" : "192.168.10.93:28023",
"health" : 1,
"state" : 7,
"stateStr" : "ARBITER",
"uptime" : 7865,
"lastHeartbeat" : ISODate("2015-04-21T10:12:54Z"),
"lastHeartbeatRecv" : ISODate("2015-04-21T10:12:56Z"),
"pingMs" : 0
}
],
"ok" : 1
}
shard2:SECONDARY> rs.status()
{
"set" : "shard2",
"date" : ISODate("2015-04-21T10:13:10Z"),
"myState" : 2,
"syncingTo" : "192.168.10.91:28021",
"members" : [
{
"_id" : 0,
"name" : "192.168.10.91:28021",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 9484,
"optime" : Timestamp(1429581793, 1),
"optimeDate" : ISODate("2015-04-21T02:03:13Z"),
"lastHeartbeat" : ISODate("2015-04-21T10:13:09Z"),
"lastHeartbeatRecv" : ISODate("2015-04-21T10:13:09Z"),
"pingMs" : 6,
"electionTime" : Timestamp(1429611174, 1),
"electionDate" : ISODate("2015-04-21T10:12:54Z")
},
{
"_id" : 1,
"name" : "192.168.10.93:28022",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 13079,
"optime" : Timestamp(1429581793, 1),
"optimeDate" : ISODate("2015-04-21T02:03:13Z"),
"infoMessage" : "syncing to: 192.168.10.91:28021",
"self" : true
},
{
"_id" : 2,
"name" : "192.168.10.93:28023",
"health" : 1,
"state" : 7,
"stateStr" : "ARBITER",
"uptime" : 7879,
"lastHeartbeat" : ISODate("2015-04-21T10:13:08Z"),
"lastHeartbeatRecv" : ISODate("2015-04-21T10:13:08Z"),
"pingMs" : 0
}
],
"ok" : 1
}
shard2:SECONDARY> db.shutdownServer()
2.4.2 这时其它的次节点上升为主节点,把原主节点更换成 3.0版本的mongod 实例。
使用新的存储引擎方式启动(端口号不变):
mongod --storageEngine wiredTiger --dbpath <newWiredTigerDBPath>
这时主节点会把数据同步到新的3.0版本的实例中。
当同步完成后 状态值:"stateStr" : "STARTUP2" 会变成 "stateStr" : "STARTUP"。
当此次切换完成后,可以再切换一次,从 PRIMARY 切换成 STARTUP,再把 STARTUP 服务器
关掉,再重启3.0版本的服务器,这时数据库又会把 PRIMARY 服务器的数据,同步到 STARTUP 服务器
如果有多台startup只要关闭后,启动3.0版本即可。
shard1:PRIMARY> rs.status()
{
"set" : "shard1",
"date" : ISODate("2015-04-22T02:26:27Z"),
"myState" : 1,
"members" : [
{
"_id" : 0,
"name" : "192.168.10.91:28011",
"health" : 1,
"state" : 5,
"stateStr" : "STARTUP2",
"uptime" : 2232,
"optime" : Timestamp(1429667867, 3),
"optimeDate" : ISODate("2015-04-22T01:57:47Z"),
"lastHeartbeat" : ISODate("2015-04-22T02:26:27Z"),
"lastHeartbeatRecv" : ISODate("2015-04-22T02:26:26Z"),
"pingMs" : 31,
"syncingTo" : "192.168.10.93:28013"
},
{
"_id" : 1,
"name" : "192.168.10.93:28013",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 71486,
"optime" : Timestamp(1429667867, 3),
"optimeDate" : ISODate("2015-04-22T01:57:47Z"),
"electionTime" : Timestamp(1429667221, 1),
"electionDate" : ISODate("2015-04-22T01:47:01Z"),
"self" : true
},
{
"_id" : 2,
"name" : "192.168.10.91:28014",
"health" : 1,
"state" : 7,
"stateStr" : "ARBITER",
"uptime" : 1423,
"lastHeartbeat" : ISODate("2015-04-22T02:26:26Z"),
"lastHeartbeatRecv" : ISODate("2015-04-22T02:26:26Z"),
"pingMs" : 23
}
],
"ok" : 1
2.5 打开均衡器器
sh.setBalancerState(true)
到这里,mongodb3.0的升级完成。测试内容不再列举。