頻道欄目
首頁 > 資訊 > 云計算 > 正文

mongodb分片

19-02-13        來源:[db:作者]  
收藏   我要投稿
環境準備

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

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

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

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

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

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,路由選擇功能
不可以存放數據,只能去連接各種節點
相關TAG標簽
上一篇:臺積電:絕大多數7nm客戶都會轉向6nm_IT新聞_博客園
下一篇:最后一頁
相關文章
圖文推薦

關于我們 | 聯系我們 | 廣告服務 | 投資合作 | 版權申明 | 在線幫助 | 網站地圖 | 作品發布 | Vip技術培訓 | 舉報中心

版權所有: 紅黑聯盟--致力于做實用的IT技術學習網站

美女MM131爽爽爽毛片