Mongo 4.2.8 分片 + 複製集搭建

環境

IP Instance
192.168.65.129

mongos(30000)

config(27017)

shard1主節點(40001)

shard2仲裁節點(40002)

shard3副節點(40003)

192.168.65.130

mongos(30000)

config(27017)

shard1副節點(40001)

shard2主節點(40002)

shard3仲裁節點(40003)

192.168.65.131

mongos(30000)

config(27017)

shard1仲裁節點(40001)

shard2副節點(40002)

shard3主節點(40003)

3臺機,每臺機5個實例,分別mongos 1 個,config server 1 個,shard server 3 個

 

創建想應目錄

mkdir -p /mongodb/{data,logs,apps}

mkdir -p /mongodb/data/shard{1,2,3}

mkdir -p /mongodb/data/config

 

創建用戶及修改權限

/usr/sbin/groupadd -g 10001 mongodb

/usr/sbin/useradd -u 10001 -g mongodb mongodb

id mongodb

passwd mongodb

chown -R mongodb:mongodb /mongodb

chmod 775 /mongodb

 

配置 config 配置服務器

配置文件(3 個節點都一樣,無需改動):

vi /mongodb/apps/mongodb/bin/mongodb-config.conf

dbpath=/mongodb/data/config

logpath=/mongodb/logs/mongodb-config.log

port=27017

fork=true

journal=true

maxConns=500

logappend=true

pidfilepath=/tmp/mongo-config.pid

directoryperdb=true

replSet=tyconfig

configsvr=true

bind_ip=0.0.0.0

 

啓動config實例

3臺機
mongod --config /mongodb/apps/mongodb/bin/mongodb-config.conf

創建複製集

連接一個實例

mongo 192.168.65.129:27017

config={_id:"tyconfig",members:[

{_id:0,host:"192.168.65.129:27017"},

{_id:1,host:"192.168.65.130:27017"},

{_id:2,host:"192.168.65.131:27017"},

]}

這個 tyconfig 名字一定要和config 配置文件中 replSet 的名字一致

初始化複製集

rs.initiate(config)

檢查狀態

rs.status()


複製集配完後,可能狀態不會馬上改變(可能都是secondary),過幾秒就會自動更新

部署和管理分片服務器

部署shard1分片服務器

vi /mongdb/apps/mongodb/bin/mongodb-shard1.conf

dbpath=/mongodb/data/shard1
logpath=/mongodb/logs/mongodb-shard1.log
port=40001
fork=true
#auth=true
#noauth=true
#verbose=true
#vvvv=true
journal=true
maxConns=500
logappend=true
directoryperdb=true
pidfilepath=/tmp/mongo_27018.pid
#cpu=true
#nohttpinterface=false
#notablescan=false
#profile=0
#slowms=200
#quiet=true
#syncdelay=60
replSet=tyshard1
bind_ip=0.0.0.0
shardsvr=true

將此文件copy到另外2臺機器

scp /mongodb/apps/mongodb/bin/mongodb-shard1.conf [email protected]:/mongodb/apps/mongodb/bin/

scp /mongodb/apps/mongodb/bin/mongodb-shard1.conf [email protected]:/mongodb/apps/mongodb/bin/

啓動3臺shard1實例

mongod --config /mongodb/apps/mongodb/bin/mongodb-shard1.conf 

連接一個實例

mongo 192.168.65.129:40001

創建複製集

use admin

config={_id:"tyshard1",members:[

{_id:0,host:"192.168.65.129:40001",priority:2},

{_id:1,host:"192.168.65.130:40001",priority:1},

{_id:2,host:"192.168.65.131:40001",arbiterOnly:true},

]}

這個 tyshard1名字一定要和 shard1配置文件中 replSet 的名字一致

初始化複製集

rs.initiate(config)

檢查狀態

rs.status()

複製集配完後,可能狀態不會馬上改變(可能都是secondary),過幾秒就會自動更新

部署shard2分片服務器
 

將shard1的配置文件copy一份,修改其中的端口、路徑及複製集名稱。然後copy給另外2臺主機

啓動實例

mongod --config /mongodb/apps/mongodb/bin/mongodb-shard2.conf 

連接第二個節點創建複製集(爲什麼是連接第二個,因爲規劃的shard 的仲裁節點是129:40002,仲裁節點不能寫數據,所以這裏不能連129,要連130)

mongo 192.168.65.130:40002

use admin

