docker-compose编排项目redis容器实现主从复制
一.pip管理工具安装
docker-compose是python项目,所以安装需要通过python下的包管理工具pip安装。一般linux服务器都会预安装有python环境,所以优先检查python是否已经安装,pip管理工具是否已经安装

# wget https://bootstrap.pypa.io/get-pip.py #下载pip脚本
# python2.7 get-pip.py #将pip绑定到python2.7中
# pip install --upgrade pip #更新pip
# pip install docker-compose==1.22 #安装指定版本的docker-compose
# docker -v
Docker version 18.09.0
当安装docker-compose可能遇到一些错误提示,如:自动删除request包失败时可以通过pip install --ignore-installed request命令忽略安装request包再安装docker-compose
二.资料准备
创建目录如/workdir作为redis容器的工作目录。在/workdir中创建redis-master.conf(主reids配置文件)、redis-slave.conf(从reids配置文件)、redis-master.sh(主容器的redis启动脚本)、redis-slave.sh(从容器的redis启动脚本)
redis-master.conf主要配置如下:
################################## NETWORK #####################################
bind 0.0.0.0
port 6379 ################################## SECURITY ###################################
requirepass 1 ################################# REPLICATION #################################
masterauth 1 #以防以后使用哨兵切换主节点后连接不到新主节点
redis-slave.conf主要配置如下:
################################## NETWORK #####################################
bind 0.0.0.0
port 6379 ################################## SECURITY ###################################
requirepass 1 ################################# REPLICATION #################################
slaveof 172.20.0.2 6379 #指定主节点的ip
masterauth 1
redis-master.sh代码如下:
#!/usr/bin/bash
redis-server /workdir/redis-master.conf
redis-slave.sh代码如下:
#!/usr/bin/bash
redis-server /workdir/redis-slave.conf
准备docker-compose编排文件,由于当前docker引擎版本是18.09.0所以这里version使用3.7版本
version: "3.7"
services:
redis-master:
image: redis
container_name: redis-master
stdin_open: true
tty: true
networks:
redis:
ipv4_address: 172.20.0.2
volumes:
- "/workdir:/workdir"
expose:
- "6379"
command: ["/bin/bash","/workdir/redis.sh"] redis-slave:
image: redis
container_name: redis-slave
stdin_open: true
tty: true
depends_on:
- redis-master
networks:
redis:
ipv4_address: 172.20.0.3
volumes:
- "/workdir:/workdir"
expose:
- "6379"
command: ["/bin/bash","/workdir/redis.sh"] networks:
redis:
driver: bridge
ipam:
driver: default
config:
- subnet: 172.20.0.0/16
执行编排文件。
# docker-compose up -d
Creating network "docker-compose_redis" with driver "bridge"
Creating redis-master ... done
Creating redis-slave ... done
# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3f586ac5a1b8 redis "/bin/bash /workdir/…" 11 seconds ago Up 10 seconds 6379/tcp redis-slave
354d20e933bf redis "/bin/bash /workdir/…" 11 seconds ago Up 10 seconds 6379/tcp redis-master
备注:
1.如果在编排文件测试的过程中遇到error等错误,经重新编写后不能马上执行docker-compose up -d执行编排任务。因为之前的命令中很可能已经创建了指定的容器或网络等。需要执行 docker-compose down先停掉编排任务再执行 docker-compose up -d执行编排任务。
2.写编排文件的时候曾经踩了一个大坑,容器建立完后使用bash脚本启动主、从redis服务时曾经尝试公用一个配置文件来启动。后来一台启动成功一台启动不成功。经过docker logs redis-slave查看日志后发现是
':C 15 Dec 09:43:39.423 # Fatal error, can't open config file '/workdir/docker-compose/redis-master.conf
经过测试发现当一个redis服务通过一个配置文件启动后会把该配置文件的权限修改并且在服务执行的过程中会主动根据环境配置(如:哨兵或客户端设置环境变量时)的变动修改配置文件的值。所以两个redis服务不能共用一个配置文件,需要独立拥有自己的配置文件。
3.根据上面的道理,在容器的使用过程中,不同容器尽量不要共用同一个文件或脚本,尽量分开使用,尽管使用的脚本内容一样也不要自己去跳这些坑。
docker-compose编排项目redis容器实现主从复制的更多相关文章
- Docker Compose部署项目到容器-基于Tomcat和mysql的项目yml配置文件代码
场景 Docker-Compose简介与Ubuntu Server 上安装Compose: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/deta ...
- Docker Compose部署项目到容器-基于Tomcat和mysql的商城项目(附源码和sql下载)
场景 Docker-Compose简介与Ubuntu Server 上安装Compose: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/deta ...
- 使用Docker compose编排Laravel应用
前言 Laravel官方开发环境推荐的是Homestead(其实就是一个封装好的Vagrant box),我感觉这个比较重,于是自己用Docker compose编排了一套开发环境,在这里分享下. 环 ...
- 使用docker compose编排容器
一.安装docker compose 二进制包安装 1.安装 Docker Compose 从 官方 GitHub Release 处直接下载编译好的二进制文件即可 # curl -L https:/ ...
- docker之compose 编排项目
一.docker-compose 的介绍 docker-compose是一种容器编排工具,可以将多个docker容器关联部署.通过yaml文件,可以描述应用的架构,如使用什么镜像.数据卷.网络.绑定服 ...
- Docker(二十六)-Docker Compose编排容器
1. 前言 Docker Compose 是 Docker 容器进行编排的工具,定义和运行多容器的应用,可以一条命令启动多个容器. 使用Compose 基本上分为三步: Dockerfile 定义应用 ...
- Docker系列之(五):使用Docker Compose编排容器
1. 前言 Docker Compose 是 Docker 容器进行编排的工具,定义和运行多容器的应用,可以一条命令启动多个容器. 使用Compose 基本上分为三步: Dockerfile 定义应用 ...
- docker compose 编排
Compose是Docker的服务编排工具,主要用来构建基于Docker的复杂应用,Compose 通过一个配置文件来管理多个Docker容器,非常适合组合使用多个容器进行开发的场景. 说明:Comp ...
- 使用Docker Compose编排Spring Cloud微服务
文章目录 微服务构建实例 简化Compose的编写 编排高可用的Eureka Server 编排高可用Spring Cloud微服务集群及动态伸缩 微服务项目名称 项目微服务中的角色 microser ...
随机推荐
- java中子类继承父类程序执行顺序问题
Java中,new一个类的对象,类里面的静态代码块.非静态代码.无参构造方法.有参构造方法.类的一般方法等部分,它们的执行顺序相对来说比较简单,用程序也很容易验证.比如新建一个测试父类. public ...
- 『sumdiv 数学推导 分治』
sumdiv(POJ 1845) Description 给定两个自然数A和B,S为A^B的所有正整数约数和,编程输出S mod 9901的结果. Input Format 只有一行,两个用空格隔开的 ...
- Ajax上传图片以及上传之前先预览
手头上有几个小项目用到了easyUI,一开始决定使用easyUI就注定了项目整体上前后端分离,基本上所有的请求都采用Ajax来完成.在文件上传的时候用到了Ajax上传文件,以及图片在上传之前的预览效果 ...
- 设计模式总结篇系列:代理模式(Proxy)
时代在发展,我们发现,现在不少明星都开始进行微访谈之类的,有越来越多的参与捐赠等.新的一天开始了,首先看下新的一天的日程安排: interface Schedule{ public void weiT ...
- 二进制安装部署kubernetes集群---超详细教程
本文收录在容器技术学习系列文章总目录 前言:本篇博客是博主踩过无数坑,反复查阅资料,一步步搭建完成后整理的个人心得,分享给大家~~~ 本文所需的安装包,都上传在我的网盘中,需要的可以打赏博主一杯咖啡钱 ...
- TFS2012服务端环境搭建
微软提供的TFS(Team Foundation Server)是为开发者团队提供的一个集 代码仓库.任务管理.文档管理等众多强大功能的服务平台. 1.TFS依赖项 目前TFS已经出到了2018版本, ...
- 一统江湖的大前端(1)——PPT制作库impress.js
<一统江湖的大前端>系列是自己的学习笔记,旨在介绍javascript在非网页开发领域的应用案例和发现各类好玩的js库,不定期更新.如果你对前端的理解还是写写页面绑绑事件,那你真的是有点O ...
- 第10章 使用密码保护API - Identity Server 4 中文文档(v1.0.0)
OAuth 2.0资源所有者密码授权允许客户端向令牌服务发送用户名和密码,并获取代表该用户的访问令牌. 除了无法承载浏览器的旧应用程序之外,规范通常建议不要使用资源所有者密码授予.一般来说,当您要对用 ...
- 第9章 使用客户端凭据保护API - Identity Server 4 中文文档(v1.0.0)
快速入门介绍了使用IdentityServer保护API的最基本方案. 我们将定义一个API和一个想要访问它的客户端. 客户端将通过提供ClientCredentials在IdentityServer ...
- sqlserver数据库发送邮箱
Exec [msdb].dbo.sp_send_dbmail @profile_name='SQLMailConfig', @recipients = @email, //需要发送的邮箱 @su ...