准备如下:
三台服务器分别:172.25.10.89;172.25.10.126;172.25.11.126
docker docker-compose 镜像

一.主从模式:

1.1:docker-compose.yml

在三台服务器下分别创建.yml文件:
172.25.10.89为master:

version: '3'services:redis-slave2:image: rediscontainer_name: redis-slave2command: redis-server --slaveof 172.25.10.89 6379 --port 6379 --requirepass test1234 --masterauth test1234ports:- 6379:6379privileged: truevolumes:- /usr/local/docker/redis/data:/data- /usr/local/docker/redis/conf/:/usr/local/etc/redis/


172.25.10.126为slave1:

version: '3'services:redis-slave1:image: rediscontainer_name: redis-slave1restart: alwayscommand: redis-server --slaveof 172.25.10.89 6379 --port 6379 --requirepass test1234 --masterauth test1234 --appendonly yesports:- 6379:6379privileged: truevolumes:- /usr/local/docker/redis/data:/data- /usr/local/docker/redis/conf/:/usr/local/etc/redis/

172.25.11.126为slave2:

version: '3'services:redis-slave2:image: rediscontainer_name: redis-slave2restart: alwayscommand: redis-server --slaveof 172.25.10.89 6379 --port 6379 --requirepass test1234 --masterauth test1234 --appendonly yesports:- 6379:6379privileged: truevolumes:- /usr/local/docker/redis/data:/data- /usr/local/docker/redis/conf/:/usr/local/etc/redis/


参数解释:
privileged: true 权限
requirepass test1234 访问本机需要的密码
masterauth test1234 作为从机访问主机的密码
appendonly yes 是否持久化

1.2 启动主从节点

docker-compose up 启动,查看是否会有启动问题,这样启动如果有报错会有日志打印

docker-compose up -d 后台启动
后面可以用docker ps查看容器是否正常启动


借助客户端工具可以得知:master可以set,get数据,但是作为slave只可以读不可写

docker-compose down 关闭

1.3客户端连接
借助Another Redis Desktop Manager来连接
[https://gitee.com/qishibo/AnotherRedisDesktopManager/releases]

输入ip跟密码:

![在这里插入图片描述](https://img-blog.csdnimg.cn/615ff00e0b09412fa15fb426d631026d.png

至此借助docker-compose搭建一主两从完成。

哨兵模式实现

在三台服务器下面*/usr/local/docker/redis*

mkdir sentinelcd sentinel touch sentinel.conftouch docker-compose.yml

172.25.10.89的sentinel.conf编写:(其他;两台服务器也可以使用26379,因为从属不同的服务器)

port 26379#保持no,千万不要yes daemonize no#redis-master这个名字随便取,客户端访问时会用 到,IP 和 端口是主从Redis的主节点IP和端口,2是一个数字,指明当有多少个sentinel认为一个master失效时(值一般为:sentinel总数/2 + 1),master才算真正失效sentinel monitor redis-master 172.25.10.89 6379 2 #验证密码sentinel auth-pass redis-master test234 sentinel announce-ip "172.25.10.89"#该端口号要跟该文件上面的端口号prot同步sentinel announce-port 26379 

172.25.10.126;172.25.11.126的sentinel.conf跟上面的一样。
docker-compose.yml文件
172.25.10.89

version: '3'services:  redis-sentinel-1:    image: redis    container_name: redis-sentinel-1    command: redis-sentinel /usr/local/etc/redis/sentinel.conf    ports:      - 26379:26379privileged: true    volumes:      - /usr/local/docker/redis/sentinel:/usr/local/etc/redis/

172.25.10.126

version: '3'services:  redis-sentinel-2:    image: redis    container_name: redis-sentinel-2    command: redis-sentinel /usr/local/etc/redis/sentinel.conf    ports:      - 26379:26379privileged: true    volumes:      - /usr/local/docker/redis/sentinel:/usr/local/etc/redis/

172.25.11.126

version: '3'services:  redis-sentinel-3:    image: redis    container_name: redis-sentinel-3    command: redis-sentinel /usr/local/etc/redis/sentinel.conf    ports:      - 26379:26379privileged: true    volumes:      - /usr/local/docker/redis/sentinel:/usr/local/etc/redis/

启动哨兵:docker-compose up -d

docker ps 查看

验证哨兵模式是否可以正常切换主从节点:
(大致的思想:这里可以关闭redis-master节点,看看sentinel是否会重新选举新的主节点出来,可以到节点中进行set 存储数据,如果节点可以进行存储就说明选举成功了,哨兵选举的前提是节点不能少于两个。主节点可读可写,从节点只读不写,如果主节点关闭后,其他从节点不能存储数据。)

现在停下master:docker stop redis-master

等待一会再次启动redis-master,查看节点关系

docker-compose up -d


进入容器查看

docker exec -it redis-master bash 进入redis客户端redis-server /usr/local/etc/redis/redis.confredis-cliinfo replication


172.25.10.89已经变为slave。哨兵模式成功,主从关系发生变化。