Docker-compose部署单机版本分片mongo

本文详细描述了在CentOS7环境中使用Docker18.09.0部署MongoDB4.0.5分片集群的过程,包括清理旧数据、创建数据目录、生成并应用授权密钥、设置容器配置、添加用户和验证连接。还提及了解决docker容器重启时权限问题的方法。
摘要由CSDN通过智能技术生成
环境介绍
os: centos7
docker: 18.09.0
mongo: 4.0.5



1. 清理旧数据(如果需要)
执行 clean-deploy.sh

删除之前的容器
删除数据目录

vi clean-deploy.sh  clean-deploy.sh



DIR=/data/fates
DATA_PATH="${DIR}/mongo"
PWD='kinnylee'

# 第一次执行没有旧数据,不需要执行这步
docker-compose -f fates-mongo-compose.yaml down

if [ -d "${DATA_PATH}" ]; then
echo "delete directory: ${DATA_PATH}"
echo ${PWD} | sudo -S rm -rf ${DATA_PATH}
fi





2. 创建数据目录
vi  before-deploy.sh before-deploy.sh



DIR=/data/fates
DATA_PATH="${DIR}/mongo"
PWD='kinnylee'

DATA_DIR_LIST=('config1' 'config2' 'config3' 'shard1' 'shard2' 'shard3' 'script')

function check_directory() {
if [ ! -d "${DATA_PATH}" ]; then
echo "create directory: ${DATA_PATH}"
echo ${PWD} | sudo -S mkdir -p ${DATA_PATH}
else
echo "directory ${DATA_PATH} already exists."
fi


cd "${DATA_PATH}"

for SUB_DIR in ${DATA_DIR_LIST[@]}
do
if [ ! -d "${DATA_PATH}/${SUB_DIR}" ]; then
echo "create directory: ${DATA_PATH}/${SUB_DIR}"
echo "${PWD}" | sudo -S mkdir -p "${DATA_PATH}/${SUB_DIR}"
else
echo "directory: ${DATA_PATH}/${SUB_DIR} already exists."
fi
done

echo "change directory owner to $USER:$USER"
echo "${PWD}" | sudo -S chown -R $USER:$USER "${DATA_PATH}"
}

check_directory




3. 部署docker容器


3.2 授权模式
1. vi  generate-keyfile.sh  generate-keyfile.sh
生成keyfile文件






#!/bin/bash

DATA_PATH=/data/fates/mongo
PWD='kinnylee'

function check_directory() {
if [ ! -d "${DATA_PATH}" ]; then
echo "directory: ${DATA_PATH} not exists, please run before-depoly.sh."
fi
}

function generate_keyfile() {
cd "${DATA_PATH}/script"
if [ ! -f "${DATA_PATH}/script/mongo-keyfile" ]; then
echo 'create mongo-keyfile.'
openssl rand -base64 756 -out mongo-keyfile
echo "${PWD}" | sudo -S chmod 600 mongo-keyfile
echo "${PWD}" | sudo -S chown 999 mongo-keyfile
else
echo 'mongo-keyfile already exists.'
fi
}

check_directory
generate_keyfile




vi fates-mongo-compose-key.yaml   fates-mongo-compose-key.yaml







version: '3.4'
services:
shard1:
image: mongo:4.0.5
# --shardsvr: 这个参数仅仅只是将默认的27017端口改为27018,如果指定--port参数,可用不需要这个参数
# --directoryperdb:每个数据库使用单独的文件夹
command: mongod --shardsvr --directoryperdb --replSet shard1 --keyFile /data/mongo-keyfile
privileged: true
volumes:
- /etc/localtime:/etc/localtime
- /data/fates/mongo/shard1:/data/db
- /data/fates/mongo/script/mongo-keyfile:/data/mongo-keyfile

shard2:
image: mongo:4.0.5
command: mongod --shardsvr --directoryperdb --replSet shard2 --keyFile /data/mongo-keyfile
privileged: true
volumes:
- /etc/localtime:/etc/localtime
- /data/fates/mongo/shard2:/data/db
- /data/fates/mongo/script/mongo-keyfile:/data/mongo-keyfile

shard3:
image: mongo:4.0.5
command: mongod --shardsvr --directoryperdb --replSet shard3 --keyFile /data/mongo-keyfile
privileged: true
volumes:
- /etc/localtime:/etc/localtime
- /data/fates/mongo/shard3:/data/db
- /data/fates/mongo/script/mongo-keyfile:/data/mongo-keyfile

config1:
image: mongo:4.0.5
# --configsvr: 这个参数仅仅是将默认端口由27017改为27019, 如果指定--port可不添加该参数
command: mongod --configsvr --directoryperdb --replSet fates-mongo-config --smallfiles --keyFile /data/mongo-keyfile
privileged: true
volumes:
- /etc/localtime:/etc/localtime
- /data/fates/mongo/config1:/data/configdb
- /data/fates/mongo/script/mongo-keyfile:/data/mongo-keyfile

config2:
image: mongo:4.0.5
command: mongod --configsvr --directoryperdb --replSet fates-mongo-config --smallfiles --keyFile /data/mongo-keyfile
privileged: true
volumes:
- /etc/localtime:/etc/localtime
- /data/fates/mongo/config2:/data/configdb
- /data/fates/mongo/script/mongo-keyfile:/data/mongo-keyfile

config3:
image: mongo:4.0.5
command: mongod --configsvr --directoryperdb --replSet fates-mongo-config --smallfiles --keyFile /data/mongo-keyfile
privileged: true
volumes:
- /etc/localtime:/etc/localtime
- /data/fates/mongo/config3:/data/configdb
- /data/fates/mongo/script/mongo-keyfile:/data/mongo-keyfile

