mongodb分片

環境準備
 
系統系統 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/

mongodb分片

五、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/

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分片

七、部署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/

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分片

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

添加配置文件
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/

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分片

九、設置第三個分片副本集
添加配置文件
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 root@192.168.80.101:/etc/mongodb/
scp /etc/mongodb/shard3.conf root@192.168.80.102:/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分片

十、配置路由服務器 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 root@192.168.80.100:/etc/mongodb/
scp /etc/mongodb/mongos.conf root@192.168.80.101:/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分片

十一、測試服務器分片功能
目前配置服務、路由服務、分片服務、副本集服務都已經串聯起來了,但咱們的目的是但願插入數據,數據可以自動分片。鏈接在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,路由選擇功能
不能夠存放數據,只能去鏈接各類節點
相關文章
相關標籤/搜索