天天看點

mongodb安裝最新版本并恢複成相同的舊環境

需求方說有一個mongo節點挂掉了,現在需要按照原來的配置重新搭建mongodb,并換成mongodb最新版本: 

目前的環境: 

[root@mongodb1 ~]# ps -ef|grep mongo 

avahi     2502     1  0 sep24 ?        00:24:33 avahi-daemon: running [mongodb1.local] 

root      2848     1  2 sep24 ?        2-00:59:16 /home/mongodb/mongodb-linux-x86_64-2.4.9/bin/mongod -shardsvr -port 29017 -dbpath /home/mongodb/data/shard1t -oplogsize 10000 -logpath /home/mongodb/data/shard1t.log -fork --rest 

root      2862     1  9 sep24 ?        7-21:26:42 /home/mongodb/mongodb-linux-x86_64-2.4.9/bin/mongod -shardsvr -port 29018 -dbpath /home/mongodb/data1/shard2t -oplogsize 10000 -logpath /home/mongodb/data/shard2t.log -fork --rest  ---上面兩個是mongo的兩個分片 

root      2893     1  0 sep24 ?        18:14:21 /home/mongodb/mongodb-linux-x86_64-2.4.9/bin/mongod --configsvr --dbpath /home/mongodb/data/configt/ --port 27000 -logpath /home/mongodb/data/configt.log --fork    ---這個是configs 

root      2912     1  3 sep24 ?        2-13:06:11 /home/mongodb/mongodb-linux-x86_64-2.4.9/bin/mongos --configdb 192.168.12.220:27000 -port 45000 -chunksize 1024 --logpath /home/mongodb/data/mongost.log -fork   ---這個肯定是mongos了 

root     23851  1890  0 14:13 pts/0    00:00:00 ./mongo 127.0.0.1:45000 

root     24368 24349  0 14:20 pts/1    00:00:00 grep mongo 

同時可以看到資料的存放目錄 

/home/mongodb/data/shard1t   ---29017 

/home/mongodb/data1/shard2t  ---29018 

[root@mongodb1 ~]# df -ah 

檔案系統       容量  已用  可用 已用%% 挂載點 

/dev/sdc2              97g   70g   22g  76% / 

proc                     0     0     0   -  /proc 

sysfs                    0     0     0   -  /sys 

devpts                   0     0     0   -  /dev/pts 

tmpfs                  63g     0   63g   0% /dev/shm 

/dev/sdc1             194m   32m  153m  17% /boot 

/dev/sdc4             790g  501g  250g  67% /home/mongodb/data     ----需求方要求這個目錄下放1個分片 

/dev/md127            1.8t  924g  817g  54% /home/mongodb/data1    ----需求方要求這個目錄下放2個分片 

none                     0     0     0   -  /proc/sys/fs/binfmt_misc 

sunrpc                   0     0     0   -  /var/lib/nfs/rpc_pipefs 

根據要求,我們可以這樣建立: 

/home/mongodb/data1/shard2n  ---29019   ---這個目錄是之前那個挂掉的分片使用的,我們可以繼續沿用 

[root@mongodb1 ~]# /home/mongodb/mongodb-linux-x86_64-2.4.9/bin/mongo 192.168.12.220:45000/admin  ---進入mongos 

mongodb shell version: 2.4.9 

connecting to: 192.168.12.220:45000/admin 

mongos> show dbs; 

admin (empty) 

config 0.109375gb 

vds 937.4501953125gb    --這個肯定是存放資料的資料庫了,進去看看表 

mongos> use vds;     ---進入vds 

switched to db vds 

mongos> show collections; --檢視到有以下表,需求方隻要求建立分片的兩個表,并建好跟之前一樣的索引 

count_temp_58ade9e6 

count_temp_6bffe2c0 

count_temp_c83251cb 

count_temp_fb2ba5b8 

system.indexes 

t_url_count 

t_url_event 

tteemp1 

ttemp1 

ttemp2 

ttemp3 

week_url_count_v1_49 

mongos> db.printshardingstatus()  --檢視分片資訊 

