docker-compose 安裝mongodb叢集==多臺伺服器
伺服器
192.168.5.201 192.168.5.202 192.168.5.203
=========openssl生成檔案報錯====================
ssl生成檔案報錯:
[root@localhost ~]# openssl rand -base64 741 > key.file openssl: error while loading shared libraries: libssl.so.1.1: cannot open shared object file: No such file or directory 這是由於openssl庫的位置不正確造成的。 解決方法: 在root使用者下執行: ln-s /usr/local/lib64/libssl.so.1.1 /usr/lib64/libssl.so.1.1 ln -s /usr/local/lib64/libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1
==========以下每臺都執行========================
映象
docker pull mongo:4.2.7
網路
docker network create --subnet=10.20.0.0/24 mongodbnet
mkdir -p /home/soft/mongoCluster
Config-Server 配置檔案
路徑:vi /home/soft/mongoCluster/mongod.conf
storage: dbPath: /data/db journal: enabled: true systemLog: destination: file logAppend: true path: /var/log/mongodb/mongod.log net: bindIp: 0.0.0.0 processManagement: timeZoneInfo: /usr/share/zoneinfo replication: replSetName: cfg sharding: clusterRole: configsvr # security: # keyFile:/data/mongodb/key.file # authorization: enabled
Mongos 配置檔案
路徑:vi /home/soft/mongoCluster/mongos.conf
systemLog: destination: file logAppend: true path: /var/log/mongodb/mongos.log net: port: 27020 bindIp: 0.0.0.0 processManagement: fork: true timeZoneInfo: /usr/share/zoneinfo # security: # keyFile: /data/mongodb/key.file sharding: configDB: cfg/192.168.5.201:27019,192.168.5.202:27019,192.168.5.203:27019
路徑:vi /home/soft/mongoCluster/first_mkdir.sh
mkdir -p /home/soft/mongodbcompose/conf/config mkdir -p /home/soft/mongodbcompose/conf/db mkdir -p /home/soft/mongodbcompose/shard1/config mkdir -p /home/soft/mongodbcompose/shard1/db mkdir -p /home/soft/mongodbcompose/shard1/backup mkdir -p /home/soft/mongodbcompose/shard2/config mkdir -p /home/soft/mongodbcompose/shard2/db mkdir -p /home/soft/mongodbcompose/shard2/backup mkdir -p /home/soft/mongodbcompose/mongos/config mkdir -p /home/soft/mongodbcompose/mongos/db
生成認證檔案 root 使用者 三臺共用一個
openssl rand -base64 741 > key.file chmod 600 key.file chown 999 key.file mv key.file /home/soft/mongodbcompose
檔案複製指令碼
路徑:vi /home/soft/mongoCluster/second_mv.sh
#!/bin/bash for item in /home/soft/mongodbcompose/ do for item2 in `ls $item` do if [ $item2 = 'mongos' ] then echo $item2 cp mongos.conf $item$item2/config/mongos.conf else echo "no" cp mongod.conf $item$item2/config/mongod.conf fi done done
docker-compose 檔案
路徑:vi /home/soft/mongoCluster/docker-compose.yaml
version: '2' services: rs_config_server: image: mongo:4.2.7 command: mongod -f /etc/mongod/mongod.conf --configsvr --replSet "rs-config-server" volumes: - /home/soft/mongodbcompose/key.file:/data/mongodb/key.file - /home/soft/mongodbcompose/conf/config:/etc/mongod - /home/soft/mongodbcompose/conf/db:/data/db ports: - "10021:27019" restart: always container_name: rs_config_server ulimits: nofile: soft: 300000 hard: 300000 rs_shard_server1: image: mongo:4.2.7 command: mongod -f /etc/mongod/mongod.conf --directoryperdb --shardsvr --replSet "rs-shard1-server" volumes: - /home/soft/mongodbcompose/key.file:/data/mongodb/key.file - /home/soft/mongodbcompose/shard1/config:/etc/mongod - /home/soft/mongodbcompose/shard1/db:/data/db ports: - "10031:27018" restart: always container_name: rs_shard_server1 ulimits: nofile: soft: 300000 hard: 300000 rs_shard_server2: image: mongo:4.2.7 command: mongod -f /etc/mongod/mongod.conf --directoryperdb --shardsvr --replSet "rs-shard2-server" volumes: - /home/soft/mongodbcompose/key.file:/data/mongodb/key.file - /home/soft/mongodbcompose/shard2/config:/etc/mongod - /home/soft/mongodbcompose/shard2/db:/data/db ports: - "10041:27018" restart: always container_name: rs_shard_server2 ulimits: nofile: soft: 300000 hard: 300000 rs_mongos_server: image: mongo:4.2.7 command: mongos --configdb rs-config-server/192.168.5.201:10021,192.168.5.202:10021,192.168.5.203:10021 ports: - "10011:27017" volumes: - /home/soft/mongodbcompose/key.file:/data/mongodb/key.file - /home/soft/mongodbcompose/mongos/config:/etc/mongod - /home/soft/mongodbcompose/mongos/db:/data/db restart: always container_name: rs_mongos_server ulimits: nofile: soft: 300000 hard: 300000
======檔案構建完成,開始執行指令碼===================
// 進入臨時目錄 cd /home/soft/mongoCluster/ // 授權目錄下sh等檔案 chmod 777 *.sh // 建立目錄 ./first_mkdir.sh // 惟一金鑰檔案複製。都是用同一個檔案,並授權 // key.file 檔案分別複製到相應的目錄 chmod 600 /home/soft/mongodbcompose/key.file chown 999 /home/soft/mongodbcompose/key.file // 將配置檔案移動到相應的目錄 ./second_mv.sh // 啟動容器 docker-compose up -d
新增副本集
配置伺服器
連線任意一個節點 mongo --host 192.168.5.201 --port 10021
docker exec -it rs_config_server bash mongo --port 27019 rs.initiate({ _id: "rs-config-server", configsvr: true, members: [ { _id : 0, host : "192.168.5.201:10021" }, { _id : 1, host : "192.168.5.202:10021" }, { _id : 2, host : "192.168.5.203:10021" }, ] });
分片1
連線任意一個節點 mongo --host 192.168.5.201 --port 10031
docker exec -it rs_shard_server1 bash mongo --port 27018 rs.initiate({ _id: "rs-shard1-server", members: [ { _id : 0, host : "192.168.5.201:10031" }, { _id : 1, host : "192.168.5.202:10031" }, { _id : 2, host : "192.168.5.203:10031" }, ] });
分片2
連線任意一個節點 mongo --host 192.168.5.201 --port 10041
docker exec -it rs_shard_server2 bash mongo --port 27018 rs.initiate({ _id: "rs-shard2-server", members: [ { _id : 0, host : "192.168.5.201:10041" }, { _id : 1, host : "192.168.5.202:10041" }, { _id : 2, host : "192.168.5.203:10041" }, ] });
配置mongos
確保mongos服務起來之後,連線到192.168.1.125:10011執行以下命令新增分片伺服器資訊
docker exec -it rs_mongos_server bash // 啟動副本集 mongos -f /etc/mongod/mongos.conf --configdb rs-config-server/192.168.5.201:10021,192.168.5.202:10021,192.168.5.203:10021 mongo --port 27020 sh.addShard("rs-shard1-server/192.168.5.201:10031,192.168.5.202:10031,192.168.5.203:10031") sh.addShard("rs-shard2-server/192.168.5.201:10041,192.168.5.202:10041,192.168.5.203:10041")
新增使用者認證
連線任意的mongos
use admin db.createUser( { user:"root", pwd:"root123456", roles:[{role:"root",db:"admin"}] } )
驗證是否建立成功
db.auth('root','root123456')