广告
返回顶部
首页 > 资讯 > 数据库 >Docker搭建MongoDB 4.0副本集
  • 665
分享到

Docker搭建MongoDB 4.0副本集

2024-04-02 19:04:59 665人浏览 独家记忆
摘要

环境: 系统版本:Centos 7.5 内核:4.18.7-1.el7.elrepo.x86_64 Docker-ce: 18.06 mongoDB: 4.0.3 宿主机IP:192.168.1.1 M

环境:

系统版本:Centos 7.5 
内核:4.18.7-1.el7.elrepo.x86_64
Docker-ce: 18.06
mongoDB: 4.0.3

宿主机IP:192.168.1.1
MonGoDB1端口:30001
MongoDB2端口:30002
MongoDB3端口:30003

一、安装docker、docker-compose

wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

yum install -y docker-ce python-pip

mkdir /etc/docker/
cat << EOF > /etc/docker/daemon.JSON
{   "reGIStry-mirrors": ["Https://registry.docker-cn.com"],
    "live-restore": true,
    "default-shm-size": "128M",
    "max-concurrent-downloads": 10,
    "oom-score-adjust": -1000,
    "debug": false
}   
EOF

pip install docker-compose

systemctl enable docker
systemctl start docker

二、创建副本集所需的key

#创建一个volume,将创建的key文件复制至volume中
#400权限是要保证安全性,否则mongod启动会报错
#999用户是容器中的mongod用户

cd && 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:
      - "30001: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:
      - "30002:27017"
    environment:
      - MONGO_INITDB_ROOT_USERNAME=root
      - MONGO_INITDB_ROOT_PASSWORD=123456
    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:
      - "30003:27017"
    environment:
      - MONGO_INITDB_ROOT_USERNAME=root
      - MONGO_INITDB_ROOT_PASSWORD=123456
    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

四、启动副本集

#副本集群成员的IP地址必须要让客户的也能解析这个IP,不然使用集群方式连接数据库时,无法连接!!!
#若是在阿里云ECS上搭建副本集,想要让公网的客户端能够连接,必须要填ECS的公网IP!!!

#启动三个容器,并使他们后台运行

docker pull mongo:4.0.3
docker-compose up -d

#连接30001端口上的容器,开始配置集群

mongo -port 30001 -uroot -p123456 --authenticationDatabase admin

#三节点,其中一个为投票节点,并隐藏
#注意host的IP地址,一定要让客户端也能连接所有的地址
#_id的值为--replSet参数后的字符串

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