--- sharding status --- 

  sharding version: { 

"_id" : 1, 

"version" : 3, 

"mincompatibleversion" : 3, 

"currentversion" : 4, 

"clusterid" : objectid("53c884e667bfb0785736b7cb") 

  shards: 

{  "_id" : "shard0000",  "host" : "192.168.12.220:29017" } 

{  "_id" : "shard0001",  "host" : "192.168.12.220:29018" } 

  databases: 

{  "_id" : "admin",  "partitioned" : false,  "primary" : "config" } 

{  "_id" : "vds",  "partitioned" : true,  "primary" : "shard0000" } 

vds.t_url_count 

shard key: { "add_date" : 1, "sub_url_hash" : 1 } 

chunks: 

shard0000 76 

shard0001 225 

too many chunks to print, use verbose if you want to force print 

vds.t_url_event 

shard key: { "source" : 1, "add_date" : 1 } 

shard0001 4097 

shard0000 3554 

{  "_id" : "test",  "partitioned" : false,  "primary" : "shard0000" } 

mongos> db.t_url_count.findone()  ---檢視表t_url_count結構和資料 

"_id" : objectid("53dfb4ccffee1a542522ae6f"), 

"add_date" : 20140805, 

"count" : 1, 

"new_flag" : true, 

"sample_flag" : "1", 

"sample_md5" : "1cf2ae74144afe0af5df2b0d506c101f", 

"source" : "hebei", 

"sub_url" : "117.27.243.80/bcs.apk.r1.91rb.com/data/upload/apkres/2014/7_31/22/com.baidu.music.lebo_100550.apk", 

"sub_url_hash" : "a84c6bc402f9667fe262fdc8f7e20e69", 

"url_domain" : "117.27.243.80", 

"url_domain_hash" : "4b57142d262f97ab347dc5c762dcbe20", 

"virus_flag" : "0", 

"virusname" : "virusname_init" 

mongos> db.t_url_event.findone() 

"_id" : objectid("53c88772ffee1a1f14072e41"), 

"add_date" : isodate("2014-07-18t10:33:22.200z"), 

"source" : "guizhou", 

"url_domain" : "gdown.baidu.com", 

"sub_url_hash" : "f5a3a0ffb5052f4e46f1b8153ad59f84", 

"dstip" : "119.84.87.12", 

"sub_url" : "gdown.baidu.com/data/wisegame/1ea2ac084e55bc09/tengxunshipin_5905.apk", 

"url" : "gdown.baidu.com/data/wisegame/1ea2ac084e55bc09/tengxunshipin_5905.apk", 

"protoid" : 304, 

"dport" : 38108, 

"srcip" : "114.139.222.229", 

"sport" : 80, 

"url_domain_hash" : "b7b23135ee9c320c84dcc1c68b8641e6", 

"utime" : "2014-07-09 14:31:10" 

找到參數檔案配置: 

下載下傳最新版本: 

https://www.mongodb.org/downloads#production 

[root@mongodb1 mongodb]# tar -zxvf mongodb-linux-x86_64-3.2.0.tgz 

mongodb-linux-x86_64-3.2.0/readme 

mongodb-linux-x86_64-3.2.0/third-party-notices 

mongodb-linux-x86_64-3.2.0/mpl-2 

mongodb-linux-x86_64-3.2.0/gnu-agpl-3.0 

mongodb-linux-x86_64-3.2.0/bin/mongodump 

mongodb-linux-x86_64-3.2.0/bin/mongorestore 

mongodb-linux-x86_64-3.2.0/bin/mongoexport 

mongodb-linux-x86_64-3.2.0/bin/mongoimport 

mongodb-linux-x86_64-3.2.0/bin/mongostat 

mongodb-linux-x86_64-3.2.0/bin/mongotop 

mongodb-linux-x86_64-3.2.0/bin/bsondump 

mongodb-linux-x86_64-3.2.0/bin/mongofiles 

mongodb-linux-x86_64-3.2.0/bin/mongooplog 

mongodb-linux-x86_64-3.2.0/bin/mongoperf 

mongodb-linux-x86_64-3.2.0/bin/mongod 

mongodb-linux-x86_64-3.2.0/bin/mongos 

mongodb-linux-x86_64-3.2.0/bin/mongo 

關閉舊的環境: 

[root@mongodb1 ~]# /home/mongodb/mongodb-linux-x86_64-2.4.9/bin/mongo localhost:45000/admin   --關閉mongos 

connecting to: localhost:45000/admin 

mongos> use admin 

switched to db admin 

mongos> db.shutdownserver() 

thu dec 17 15:04:56.195 dbclientcursor::init call() failed 

server should be down... 

thu dec 17 15:04:56.198 trying reconnect to localhost:45000 

thu dec 17 15:04:56.199 reconnect localhost:45000 failed couldn't connect to server localhost:45000 

> 

[root@mongodb1 mongodb]# /home/mongodb/mongodb-linux-x86_64-2.4.9/bin/mongo localhost:27000   --關閉configs 

connecting to: localhost:27000/test 

server has startup warnings: 

thu sep 24 09:20:24.653 [initandlisten] 

thu sep 24 09:20:24.654 [initandlisten] ** warning: you are running on a numa machine. 

thu sep 24 09:20:24.654 [initandlisten] **          we suggest launching mongod like this to avoid performance problems: 

thu sep 24 09:20:24.654 [initandlisten] **              numactl --interleave=all mongod [other options] 

thu sep 24 09:20:24.654 [initandlisten] 

configsvr> use admin 

configsvr> db.shutdownserver(); 

thu dec 17 15:06:46.561 dbclientcursor::init call() failed 

thu dec 17 15:06:46.563 trying reconnect to localhost:27000 

thu dec 17 15:06:46.563 reconnect localhost:27000 failed couldn't connect to server localhost:27000 

root@mongodb1 mongodb]# /home/mongodb/mongodb-linux-x86_64-2.4.9/bin/mongo localhost:29017  --相應關閉兩個分片 

