centos7下詳細搭建Mongodb集羣

一、Mongodb集羣( no-sql庫)集羣 搭建

1.mongo集羣的拓撲圖,先簡單瞭解一下
在這裏插入圖片描述
2.安裝 mongodb到node1,2,3節點(以下操作node1,2,3各節點上都要執行,建議使用xshell)
(1) 配置mongo的yum源
命令:vi /etc/yum.repos.d/mongodb-org.repo
在這裏插入圖片描述
按i進入編輯模式,粘貼下面的代碼,後保存退出

[mongodb-org]
name=MongoDB Repository
baseurl=http://mirrors.aliyun.com/mongodb/yum/redhat/7Server/mongodb-org/3.2/x86_64/
gpgcheck=0
enabled=1

在這裏插入圖片描述
(2) 進入etc/sysconfig/selinux目錄下,關閉selinux(可選 )

命令:vi /etc/sysconfig/selinux
補充:selinux是什麼呢?
安全增強型 Linux(Security-Enhanced Linux)簡稱 SELinux,它是一個 Linux 內核模塊,也是 Linux 的一個安全子系統。

將SELINUX改爲disabled

SELINUX=disabled

注意:修改完後,需要重啓
命令:reboot

(3) 重啓後,可選擇更新一下源(時間較久)
之後在線安裝mongodb
更新源的命令:yum update
在這裏插入圖片描述
在線安裝mongodb的命令:yum install -y mongodb-org
在這裏插入圖片描述
(4) 修改配置文件 命令:vi /etc/mongod.conf
註釋掉bindIp或者修改成當前機器的某一個ip地址。作用:讓其他機器可以正常連接虛擬機中的mongodb
在這裏插入圖片描述

3. 在node1,node2,node3創建一個mongo目錄(以下操作node1,2,3各節點上都要執行)

(1) 在node1,node2,node3創建一個mongo目錄
命令:mkdir /opt/mongo
在這裏插入圖片描述
(2) 在mongo文件夾底下創建mongos, config, shard1,shard2,shard3五個文件夾,命令如下:

mkdir /opt/mongo/mongos
mkdir /opt/mongo/config
mkdir /opt/mongo/shard1
mkdir /opt/mongo/shard2
mkdir /opt/mongo/shard3

(3) 在五個文件夾中分別對應三個子目錄用來存 data,log, run

mkdir /opt/mongo/mongos/data
mkdir /opt/mongo/config/data
mkdir /opt/mongo/shard1/data
mkdir /opt/mongo/shard2/data
mkdir /opt/mongo/shard3/data

mkdir /opt/mongo/mongos/log
mkdir /opt/mongo/config/log
mkdir /opt/mongo/shard1/log
mkdir /opt/mongo/shard2/log
mkdir /opt/mongo/shard3/log

mkdir /opt/mongo/mongos/run 
mkdir /opt/mongo/config/run 
mkdir /opt/mongo/shard1/run 
mkdir /opt/mongo/shard2/run 
mkdir /opt/mongo/shard3/run 

4.在node1,node2,node3先創建config server(以下操作node1,2,3各節點上都要執行)

(1) 分別在多臺機器上創建mongo config server對應的目錄
命令:mkdir -p /opt/mongo/config/{log,data,run}
在這裏插入圖片描述
(2) 分別在多臺機器上修改config server的配置文件,粘貼以下代碼內容後保存
命令:vi /opt/mongo/config/mongod.conf

systemLog:
  destination: file
  logAppend: true
  path: /opt/mongo/config/log/mongod.log
storage:
  dbPath: /opt/mongo/config/data
  journal:
    enabled: true
processManagement:
  fork: true
  pidFilePath: /opt/mongo/config/run/mongod.pid
net:
  port: 24000
replication:
  replSetName: config
sharding:
  clusterRole: configsvr

(3) 啓動所有的mongo config server服務
命令:mongod --config /opt/mongo/config/mongod.conf

若執行命令過程中遇到下面的問題(解決方案如下)
在這裏插入圖片描述
手動設置變量,這需要在環境變量配置文件裏添加一行。

命令: vi /etc/profile

export LC_ALL=C

刷新環境變量,命令:source /etc/profile
再執行mongod --config /opt/mongo/config/mongod.conf命令即可
在這裏插入圖片描述

5.測試登錄node1,2,3中一臺的config server, 以創建配置並激活
以登錄node1中的mongo config server爲例):
命令 :mongo --port 24000
在這裏插入圖片描述
6. 運行配置(這裏一個節點上執行就可)
(1) 在剛剛登陸的節點中執行以下命令
注意:members數組中改爲自己節點的ip,_id: config 必須與前面的 config server配置文件中的 replSetName: config 一致

config = {
   _id : "config",
    members : [
        {_id : 0, host : "192.168.28.201:24000" },
        {_id : 1, host : "192.168.28.202:24000" },
        {_id : 2, host : "192.168.28.203:24000" }
    ]
}

在這裏插入圖片描述
(2) 初始化副本集配置
命令:rs.initiate(config)

在這裏插入圖片描述
(3) 查看分區狀態
命令:rs.status()
在這裏插入圖片描述