config={_id:"tyshard2",members:[

{_id:0,host:"192.168.65.129:40002",arbiterOnly:true},

{_id:1,host:"192.168.65.130:40002",priority:2},

{_id:2,host:"192.168.65.131:40002",priority:1},

]}

這個 tyshard1名字一定要和 shard1配置文件中 replSet 的名字一致

初始化複製集

rs.initiate(config)

檢查狀態

rs.status()

複製集配完後,可能狀態不會馬上改變(可能都是secondary),過幾秒就會自動更新

 

部署shard3分片服務器

將shard1的配置文件copy一份,修改其中的端口、路徑及複製集名稱。然後copy給另外2臺主機

啓動實例

mongod --config /mongodb/apps/mongodb/bin/mongodb-shard3.conf

連接第二個節點創建複製集(爲什麼是連接第二個,因爲規劃的shard 的仲裁節點是129:40002,仲裁節點不能寫數據,所以這裏不能連129,要連130)

mongo 192.168.65.129:40003

use admin

config={_id:"tyshard3",members:[

{_id:0,host:"192.168.65.129:40003",priority:1},

{_id:1,host:"192.168.65.130:40003",arbiterOnly:true},

{_id:2,host:"192.168.65.131:40003",priority:2},

]}

這個 tyshard1名字一定要和 shard1配置文件中 replSet 的名字一致

初始化複製集

rs.initiate(config)

檢查狀態

rs.status()

複製集配完後,可能狀態不會馬上改變(可能都是secondary),過幾秒就會自動更新

創建路由實例

vi /mongodb/apps/mongodb/bin/mongodb-route.conf

pidfilepath=/mongodb/apps/mongo-route.pid

logpath=/mongodb/logs/mongodb-route.log

port=30000

fork=true

maxConns=5000

logappend=true

bind_ip=0.0.0.0

configdb=tyconfig/192.168.66.129:27017,192.168.66.130:27017,192.168.66.121:27017

並傳入另外2臺機器

scp /mongodb/apps/mongodb/bin/mongodb-route.conf [email protected]://mongodb/apps/mongodb/bin/

scp /mongodb/apps/mongodb/bin/mongodb-route.conf [email protected]://mongodb/apps/mongodb/bin/

啓動路由實例

mongos --config /mongodb/apps/mongodb/bin/mongodb-route.conf

啓用分片功能

登陸路由節點

mongo 192.168.65.129:30000

use admin

sh.addShard("tyshard1/192.168.65.129:40001,192.168.65.130:40001,192.168.65.131:40001")

sh.addShard("tyshard2/192.168.65.129:40002,192.168.65.130:40002,192.168.65.131:40002")

sh.status()

測試服務器分片功能

use config

db.settings.save({"_id":"chunksize","value":1})

模擬寫入數據

在tydb庫的tyuser表中循環寫入6萬條數據

use tydb

show collections

for(i=1;i<=60000;i++){db.tyuser.insert({"id":i,"name":"ty"+i})}

啓用數據庫分片

sh.enableSharding("tydb")
圍標創建的索引

db.tyuser.createIndex({"id":1})

 

啓用表分片

sh.shardCollection(”tydb.tyuser",{"id":1})

 

查看分片情況

sh.status()

手動添加分片服務器

mongo 192.168.65.129:30000

use admin

sh.addShard("tyshard3/192.168.65.129:40003,192.168.65.130:40003,192.168.65.131:40003")

sh.status()

服務器又對數據進行重新分片,當你再次移除一個分片服務器,此時又會對數據再次進行分片



use tydb

db.tydb.stats()

 

其他

開啓平衡器
use admin sh.startBalance()

或者

sh.setBalancerState(true)

關閉平衡器

use admin

sh.stopBalancer()

或者

sh.setBalancerState(false)

.查看是否關閉,返回flase表示平衡器已關閉,還需要查詢均衡器正在運行的 情況

sh.getBalancerState()

 

刪除分片服務器

1.執行RemoveShard命令

db.runCommand({removeshard:"tyshard3"})

2.查看遷移狀態

我們可以反覆執行上面語句,查看執行結果。

db.runCommand({removeshard:"tyshard3"})

3.移出非Shard數據

db.runCommand({movePrimary:"tydb",to:"tyshard1"})

4.最後的清理

上面步驟都完成後,還需要在執行一次RemoveShard,清理殘餘數據。

db.runCommand({removeshard:"mongodb0"})

如果要移除的分片正好是某一個表的primary,就會報錯無法移除,那麼就先進行如下操作

db.runCommand({moveprimary:"tydb",to:"tyshard1"})

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章