connecting to: localhost:29017/test 

thu sep 24 09:19:22.531 [initandlisten] 

thu sep 24 09:19:22.531 [initandlisten] ** warning: you are running on a numa machine. 

thu sep 24 09:19:22.531 [initandlisten] **          we suggest launching mongod like this to avoid performance problems: 

thu sep 24 09:19:22.531 [initandlisten] **              numactl --interleave=all mongod [other options] 

> use admin 

> db.shutdownserver(); 

thu dec 17 15:07:27.355 dbclientcursor::init call() failed 

thu dec 17 15:07:27.358 trying reconnect to localhost:29017 

thu dec 17 15:07:27.359 reconnect localhost:29017 failed couldn't connect to server localhost:29017 

[root@mongodb1 mongodb]# ps -ef|grep mongo 

root     27675 24811  0 15:08 pts/3    00:00:00 grep mongo 

下面可以開始删除原始資料了 

删除資料: 

cd /home/mongodb/data/shard1t    rm -fr * 

cd /home/mongodb/data1/shard2t   rm -fr * 

cd /home/mongodb/data1/shard2n   rm -fr * 

删除日志: 

cd /home/mongodb/data/  rm -f *log* 

删除配置目錄下内容: 

cd /home/mongodb/data/configt/ 

可以重新搭建新環境了: 

啟動configs: 

/home/mongodb/mongodb-linux-x86_64-3.2.0/bin/mongod --configsvr --dbpath /home/mongodb/data/configt/ --port 27000 -logpath /home/mongodb/data/configt.log --fork 

啟動mongos: 

/home/mongodb/mongodb-linux-x86_64-3.2.0/bin/mongos --configdb 192.168.12.220:27000 -port 45000 -chunksize 1024 --logpath /home/mongodb/data/mongost.log -fork   

啟動三個mongod分片: 

/home/mongodb/mongodb-linux-x86_64-3.2.0/bin/mongod -shardsvr -port 29017 -dbpath /home/mongodb/data/shard1t -oplogsize 10000 -logpath /home/mongodb/data/shard1t.log -fork --rest 

/home/mongodb/mongodb-linux-x86_64-3.2.0/bin/mongod -shardsvr -port 29018 -dbpath /home/mongodb/data1/shard2t -oplogsize 10000 -logpath /home/mongodb/data/shard2t.log -fork --rest 

/home/mongodb/mongodb-linux-x86_64-3.2.0/bin/mongod -shardsvr -port 29019 -dbpath /home/mongodb/data1/shard2n -oplogsize 10000 -logpath /home/mongodb/data/shard2n.log -fork --rest 

連接配接到mongos添加三個分片: 

[root@mongodb1 data]# /home/mongodb/mongodb-linux-x86_64-3.2.0/bin/mongo 192.168.12.220:45000/admin 

mongodb shell version: 3.2.0 

mongos> 

mongos> db.runcommand({"addshard":"192.168.12.220:29017"}); 

{ "shardadded" : "shard0000", "ok" : 1 } 

mongos> db.runcommand({"addshard":"192.168.12.220:29018"}); 

{ "shardadded" : "shard0001", "ok" : 1 } 

mongos> db.runcommand({"addshard":"192.168.12.220:29019"}); 

{ "shardadded" : "shard0002", "ok" : 1 } 

mongos> db.printshardingstatus()  --添加分片成功 

"mincompatibleversion" : 5, 

"currentversion" : 6, 

"clusterid" : objectid("56726310c437b898a5bd5655") 

