mongodb分片

環境準備
 
系統系統 centos 7.4
三臺服務器:
node1(192.168.80.100)
node2(192.168.80.101)
node3(192.168.80.102)
安裝包:yum安裝

服務器規劃

服務器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
1、關閉防火牆和SElinux
systemctl    stop  firewalld
setenforce   0
2、配置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
3、安裝MongoDB:
yum  install -y mongodb-org
4、路徑規劃並創建(三臺服務器都要操作)
分別在每臺機器建立conf、mongos、config、shard1、shard2、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/

mongodb分片

5、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 [email protected]:/etc/mongodb/
scp /etc/mongodb/config.conf [email protected]:/etc/mongodb/

mongodb分片

(3)三臺服務器啓動config實例:
mongod -f /etc/mongodb/config.conf

mongodb分片

(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服務到此完成。

mongodb分片
mongodb分片

7、部署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 [email protected]:/etc/mongodb/
scp /etc/mongodb/shard1.conf [email protected]:/etc/mongodb/

mongodb分片
 

(3)啓動實例shard1(三臺都操作)
mongod -f /etc/mongodb/shard1.conf

mongodb分片

(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)

mongodb分片
mongodb分片
mongodb分片

8、設置第二個分片副本集

添加配置文件
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 [email protected]:/etc/mongodb/
scp /etc/mongodb/shard2.conf [email protected]:/etc/mongodb/

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)

mongodb分片
mongodb分片
mongodb分片

9、設置第三個分片副本集
添加配置文件
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

mongodb分片

將配置完的配置文件發送到其它服務器上
scp /etc/mongodb/shard3.conf [email protected]:/etc/mongodb/
scp /etc/mongodb/shard3.conf [email protected]:/etc/mongodb/

mongodb分片

(3)啓動實例shard3(三臺都操作)
mongod -f /etc/mongodb/shard3.conf

mongodb分片

(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)

mongodb分片
mongodb分片

10、配置路由服務器 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爲配置服務器的副本集名字

mongodb分片
mongodb分片

(2)將配置文件發送到其他服務器
scp /etc/mongodb/mongos.conf [email protected]:/etc/mongodb/
scp /etc/mongodb/mongos.conf [email protected]:/etc/mongodb/

mongodb分片

(3)啓動mongos實例
mongos -f /etc/mongodb/mongos.conf

mongodb分片

(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()

mongodb分片

11、測試服務器分片功能
目前配置服務、路由服務、分片服務、副本集服務都已經串聯起來了,但我們的目的是希望插入數據,數據能夠自動分片。連接在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表中循環寫入五萬條數據

mongodb分片

db.user.find()     //查看內容

mongodb分片

(3)啓用數據分片
sh.enableSharding("python")
//數據庫分片就有針對性,可以自定義需要分片的庫或者表,畢竟也不是所有數據都是需要分片操作的

mongodb分片

(4)爲表創建的索引
創建索引的規則是不能一致性太高,要具有唯一性,例如序號,比如性別這一類重複性太高的就不適合做索引
mongos> db.user.createIndex({"id":1})   //以”id“爲索引

mongodb分片

(5)啓用表分片
mongos> sh.shardCollection("python.user",{"id":1})

mongodb分片

(6)查看分片情況
mongos> sh.status()

mongodb分片
mongodb分片

(7)手動添加分片服務器,查看分片情況是否發生變化
use admin
sh.addShard("shard3/192.168.80.100:27003,192.168.80.101:27003,192.168.80.102:27003")

mongodb分片
 

sh.status()
服務器又對數據進行重新分片,當你再次移除一個分片服務器,此時又會對數據再次進行分片處理,MongoDB對數據的處理非常靈活

mongodb分片
mongodb分片

小結:
config server    複製集configs     分片:configsvr
 
存儲節點:
shard1     複製集:shard1  ,分片:shardsvr
shard2       複製集:shard2  ,分片:shardsvr
shard3       複製集:shard3,分片:shardsvr
 
mongos,路由選擇功能
不可以存放數據,只能去連接各種節點
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章