docker+redis+一主一从2哨兵+SpringBoot构建redis的高可用

docker+redis使用配置文件方式配置redis,一主+一从+2哨兵

** 一、环境**

服务器ip搭建的环境
centOS7192.168.6.136redis的主、哨兵一个
centOS7192.168.6.139redis的从、哨兵一个

两台服务器前提已经安装好docker了。

二、构建redis主从

1. 构建Master

	docker pull redis #我这里是下载的最新当前是6.0版本
	#创建挂载目录
	mkdir /home/docker/redis/conf  
    mkdir /home/docker/redis/data
    cd /home/docker/redis/conf
    #配置文件 可以从官网中下载个模板
    wget http://download.redis.io/redis-stable/redis.conf
 #配置
bind 0.0.0.0
port 16379
logfile "redis.log"
#密码
#保护模式
protected-mode yes
requirepass platform_888888
masterauth  platform_888888
#redis最大使用内存 10GB
maxmemory 10737418240
#内存满策略,使用移除最近未使用的key
maxmemory-policy allkeys-lru
#开启AOF
appendonly yes
#让服务后台运行 此处必须no,因为我们要命令执行会与docker的-d冲突
#daemonize yes

#启动master

docker run -p 6379:6379  -e TZ=Asia/Shanghai   -v  /home/docker/redis/data:/data -v   /home/docker/redis/conf/redis.conf:/usr/local/etc/redis/redis.conf   -d --name redis redis:latest   redis-server /usr/local/etc/redis/redis.conf

2. 构建slave

		构建方法与master一致,只不过配置我们需要改一下.如下:
bind 0.0.0.0
port 6379
#密码
requirepass platform_888888
#redis最大使用内存10GB
maxmemory 10737418240 
#内存满策略,使用移除最近未使用的key
maxmemory-policy allkeys-lru
#保护模式
protected-mode yes
#开启AOF 
appendonly yes 
logfile "redis.log"
#主库密码
masterauth  platform_888888
#主库地址
replicaof 192.168.6.136 6379
#让服务后台运行
#daemonize no


启动

 docker run -p 6379:6379  -e TZ=Asia/Shanghai   -v  /home/docker/redis/data:/data -v   /home/docker/redis/conf/redis.conf:/usr/local/etc/redis/redis.conf   -d --name redis redis:latest   redis-server /usr/local/etc/redis/redis.conf
redis-server /usr/local/etc/redis/redis.conf
 docker logs -f redis  #查看日志,一般没error就是配置成功了。
 docker exec -it redis bash  #进入容器内部
 redis-cli #启动客户端
 info replication #查看配置状态
 #如果配置了密码,需要验证密码
 auth password 

slave以下信息
在这里插入图片描述
验证主从:
在136上执行set k1 2;
在139上执行 get k1,成功取到;

三 、构建哨兵

配置哨兵的配置文件 (139服务下
):
cd /home/docker/redis/conf ;#进入配置文件目录
vim sentinel.conf #编辑并创建该文件

bind 0.0.0.0
port 26379
dir "/tmp"
#保护模式
protected-mode yes
sentinel deny-scripts-reconfig yes
#监听redis的master节点 ip 端口 当满足多少个sentinel投票选举就切换
sentinel monitor mymaster 192.168.6.136 16379 1
#密码
sentinel auth-pass mymaster platform_888888
#主mastr下线检测3000毫秒
sentinel down-after-milliseconds mymaster 3000
sentinel parallel-syncs mymaster 1
#切换失败的时间
sentinel failover-timeout mymaster 10000

启动sentinel1:

docker run -it --name sentinel -d  -p 26379:26379 --net=host  -e   TZ=Asia/Shanghai  -v /home/docker/redis/conf/sentinel.conf:/usr/local/etc/redis/sentinel.conf  --restart=always  redis:latest redis-sentinel /usr/local/etc/redis/sentinel.conf

3.1 构建第二个sentinel (136服务器)

配置与139的sentinel差不多,把端口改成36379启动就行然后启动

四、配置springboot(基于Spring的RedisTemplate)

在这里插入图片描述

4.1 测试

	在136主redis服务器中执行
	docker stop redis

可以看到sentinel监听到136下线后选举了139作为master
在这里插入图片描述

重启136后停止139又选举136作为新的master,springboot也做了切换
在这里插入图片描述

五、遇到的问题和坑

4.1 sentinel启动的时候就检测到slave下线了

在这里插入图片描述

1,看日志启动sentinel的时候就发现slave后马上就打印+sdown slave日志了,sentinel认为这个slave下线了。导致选举的时候选举不了。打印 no-good-salve信息

解决方法:
这个坑,初步判断是redis在docker内部网络通信的问题。
在启动redis主从和sentinel的时候指定docker的–net=host
意思就是使用宿主机的ip和端口。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值