{  "_id" : "shard0002",  "host" : "192.168.12.220:29019" } 

  active mongoses: 

"3.2.0" : 1 

  balancer: 

currently enabled:  yes 

currently running:  no 

failed balancer rounds in last 5 attempts:  0 

migration results for the last 24 hours: 

no recent migrations 

建立庫: 

mongos>use vds     ---直接use dbname就可以建立庫,但必須保證庫裡有表,不然空庫就被自動删除了。 

建立表: 

mongos> db.t_url_count.insert(  

}) 

mongos> db.t_url_event.insert({"_id" : objectid("53c88772ffee1a1f14072e41"), 

"utime" : "2014-07-09 14:31:10"}) 

writeresult({ "ninserted" : 1 }) 

檢視表: 

mongos> show collections; 

建立索引: 

mongos> use vds; 

mongos> db.t_url_event.ensureindex({"source":1, "add_date":1}) 

"raw" : { 

"192.168.12.220:29017" : { 

"createdcollectionautomatically" : false, 

"numindexesbefore" : 1, 

"numindexesafter" : 2, 

"ok" : 1 

}, 

mongos> db.t_url_count.ensureindex({"add_date":1, "sub_url_hash":1}) 

設定允許庫分片: 

mongos> db.runcommand({"enablesharding":"vds"}); 

{ "ok" : 1 } 

添加表到分片: 

mongos> db.runcommand({"shardcollection":"vds.t_url_count","key":{"add_date":1, "sub_url_hash":1}}) 

{ "collectionsharded" : "vds.t_url_count", "ok" : 1 } 

mongos> db.runcommand({"shardcollection":"vds.t_url_event","key":{"source":1, "add_date":1}}) 

{ "collectionsharded" : "vds.t_url_event", "ok" : 1 } 

檢視最後結果: 

mongos> db.printshardingstatus() 

{  "_id" : "vds",  "primary" : "shard0000",  "partitioned" : true } 

unique: false 

balancing: true 

shard0000 1 

{ "add_date" : { "$minkey" : 1 }, "sub_url_hash" : { "$minkey" : 1 } } -->> { "add_date" : { "$maxkey" : 1 }, "sub_url_hash" : { "$maxkey" : 1 } } on : shard0000 timestamp(1, 0) 

{ "source" : { "$minkey" : 1 }, "add_date" : { "$minkey" : 1 } } -->> { "source" : { "$maxkey" : 1 }, "add_date" : { "$maxkey" : 1 } } on : shard0000 timestamp(1, 0) 

{  "_id" : "t_url_event",  "primary" : "shard0001",  "partitioned" : true } 

{  "_id" : "t_url_count",  "primary" : "shard0001",  "partitioned" : true } 

[root@mongodb1 bin]# ps -ef|grep mongo 

root     27963     1  0 15:23 ?        00:00:11 /home/mongodb/mongodb-linux-x86_64-3.2.0/bin/mongod --configsvr --dbpath /home/mongodb/data/configt/ --port 27000 -logpath /home/mongodb/data/configt.log --fork 

root     27990     1  0 15:23 ?        00:00:03 /home/mongodb/mongodb-linux-x86_64-3.2.0/bin/mongos --configdb 192.168.12.220:27000 -port 45000 -chunksize 1024 --logpath /home/mongodb/data/mongost.log -fork 

root     28062     1  0 15:24 ?        00:00:11 /home/mongodb/mongodb-linux-x86_64-3.2.0/bin/mongod -shardsvr -port 29017 -dbpath /home/mongodb/data/shard1t -oplogsize 10000 -logpath /home/mongodb/data/shard1t.log -fork --rest 

root     28094     1  0 15:25 ?        00:00:10 /home/mongodb/mongodb-linux-x86_64-3.2.0/bin/mongod -shardsvr -port 29018 -dbpath /home/mongodb/data1/shard2t -oplogsize 10000 -logpath /home/mongodb/data/shard2t.log -fork --rest 

root     28117     1  0 15:25 ?        00:00:10 /home/mongodb/mongodb-linux-x86_64-3.2.0/bin/mongod -shardsvr -port 29019 -dbpath /home/mongodb/data1/shard2n -oplogsize 10000 -logpath /home/mongodb/data/shard2n.log -fork --rest 

root     28401 24811  0 15:34 pts/3    00:00:00 /home/mongodb/mongodb-linux-x86_64-3.2.0/bin/mongo 192.168.12.220:45000/admin 

root     28645 24834  0 15:45 pts/4    00:00:00 grep mongo 

完成!