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" --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();

能查詢到數據,集群成功

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM