Linux基于Docker的Redis主从复制、哨兵模式搭建

时间:2023-12-09 20:48:13

本教程基于CentOS7,开始本教程前,请确保您的Linux系统已安装Docker。

1.使用docker下载redis镜像

docker pull redis

安装完成后,使用docker images命令,查看是否安装成功

Linux基于Docker的Redis主从复制、哨兵模式搭建

 2.redis集群搭建

(1)使用以下命令启动3个Redis

docker run --name redis-node1 -p 6379:6379 -d docker.io/redis
docker run --name redis-node2 -p 6380:6380 -d docker.io/redis
docker run --name redis-node3 -p 6381:6381 -d docker.io/redis

(2)使用docker ps命令,查看是否启动成功

Linux基于Docker的Redis主从复制、哨兵模式搭建

(3)分别使用 docker inspect 容器名字命令,查看3个Redis的Docker内网IP地址

Linux基于Docker的Redis主从复制、哨兵模式搭建

  在Networks栏,可以看见该容器的Docker内网IP地址

Linux基于Docker的Redis主从复制、哨兵模式搭建

同理,查看redis-node2和redis-node3的Docker内网IP

(4)进入三个redis容器的内部

进入容器内部命令:docker exec -it 容器id/容器名称 /bin/bash

进入redis-node1内部:

Linux基于Docker的Redis主从复制、哨兵模式搭建

(5)进入redis客户端

redis-cli

Linux基于Docker的Redis主从复制、哨兵模式搭建

(6)测试对单个redis进行set值或get值

Linux基于Docker的Redis主从复制、哨兵模式搭建

如果能set、get能成功,那么单个redis是没有问题的

接下来开始搭建主从复制的redis集群

3.主从复制搭建

(1)进入redis客户端后,使用 info replication 查看当前机器的角色

info replication

Linux基于Docker的Redis主从复制、哨兵模式搭建

发现现在的redis-node1是master(主人),同理redis-node2和redis-node3也是master

现在我要将redis-node2和redis-node3变为slave(仆从)

(2)进入redis-node2容器,并进入客户端

1 docker exec -it redis-node2 /bin/bash
2 redis-cli

使用 SLAVEOF 172.17.0.1 6379 命令将redis-node2变为redis-node1的从结点,172.17.0.1是前面获取的redis-node1的容器内IP,6379是redis-node1的端口号

Linux基于Docker的Redis主从复制、哨兵模式搭建

再使用 info replication查看当前机器角色

Linux基于Docker的Redis主从复制、哨兵模式搭建

可以发现redis-node2已经变成redis-node1从结点了。

同理,进入redis-node3容器,并进入客户端,使用 SLAVEOF 172.17.0.1 6379 命令将redis-node3变为redis-node1的从结点。

我们再次进入redis-node1容器查看机器角色:

Linux基于Docker的Redis主从复制、哨兵模式搭建

此时的redis-node1当中显示有两个从结点了。

(3)测试主从复制

我们在redis-node1 set一个数据,测试redis-node2和redis-node3能否获取该数据。

redis-node1容器中:

Linux基于Docker的Redis主从复制、哨兵模式搭建

redis-node2容器中:

Linux基于Docker的Redis主从复制、哨兵模式搭建

我们发现redis-node1的数据成功同步到了redis-node2中!我们再看redis-node3

redis-node3容器中:

Linux基于Docker的Redis主从复制、哨兵模式搭建

同样成功了。

注意:主结点可以读写,从结点只能读不能写!

Linux基于Docker的Redis主从复制、哨兵模式搭建

如图所示,从结点写数据会报错。

这样我们redis的主从复制就搭建完毕了。

主从复制虽然可以一定程度上增加resdis集群的可用性,但是如果主结点宕机我们需要手动为从结点指定新的主结点,这很不方便也不符合生产环境的需要,所以我们引入了哨兵模式。

4.配置redis哨兵

分别进入3台Redis容器内部,执行以下操作
首先,进入Docker容器内部:

进入三台redis容器:docker exec -it 容器id/容器名称 /bin/bash
更新依赖命令:apt-get update
安装vim命令:apt-get install -y vim

然后,编写Redis哨兵配置文件:

使用 cd / 命令,进入根目录
使用 vim sentinel.conf命令,创建哨兵配置文件
添加以下内容 sentinel monitor host6379 172.17.0.1 6379 1

最后,启动Redis哨兵:

使用 redis-sentinel /sentinel.conf 启动Redis哨兵监控
使用 ps –ef |grep redis 命令,可以看到redis-server和redis-sentinel正在运行

注意:三个redis容器都要执行上面的操作

完成后,哨兵会监视主结点状态,如果主结点宕机,30s后会从从结点当中选择一个作为主结点,如果后面原主结点重新连接,原主结点会变为新主结点的从结点。

至此,Linux基于Docker的Redis主从复制、哨兵模式搭建完毕。