本教程基于CentOS7,开始本教程前,请确保您的Linux系统已安装Docker。
1.使用docker下载redis镜像
docker pull redis
安装完成后,使用docker images
命令,查看是否安装成功
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
命令,查看是否启动成功
(3)分别使用 docker inspect 容器名字
命令,查看3个Redis的Docker内网IP地址
在Networks栏,可以看见该容器的Docker内网IP地址
同理,查看redis-node2和redis-node3的Docker内网IP
(4)进入三个redis容器的内部
进入容器内部命令:docker exec -it 容器id/容器名称 /bin/bash
进入redis-node1内部:
(5)进入redis客户端
redis-cli
(6)测试对单个redis进行set值或get值
如果能set、get能成功,那么单个redis是没有问题的
接下来开始搭建主从复制的redis集群
3.主从复制搭建
(1)进入redis客户端后,使用 info replication 查看当前机器的角色
info replication
发现现在的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的端口号
再使用 info replication查看当前机器角色
可以发现redis-node2已经变成redis-node1从结点了。
同理,进入redis-node3容器,并进入客户端,使用 SLAVEOF 172.17.0.1 6379 命令将redis-node3变为redis-node1的从结点。
我们再次进入redis-node1容器查看机器角色:
此时的redis-node1当中显示有两个从结点了。
(3)测试主从复制
我们在redis-node1 set一个数据,测试redis-node2和redis-node3能否获取该数据。
redis-node1容器中:
redis-node2容器中:
我们发现redis-node1的数据成功同步到了redis-node2中!我们再看redis-node3
redis-node3容器中:
同样成功了。
注意:主结点可以读写,从结点只能读不能写!
如图所示,从结点写数据会报错。
这样我们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主从复制、哨兵模式搭建完毕。