mongos:
image: mongo:4.0.5
# mongo3.6版默认绑定IP为127.0.0.1,此处绑定0.0.0.0是允许其他容器或主机可以访问
command: mongos --configdb fates-mongo-config/config1:27019,config2:27019,config3:27019 --bind_ip 0.0.0.0 --port 27017 --keyFile /data/mongo-keyfile
ports:
- 27017:27017
privileged: true
volumes:
- /etc/localtime:/etc/localtime
- /data/fates/mongo/script/mongo-keyfile:/data/mongo-keyfile
depends_on:
- config1
- config2
- config3

 






vi  deploy-key.sh 
docker-compose -f fates-mongo-compose-key.yaml up -d



4. 配置分片信息 容器启动需要一定时间,执行这一步时要等上一步把容器都启动起来,才能执行,执行不成功就多运行几遍


执行shard-config.sh shard-config.sh



 



docker-compose -f fates-mongo-compose.yaml exec config1 bash -c "echo 'rs.initiate({_id: \"fates-mongo-config\",configsvr: true, members: [{ _id : 0, host : \"config1:27019\" },{ _id : 1, host : \"config2:27019\" }, { _id : 2, host : \"config3:27019\" }]})' | mongo --port 27019"
docker-compose -f fates-mongo-compose.yaml exec shard1 bash -c "echo 'rs.initiate({_id: \"shard1\",members: [{ _id : 0, host : \"shard1:27018\" }]})' | mongo --port 27018"
docker-compose -f fates-mongo-compose.yaml exec shard2 bash -c "echo 'rs.initiate({_id: \"shard2\",members: [{ _id : 0, host : \"shard2:27018\" }]})' | mongo --port 27018"
docker-compose -f fates-mongo-compose.yaml exec shard3 bash -c "echo 'rs.initiate({_id: \"shard3\",members: [{ _id : 0, host : \"shard3:27018\" }]})' | mongo --port 27018"
docker-compose -f fates-mongo-compose.yaml exec mongos bash -c "echo 'sh.addShard(\"shard1/shard1:27018\")' | mongo"
docker-compose -f fates-mongo-compose.yaml exec mongos bash -c "echo 'sh.addShard(\"shard2/shard2:27018\")' | mongo"
docker-compose -f fates-mongo-compose.yaml exec mongos bash -c "echo 'sh.addShard(\"shard3/shard3:27018\")' | mongo"



5. 创建用户(授权模式)
执行add-user.sh add-user.sh

需要添加用户登录权限执行这一步,不需要登录的不用执行这一步
脚本中管理员用户名和密码都是root,可自行修改



docker-compose -f fates-mongo-compose.yaml exec mongos bash -c "echo -e 'use admin\n db.createUser({user:\"root\",pwd:\"root\",roles:[{role:\"root\",db:\"admin\"}]})' | mongo"
docker-compose -f fates-mongo-compose.yaml exec mongos bash -c "echo -e 'use admin\n show user' | mongo"







6. 验证
通过客户端连接验证是否成功   mongodb-compass-1.26.1-win32-x64.zip
测试部 > Docker-compose部署单机版本分片mongo > image2023-1-3 16:21:35.png

mongodb://root:root@192.168.2.73:27017/admin





测试部 > Docker-compose部署单机版本分片mongo > image2023-1-3 16:22:12.png







docker一直Restarting无法进入容器打印日志报错chown: changing ownership of ‘/data/db‘: Permission denied

解决方式:输入语句

vim /etc/sysconfig/selinux

把SELINUX=enforcing 改为 SELINUX=disabled退出保存一下就可以了。







  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用 Docker Compose 部署 Kafka、Elasticsearch、Redis、MySQL 和 MongoDB,并实现持久化。以下是一个示例的 Docker Compose 配置文件: ```yaml version: '3' services: zookeeper: image: confluentinc/cp-zookeeper:6.2.0 container_name: zookeeper ports: - 2181:2181 volumes: - zookeeper-data:/var/lib/zookeeper/data - zookeeper-logs:/var/lib/zookeeper/logs kafka: image: confluentinc/cp-kafka:6.2.0 container_name: kafka depends_on: - zookeeper ports: - 9092:9092 environment: - KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181 - KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR=1 volumes: - kafka-data:/var/lib/kafka/data elasticsearch: image: docker.elastic.co/elasticsearch/elasticsearch:7.14.0 container_name: elasticsearch ports: - 9200:9200 volumes: - esdata:/usr/share/elasticsearch/data environment: - discovery.type=single-node redis: image: redis:6.2.5 container_name: redis ports: - 6379:6379 volumes: - redis-data:/data mysql: image: mysql:8.0.26 container_name: mysql ports: - 3306:3306 volumes: - mysql-data:/var/lib/mysql environment: - MYSQL_ROOT_PASSWORD=your_root_password mongo: image: mongo:5.0.2 container_name: mongo ports: - 27017:27017 volumes: - mongo-data:/data/db volumes: zookeeper-data: driver: local zookeeper-logs: driver: local kafka-data: driver: local esdata: driver: local redis-data: driver: local mysql-data: driver: local mongo-data: driver: local ``` 这个示例配置文件中包含了 ZooKeeper、Kafka、Elasticsearch、Redis、MySQL 和 MongoDB 的部署配置。通过挂载相应的卷,实现了持久化。 使用以下命令启动所有的服务: ```shell docker-compose up -d ``` 这将启动所有的容器,并将它们分别绑定到主机的相应端口。你可以根据需要修改端口映射。 请注意,这只是一个简单的示例配置文件,你可以根据自己的需求进行修改和扩展。同时,还可以根据需要配置其他 Kafka、Elasticsearch、Redis、MySQL 和 MongoDB 相关的环境变量。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值