服務器
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" --bind_ip_all volumes: - /home/soft/mongocompose/file/mongodb.key:/data/mongodb/mongodb.key - /home/soft/mongocompose/conf/config:/etc/mongod - /home/soft/mongocompose/conf/db:/data/db ports: - "10021:27019" networks: - mongodbs 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" --bind_ip_all volumes: - /home/soft/mongocompose/file/mongodb.key:/data/mongodb/mongodb.key - /home/soft/mongocompose/shard1/config:/etc/mongod - /home/soft/mongocompose/shard1/db:/data/db ports: - "10031:27018" networks: - mongodbs 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" --bind_ip_all volumes: - /home/soft/mongocompose/file/mongodb.key:/data/mongodb/mongodb.key - /home/soft/mongocompose/shard2/config:/etc/mongod - /home/soft/mongocompose/shard2/db:/data/db ports: - "10041:27018" networks: - mongodbs restart: always container_name: rs_shard_server2 ulimits: nofile: soft: 300000 hard: 300000 rs_shard_server3: image: mongo:4.2.7 command: mongod -f /etc/mongod/mongod.conf --directoryperdb --shardsvr --replSet "rs-shard3-server" --bind_ip_all volumes: - /home/soft/mongocompose/file/mongodb.key:/data/mongodb/mongodb.key - /home/soft/mongocompose/shard3/config:/etc/mongod - /home/soft/mongocompose/shard3/db:/data/db ports: - "10051:27018" networks: - mongodbs restart: always container_name: rs_shard_server3 ulimits: nofile: soft: 300000 hard: 300000 rs_mongos_server: image: mongo:4.2.7 command: mongos -f /etc/mongod/mongos.conf --configdb rs-config-server/192.168.5.202:10021,192.168.5.203:10021,192.168.5.201:10021 --bind_ip_all ports: - "10011:27017" networks: - mongodbs volumes: - /home/soft/mongocompose/file/mongodb.key:/data/mongodb/mongodb.key - /home/soft/mongocompose/mongos/config:/etc/mongod - /home/soft/mongocompose/mongos/db:/data/db restart: always container_name: rs_mongos_server ulimits: nofile: soft: 300000 hard: 300000 # Swarm 跨主機網絡網絡 networks: mongodbs: external: true
======文件構建完成,開始執行腳本===================
// 進入臨時目錄 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')
=============如果一開始就加上了密碼。那就不需要下面步驟了=======================
將配置文件的用戶認證全部打開 security: cd /home/soft/mongocompose/file vi mongod.conf 去掉# 注釋 vi mongos.conf 重新覆蓋之前的配置文件 // 停掉服務 docker-compose stop ./second_mv.sh 刪除存儲目錄lock文件 mongod.lock find /home/soft/mongocompose/ -name mongod.lock rm -rf /home/soft/mongocompose/conf/db/mongod.lock rm -rf /home/soft/mongocompose/shard1/db/mongod.lock rm -rf /home/soft/mongocompose/shard2/db/mongod.lock rm -rf /home/soft/mongocompose/shard3/db/mongod.lock chmod 400 mongodb.key chown 999 mongodb.key // 啟動服務 docker-compose start // 查看服務是否啟動正常 docker ps -a | grep rs // 驗證 docker exec -it rs_mongos_server mongo --port 27017 use admin db.auth('root','root123456') // 插入些許測試數據 for(var i=1;i<200;i++){db.books.insert({id:i,book_name:"PHP",book_id:"888"});} // 查詢插入結果 db.books.find().count(); 能查詢到數據,集群成功

