MongoDB分散式叢集分片
阿新 • • 發佈:2019-09-11
MongoDB分散式叢集分片
![](https://s2.51cto.com//wyfs02/M02/84/2D/wKioL1eHgwTQx591AABn7c0AWlg25_middle.jpeg)
MongoDB高可用叢集搭建
一、環境準備
# 啟動時需要使用非root使用者,所有建立一個mongo使用者:
useradd mongo
# 為mongo使用者新增密碼:
echo 123456 | passwd --stdin mongo
# 將mongo新增到sudoers
echo "mongo ALL = (root) NOPASSWD:ALL" | tee /etc/sudoers.d/mongo
chmod 0440 /etc/sudoers.d/mongo
#解決sudo: sorry, you must have a tty to run sudo問題,在/etc/sudoer註釋掉 Default requiretty 一行
sudo sed -i 's/Defaults requiretty/Defaults:chiansun !requiretty/' /etc/sudoers
# 建立一個mongo目錄
mkdir /mongo
# 給相應的目錄新增許可權
chown -R mongo:mongo /mongo
# 配置mongo的yum源
cat >> /etc/yum.repos.d/mongodb-org-4.0.repo << EOF
[mongodb-org-4.0]
name=MongoDB Repository
baseurl=http://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
EOF
# 關閉selinux
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
setenforce 0
# 關閉防火牆
systemctl disable firewalld
systemctl stop firewalld
二、主機規劃
192.168.33.14 node-1
192.168.33.15 node-2
192.168.33.16 node-3
node-1 node-2 node-3
mongos mongos mongos 路由伺服器,定址
config config config 配置伺服器,儲存配置
shard1主 shard2主 shard3主 分片:儲存資料
shard2從 shard3從 shard1從 副本集:備份資料,可以配置讀寫分離(主負責寫,從負責同步資料和讀)
shard3從 shard1從 shard2從
三、安裝部署
# 分別在多臺機器上使用mongo使用者登入
sudo yum install -y mongodb-org
# 分別在多臺機器上建立mongo config server對應的目錄
mkdir -p /mongo/config/{log,data,run}
# 分別在多臺機器上修改config server的配置檔案
cat > /mongo/config/mongod.conf << EOF
systemLog:
destination: file
logAppend: true
path: /mongo/config/log/mongod.log
storage:
dbPath: /mongo/config/data
journal:
enabled: true
processManagement:
fork: true
pidFilePath: /mongo/config/run/mongod.pid
net:
port: 27100
bindIp: 0.0.0.0
replication:
replSetName: config
sharding:
clusterRole: configsvr
EOF
# 啟動所有的mongo config server服務
mongod --config /mongo/config/mongod.conf
# 登入任意一臺配置伺服器,初始化配置副本集
mongo --port 27100
# 建立配置
# id名要和replSetName名保持一致
config = {
_id : "config",
members : [
{_id : 0, host : "192.168.33.14:27100" },
{_id : 1, host : "192.168.33.15:27100" },
{_id : 2, host : "192.168.33.16:27100" }
]
}
# 初始化副本集配置
rs.initiate(config)
# 檢視分割槽狀態
rs.status()
# 注意:其中,"_id" : "config"應與配置檔案中配置的 replicaction.replSetName 一致,"members" 中的 "host" 為三個節點的ip和port
1.配置第一個分片和副本集
# 修改mongo shard1 server的配置檔案
mkdir -p /mongo/shard1/{log,data,run}
# 分別在多臺機器上修改shard1 server的配置檔案
cat > /mongo/shard1/mongod.conf << EOF
systemLog:
destination: file
logAppend: true
path: /mongo/shard1/log/mongod.log
storage:
dbPath: /mongo/shard1/data
journal:
enabled: true
processManagement:
fork: true
pidFilePath: /mongo/shard1/run/mongod.pid
net:
port: 27001
bindIp: 0.0.0.0
replication:
replSetName: shard1
sharding:
clusterRole: shardsvr
EOF
# 啟動所有的shard1 server
mongod --config /mongo/shard1/mongod.conf
# 登陸任意一臺shard1伺服器,初始化副本集
mongo --port 27001
# 使用admin資料庫
use admin
# 定義副本集配置
config = {
_id : "shard1",
members : [
{_id : 0, host : "192.168.33.14:27001" },
{_id : 1, host : "192.168.33.15:27001" },
{_id : 2, host : "192.168.33.16:27001" }
]
}
# 初始化副本集配置
rs.initiate(config);
# 檢視分割槽狀態
rs.status()
2.配置第二個分片和副本集
# 修改mongo shard2 server的配置檔案
mkdir -p /mongo/shard2/{log,data,run}
# 分別在多臺機器上修改shard2 server的配置檔案
cat > /mongo/shard2/mongod.conf << EOF
systemLog:
destination: file
logAppend: true
path: /mongo/shard2/log/mongod.log
storage:
dbPath: /mongo/shard2/data
journal:
enabled: true
processManagement:
fork: true
pidFilePath: /mongo/shard2/run/mongod.pid
net:
port: 27002
bindIp: 0.0.0.0
replication:
replSetName: shard2
sharding:
clusterRole: shardsvr
EOF
# 啟動所有的shard2 server
mongod --config /mongo/shard2/mongod.conf
# 登陸任意一臺shard2伺服器,初始化副本集
mongo --port 27002
# 使用admin資料庫
use admin
# 定義副本集配置
config = {
_id : "shard2",
members : [
{_id : 0, host : "192.168.33.14:27002" },
{_id : 1, host : "192.168.33.15:27002" },
{_id : 2, host : "192.168.33.16:27002" }
]
}
# 初始化副本集配置
rs.initiate(config)
# 檢視分割槽狀態
rs.status()
3.配置第三個分片和副本集
# 修改mongo shard3 server的配置檔案
mkdir -p /mongo/shard3/{log,data,run}
# 分別在多臺機器上修改shard3 server的配置檔案
cat > /mongo/shard3/mongod.conf << EOF
systemLog:
destination: file
logAppend: true
path: /mongo/shard3/log/mongod.log
storage:
dbPath: /mongo/shard3/data
journal:
enabled: true
processManagement:
fork: true
pidFilePath: /mongo/shard3/run/mongod.pid
net:
port: 27003
bindIp: 0.0.0.0
replication:
replSetName: shard3
sharding:
clusterRole: shardsvr
EOF
# 啟動所有的shard3 server
mongod --config /mongo/shard3/mongod.conf
# 登陸任意一臺的shard3伺服器,初始化副本集
mongo --port 27003
# 使用admin資料庫
use admin
# 定義副本集配置
config = {
_id : "shard3",
members : [
{_id : 0, host : "192.168.33.14:27003" },
{_id : 1, host : "192.168.33.15:27003" },
{_id : 2, host : "192.168.33.16:27003" }
]
}
# 初始化副本集配置
rs.initiate(config)
# 檢視分割槽狀態
rs.status()
4.配置mongos路由器
##### 注意:啟動mongos是守候程序是因為/mongo/mongos/mongod.conf缺少了fork: true這個配置#######
------------------------------------------------------------------------------------------
mkdir -p /mongo/mongos/{log,data,run}
# 新增mongs的配置檔案
cat > /mongo/mongos/mongod.conf << EOF
systemLog:
destination: file
logAppend: true
path: /mongo/mongos/log/mongod.log
processManagement:
fork: true
pidFilePath: /mongo/mongos/run/mongod.pid
net:
port: 27200
bindIp: 0.0.0.0
sharding:
configDB: config/192.168.33.14:27100,192.168.33.15:27100,192.168.33.16:27100
EOF
# 注意,這裡configDB後面的config要與配置伺服器的_id保持一致
# 啟動路由伺服器
mongos --config /mongo/mongos/mongod.conf
# 登入其中的一臺路由節點,手動啟用分片
mongo --port 27200
# 新增分片到mongos
sh.addShard("shard1/192.168.33.14:27001,192.168.33.15:27001,192.168.33.16:27001")
sh.addShard("shard2/192.168.33.15:27002,192.168.33.16:27002,192.168.33.14:27002")
sh.addShard("shard3/192.168.33.16:27003,192.168.33.14:27003,192.168.33.15:27003")
# 設定slave可讀
rs.slaveOk()
5.常用操作
#沒有分片是因為沒有開啟分片規則
# 對bike這個資料庫開啟分片功能
use admin
db.runCommand({"enablesharding":"bike"})
# 對bike資料庫下的users集合按id的hash進行分片
db.runCommand({"shardcollection":"bike.users","key":{_id:'hashed'}})
# 啟動所有的config server
mongod --config /mongo/config/mongod.conf
# 啟動所有的shard1
mongod --config /mongo/shard1/mongod.conf
# 啟動所有的shard2
mongod --config /mongo/shard2/mongod.conf
# 啟動所有的shard3
mongod --config /mongo/shard3/mongod.conf
# 啟動所有的mongos
mongos --config /mongo/mongos/mongod.conf
# 關閉服務
mongod --shutdown --dbpath /mongo/shard3/data
mongod --shutdown --dbpath /mongo/shard2/data
mongod --shutdown --dbpath /mongo/shard1/data
mongod --shutdown --dbpath /mongo/config/data
©著作權歸作者所有:來自51CTO部落格作者hzde0128的原創作品,如需轉載,請註明出處,否則將追究