7. 給node1,2,3 各創建第一個分片和副本集(以下操作node1,2,3各節點上都要執行)
(1) 修改mongo shard1 server的配置文件
命令:mkdir -p /opt/mongo/shard1/{log,data,run}
在這裏插入圖片描述
(2) 分別在多臺機器上修改shard1 server的配置文件,粘貼以下配置並保存
命令:vi /opt/mongo/shard1/mongod.conf

systemLog:
  destination: file
  logAppend: true
  path: /opt/mongo/shard1/log/mongod.log
storage:
  dbPath: /opt/mongo/shard1/data
  journal:
    enabled: true
processManagement:
  fork: true
  pidFilePath: /opt/mongo/shard1/run/mongod.pid
net:
  port: 25001
replication:
  replSetName: shard1
sharding:
  clusterRole: shardsvr

(3) 啓動所有的shard1 server
命令:mongod --config /opt/mongo/shard1/mongod.conf
在這裏插入圖片描述
(4) 登陸任意一臺shard1服務器(希望哪一臺機器是主,就登錄到那一臺機器上,這裏是準備將node1設爲shard1的主節點),初始化副本集(以下內容在一個節點上執行)
命令:mongo --port 25001

(5) 在(4)中登陸的節點上使用admin數據庫
命令:use admin
在這裏插入圖片描述
(6) 定義副本集配置,執行下面的內容
注意:members數組中改爲自己節點的ip,shard1 名字與上面的要一樣,副本集中各節點的順序, 第一個節點是主節點

config = {
   _id : "shard1",
    members : [
        {_id : 0, host : "192.168.28.201:25001" },
        {_id : 1, host : "192.168.28.202:25001" },
        {_id : 2, host : "192.168.28.203:25001" }
    ]
}

(7) 初始化副本集配置
命令:rs.initiate(config)
在這裏插入圖片描述
(8) 查看分區狀態
命令:rs.status()
在這裏插入圖片描述

8. 給node1,2,3 各創建第二個分片和副本集(以下操作node1,2,3各節點上都要執行)
(1) 修改mongo shard2 server的配置文件
命令: mkdir -p /opt/mongo/shard2/{log,data,run}
在這裏插入圖片描述
(2) 分別在多臺機器上修改shard2 server的配置文件,粘貼以下內容後保存
命令:vi /opt/mongo/shard2/mongod.conf

systemLog:
  destination: file
  logAppend: true
  path: /opt/mongo/shard2/log/mongod.log
storage:
  dbPath: /opt/mongo/shard2/data
  journal:
    enabled: true
processManagement:
  fork: true
  pidFilePath: /opt/mongo/shard2/run/mongod.pid
net:
  port: 25002
replication:
  replSetName: shard2
sharding:
  clusterRole: shardsvr

(3) 啓動所有的shard2 server
命令:mongod --config /opt/mongo/shard2/mongod.conf
在這裏插入圖片描述
(4) 登陸任意一臺shard2服務器(希望哪一臺機器是主,就登錄到那一臺機器上,這裏是準備將node2設爲shard2的主節點),初始化副本集(以下操作在單節點上執行)
命令:mongo --port 25002
在這裏插入圖片描述
(5) 使用admin數據庫
命令:use admin

(6) 定義副本集配置,注意改爲自己節點的ip

config = {
   _id : "shard2",
    members : [
        {_id : 0, host : "192.168.28.202:25002" },
        {_id : 1, host : "192.168.28.201:25002" },
        {_id : 2, host : "192.168.28.203:25002" }
    ]
}

(7) 初始化副本集配置
命令:rs.initiate(config)
在這裏插入圖片描述
(8) 查看分區狀態
命令:rs.status()

9. 給node1,2,3 各創建第二個分片和副本集(以下操作node1,2,3各節點上都要執行)
(1) 修改mongo shard3 server的配置文件
命令: mkdir -p /opt/mongo/shard3/{log,data,run}
在這裏插入圖片描述
(2) 分別在多臺機器上修改shard3 server的配置文件,粘貼以下內容後保存
命令:vi /opt/mongo/shard3/mongod.conf

systemLog:
  destination: file
  logAppend: true
  path: /opt/mongo/shard3/log/mongod.log
storage:
  dbPath: /opt/mongo/shard3/data
  journal:
    enabled: true
processManagement:
  fork: true
  pidFilePath: /opt/mongo/shard3/run/mongod.pid
net:
  port: 25003
replication:
  replSetName: shard3
sharding:
  clusterRole: shardsvr

(3) 啓動所有的shard3 server
命令:mongod --config /opt/mongo/shard3/mongod.conf
在這裏插入圖片描述
(4) 登陸任意一臺shard3服務器(希望哪一臺機器是主,就登錄到那一臺機器上,這裏是準備將node3設爲shard3的主節點),初始化副本集(以下操作在單節點上執行)
命令:mongo --port 25003
在這裏插入圖片描述
(5) 使用admin數據庫
命令:use admin

(6) 定義副本集配置,注意改爲自己節點的ip