####################################################
[root@master mongod]#mongo -port 30001 -uroot -p123456 --authenticationDatabase admin
MongoDB shell version v4.0.3
connecting to: mongodb://127.0.0.1:30001/
Implicit session: session { "id" : UUID("a196085a-a142-450f-9eab-a0fc5a58c43b") }
MongoDB server version: 4.0.3
Server has startup warnings:
2018-10-09T10:15:20.474+0000 I CONTROL  [initandlisten]
2018-10-09T10:15:20.474+0000 I CONTROL  [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'.
2018-10-09T10:15:20.474+0000 I CONTROL  [initandlisten] **        We suggest setting it to 'never'
2018-10-09T10:15:20.474+0000 I CONTROL  [initandlisten]
---
Enable MongoDB's free cloud-based monitoring service, which will then receive and display
metrics about your deployment (disk utilization, CPU, operation statistics, etc).

The monitoring data will be available on a MongoDB WEBsite with a unique URL accessible to you
and anyone you share the URL with. MongoDB may use this infORMation to make product
improvements and to suggest MongoDB products and deployment options to you.

To enable free monitoring, run the following command: db.enableFreeMonitoring()
To permanently disable this reminder, run the following command: db.disableFreeMonitoring()
---
>
>
> rs.initiate(
... {
...   _id: "BigBoss",
...   version: 1,
...   protocolVersion: 1,
...   writeConcernMajorityJournalDefault: true,
...   members: [
...     {
...       _id: 0,
...       host: "192.168.1.1:30001",
...       arbiterOnly: false,
...       buildIndexes: true,
...       hidden: false,
...       priority: 66,
...       tags: {
...     BigBoss: "YES"
...       },
...       slaveDelay: 0,
...       votes: 1
...     },
...     {
...       _id: 1,
...       host: "192.168.1.1:30002",
...       arbiterOnly: false,
...       buildIndexes: true,
...       hidden: false,
...       priority: 55,
...       tags: {
...     BigBoss: "NO"
...       },
...       slaveDelay: 0,
...       votes: 1
...     },
...     {
...       _id: 2,
...       host: "192.168.1.1:30003",
...       arbiterOnly: true,
...       buildIndexes: true,
...       hidden: true,
...       priority: 0,
...       tags: {
...       },
...       slaveDelay: 0,
...       votes: 1
...     }
...   ],
...   settings: {
...     chainingAllowed : true,
...   }
... }
... )
{ "ok" : 1 }
BigBoss:SECONDARY>
BigBoss:SECONDARY>
BigBoss:SECONDARY>
BigBoss:SECONDARY>
BigBoss:PRIMARY>
BigBoss:PRIMARY>

#现在30001端口的容器已经是PRIMARY了

五、测试

#停止PRIMARY的容器

docker ps -a
docker stop mongodb1

#######################################################################################
[root@master mongod]#docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                      NAMES
62f42e2aee19        mongo:4.0.3         "docker-entrypoint.s…"   5 minutes ago       Up 5 minutes        0.0.0.0:30003->27017/tcp   mongodb3
735b8d8a2bcf        mongo:4.0.3         "docker-entrypoint.s…"   5 minutes ago       Up 5 minutes        0.0.0.0:30001->27017/tcp   mongodb1
27ebcebde77e        mongo:4.0.3         "docker-entrypoint.s…"   5 minutes ago       Up 5 minutes       0.0.0.0:30002->27017/tcp   mongodb2
[root@master mongod]#docker stop mongodb1
mongodb1
[root@master mongod]#docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                     PORTS                      NAMES
62f42e2aee19        mongo:4.0.3         "docker-entrypoint.s…"   6 minutes ago       Up 6 minutes               0.0.0.0:30003->27017/tcp   mongodb3
735b8d8a2bcf        mongo:4.0.3         "docker-entrypoint.s…"   6 minutes ago       Exited (0) 2 seconds ago                              mongodb1
27ebcebde77e        mongo:4.0.3         "docker-entrypoint.s…"   6 minutes ago       Up 6 minutes              0.0.0.0:30002->27017/tcp   mongodb2
[root@master mongod]#

#连接端口为30002的容器

mongo -port 30002 -uroot -p123456 --authenticationDatabase admin

#查看集群状态
rs.status()

#######################################################################################

[root@master mongod]#mongo -port 30002 -uroot -p123456 --authenticationDatabase admin
MongoDB shell version v4.0.3
connecting to: mongodb://127.0.0.1:30002/
Implicit session: session { "id" : UUID("7a83559d-84e3-4c89-93Dd-1947d40c4837") }
MongoDB server version: 4.0.3
Server has startup warnings:
2018-10-09T10:20:50.944+0000 I CONTROL  [initandlisten]
2018-10-09T10:20:50.944+0000 I CONTROL  [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'.
2018-10-09T10:20:50.944+0000 I CONTROL  [initandlisten] **        We suggest setting it to 'never'
2018-10-09T10:20:50.945+0000 I CONTROL  [initandlisten]
---
Enable MongoDB's free cloud-based monitoring service, which will then receive and display
metrics about your deployment (disk utilization, CPU, operation statistics, etc).

The monitoring data will be available on a MongoDB website with a unique URL accessible to you
and anyone you share the URL with. MongoDB may use this information to make product
improvements and to suggest MongoDB products and deployment options to you.

To enable free monitoring, run the following command: db.enableFreeMonitoring()
To permanently disable this reminder, run the following command: db.disableFreeMonitoring()
---

BigBoss:PRIMARY>
BigBoss:PRIMARY>
BigBoss:PRIMARY> rs.status()
{
    "set" : "BigBoss",
    "date" : ISODate("2018-10-09T10:22:16.104Z"),
    "myState" : 1,
    "term" : NumberLong(2),
    "syncingTo" : "",
    "syncSourceHost" : "",
    "syncSourceId" : -1,
    "heartbeatIntervalMillis" : NumberLong(2000),
    "optimes" : {
        "lastCommittedOpTime" : {
            "ts" : Timestamp(1539080483, 1),
            "t" : NumberLong(1)
        },
        "readConcernMajorityOpTime" : {
            "ts" : Timestamp(1539080483, 1),
            "t" : NumberLong(1)
        },
        "appliedOpTime" : {
            "ts" : Timestamp(1539080528, 1),
            "t" : NumberLong(2)
        },
        "durableOpTime" : {
            "ts" : Timestamp(1539080528, 1),
            "t" : NumberLong(2)
        }
    },
    "lastStableCheckpointTimestamp" : Timestamp(1539080483, 1),
    "members" : [
        {
            "_id" : 0,
            "name" : "192.168.1.1:30001",
            "health" : 0,
            "state" : 8,
            "stateStr" : "(not reachable/healthy)",
            "uptime" : 0,
            "optime" : {
                "ts" : Timestamp(0, 0),
                "t" : NumberLong(-1)
            },
            "optimeDurable" : {
                "ts" : Timestamp(0, 0),
                "t" : NumberLong(-1)
            },
            "optimeDate" : ISODate("1970-01-01T00:00:00Z"),
            "optimeDurableDate" : ISODate("1970-01-01T00:00:00Z"),
            "lastHeartbeat" : ISODate("2018-10-09T10:22:15.296Z"),
            "lastHeartbeatRecv" : ISODate("2018-10-09T10:21:26.296Z"),
            "pingMs" : NumberLong(0),
            "lastHeartbeatMessage" : "Error connecting to 192.168.1.1:30001 :: caused by :: Connection refused",
            "syncingTo" : "",
            "syncSourceHost" : "",
            "syncSourceId" : -1,
            "infoMessage" : "",
            "configVersion" : -1
        },
        {
            "_id" : 1,
            "name" : "192.168.1.1:30002",
            "health" : 1,
            "state" : 1,
            "stateStr" : "PRIMARY",
            "uptime" : 86,
            "optime" : {
                "ts" : Timestamp(1539080528, 1),
                "t" : NumberLong(2)
            },
            "optimeDate" : ISODate("2018-10-09T10:22:08Z"),
            "syncingTo" : "",
            "syncSourceHost" : "",
            "syncSourceId" : -1,
            "infoMessage" : "could not find member to sync from",
            "electionTime" : Timestamp(1539080497, 1),
            "electionDate" : ISODate("2018-10-09T10:21:37Z"),
            "configVersion" : 1,
            "self" : true,
            "lastHeartbeatMessage" : ""
        },
        {
            "_id" : 2,
            "name" : "192.168.1.1:30003",
            "health" : 1,
            "state" : 7,
            "stateStr" : "ARBITER",
            "uptime" : 85,
            "lastHeartbeat" : ISODate("2018-10-09T10:22:15.275Z"),
            "lastHeartbeatRecv" : ISODate("2018-10-09T10:22:14.994Z"),
            "pingMs" : NumberLong(0),
            "lastHeartbeatMessage" : "",
            "syncingTo" : "",
            "syncSourceHost" : "",
            "syncSourceId" : -1,
            "infoMessage" : "",
            "configVersion" : 1
        }
    ],
    "ok" : 1,
    "operationTime" : Timestamp(1539080528, 1),
    "$clusterTime" : {
        "clusterTime" : Timestamp(1539080528, 1),
        "signature" : {
            "hash" : BinData(0,"f+D+XukeDBrkwdiZD5AvUJkHg3M="),
            "keyId" : NumberLong("6610298923057676289")
        }
    }
}
BigBoss:PRIMARY>
您可能感兴趣的文档:

--结束END--

本文标题: Docker搭建MongoDB 4.0副本集

本文链接: https://www.lsjlt.com/news/39162.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Docker搭建MongoDB 4.0副本集
    环境: 系统版本:CentOS 7.5 内核:4.18.7-1.el7.elrepo.x86_64 Docker-ce: 18.06 MongoDB: 4.0.3 宿主机IP:192.168.1.1 M...
    99+
    2022-10-18
  • mongodb 副本集搭建
    mongodb的副本集模式较早前的master-slave模式有了很大的改进,由于之前的master-slave模式不支持主机宕机之后切换到从机,已经逐渐被淘汰。而现在官方推荐的副本集模式,支持多个节点并存...
    99+
    2022-10-18
  • 3.4-MongoDB副本集搭建
    * MongoDB 副本集(repl set)介绍早期版本使用master-slave,一主一从和MySQL类似,但slave在此架构中为只读,当主库宕机后,从库不能自动切换为主目前已经淘汰master-s...
    99+
    2022-10-18
  • mongoDB副本集的搭建
    环境简介    192.168.1.151      FedoraServer   用作副本集的主库,已经有数据    192...
    99+
    2022-10-18
  • docker搭建mongodb单节点副本集的实现
    目录背景启动步骤可能遇到的问题解决办法背景 在开发中,我们很容易通过docker启动一个普通的mongodb数据库服务。但是有时候为了保持与线上环境一致,或者为了利用mongodb副...
    99+
    2022-11-13
  • MongoDB 副本集的搭建过程
    目录1、创建节点目录2、创建配置文件,配置文件内容如下:3、启动三个实例4、初始化集群5、登录到实例上,使用rs.conf查看实例状态。7、登录到其中一台节点上,添加默认账号即可8、...
    99+
    2022-11-11
  • 怎么搭建一个MongoDB 副本集
    怎么搭建一个MongoDB 副本集?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。1、创建节点目录mkdir -p /data/mongo_28018/{...
    99+
    2023-06-14
  • 如何进行MongoDB副本集搭建
    如何进行MongoDB副本集搭建,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。我们之前的案例都是在单个节点上实现的,在生产环境中这种做法是有风险的,如果服务宕机...
    99+
    2023-06-19
  • MongoDB日常运维-04副本集搭建
    MongoDB日常运维-04副本集搭建  一:MongoDB常用命令汇总 二:MongoDB安装 三:MongoDB主从复制搭建 四:MongoDB副本集搭建 ...
    99+
    2022-10-18
  • mongodb 副本集创建
    vi install_mongo.shtar -zxvf mongodb-linux-x86_64-rhel62-3.2.9.tgzmv mongodb-linux-x86_64-rhel62-3.2.9 ...
    99+
    2022-10-18
  • mongdb副本集搭建
    一:安装mongodb 常用的有两种方法:我采用的是方法2: 方法1 安装包方式,直接下载.tgz文件,然后解压即可: https://www.mongodb.com/download-center/en...
    99+
    2022-10-18
  • 【未完】mongodb安装+副本集搭建+数据导入
    参考文档:1-centos6.5下MongoDB2.6.4安装配置记录http://blog.csdn.net/ligaofeng/article/details/39374333 2-mongodb中的副...
    99+
    2022-10-18
  • mongodb 副本集
    系统:centos6.5IP:10.19.21.244 主节点 10.19.21.245 备节点 10.19.21.248 仲裁点不只是主节点、副本节点、仲裁节点,还有Secondary-Only、Hidd...
    99+
    2022-10-18
  • mongodb副本集
           其实mongodb也可以做主从机制,mongodb一主一从类似mysql,但是slave在架构中为只读,并且主机宕机后从不...
    99+
    2022-10-18
  • mongodb 副本搭建(一主两备)
    mongodb 副本搭建(一主两备)主:192.168.0.237备1:192.168.0.122备2:192.168.0.123三台机器同样操作tar zxf mongodb-linux-i686-1.8...
    99+
    2022-10-18
  • mongodb集群-副本集(CSRS)
    一、概述(1)MongoDB复制是将数据同步在多个服务器的过程。(2)复制提供了数据的冗余备份,并在多个服务器上存储数据副本,提高了数据的可用性, 并可以保证数据的安全性。(3)复制还允许您从硬件故障和服务...
    99+
    2022-10-18
  • MongoDB Replica Set 副本集
    1、简介MongoDB复制是将数据同步在多个服务器的过程,类似MySQL Replication是一种异步复制;复制提供了数据的冗余备份,并在多个服务器上存储数据副本,提高了数据的可用性, 并可以保证数据的...
    99+
    2022-10-18
  • mongodb副本集维护
    一、概述mongodb副本集维护主要工作:1、查看副本集状态(集群状态、同步延迟、单个库的运行状态mongostate)2、增删节点、停节点shutdownmongodb副本集集群同步机制数据复制的目的是使...
    99+
    2022-10-18
  • 配置mongodb副本集
    主机信息:[root@my2 db]# cat /etc/hosts127.0.0.1   localhost localhost.localdomain localhost4 loca...
    99+
    2022-10-18
  • mongodb集群搭建
    mongodb集群搭建 小码农叔叔 2019-06-17 22:51:33 4086 收藏 7 分类专栏: mongodb 版权 集群方式有三种:Replica Set、Sharding、Master-Slaver三种方式 常用的主要是副...
    99+
    2014-09-28
    mongodb集群搭建
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作