基于Docker实现Redis主从+哨兵搭建的示例实践
目录
- 1.拉取镜像
- 2. 编写主 从配置文件
- 2.1 创建/home/redis/redis_conf目录:
- 2.2 编写主配置文件
- 2.3 编写从配置文件
- 2.4编写从配置文件
- 3 编写sentinel配置文件
- 3.1创建哨兵配置文件
- 3.2编写哨兵配置文件
- 4启动主节点容器
- 4.1启动主节点容器
- 4.2 启动从节点容器
- 5 存在的问题:
- 6、分别启动每个docker容器里面的哨兵
- 6.1进入主节点容器
- 6.2查看文件
- 6.3启动主哨兵服务
- 6.4 启动两个从哨兵服务
- 6.5进入主哨兵
- 6.6查看哨兵状态
- 6.7退出哨兵
- 6.8退出容器
1.拉取镜像
docker pull redis:4
文章图片
2. 编写主 从配置文件
2.1 创建/home/redis/redis_conf目录:
文章图片
2.2 编写主配置文件
#vi redis-master.conf
port 6379#服务端口bind 0.0.0.0#任何服务器都可连接logfile "redis.log"#日志文件名dir /data#data为等会开启docker容器里面的目录appendonly yes#是否持久化
2.3 编写从配置文件
#vi redis-slave-1.conf
port 6380bind 0.0.0.0logfile "redis.log"dir /datadaemonize noappendonly yesslaveof 192.168.17.33 6379slave-read-only no
2.4编写从配置文件
#vi redis-slave-2.conf
port 6381bind 0.0.0.0logfile "redis.log"dir /datadaemonize no#关闭redis自我保护appendonly yes#开启redis持久化slaveof 192.168.17.33 6379#给该从节点指定隶属于的主节点slave-read-only no#如果没有这一行从节点不能写入数据只能读取数据
3 编写sentinel配置文件
3.1创建哨兵配置文件
touch sentinel.conf
3.2编写哨兵配置文件
3.2.1vim sentinel.conf
port 26379dir "/data"logfile "sentinel.log"daemonize yessentinel monitor mymaster 192.168.17.33 6379 2 #这里是哨兵的关键 mymaster:哨兵集群的名称 配置主节点的ip和端口 ,后面的数字2表示当哨兵集群当中有两个哨兵没有检测到主节点的心跳的时候表明主节点挂掉,开始推选新的主节点。(这里我们的哨兵 集群总共有三个哨兵)
3.2.2vim sentinel2.conf
port 26380dir "/data"logfile "sentinel.log"daemonize yessentinel monitor mymaster 192.168.17.33 6379 2
3.2.3vim sentinel3.conf
port 26381dir "/data"logfile "sentinel.log"daemonize yessentinel monitor mymaster 192.168.17.33 6379 2
4启动主节点容器
4.1启动主节点容器
4.1.1 启动容器
docker run -d -p 6379:6379 -p 26379:26379 -v /home/redis/redis_conf/redis-master.conf:/data/redis.conf -v /home/redis/redis_conf/sentinel.conf:/data/sentinel.conf --name redis-master redis:4 redis-server redis.conf
4.1.2 进入容器
docker exec -it redis-master /bin/bash
【基于Docker实现Redis主从+哨兵搭建的示例实践】4.1.3 进入redis客户端
(默认是进入 6379 端口的 redis 。还有我们在启动容器的时候已经顺便将 redi服务端启动起来了:redis-server redis.conf,所以进入容器不用启动redis 服务了,直接可以进入客户端了。 redis-cli
4.1.4查看redis信息,如果是主节点
role 将会为 master 。
info replication
4.1.5退出redis-cli
exit
4.1.6退出redis-master 容器
exit
4.2 启动从节点容器
(两个从节点容器是一样的启动方式,只修改对应的路径,端口映射,名称等,最后面的redis.conf对应的是容器内映射的redis.conf),这里只写出启动一个从节点
的命令,自己启动第二个从节点。
4.2.1启动容器,并同时用容器内的redis.conf启动redis
#启动redis-slave-1容器 同时启动redis-server docker run -d -p 6380:6380 -p 26380:26380 -v /home/redis/redis_conf/redis-slave-1.conf:/data/redis.conf -v /home/redis/redis_conf/sentinel2.conf:/data/sentinel.conf --name redis-slave-1 redis:4 redis-server redis.conf #单独启动redis-slave-2容器 同时启动redis-server docker run -d -p 6381:6381 -p 26381:26381 -v /home/redis/redis_conf/redis-slave-2.conf:/data/redis.conf -v /home/redis/redis_conf/sentinel3.conf:/data/sentinel.conf --name redis-slave-2 redis:4 redis-server redis.conf
4.2.2 进入容器
[root@kcx-yk-k8s-master-33 redis_conf]#docker exec -it redis-slave-2 /bin/bash
4.2.3 进入客户端 (注意:如果直接用 redis-cli 进入,默认会进入 6379 端口的 redis 客户端,如果我们三台不同的服务器,主从节点都是用的各自对的 6379 端口就不会有问题,但是如 果像我一样使用的一台服务器,从节点的端口是 6380 和 6381 就需要指定端口进入 redis 客户端) redis-cli -p 6380
4.2.4查看信息(从节点的role为slave)
info replication
备注: 如果 role 为 master ,我们还可以手工指定主节点(ip和端口根据自己的实际情况指定主节点的 ip 和端口) slaveof 127.0.0.1 6379
5 存在的问题: 显示master_link_status的状态为down。表明从节点没有连接到主节点。
文章图片
查看日志:
1:S 18 Jan 04:20:32.954 # Error condition on socket for SYNC: Connection refused
解决:
原因分析:可能是由于host没有配置主机的默认ip
文章图片
修改后重新启动:一主二从
文章图片
文章图片
文章图片
6、分别启动每个docker容器里面的哨兵
6.1进入主节点容器
首先进入容器。 docker exec -it redis-master bash
6.2查看文件
用 ls 命令,我们就可以看淡到 sentinel.conf 文件,这个配置文件我们就会用来启动 redis 的哨兵。 ls
文章图片
6.3启动主哨兵服务
redis-sentinel sentinel.conf
文章图片
6.4 启动两个从哨兵服务
首先进入容器。
docker exec -it redis-slave-1 bash(docker exec -it redis-slave-2 bash)
启动哨兵
redis-sentinel sentinel.conf
6.5进入主哨兵
redis-cli -p 26379
6.6查看哨兵状态
(我们会看到哨兵会显示监听的主节点的信息和从节点的数量,以及现在的哨兵数量。现在的哨兵数量应该为 3 ) info
文章图片
6.7退出哨兵
exit
6.8退出容器
exit
到此这篇关于基于Docker实现Redis主从+哨兵搭建的示例实践的文章就介绍到这了,更多相关Docker Redis主从+哨兵搭建内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
推荐阅读
- docker中通过nginx+confd动态生成配置的解决方案
- 关于Docker部署postgresql数据库的问题
- 利用vue组件实现图片的拖拽和缩放功能
- Docker下安装Mongo4.2及客户端工具连接Mongo
- 查看Docker容器的信息的方法实现
- vue全局接入百度地图的实现示例
- docker部署访问postgres数据库的实现方法
- go中string、int、float相互转换的实现示例
- C#开发Winform实现窗体间相互传值
- c/c++|顺序表详解及其c语言代码实现