mongoDB3.0.2 升级操作

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的升级完成。测试内容不再列举。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值