Docker 搭建MongoDB 4.0副本集

一、安裝docker、docker-compose

1、不會安裝docker的請移步----》centos7安裝docker  Ubantu16.04安裝docker

2、安裝docker-compose(Centos7環境無pip的----》centos7安裝pip2)

pip install docker-compose

二、創建副本集所需的key

mkdir mongod && cd mongod

openssl rand -base64 756 > mongo.key

docker volume create mongod_mongo_key

MONGO_KEY_DIR=`docker volume inspect mongod_mongo_key | grep Mount | sed -r 's#.*"(.*)",$#\1#'`

cp mongo.key $MONGO_KEY_DIR

chmod 400 $MONGO_KEY_DIR/mongo.key

chown 999.999 $MONGO_KEY_DIR/mongo.key

mkdir /data/mongo/mongdb{1..3} -pv

三、創建docker-compose文件

#映射/data/mongo/mongdb{1,2,3}目錄到容器裏,將數據持久化到磁盤
#映射出三個端口,以便外部用戶連接
#MONGO_INITDB_ROOT_USERNAME:管理員用戶的賬號
#MONGO_INITDB_ROOT_PASSWORD:管理員用戶的密碼

cat << EOF > docker-compose.yaml
version: "3.7"
services:
  mongodb1:
    image: mongo:4.0.3
    container_name: mongodb1
    networks:
      - mongodb
    ports:
      - "27017:27017"
    environment:
      - MONGO_INITDB_ROOT_USERNAME=root
      - MONGO_INITDB_ROOT_PASSWORD=123456x
    volumes:
      - /data/mongo/mongdb1:/data/db
      - mongo_key:/mongo
    command: ["mongod","--replSet","BigBoss","--keyFile","/mongo/mongo.key","--directoryperdb"]

  mongodb2:
    image: mongo:4.0.3
    container_name: mongodb2
    networks:
      - mongodb
    ports:
      - "27018:27017"
    environment:
      - MONGO_INITDB_ROOT_USERNAME=root
      - MONGO_INITDB_ROOT_PASSWORD=123456x
    volumes:
      - /data/mongo/mongdb2:/data/db
      - mongo_key:/mongo
    command: ["mongod","--replSet","BigBoss","--keyFile","/mongo/mongo.key","--directoryperdb"]

  mongodb3:
    image: mongo:4.0.3
    container_name: mongodb3
    networks:
      - mongodb
    ports:
      - "27019:27017"
    environment:
      - MONGO_INITDB_ROOT_USERNAME=root
      - MONGO_INITDB_ROOT_PASSWORD=123456x
    volumes:
      - /data/mongo/mongdb3:/data/db
      - mongo_key:/mongo
    command: ["mongod","--replSet","BigBoss","--keyFile","/mongo/mongo.key","--directoryperdb"]

networks:
  mongodb:
    driver: bridge
    name: mongodb

volumes:
  mongo_key:
EOF

四、啓動副本集

1、拉取mongo4.0的鏡像

docker pull mongo:4.0.3

我這失敗了一次,後面查了一下mongo鏡像docker search mongo,docker官網是有這個鏡像的,然後有拉取了一次

2、執行docker-compose文件,在docker-compose.yaml同級目錄下執行

docker-compose up -d

3、連接mongodb1容器,開始配置集羣

docker exec -it mongodb1 mongo -uroot -p123456x --authenticationDatabase admin

#三節點,其中一個爲投票節點,並隱藏
#注意host的IP地址,一定要讓客戶端也能連接所有的地址
#_id的值爲--replSet參數後的字符串

rs.initiate(
{
  _id: "BigBoss",
  version: 1,
  protocolVersion: 1,
  writeConcernMajorityJournalDefault: true,
  members: [
    {
      _id: 0,
      host: "mongodb1:27017",
      arbiterOnly: false,
      buildIndexes: true,
      hidden: false,
      priority: 66,
      tags: {
        BigBoss: "YES"
      },
      slaveDelay: 0,
      votes: 1
    },
    {
      _id: 1,
      host: "mongodb2:27017",
      arbiterOnly: false,
      buildIndexes: true,
      hidden: false,
      priority: 55,
      tags: {
        BigBoss: "NO"
      },
      slaveDelay: 0,
      votes: 1
    },
    {
      _id: 2,
      host: "mongodb3:27017",
      arbiterOnly: true,
      buildIndexes: true,
      hidden: true,
      priority: 0,
      tags: {
      },
      slaveDelay: 0,
      votes: 1
    }
  ],
  settings: {
    chainingAllowed : true,
  }
}
)

4、查看狀態

rs.status()

五、檢測

1、進入mongodb2容器中

docker exec -it mongodb2 mongo -uroot -p123456x --authenticationDatabase admin

2、停止PRIMARY的容器

docker stop mongodb1

3、連接mongdb2容器查看狀態是否改變

docker exec -it mongodb2 mongo -uroot -p123456x --authenticationDatabase admin

MongoDB4.0副本集搭建完畢

發佈了74 篇原創文章 · 獲贊 15 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章