docker

环境:Ubuntu 20.04 64版/Centos7

docker版本:20.10.16

docker-compose版本:1.25.1

redis镜像版本:docker.io/redis:6.2.5-alpine

Docker版本变化说明:

Docker从1.13.x开始分为社区版CE和企业版EE,版本号也改为按照时间线来发布,比如17.03就是2017年3月。

Docker的linux发行版的软件仓库目前为https://download.docker.com, 软件包名字改为docker-ce和docker-ee。

ubuntu安装docker

Docker的社区版(Docker Community Edition)叫做docker-ce。老版本的Docker包叫做docker或者docker-engine,docker官网推荐的安装方式都是下载docker安装脚本安装。

卸载旧版docker(若未安装过可省略此步):

sudo apt-get remove docker docker.io docker-engine

安装最新版本docker:curl -sSL https://get.docker.com/ | sh

或者

curl -fsSL get.docker.com -o get-docker.sh

sudo sh get-docker.sh

docker-compose搭建Redis哨兵模式

确认Docker安装成功,拉取一个单机版本redis的docker:

docker run -d -p 6379:6379 -v ~/redisdata:/data redis:6.2.5 redis-server --appendonly yes

centos安装docker

安装软件包

yum install -y yum-utils device-mapper-persistent-data lvm2

设置yum源

yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

查看有哪些版本可以装(知道要安装的版本号可直接跳过)

yum list docker-ce --showduplicates | sort -r


docker-compose搭建Redis哨兵模式

安装docker,注意需要输入完整的版本号

yum install docker-ce-20.10.9-3.el8

安装完成后,将docker加入开机自启动

systemctl start docker

systemctl enable docker

检查是否安装成功

docker version

两种dockercompose安装方式

daocloud下载最新版的docker-compose文件

sudo curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

从github上下载docker-compose二进制文件安装

github.com下载最新版的docker-compose文件

sudo curl -L https://github.com/docker/compose/releases/download/1.16.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

添加可执行权限

sudo chmod +x /usr/local/bin/docker-compose

测试安装结果

docker-compose --version

2.pip安装

sudo pip install docker-compose

主从模式

建立文件目录: mkdir -p /redisMasterSlave

创建文件redisDockerCompose.yml

version: '3'
services:
  master:
    environment: 
      - TZ=Asia/Shanghai
    image: docker.io/redis:6.2.5-alpine
    container_name: redis_master
    restart: always
    command: redis-server --requirepass root --masterauth  redisMima1
    ports:
      - 6379:6379 
 
  slave1:
    environment: 
      - TZ=Asia/Shanghai
    image: docker.io/redis:6.2.5-alpine
    container_name: redis_slave_1
    restart: always
    command: redis-server --slaveof redis_master 6379 --requirepass  redisMima1  --masterauth dockercomposeredis 
    ports:
      - 6380:6379
 
 
  slave2:
    environment: 
      - TZ=Asia/Shanghai
    image: docker.io/redis:6.2.5-alpine
    container_name: redis_slave_2
    restart: always
    command: redis-server --slaveof redis_master 6379 --requirepass  redisMima1 --masterauth dockercomposeredis 
    ports:
      - 6381:6379

启动命令:docker-compose -f redisDockerCompose.yml -p redisMima1 up -d


docker-compose搭建Redis哨兵模式

redis启动

查看实例中的redis角色的命令

docker exec redis_master redis-cli -a root info replication


docker-compose搭建Redis哨兵模式

不用进到容器里看,直接在shell下执行即可, 其中redis-master为容器名, -a指定redis密码

哨兵模式

哨兵模式是基于主从的, 建立文件目录如下

~/docker
└── redis-sentinel
    ├── redis-master-slave.yml
    ├── redis-sentinel-sentinel.yml
    ├── s1
    │   └── sentinel.conf
    ├── s2
    │   └── sentinel.conf
    └── s3
        └── sentinel.conf

只需要准备三件事

1. redis-master-slave.yml

redis-master-slave.yml配置与主从模式一样,可直接拷贝

2. redis-sentinel-sentinel.yml

redis-sentinel-sentinel.yml配置如下

