基于docker实现redis高可用集群
简介
- 基于docker和docker-compose
- 使用redis集群和sentinel集群,达到redis高可用,为缓存做铺垫
- 每一个redis要匹配一个sentinel;多个sentinel之间要互相关联
搭建redis集群
新建redis文件夹,在该文件夹下创建docker-compose.yml文件,输入如下内容
version: '3.1' services: master: image: redis container_name: redis-master ports: - 6379:6379 slave1: image: redis container_name: redis-slave-1 ports: - 6380:6379 command: redis-server --slaveof redis-master 6379 #绑定主redis:redis是主redis的计算机名,6379为主redis的接口 slave2: image: redis container_name: redis-slave-2 ports: - 6381:6379 command: redis-server --slaveof redis-master 6379 #绑定主redis:red is是主redis的计算机名,6379为主redis的接口
运行redis容器:在docker-compose.yml当前所在文件夹下,运行命令
docker-compose up -d
搭建sentinel集群
新建sentinel文件夹,在该文件夹下创建docker-compose.yml文件,输入如下内容
version: '3.1' services: sentinel1: image: redis container_name: redis-sentinel-1 ports: - 26379:26379 command: redis-sentinel /usr/local/etc/redis/sentinel.conf volumes: - ./sentinel1.conf:/usr/local/etc/redis/sentinel.conf sentinel2: image: redis container_name: redis-sentinel-2 ports: - 26380:26379 command: redis-sentinel /usr/local/etc/redis/sentinel.conf volumes: - ./sentinel2.conf:/usr/local/etc/redis/sentinel.conf sentinel3: image: redis container_name: redis-sentinel-3 ports: - 26381:26379 command: redis-sentinel /usr/local/etc/redis/sentinel.conf volumes: - ./sentinel3.conf:/usr/local/etc/redis/sentinel.conf
创建三个数据卷配置文件(sentinel1.conf,sentinel2.conf,sentinel3.cong),分别为sentinel容器提供配置,为了方便,我这里将三个配置文件内容设置成一样
port 26379 dir "/tmp" # 自定义集群名,其中192.168.145.128为redis-master的ip,6379为redis-master的端口, # 2为最小投票数(因为有3台sentinel,所以可以设置为2) sentinel deny-scripts-reconfig yes sentinel monitor mymaster 192.168.145.128 6379 2 sentinel down-after-milliseconds mymaster 300000 sentinel config-epoch mymaster 0 sentinel parallel-syncs mymaster 1 sentinel failover-timeout mymaster 180000
运行sentinel集群:与docker-compose同级目录下,运行如下命令
docker-compose up -d
验证是否成功部署
以交互的方式进入任意一个sentinel容器
docker exec -it redis-sentinel-1 bash
在进入的sentinel容器中,通过命令的方式进入redis客户端
redis-cli -p 26379
- 在客户端中查看此sentinel对应的redis信息
sentinel master mymaster
能看到如下结果,说明部署成功
1) "name" 2) "mymaster" 3) "ip" 4) "192.168.145.128" 5) "port" 6) "6379" 7) "runid" 8) "324f148cf69ef6d2a86cfa4bdfc4f6937974b7b8" 9) "flags" 10) "master" 11) "link-pending-commands" 12) "0" 13) "link-refcount" 14) "1" 15) "last-ping-sent" 16) "0" 17) "last-ok-ping-reply" 18) "561" 19) "last-ping-reply" 20) "561" 21) "down-after-milliseconds" 22) "300000" 23) "info-refresh" 24) "7109" 25) "role-reported" 26) "master" 27) "role-reported-time" 28) "4454165" 29) "config-epoch" 30) "0" 31) "num-slaves" 32) "2" 33) "num-other-sentinels" 34) "2" 35) "quorum" 36) "2" 37) "failover-timeout" 38) "180000" 39) "parallel-syncs" 40) "1"