1,服務器角色解釋
A機器:192.168.1.31,config server(SECONDARY) ,shard1(PRIMARY),shard2(ARBITER),shard3(SECONDARY)前端
B機器:192.168.1.32 ,config server(SECONDARY),shard1(SECONDARY),shard2(PRIMARY),shard3(ARBITER)mongodb
C機器:192.168.1.33 ,config server(PRIMARY),shard1(ARBITER),shard2(SECONDARY),shard3(PRIMARY)數據庫
端口分配:mongos 20000、config server 21000、shard1 2700一、shard2 2700二、shard3 27003
config server :存儲元數據服務器
shard:數據分片服務器,真正存數據的
mongos:路由服務器,前端
2.建立各服務器的目錄
mkdir -p /data/mongodb/{{config,shard1,shard2,shard3}/{data,log},mongos/log,etc}
#建立各服務器的數據 log 配置的文件的目錄路徑 ,三個節點都得建立
3.建立config server,開啓服務,建立副本集ifconfigs
vim /data/mongodb/etc/config.conf #建立config服務器的配置文件vim
dbpath = /data/mongodb/config/data logpath = /data/mongodb/config/log/configsrv.log logappend = true bind_ip =192.168.1.31 # 綁定你的監聽ip port = 21000 fork = true configsvr = true #declare this is a config db of a cluster; replSet=configs #副本集名稱 maxConns=20000 #設置最大鏈接數
mongod -f /data/mongodb/etc/config.conf #用剛纔建的配置文件啓動
-----三臺機器都要執行上述操做
mongo --host 192.168.221.50 --port 21000 #登錄到config服務器服務器
config = { _id: "configs", members: [ {_id : 0, host : "192.168.1.31:21000"},{_id : 1, host : "192.168.1.32:21000"},{_id : 2, host : "192.168.1.33:21000"}] } rs.initiate(config) rs.status() #查看副本集狀態 "name" : "192.168.1.31:21000", "stateStr" : "PRIMARY", "name" : "192.168.1.32:21000", "stateStr" : "SECONDARY", "name" : "192.168.1.33:21000", "stateStr" : "SECONDARY",
4.建立分片服務器
A.建立分片服務器1 shard1
vim /data/mongodb/etc/shard1.conf #建立shard1服務器的配置文件app
pidfilepath = /var/run/mongodb/shard1.pid dbpath = /data/mongodb/shard1/data logpath = /data/mongodb/shard1/log/shard1.log logappend = true bind_ip = 192.168.1.31 #各自綁定本身的ip port = 27001 fork = true replSet=shard1 shardsvr = true maxConns=20000
-----三臺機器都要執行上述操做
mongod -f /data/mongodb/etc/shard1.conf #啓動shard1服務器
config = {_id:"shard1",members:[{_id:0,host:"192.168.1.31:27001"},{_id:1,host:"192.168.1.32:27001"},{_id:2,host:"192.168.1.33:27001",arbiterOnly:true}]}
rs.initiate(config)
rs.status()
如上圖啓動成功ide
B.建立分片服務器2 shard2
vim /data/mongodb/etc/shard2.conf #建立shard2服務器的配置文件測試
pidfilepath = /var/run/mongodb/shard2.pid dbpath = /data/mongodb/shard2/data logpath = /data/mongodb/shard2/log/shard2.log logappend = true bind_ip = 192.168.1.31 #換IP port = 27002 fork = true replSet=shard2 shardsvr = true maxConns=20000
mongod -f /data/mongodb/etc/shard2.conf #啓動shard2 服務器
------以上配置三個節點都要完成
mongo -port 27002 -host 192.168.1.32 #這個副本集要在.32上作,不能在.31上作,由於31在shard2這個副本集設置的是仲裁角色this
config = { _id: "shard2", members: [ {_id : 0, host : "192.168.1.31:27002",arbiterOnly:true},{_id : 1, host : "192.168.1.32:27002"},{_id : 2, host : "192.168.1.33:27002"}] } rs.initiate(config)
C.建立分片服務器3 shard3
vim /data/mongodb/etc/shard3.conf #建立shard3服務器的配置文件
pidfilepath = /var/run/mongodb/shard3.pid
dbpath = /data/mongodb/shard3/data
logpath = /data/mongodb/shard3/log/shard3.log
logappend = true
bind_ip = 192.168.1.31 #換IP
port = 27003
fork = true
replSet=shard3
shardsvr = true
maxConns=20000
mongod -f /data/mongodb/etc/shard3.conf #啓動shard3 服務器
------以上配置三個節點都要完成
mongo -port 27003 -host 192.168.1.313d
config={_id:"shard3",members:[{_id:0,host:"192.168.1.31:27003"},{_id:1,host:"192.168.1.32:27003",arbiterOnly:true},{_id:2,host:"192.168.1.33:27003"}]} rs.initiate(config)
5.配置路由服務器
vim /data/mongodb/etc/mongos.conf #建立mongos服務器的配置文件
pidfilepath = /var/run/mongodb/mongos.pid
logpath = /data/mongodb/mongos/log/mongos.log
logappend = true
bind_ip = 192.168.1.31 # 綁定你的監聽ip
port = 20000
fork = true
configdb = configs/192.168.1.31:21000, 192.168.1.32:21000, 192.168.1.33:21000
maxConns=20000
mongos -f /data/mongodb/etc/mongos.conf #啓動mongos服務器
mongos> sh.addShard("shard1/192.168.1.31:27001,192.168.1.32:27001,192.168.1.33:27001") mongos> sh.addShard("shard2/192.168.1.31:27002,192.168.1.32:27002,192.168.1.33:27002") mongos> sh.addShard("shard3/192.168.1.31:27003,192.168.1.32:27003,192.168.1.33:27003")
sh.status()
如上圖就是配置成功6.分片測試mongos> sh.enableSharding("testdb"); #指定要分片的數據庫mongos> sh.shardCollection("testdb.table1",{id:1}) #指定數據庫裏要分片的集合和片鍵mongos> use testdb #進入數據庫mongos> for(var i=1;i<=10000;i++) db.table1.save({id:i,test1:"testval1"}) #插入數據