環境準備 系統系統 centos 7.4 三臺服務器: node1(192.168.80.100) node2(192.168.80.101) node3(192.168.80.102) 安裝包:yum安裝
服務器規劃node
服務器node1(192.168.80.100) | 服務器node2(192.168.80.101) | 服務器node3(192.168.80.102) |
---|---|---|
mongos | mongos | mongos |
config server | config server | config server |
shard server1 主節點 | shard server1 副節點 | shard server1 仲裁 |
shard server2 仲裁 | shard server2 主節點 | shard server2 副節點 |
shard server3 副節點 | shard server3 仲裁 | shard server3 主節點 |
每一臺mongodb服務器端口分配: mongos:20000 config:21000 shard1:27001 shard2:27002 shard3:27003
一、關閉防火牆和SElinux systemctl stop firewalld setenforce 0
二、配置MongoDB的yum源: [mongodb-org-4.0] name=MongoDB Repository baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/4.0/x86_64/ gpgcheck=1 enabled=1 gpgkey=https://www.mongodb.org/static/pgp/server-4.0.asc
三、安裝MongoDB: yum install -y mongodb-org
四、路徑規劃並建立(三臺服務器都要操做) 分別在每臺機器創建conf、mongos、config、shard一、shard二、shard3目錄,由於mongos不存儲數據,只須要創建日誌文件目錄便可,日誌文件建立完成以後還須要給予權限。 mkdir -p /data/mongodb/logs/ #日誌文件路徑 mkdir /etc/mongodb/ #配置文件路徑 mkdir /data/mongodb/config/ #config server數據存儲路徑 mkdir /data/mongodb/shard{1,2,3} #shard server數據存儲路徑 touch /data/mongodb/logs/shard{1,2,3}.log #shard server日誌文件 touch /data/mongodb/logs/mongos.log #mongos日誌文件 touch /data/mongodb/logs/config.log #config server日誌文件 chmod 777 /data/mongodb/logs/*.log #受權全部日誌文件均可以寫入 ll /data/mongodb/logs/
五、config server配置服務器 mongodb3.4之後要求配置服務器也建立副本集,否則集羣搭建不成功。
(1)、添加配置文件 cp -p /etc/mongod.conf /etc/mongodb/config.conf vi /etc/mongodb/config.conf 修改後內容以下: systemLog: destination: file logAppend: true path: /data/mongodb/logs/config.log storage: dbPath: /data/mongodb/config/ journal: enabled: true processManagement: fork: true pidFilePath: /data/mongodb/logs/config.pid timeZoneInfo: /usr/share/zoneinfo net: port: 21000 bindIp: 0.0.0.0 maxIncomingConnections: 20000 replication: replSetName: configs sharding: clusterRole: configsvr
(2)將配置完的配置文件發送到其它服務器上 scp /etc/mongodb/config.conf root@192.168.80.101:/etc/mongodb/ scp /etc/mongodb/config.conf root@192.168.80.102:/etc/mongodb/
(3)三臺服務器啓動config實例: mongod -f /etc/mongodb/config.conf
(4)、配置複製集(任意一臺操做便可,建議三臺服務器都進入數據庫,方便查看角色變動) mongo 127.0.0.1:21000 config={_id:"configs",members:[ {_id:0,host:"192.168.80.100:21000"}, {_id:1,host:"192.168.80.101:21000"}, {_id:2,host:"192.168.80.102:21000"}]} #建立複製集 rs.initiate(config) #初始化複製集 config server服務到此完成。
七、部署shard1分片服務器 (1)、建立配置文件 cp -p /etc/mongod.conf /etc/mongodb/shard1.conf vi /etc/mongodb/shard1.conf 修改後的內容以下: systemLog: destination: file logAppend: true path: /data/mongodb/logs/shard1.log storage: dbPath: /data/mongodb/shard1/ journal: enabled: true processManagement: fork: true pidFilePath: /data/mongodb/logs/shard1.pid timeZoneInfo: /usr/share/zoneinfo net: port: 27001 bindIp: 0.0.0.0 maxIncomingConnections: 20000 replication: replSetName: shard1 sharding: clusterRole: shardsvr
(2)將配置完的配置文件發送到其它服務器上 scp /etc/mongodb/shard1.conf root@192.168.80.101:/etc/mongodb/ scp /etc/mongodb/shard1.conf root@192.168.80.102:/etc/mongodb/
(3)啓動實例shard1(三臺都操做) mongod -f /etc/mongodb/shard1.conf
(4)登錄任意一臺非仲裁節點服務器,初始化副本集 mongo 127.0.0.1:27001 #使用admin數據庫 use admin #定義副本集配置,第三個節點的 "arbiterOnly":true 表明其爲仲裁節點。 config = { _id : "shard1", members : [ {_id : 1, host : "192.168.80.100:27001" , priority:100}, {_id : 2, host : "192.168.80.101:27001" , priority:90}, {_id : 3, host : "192.168.80.102:27001" , arbiterOnly: true } ] } 注:不是在任一臺服務器上建立都能成功的,若是選擇在預先設置爲仲裁節點的服務器上建立複製集會報錯 #初始化副本集配置 rs.initiate(config)
八、設置第二個分片副本集 添加配置文件 cp -p /etc/mongod.conf /etc/mongodb/shard2.conf vi /etc/mongodb/shard2.conf # 配置文件內容 systemLog: destination: file logAppend: true path: /data/mongodb/logs/shard2.log storage: dbPath: /data/mongodb/shard2/ journal: enabled: true processManagement: fork: true pidFilePath: /data/mongodb/logs/shard2.pid timeZoneInfo: /usr/share/zoneinfo net: port: 27002 bindIp: 0.0.0.0 maxIncomingConnections: 20000 replication: replSetName: shard2 sharding: clusterRole: shardsvr
(2)將配置完的配置文件發送到其它服務器上 scp /etc/mongodb/shard2.conf root@192.168.80.101:/etc/mongodb/ scp /etc/mongodb/shard2.conf root@192.168.80.102:/etc/mongodb/
(3)啓動實例shard2(三臺都操做) mongod -f /etc/mongodb/shard2.conf
(4) 登錄任意一臺非仲裁節點服務器,初始化副本集在80.102上做這條命令否則不會成功的 mongo 127.0.0.1:27002 #使用admin數據庫 use admin #定義副本集配置,第一個節點的 "arbiterOnly":true 表明其爲仲裁節點。 config = { _id : "shard2", members : [ {_id : 1, host : "192.168.80.100:27002" , arbiterOnly: true }, {_id : 2, host : "192.168.80.101:27002" , priority:2}, {_id : 3, host : "192.168.80.102:27002" , priority:1} ] } #初始化副本集配置 rs.initiate(config)
九、設置第三個分片副本集 添加配置文件 cp -p /etc/mongodb/shard2.conf /etc/mongodb/shard3.conf vi /etc/mongodb/shard3.conf :% s/2/3/g //把當前文件下的2換成3 記得把端口上的2改回來 ## 配置文件內容 systemLog: destination: file logAppend: true path: /data/mongodb/logs/shard3.log storage: dbPath: /data/mongodb/shard3/ journal: enabled: true processManagement: fork: true pidFilePath: /data/monodb/logs/shard3.pid timeZoneInfo: /usr/share/zoneinfo net: port: 27003 bindIp: 0.0.0.0 maxIncomingConnections: 20000 replication: replSetName: shard3 sharding: clusterRole: shardsvr
將配置完的配置文件發送到其它服務器上 scp /etc/mongodb/shard3.conf root@192.168.80.101:/etc/mongodb/ scp /etc/mongodb/shard3.conf root@192.168.80.102:/etc/mongodb/
(3)啓動實例shard3(三臺都操做) mongod -f /etc/mongodb/shard3.conf
(4) 登錄任意一臺非仲裁節點服務器,初始化副本集 mongo 127.0.0.1:27003 #使用admin數據庫 use admin #定義副本集配置,第二個節點的 "arbiterOnly":true 表明其爲仲裁節點。 config = { _id : "shard3", members : [ {_id : 1, host : "192.168.80.100:27003" , priority:1}, {_id : 2, host : "192.168.80.101:27003" , arbiterOnly: true}, {_id : 3, host : "192.168.80.102:27003" , priority:2} ] } #初始化副本集配置 rs.initiate(config)
十、配置路由服務器 mongos 先啓動配置服務器和分片服務器,後啓動路由實例啓動路由實例:(三臺機器) (1)建立配置文件 cp -p /etc/mongodb/shard2.conf /etc/mongodb/mongos.conf vi /etc/mongodb/mongos.conf ## 配置文件內容 systemLog: destination: file logAppend: true path: /data/mongodb/logs/mongos.log processManagement: fork: true pidFilePath: /data/mongodb/logs/mongos.pid timeZoneInfo: /usr/share/zoneinfo net: port: 20000 bindIp: 0.0.0.0 maxIncomingConnections=20000 sharding: configDB: configs/192.168.80.100:21000, 192.168.80.101:21000, 192.168.80.102:21000 #注意監聽的配置服務器,只能有1個或者3個 csReplSet爲配置服務器的副本集名字
(2)將配置文件發送到其餘服務器 scp /etc/mongodb/mongos.conf root@192.168.80.100:/etc/mongodb/ scp /etc/mongodb/mongos.conf root@192.168.80.101:/etc/mongodb/
(3)啓動mongos實例 mongos -f /etc/mongodb/mongos.conf
(4)啓用分片 目前搭建了mongodb配置服務器、路由服務器,各個分片服務器,不過應用程序鏈接到mongos路由服務器並不能使用分片機制,還須要在程序裏設置分片配置,讓分片生效。 登錄任意一臺mongos mongo 127.0.0.1:20000 #使用admin數據庫 use admin #串聯路由服務器與分配副本集 sh.addShard("shard1/192.168.80.100:27001,192.168.80.101:27001,192.168.80.102:27001") sh.addShard("shard2/192.168.80.100:27002,192.168.80.101:27002,192.168.80.102:27002")
#查看集羣狀態 mongos> sh.status()
十一、測試服務器分片功能 目前配置服務、路由服務、分片服務、副本集服務都已經串聯起來了,但咱們的目的是但願插入數據,數據可以自動分片。鏈接在mongos上,準備讓指定的數據庫、指定的集合分片生效。 mongo 127.0.0.1:20000 (1)設置分片chunk大小 mongos> use config mongos> db.settings.save({"_id":"chunksize","value":1}) //設置塊大小爲1M是方便實驗,否則就須要插入海量數據才能分片
(2)模擬寫入數據 use python show collections for(i=1;i<=50000;i++){db.user.insert({"id":i,"name":"jack"+i})} //在python庫的user表中循環寫入五萬條數據
db.user.find() //查看內容
(3)啓用數據分片 sh.enableSharding("python") //數據庫分片就有針對性,能夠自定義須要分片的庫或者表,畢竟也不是全部數據都是須要分片操做的
(4)爲表建立的索引 建立索引的規則是不能一致性過高,要具備惟一性,例如序號,好比性別這一類重複性過高的就不適合作索引 mongos> db.user.createIndex({"id":1}) //以」id「爲索引
(5)啓用表分片 mongos> sh.shardCollection("python.user",{"id":1})
(6)查看分片狀況 mongos> sh.status()
(7)手動添加分片服務器,查看分片狀況是否發生變化 use admin sh.addShard("shard3/192.168.80.100:27003,192.168.80.101:27003,192.168.80.102:27003")
sh.status() 服務器又對數據進行從新分片,當你再次移除一個分片服務器,此時又會對數據再次進行分片處理,MongoDB對數據的處理很是靈活
小結: config server 複製集configs 分片:configsvr 存儲節點: shard1 複製集:shard1 ,分片:shardsvr shard2 複製集:shard2 ,分片:shardsvr shard3 複製集:shard3,分片:shardsvr mongos,路由選擇功能 不能夠存放數據,只能去鏈接各類節點