使用Docker在一台机器部署redis哨兵模式——完整步骤和截图

 

记录本人在一台机器上配置一主两从三哨兵redis哨兵模式

一、环境

操作系统:centos7

docker版本:1.13.1

二、操作

   docker安装redis

docker pull redis

这样会获取最新的版本。本人安装时,获取的最新版本为redis 6.0.6。

获取redis配置文件样本:

cd /home/work/docker_data/redis/
wget http://download.redis.io/redis-stable/redis.conf


cp redis.conf redis1.conf
cp redis.conf redis2.conf
cp redis.conf redis3.conf

主要参数设置如下:

redis1: port 6390

redis2: port 6391

redis3: port 6392

注意这里建议大家把端口配置为不一样的,因为在同一台机器上搭建哨兵模式,很容易失败的地方就在于这些redis实例和哨兵(哨兵也是一个特殊的redis实例)的网络通信问题,除非大家对docker的内部网络以及redis实例和哨兵的通信过程非常清楚,否则建议大家使用docker启动实例的时候将docker容器的网络和本地主机映射为一致。所以我们就需要将docker容器内每个redis实例设置为不同的端口号。

在配置哨兵模式的过程中,大家还需注意一个地方,哨兵实例会回写哨兵配置文件,一旦重启哨兵实例的时候,尽量检查一下哨兵配置文件,将之前回写的数据删除,不然可能会影响哨兵的监控判断。具体回写内容大家可以自己查看。

其余主要配置

# 关闭保护模式
protected-mode no
# 让redis服务后台运行(因为使用docker启动时使用了-d参数,所以需要设置为no, 非docker设置为yes)
daemonize no
# 设定密码(可选,如果这里开启了密码要求,slave的配置里就要加这个密码. 只是练习配置,就不使用密码认证了)
# requirepass masterpassword
logfile "/var/tmp/redis.log"
# 从机需要设置该参数 (redis2.conf和redis3.conf需要将masterip设置为#主机的公网或者局域网ip,port为上面设置的6390), 注意该参数在早期版本为#slaveof
#replicaof <masterip> <masterport>

配置完成后启动三个redis实例

docker run --name redis1 -v /home/work/docker_data/redis/redis1.conf:/usr/local/etc/redis/redis.conf -d --net=host redis redis-server /usr/local/etc/redis/redis.conf 
docker run --name redis2 -v /home/work/docker_data/redis/redis2.conf:/usr/local/etc/redis/redis.conf -d --net=host redis redis-server /usr/local/etc/redis/redis.conf 
docker run --name redis3 -v /home/work/docker_data/redis/redis3.conf:/usr/local/etc/redis/redis.conf -d --net=host redis redis-server /usr/local/etc/redis/redis.conf 

使用docker ps查看启动的实例

查看集群是否成功

redis-cli –p 6390 (本机也装了redis,所以有redis客户端,本机没有安装redis的同学,进入docker容器来操作docker exec –it redis1 bash)

可以看到该redis集群有两个从节点。

往主节点写数测试从节点是否复制

 

可以看到主从配置成功。

接下来开始配置哨兵

wget http://download.redis.io/redis-stable/sentinel.conf
cp sentinel.conf sentinel1.conf
cp sentinel.conf sentinel2.conf
cp sentinel.conf sentinel3.conf

修改三个文件监听端口为port 26379, port 26380, port 26381

# 让sentinel服务后台运行(docker的话需要设置为no,非docker运行设置为yes, 因为docker有个-d属性就是让在后台运行的)
daemonize no 

# 修改日志文件的路径
logfile "/var/tmp/sentinel.log"

# 修改监控的主redis服务器
# 最后一个2表示,两台机器判定主被动下线后,就进行failover(故障转移)
sentinel monitor mymaster 公网ip 6390 2

#超过5秒master还没有连接上,则认为master已经停止
sentinel down-after-milliseconds mymaster 5000

配置好后启动三个哨兵

docker run --name sentinel1  -v /home/work/docker_data/redis/sentinel1.conf:/usr/local/etc/redis/sentinel.conf -d --net=host redis redis-sentinel /usr/local/etc/redis/sentinel.conf
docker run --name sentinel2  -v /home/work/docker_data/redis/sentinel2.conf:/usr/local/etc/redis/sentinel.conf -d --net=host redis redis-sentinel /usr/local/etc/redis/sentinel.conf
docker run --name sentinel3  -v /home/work/docker_data/redis/sentinel3.conf:/usr/local/etc/redis/sentinel.conf -d --net=host redis redis-sentinel /usr/local/etc/redis/sentinel.conf

启动后通过docker ps查看

通过redis-cli –p 26379(注意我是本机安装了redis的,如果本机没有安装,需要进入docker容器,docker exec –it sentinel1 bash)进入哨兵实例,查看哨兵监控状态

可以看到哨兵的状态是正确的,发现了1个主节点,2个从节点,并且哨兵一共有3个。

模拟主节点崩溃后,其中一个从节点变为主节点,并且另外一个从节点以新主节点做备份。(从节点通过客户端连接后,只能查看,不能写入数据)

docker stop redis1

停止主节点后,需要等待5-10秒再查看redis2redis3

redis-cli –p 6391

可以看到redis2变为了主节点,并且成功向其写入user2

连接redis3查看一下

成功复制了刚在redis2中写入的user2键,查看info信息也发现其master port变成了6391(redis2)

这时再查看一下哨兵日志

可以发现哨兵发现redis实例,以及发现redis1 down掉后选取新主节点的整个过程。

关于怎么通过springboot连接redis集群,参见这里

 

================重点==================

作为一个卖水果的程序员,为大家解惑的同时也为大家提供鲜美可口健康的有机水果。欢迎大家在解bug之余尝尝,提神醒脑,健胃开脾,地址:https://zhenxianguo.taobao.com

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
您可以使用以下步骤使用redis.conf文件部署Redis: 1. 首先,创建一个Redis容器并挂载redis.conf文件: ``` docker run --name redis \ -p 40002:6379 \ -v /usr/local/redis/conf:/data \ -v /usr/local/redis/conf:/usr/local/etc/redis \ -d redis:6.2.7 \ redis-server /usr/local/etc/redis/redis.conf ``` 2. 然后,更新容器的重启策略,以便容器在启动时自动重启: ``` docker update --restart=always redis ``` 这样就可以使用redis.conf文件来部署Redis容器了。请注意,将redis.conf文件放在/usr/local/redis/conf目录下,并将该目录挂载到容器的/data和/usr/local/etc/redis目录中。另外,通过指定容器的名称和端口映射,可以访问Redis服务。在上述示例中,Redis将通过主机的40002端口进行访问。123 #### 引用[.reference_title] - *1* *2* [dockerredis.conf挂载配置文件无效](https://blog.csdn.net/L_1010_J/article/details/120941143)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}} ] [.reference_item] - *3* [Redis docker安装及redis.conf配置文件解析](https://blog.csdn.net/m0_70651612/article/details/124901394)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值