个人博客

docker-compose搭建高可用redis服务

compose用于定义和运行多容器docker的应用程序工具。可以使用yml文件来配置应用程序需要的所有服务,然后使用docker-compose命令,就可以创建并启动配置文件中的所有服务。

一、安装

我们可以从github上下载它的二进制文件,使用最新的发布版本:https://github.com/docker/compose/releases

运行以下命令进行安装:

curl -L https://github.com/docker/compose/releases/download/1.25.4-rc2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose

由于github的下载速度太慢,我们也可以使用离线的方式进行安装,下载我已经下载好的docker-compose-Linux-x86_64_1.24,百度云盘:https://pan.baidu.com/s/1AZzXmo4x0xlfQTtMzSr3eA,提取码:imtb。

将文件移动到指定目录,并赋予执行权限:

mv compose-Linux-x86_64_1.24 /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose

安装成功后,使用命令查看是否能看到compose版本,能看到信息则为安装成功,命令是:

docker-compose version

二、redis1主2从3哨兵配置文件

1,先建一个项目文件夹,并进入到该文件夹中:

mkdir compose_pro
cd compose_pro

2,创建docker-compose.yml文件并写入下面配置信息:

version: '3.7'
services:
  master:
    image: redis
    container_name: redis-master
    restart: always
    command: redis-server --port 6379 --requirepass 123456  --appendonly yes
    ports:
      - 6379:6379
    volumes:
      - ./data:/data

  slave1:
    image: redis
    container_name: redis-slave-1
    restart: always
    command: redis-server --slaveof master 6379 --port 6380  --requirepass 123456 --masterauth 123456  --appendonly yes
    ports:
      - 6380:6380
    volumes:
      - ./data:/data

  slave2:
    image: redis
    container_name: redis-slave-2
    restart: always
    command: redis-server --slaveof master 6379 --port 6381  --requirepass 123456 --masterauth 123456  --appendonly yes
    ports:
      - 6381:6381
    volumes:
      - ./data:/data

  sentinel1:
    image: redis
    container_name: redis-sentinel-1
    command: redis-sentinel /usr/local/etc/redis/sentinel.conf
    restart: always
    ports:
      - 26379:26379
    volumes:
      - ./sentinel1.conf:/usr/local/etc/redis/sentinel.conf

  sentinel2:
    image: redis
    container_name: redis-sentinel-2
    command: redis-sentinel /usr/local/etc/redis/sentinel.conf
    restart: always
    ports:
      - 26380:26379
    volumes:
      - ./sentinel2.conf:/usr/local/etc/redis/sentinel.conf

  sentinel3:
    image: redis
    container_name: redis-sentinel-3
    command: redis-sentinel /usr/local/etc/redis/sentinel.conf
    restart: always
    ports:
      - 26381:26379
    volumes:
      - ./sentinel3.conf:/usr/local/etc/redis/sentinel.conf

3,参数说明:

version:表示docker文件的版本。

image:指定基础容器镜像,如redis。

container_name:给这个运行的容器起一个别名。

restart:always表示开机自启。

command:该容器中执行的命令。

ports:端口映射,宿主机端口对应容易内端口。

volumes:数据卷的映射,使用具体路径直接挂载到本地,特点就是直观。

4,编写sentinel.conf文件:

port 26379
dir /tmp
# 自定义集群名,其中 master 为 redis-master 的 容器别名,也可以为IP地址,6379 为 redis-master 的端口,2 为最小投票数(因为有 3 台 Sentinel 所以可以设置成 2)
sentinel monitor mymaster master 6379 2
sentinel down-after-milliseconds mymaster 30000
sentinel parallel-syncs mymaster 1
sentinel auth-pass mymaster 123456
sentinel failover-timeout mymaster 180000
sentinel deny-scripts-reconfig yes

再执行复制命令,复制多几个文件:

cp sentinel.conf sentinel1.conf
cp sentinel.conf sentinel2.conf
cp sentinel.conf sentinel3.conf

注:这里需要复制3个哨兵的配置文件,不能使用同一个,在哨兵启动时,会将信息覆写到配置文件中,使用同一个文件会有冲突。

5,启动docker-compose:

docker-compose up -d

执行成功后显示:

picture

6,查看docker运行的容器:

docker ps -a

picture

7,查看容器日志,如果失败了可以看是什么原因:

docker logs -f redis-master    # 可以使用name或者容器ID

8,停止compose:

docker-compose down

三、测试redis主从和哨兵模式

1,测试redis主从是否成功

先连接上redis主库:

redis-cli -h 192.168.101.201 -p 6379

连接上之后先登录并查看信息,如下:

picture

也可以在主库设置个key,然后在从库上看是否有key的存在。这里就不做展示了。

2,测试redis哨兵是否成功

先连接上哨兵的服务:

redis-cli -h 192.168.101.201 -p 26379

连接上之后使用命令查看设置信息:

sentinel master mymaster

picture

主要看红色框内的信息,从库数量、其他的哨兵数量和投票数。

再执行下面的命令,查看信息:

sentinel slaves mymaster

picture

主要看红色框内的信息,主库连接状态、主库地址和主库端口号。

接着我们可以停掉主库的容器:

dorker stop redis-master

停掉之后,redis哨兵会自动从从库中选取一个当主库,这是我们只要在剩下的两个从库中找出主库就可以证明哨兵起作用(通过登录redis 6380和6381端口,使用info命令查看信息就可以看到新的主库信息)。

相关标签
回到顶部