精选文章 Docker 搭建MongoDB 4.0副本集

Docker 搭建MongoDB 4.0副本集

作者:shizhengju 时间: 2019-11-15 02:47:40
shizhengju 2019-11-15 02:47:40

一、安装docker、docker-compose

1、不会安装docker的请移步----》centos7安装docker  Ubantu16.04安装docker

2、安装docker-compose(Centos7环境无pip的----》centos7安装pip2)

pip install docker-compose

Docker 搭建MongoDB 4.0副本集1

Docker 搭建MongoDB 4.0副本集2

二、创建副本集所需的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 搭建MongoDB 4.0副本集3

三、创建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

Docker 搭建MongoDB 4.0副本集4

Docker 搭建MongoDB 4.0副本集5

四、启动副本集

1、拉取mongo4.0的镜像

docker pull mongo:4.0.3

我这失败了一次,后面查了一下mongo镜像docker search mongo,docker官网是有这个镜像的,然后有拉取了一次

Docker 搭建MongoDB 4.0副本集6

Docker 搭建MongoDB 4.0副本集7

Docker 搭建MongoDB 4.0副本集8

2、执行docker-compose文件,在docker-compose.yaml同级目录下执行

docker-compose up -d

Docker 搭建MongoDB 4.0副本集9

3、连接mongodb1容器,开始配置集群

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

Docker 搭建MongoDB 4.0副本集10

#三节点,其中一个为投票节点,并隐藏
#注意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,
  }
}
)

Docker 搭建MongoDB 4.0副本集11

Docker 搭建MongoDB 4.0副本集12

4、查看状态

rs.status()

Docker 搭建MongoDB 4.0副本集13

Docker 搭建MongoDB 4.0副本集14

五、检测

1、进入mongodb2容器中

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

Docker 搭建MongoDB 4.0副本集15

2、停止PRIMARY的容器

docker stop mongodb1

Docker 搭建MongoDB 4.0副本集16

3、连接mongdb2容器查看状态是否改变

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

Docker 搭建MongoDB 4.0副本集17

MongoDB4.0副本集搭建完毕

勿删,copyright占位
分享文章到微博
分享文章到朋友圈

上一篇:关于go语言切片 append用法的疑惑

下一篇:关于mysql事务更新可读性问题

您可能感兴趣

  • 微服务架构实践

    2019独角兽企业重金招聘Python工程师标准>>> 一、微服务架构的优势与不足 【编者的话】本文来自Nginx官方博客,是微服务系列文章的第一篇,主要探讨了传统的单体式应用的不足,以及微服务架构的优势与挑战。正如作者所说,微服务架构更适合用于构建复杂的应用,尽管它也有自己的不足。 这篇文章作者是Chris Richardson,他是早期基于Java的Amazonite EC2 PaaS平...

华为云40多款云服务产品0元试用活动

免费套餐,马上领取!
CSDN

CSDN

中国开发者社区CSDN (Chinese Software Developer Network) 创立于1999年,致力为中国开发者提供知识传播、在线学习、职业发展等全生命周期服务。