1. 程式人生 > 實用技巧 >docker-compose 安裝mongodb叢集==多臺伺服器

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')