记录一次docker集群中搭建mongodb副本集

本文涉及的产品
云数据库 MongoDB,通用型 2核4GB
简介:

1.创建三个装有mongo的docker容器,这里使用docker-compose,配置如下

mongo:
    image: mongo
    command: mongod -f /etc/mongo.conf
    volumes:
      - ${DATA_PATH_HOST}/mongo:/data/db
      - ${CONF_PATH}/mongo/mongo_yaml.conf:/etc/mongo.conf
      - ${CONF_PATH}/mongo/access.key:/etc/access.key
    expose:
      - 27017
    ports:
      - 27017:27017
    networks:
      - backend


mongo2:
    image: mongo
    command: mongod -f /etc/mongo.conf
    volumes:
        - ${DATA_PATH_HOST}/mongo2:/data/db
        - ${CONF_PATH}/mongo/mongo_yaml.conf:/etc/mongo.conf
        - ${CONF_PATH}/mongo/access.key:/etc/access.key
    expose:
        - 27017
    ports:
        - 27018:27017
    networks:
        - backend


mongo3:
    image: mongo
    command: mongod -f /etc/mongo.conf
    volumes:
        - ${DATA_PATH_HOST}/mongo3:/data/db
        - ${CONF_PATH}/mongo/mongo_yaml.conf:/etc/mongo.conf
        - ${CONF_PATH}/mongo/access.key:/etc/access.key
    expose:
        - 27017
    ports:
        - 27019:27017
    networks:
        - backend

其中mongo.conf 为yaml格式的mongodb配置文件,内容如下

processManagement:
   fork: false
net:
   bindIp: 127.0.0.1
   port: 27017
storage:
   dbPath: /data/db
systemLog:
   #destination: file
   #path: log/mongo27017.log
   logAppend: true
storage:
   journal:
      enabled: true
replication:
   oplogSizeMB: 500
   replSetName: "r1"
   secondaryIndexPrefetch: "all"

执行docker-compose up -d mongo mongo2 mongo3 创建三个mongo容器 并指定副本集 r1


2. 登入任意一台机器的MongoDB执行:因为是全新的副本集所以可以任意进入一台执行;要是有一台有数据,则需要在有数据上执行;要多台有数据则不能初始化。我个人是mongo中有数据但是mongo2和mong3是空的数据库,所以我登录mongo1进行副本集初始化。

    执行命令 docker-compose exec mongo bash 进入容器

    执行命令  mongo  在容器内部连接mongo

    执行一下命令初始化副本集


> use admin
switched to db admin
> config = { "_id": "r1", "members": [{ "_id": 0, "host": "mongo:27017", "priority": 1 }, { "_id": 1, "host": "mongo2:27017", "priority": 1 }, { "_id": 2, "host": "mongo3:27017", "priority": 1 }] }
{
	"_id" : "r1",
	"members" : [
		{
			"_id" : 0,
			"host" : "mongo:27017",
			"priority" : 1
		},
		{
			"_id" : 1,
			"host" : "mongo2:27017",
			"priority" : 1
		},
		{
			"_id" : 2,
			"host" : "mongo3:27017",
			"priority" : 1
		}
	]
}
> rs.initiate(config)
{
	"ok" : 1,
	"operationTime" : Timestamp(1539830924, 1),
	"$clusterTime" : {
		"clusterTime" : Timestamp(1539830924, 1),
		"signature" : {
			"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
			"keyId" : NumberLong(0)
		}
	}
}


副本集初始化完成,可以使用命令rs.status()查看当前副本集状态,至此mongodb副本集设置完成




3.加入鉴权机制,如果服务端需要开启auth认证,则在启动时通过keyFile三个节点之间的通信授权


使用命令生成keyFile文件

openssl rand -base64 745 > /docker/conf/mongo/mongo-keyfile

ch

如果服务器启动时加入了参数--keyFile = /docker/conf/mongo/mongo-keyfile  则mongo服务端启动时会自动开启auth,故应先创建账号。
创建了账号  root   pass  auth库为admin  (步骤省略)

停止所有节点,重新启动mongo服务,并加上 --keyFile参数

发现报错

mongo3_1     | 2018-10-24T06:13:06.323+0000 I CONTROL  [main] Automatically disabling TLS 1.0, to force-enable TLS 1.0 specify --sslDisabledProtocols 'none'

mongo3_1     | 2018-10-24T06:13:06.331+0000 I ACCESS   [main] permissions on /etc/access.key are too open

mongo2_1     | 2018-10-24T06:13:06.591+0000 I CONTROL  [main] Automatically disabling TLS 1.0, to force-enable TLS 1.0 specify --sslDisabledProtocols 'none'

mongo2_1     | 2018-10-24T06:13:06.605+0000 I ACCESS   [main] permissions on /etc/access.key are too open

mongo_1      | 2018-10-24T06:13:06.609+0000 I CONTROL  [main] Automatically disabling TLS 1.0, to force-enable TLS 1.0 specify --sslDisabledProtocols 'none'

mongo_1      | 2018-10-24T06:13:06.614+0000 I ACCESS   [main] permissions on /etc/access.key are too open

这是因为keyfile权限问题,执行命令将keyfile权限设置为600

chmod 600 /docker/conf/mongo/access.key


再次启动,成功。


进入某一容器执行副本集链接操作,系统提示已成功连接到副本集

32532d16520fedee8d60a05078c6ea2f426d931c

相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。   相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
目录
相关文章
|
3月前
|
数据安全/隐私保护 虚拟化 Docker
Docker Swarm 集群搭建
Docker Swarm 集群搭建
|
2月前
|
关系型数据库 MySQL 应用服务中间件
从零开始,掌握Nacos搭建的艺术(单点、集群、docker-compose)
从零开始,掌握Nacos搭建的艺术(单点、集群、docker-compose)
53 0
|
3月前
|
Kubernetes 应用服务中间件 nginx
Docker六脉神剑 (五) Docker Swarm集群搭建及基础服务部署
Docker六脉神剑 (五) Docker Swarm集群搭建及基础服务部署
45 1
|
3月前
|
存储 NoSQL Redis
docker搭建Redis Cluster集群环境
docker搭建Redis Cluster集群环境
80 1
|
21天前
|
监控 NoSQL 算法
【MongoDB】 MongoDB的副本集是什么?
【4月更文挑战第1天】【MongoDB】 MongoDB的副本集是什么?
|
1月前
|
负载均衡 容灾 安全
Docker Swarm总结+基础、集群搭建维护、安全以及集群容灾(1/5)
Docker Swarm总结+基础、集群搭建维护、安全以及集群容灾(1/5)
65 2
|
1月前
|
NoSQL Redis Docker
使用Docker搭建一个“一主两从”的 Redis 集群(超详细步骤)
使用Docker搭建一个“一主两从”的 Redis 集群(超详细步骤)
61 0
|
1月前
|
关系型数据库 MySQL 数据库
使用 Docker 搭建一个“一主一从”的 MySQL 读写分离集群(超详细步骤
使用 Docker 搭建一个“一主一从”的 MySQL 读写分离集群(超详细步骤
62 0
|
1月前
|
NoSQL MongoDB Docker
docker安装MongoDB
docker安装MongoDB
21 0
|
1月前
|
NoSQL MongoDB
搭建MongoDB分片式集群
搭建MongoDB分片式集群
13 0

热门文章

最新文章