version: '3'
services:
  sentinel1:
    environment: 
      - TZ=Asia/Shanghai
    image: docker.io/redis:6.2.5-alpine
    container_name: redis-sentinel-1
    restart: always
    command: redis-sentinel /usr/local/etc/redis/conf/sentinel.conf
    ports:
      - 26379:26379
    volumes:
      - ./s1/:/usr/local/etc/redis/conf/
 
 
  sentinel2:
    environment: 
      - TZ=Asia/Shanghai
    image: docker.io/redis:6.2.5-alpine
    container_name: redis-sentinel-2
    restart: always
    command: redis-sentinel /usr/local/etc/redis/conf/sentinel.conf
    ports:
      - 26380:26379
    volumes:
      - ./s2/:/usr/local/etc/redis/conf/
 
 
  sentinel3:
    environment: 
      - TZ=Asia/Shanghai
    image: docker.io/redis:6.2.5-alpine
    container_name: redis-sentinel-3
    restart: always
    command: redis-sentinel /usr/local/etc/redis/conf/sentinel.conf
    ports:
      - 26381:26379
    volumes:
      - ./s3/:/usr/local/etc/redis/conf/
 
 
networks:
  default:
    external:
      name: redis_default

注意networks配是主从模式的网络, 查看主从的任意一台实例可知网络, 查看命令

docker inspect redis-master |grep Networks -A 15

结果如下, 可知我的这台主服务器在网络redis_default上, ip为172.19.0.2


docker-compose搭建Redis哨兵模式

3. sentinel.conf

以下的是s1下的sentinel.conf

port 26379
dir "/tmp"
sentinel monitor mymaster 172.19.0.2 6379 2
sentinel auth-pass mymaster root
sentinel down-after-milliseconds mymaster 30000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 180000
sentinel deny-scripts-reconfig yes

s2与s3下的配置文件的port分别改为26380, 26381, 其它一样

注意其中的172.19.0.2是master的docker网络的ip

启动命令

docker-compose -f redis-sentinel-sentinel.yml -p redis up -d

完成后查看容器运行情况 docker ps

为方便试错, 将常用命令写成脚本run_REDIS

#!/bin/bash
if [ $# -gt 1 ]
then
  echo 'wrong arg numbers'
  exit
fi
op=$1
if test -z "$op"
then
  echo "null arg"
elif [ $op == 'stop' ]
then
  docker stop redis-master redis-slave-1 redis-slave-2 redis-sentinel-1 redis-sentinel-2 redis-sentinel-3
elif [ $op == 'stop1' ]
then
  docker stop redis-master redis-slave-1 redis-slave-2
elif [ $op == 'stop2' ]
then
  docker stop redis-sentinel-1 redis-sentinel-2 redis-sentinel-3
elif [ $op == 'clear' ]
then
  docker container rm redis-master redis-slave-1 redis-slave-2 redis-sentinel-1 redis-sentinel-2 redis-sentinel-3
elif [ $op == 'clear1' ]
then
  docker container rm redis-master redis-slave-1 redis-slave-2
elif [ $op == 'clear2' ]
then
  docker container rm redis-sentinel-1 redis-sentinel-2 redis-sentinel-3
elif [ $op == 'start1' ]
then
  docker start redis-master redis-slave-1 redis-slave-2
elif [ $op == 'start2' ]
then
  docker start redis-sentinel-1 redis-sentinel-2 redis-sentinel-3
elif [ $op == 'up1' ]
then
  docker-compose -f redis-master-slave.yml -p redis up -d
elif [ $op == 'up2' ]
then
  docker-compose -f redis-sentinel-sentinel.yml -p redis up -d
elif [ $op == 'info-master' ]
then
  docker exec redis-master redis-cli -a root info replication
elif [ $op == 'info-slave-1' ]
then
  docker exec redis-slave-1 redis-cli -a root info replication
elif [ $op == 'info-slave-2' ]
then
  docker exec redis-slave-2 redis-cli -a root info replication
elif [ $op == 'test' ]
then
  echo 'test pass'
else
  echo "arg invalid: $1"
fi

启动主从docker-compose: ./run_REDIS up1

启动哨兵docker-compose: ./run_REDIS up2

启动主从容器: ./run_REDIS start1

启动哨兵容器: ./run_REDIS start2

停止主从与哨兵所有容器: ./run_REDIS stop

停止主从容器: ./run_REDIS stop1

停止哨兵容器: ./run_REDIS stop2

清除主从与哨兵所有容器: ./run_REDIS clear

清除主从所有容器: ./run_REDIS clear1

清除哨兵所有容器: .run_REDIS clear2

现在可以很方便地试错了~

搭建哨兵模式过程中的常见问题

展开阅读全文

页面更新:2024-03-06

标签:主从   哨兵   软件包   最新版   容器   版本号   脚本   实例   命令   解决方案   版本   模式   方式   文件   网络

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top