config = {
   _id : "shard3",
    members : [
        {_id : 0, host : "192.168.28.203:25003" },
        {_id : 1, host : "192.168.28.201:25003" },
        {_id : 2, host : "192.168.28.202:25003" }
    ]
}

(7) 初始化副本集配置
命令:rs.initiate(config)

(8) 查看分區狀態
命令:rs.status()

10.安裝配置 mongos 進程, 給node1, 2,3各創建目錄(以下操作node1,2,3各節點上都要執行)
(1) 創建 mongos 進程所在的目錄
命令:mkdir -p /opt/mongo/mongos/{log,data,run}
在這裏插入圖片描述
(2)添加mongs的配置文件,粘貼以下內容並保存(注意改爲自己的ip)
命令:vi /opt/mongo/mongos/mongod.conf

systemLog:
  destination: file
  logAppend: true
  path: /opt/mongo/mongos/log/mongod.log
processManagement:
  fork: true
  pidFilePath: /opt/mongo/mongos/run/mongod.pid
net:
  port: 23000
sharding:
  configDB: config/192.168.28.201:24000,192.168.28.202:24000,192.168.28.203:24000

(3) 啓動所有的路由服務器
命令:mongos --config /opt/mongo/mongos/mongod.conf
在這裏插入圖片描述
(4) 登錄其中的一臺路由節點,手動啓用分片(以下操作選用一臺節點,我用node3)
命令:mongo --port 23000

(5) 添加分片到mongos(注意修改自己節點的ip)

sh.addShard("shard1/192.168.28.201:25001,192.168.28.202:25001,192.168.28.203:25001")
sh.addShard("shard2/192.168.28.202:25002,192.168.28.201:25002,192.168.28.203.25002")
sh.addShard("shard3/192.168.28.203:25003,192.168.28.201:25003,192.168.28.202:25003")

11.設置slave可讀(在命令行中生效一次),如果配置從接到可讀,那麼是連接客戶端指定的
命令(在node3中執行一次即可):rs.slaveOk()

12.使用node1,node2,node3 聯接 mongos 客戶端, 來操作mongo集羣,並在其中創建庫並開啓分片功能
(1) 創建庫
命令:use mybike
(2) 創建 bikes集合
命令:db.createCollection("bikes")
(3) 切換到admin庫,再指定某個庫啓用分片
命令:use admin
(4 對mybike這個數據庫開啓分片功能
命令:db.runCommand({"enablesharding":"mybike"})
(5) 對mybike數據庫下的bikes集合按id的hash進行分片
命令:db.runCommand({"shardcollection":"mybike.bikes","key":{_id:'hashed'}})
(6) 又切換回 mybike庫
命令:use mybike
(7) 切換到 mybike庫,向bikes集合中插入數據

db.bikes.insert(   {"status": 1, "loc": [28.189153,112.960318],"qrcode":""}   )
db.bikes.insert(   { "status": 1, "loc": [28.189155,112.960318],"qrcode":""}   )
db.bikes.insert(   {"status": 1, "loc": [28.189159,112.960318],"qrcode":""}   )
db.bikes.insert(   {"status": 1, "loc": [28.189163,112.960318],"qrcode":""}   )
db.bikes.insert(   { "status": 1, "loc": [28.189170,112.960318],"qrcode":""}   )
db.bikes.insert(   {"status": 1, "loc": [28.189393,112.943868],"qrcode":""}   )
db.bikes.insert(   { "status": 1, "loc": [28.197871,112.957641],"qrcode":""}   )
db.bikes.insert(   {"status": 1, "loc": [28.201437,112.960336],"qrcode":""}   )
db.bikes.insert(   {"status": 1, "loc": [28.201487,112.960336],"qrcode":""}   )
db.bikes.insert(   {"status": 1, "loc": [28.20392,112.958953],"qrcode":""}   )
db.bikes.insert(  {"status" : 1, "loc" : [ 28.204381, 112.959887 ], "qrcode" : ""} )
db.bikes.insert(  {  "status" : 1, "loc" : [ 28.204391, 112.959885 ], "qrcode" : ""   } )
db.bikes.insert(  {  "status" : 1, "loc" : [ 28.204481, 112.959789 ], "qrcode" : ""   } )
db.bikes.insert(  {   "status" : 1, "loc" : [ 28.204181, 112.959671 ], "qrcode" : ""  } )
db.bikes.insert(  {  "status" : 1, "loc" : [ 28.204881, 112.959556 ], "qrcode" : ""   } )
db.bikes.insert(  { "status" : 1, "loc" : [ 28.204681, 112.959874 ], "qrcode" : ""    } )
db.bikes.insert(  { "status" : 1, "loc" : [ 28.204201, 112.959867 ], "qrcode" : ""    } )
db.bikes.insert(  {   "status" : 1, "loc" : [ 28.2043941, 112.959854 ], "qrcode" : ""  } )

(8) 在mongos 進程中查詢得到的結果是所有分片要滿足條件的結果
登陸命令:mongo --port 23000
查看所有庫:show dbs
使用mybike庫:use mybike
查看mybike庫裏面集合:show collections
查詢集合裏面數據:db.bikes.find()
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章