從圖中可以看到有四個組件:mongos、config server、shard、replica set。
mongos:數據庫集群請求的入口,所有的請求都通過mongos進行協調,不需要在應用程序添加一個路由選擇器,mongos自己就是一個請求分發中心,它負責把對應的數據請求請求轉發到對應的shard服務器上。在生產環境通常有多mongos作為請求的入口,防止其中一個掛掉所有的mongodb請求都沒有辦法操作。
config server:顧名思義為配置服務器,存儲所有數據庫元信息(路由、分片)的配置。mongos本身沒有物理存儲分片服務器和數據路由信息,只是緩存在內存里,配置服務器則實際存儲這些數據。mongos第一次啟動或者關掉重啟就會從 config server 加載配置信息,以后如果配置服務器信息變化會通知到所有的 mongos 更新自己的狀態,這樣 mongos 就能繼續準確路由。在生產環境通常有多個 config server 配置服務器,因為它存儲了分片路由的元數據,這個可不能丟失!就算掛掉其中一臺,只要還有存貨, mongodb集群就不會掛掉。
shard:這就是傳說中的分片了。上面提到一個機器就算能力再大也有天花板,就像軍隊打仗一樣,一個人再厲害喝血瓶也拼不過對方的一個師。俗話說三個臭皮匠頂個諸葛亮,這個時候團隊的力量就凸顯出來了。在互聯網也是這樣,一臺普通的機器做不了的多臺機器來做。
我們要求是做的 6片的集群 參考上面3切片圖片 數據存儲 用的是內存存儲盤提高速度(機器配置 32h 260GB內存)。
一,3臺機器建立準備工作
yum -y install numactl vim ?lrzsz
mkdir -p /data/{work,app}
mkdir -p /data/work/mongodb/conf
調整存儲空間大小
umount ?/dev/shm/
mount tmpfs /dev/shm -t tmpfs -o size=200G
??
? [root@localhost work]# df -h
Filesystem ? ? ?Size ?Used Avail Use% Mounted on
/dev/sda3 ? ? ? ?78G ?1.1G ? 73G ? 2% /
/dev/sda1 ? ? ? 485M ? 31M ?429M ? 7% /boot
/dev/sdb2 ? ? ? 3.6T ? 33M ?3.6T ? 1% /data
/dev/sda2 ? ? ? 197G ?267M ?187G ? 1% /home
tmpfs ? ? ? ? ? 200G ? ? 0 ?200G ? 0% /dev/shm
cd /data/work/mongodb/?
?mkdir {shard1,shard2,shard3,shard4,shard5,shard6,server,mongos}
?
?cd /dev/shm/
?mkdir {shard1,shard2,shard3,shard4,shard5,shard6,server}
?
?二啟動sharding服務
?wget http://10.31.67.32:8099/Download/mongodb/mongodb-linux-x86_64-rhel62-3.4.2.tgz
?
?tar -zxvf mongodb-linux-x86_64-rhel62-3.4.2.tgz?
?
?mv ?mongodb-linux-x86_64-rhel62-3.4.2 /data/app/mongodb
#####開啟驗證需要 任意服務器產生kefile文件:
? ? openssl rand -base64 741 > keyfile
? ? chmod 600 keyfile
? ? 注意:要上傳到集群中每一臺服務器:/data/work/mongodb/mongo-keyfile
?
?cd /data/work/mongodb/conf
?吧配置文件上傳
cat?/data/work/mongodb/conf/shard1.conf?
storage:
? ?dbPath: /dev/shm/shard1
? ?journal:
? ? ? enabled: true
? ?directoryPerDB: true
? ?#syncPeriodSecs: 60
? ?engine: wiredTiger
processManagement:
? ?fork: true
? ?pidFilePath: /data/work/mongodb/shard1/mongod.pid
net:
? ?port: 27011
? ?http:
? ? ? enabled: false
? ?
systemLog:
? ?destination: file
? ?path: /data/work/mongodb/shard1/mongod.log
? ?logAppend: true ??
??
operationProfiling:
? ?slowOpThresholdMs: 100
? ?mode: slowOp
需要用戶認證則開啟
###security:
? ## keyFile: /data/work/mongodb/mongo-keyfile
? ?#authorization: enabled
replication:
? ?oplogSizeMB: 20000
? ?replSetName: rs001
每個配置文件 日志路徑和存儲路徑 改下即可
3臺機器從別啟動
numactl --interleave=all /data/app/mongodb/bin/mongod --shardsvr -f /data/work/mongodb/conf/shard1.conf?
numactl --interleave=all /data/app/mongodb/bin/mongod --shardsvr -f /data/work/mongodb/conf/shard2.conf?
numactl --interleave=all /data/app/mongodb/bin/mongod --shardsvr -f /data/work/mongodb/conf/shard3.conf?
numactl --interleave=all /data/app/mongodb/bin/mongod --shardsvr -f /data/work/mongodb/conf/shard4.conf?
numactl --interleave=all /data/app/mongodb/bin/mongod --shardsvr -f /data/work/mongodb/conf/shard5.conf?
numactl --interleave=all /data/app/mongodb/bin/mongod --shardsvr -f /data/work/mongodb/conf/shard6.conf?
?以上3臺機器全部執行
?讓 主從仲裁 分別在每臺機器上
?
host | rs001 | rs002 | rs003 | rs004 | rs005 | rs006 |
10.33.100.118 | 主 | 仲 | 從 | 主 | 仲 | 從 |
10.33.100.118 | 從 | 主 | 仲 | 從 | 主 | 仲 |
10.33.100.119 | 仲 | 從 | 主 | 仲 | 從 | 主 |
登入 端口27011 -27016?
?/data/app/mongodb/bin/mongo ?--port 27016?
?cfg={ _id:"rs006", members:[ {_id:0,host:'10.33.100.119:27016',priority:2}, {_id:1,host:'10.33.100.117:27016',priority:1},{_id:2,host:'10.33.100.118:27016',arbiterOnly:true}] };
?rs.initiate(cfg)
rs.status()
三啟動配置服務
[root@localhost ~]# cat ?/data/work/mongodb/conf/server.conf ?
storage:
? ?dbPath: /dev/shm/server
? ?journal:
? ? ? enabled: true
? ?directoryPerDB: true
? ?#syncPeriodSecs: 60
? ?engine: wiredTiger
processManagement:
? ?fork: true
? ?pidFilePath: /data/work/mongodb/server/mongod.pid
net:
? ?port: 27020
? ?http:
? ? ? enabled: false
? ?
systemLog:
? ?destination: file
? ?path: /data/work/mongodb/server/mongod.log
? ?logAppend: true
replication:
? ?replSetName: configReplSet
?/data/app/mongodb/bin/mongod --configsvr ?-f /data/work/mongodb/conf/server.conf?
?
3臺分別 配置服務啟動
? /data/app/mongodb/bin/mongo ?--port 27020
?rs.initiate( {_id: "configReplSet",configsvr: true,members: [{ _id: 0, host: "10.33.100.117:27020"},{ _id: 1, host: "10.33.100.118:27020"},{ _id: 2, host: "10.33.100.119:27020"}]} )
四:3臺分別路由接口
cat?/data/work/mongodb/conf/mongos.conf?
processManagement:
? ?fork: true
? ?pidFilePath: /data/work/mongodb/mongos/mongos.pid
net:
? ?port: 27030
? ?http:
? ? ? enabled: false
systemLog:
? ?destination: file
? ?path: /data/work/mongodb/mongos/mongos.log
? ?logAppend: true
sharding:
? ?configDB: configReplSet/10.33.100.117:27020,10.33.100.118:27020,10.33.100.119:27020
#配置服務的端口和地址。
?numactl --interleave=all /data/app/mongodb/bin/mongos -f /data/work/mongodb/conf/mongos.conf?
至此每個機器保證8個mongodb 進程。
? /data/app/mongodb/bin/mongo ?--port 27030
依次添加6個分片 ?
sh.addShard("rs001/10.33.100.117:27011,10.33.100.118:27011,10.33.100.119:27011")
測試分片
sh.enableSharding("test")
sh.shardCollection("test.Log", { id: 1})
use test
for(var i = 1; i <= 100000; i++){
? db.Log.save({id:i,"message":"message"+i});
? }
??
? rs.status()
? db.Log.stats()
? db.Log.drop()
轉載于:https://blog.51cto.com/hzcsky/1913947