Docker版Redis哨兵集群
前言
Redis集群Docker版本安装部署测试:
1、主从集群搭建
2、sentinel集群搭建
3、故障转移测试
一、Redis三种集群介绍
具体可以参考:
1、Redis集群搭建的三种方式
2、 集群的三种模式
二、Redis主从部署
1.安装
1、获取安装文件:
$ docker pull redis:6.2.4
$ mkdir -p /usr/local/redis
$ cd /usr/local/redis
# 拉去redis.conf文件命令:
$ wget -c http://download.redis.io/redis-stable/redis.conf
# 启动:--privileged=true:容器内的root拥有真正root权限,否则容器内root只是外部普通用户权限
2、创建配置文件:
- master:172.22.1.68
$ vim /usr/local/redis/redis.conf
bind 0.0.0.0
port 6379
daemonize yes
logfile "/data/logs/redis.log"
masterauth zlwy@redis
requirepass zlwy@redis
appendonly yes
cluster-enabled yes
- slave-1:172.22.1.88
$ vim /usr/local/redis/redis.conf
bind 0.0.0.0
port 6379
daemonize yes
logfile "/data/logs/redis.log"
replicaof 172.22.1.68 6379
masterauth zlwy@redis
requirepass zlwy@redis
appendonly yes
cluster-enabled yes
- slave-2:172.22.1.94
$ vim /usr/local/redis/redis.conf
bind 0.0.0.0
port 6379
daemonize yes
logfile "/data/logs/redis.log"
replicaof 172.22.1.68 6379
masterauth zlwy@redis
requirepass zlwy@redis
appendonly yes
cluster-enabled yes
2.运行启动
运行启动 :
# 1、启动
$ docker run -p 6379:6379 -p 26379:26379 --privileged=true --name redis-6.2.4 -v $PWD/redis.conf:/etc/redis/redis.conf -v $PWD/data:/data -d --restart=always redis:6.2.4
#2、直接连接到redis容器中,直接上命令:
#先查询到myredis容器的ip地址。
$docker inspect redis-6.2.4 | grep IP
3.登录容器、测试客户端
测试配置:
# 进入容器
$ docker exec -it redis-6.2.4 bash
# 进入redis客户端
$ redis-cli -a "zlwy@redis"
# 认证(如果有密码)
127.0.0.1:6379> auth "zlwy@redis"
# 存值
127.0.0.1:6379> set name sanduo
# 取值
127.0.0.1:6379> get name
# 查询三台主机的信息
127.0.0.1:6379> info
4.配置主从测试
1、选择任意一台作为master(此处选择172.22.1.68):
# 选择172.22.1.68 为master(可任意)
# 在 172.22.1.88、 172.22.1.94 上执行(SLAVEOF(<5.x)/replicaof(>5.x))
127.0.0.1:6379> SLAVEOF 172.22.1.68 6379
127.0.0.1:6379> replicaof 172.22.1.68 6379
2、redis.conf 配置密码不生效,手动配置:
127.0.0.1:6379> config set masterauth zlwy@redis
127.0.0.1:6379> config set requirepass zlwy@redis
# 测试看信息(三台)
127.0.0.1:6379> info
# 查看master副本(172.22.1.68)
127.0.0.1:6379> info replication
5.测试主从数据同步
第三步 : 配置主从 测试
三、哨兵(Sentinel)安装部署
前置条件:主从复制经过测试OK:
1.docker容器获取安装基础命令
Vim命令安装:
# 进入容器
$ docker exec -it redis-6.2.4 bash
# 进入redis客户端
$ redis-cli -a "zlwy@redis"
# 更新依赖命令:apt-get :安装vim命令:apt-get install -y vim
$ apt-get update
$ apt-get install -y vim
ps命令安装:
# 安装ps命令(三台容器依次安装ps命令)
$ apt-get install procps
2.配置sentinel.conf
sentinel.conf 配置如下:
# 创建配置文件 sentinel.conf
# 进入容器 1、进入三台redis容器:
$ docker exec -it redis-6.2.4 bash
# 2、进入容器根目录
$ cd /
# 3、创建哨兵配置文件:vim sentinel.conf(三台容器哨兵配置一模一样)
$ vim sentinel.conf
port 26379 #哨兵端口号 一定要和启动命令映射第二个端口号一致
daemonize yes #后台启动
# 2为法定人数限制(quorum) 即3/2=1.5,取值为2
sentinel monitor mymaster 172.22.1.68 6379 2
#mymaster集群中master的密码,注意此行要在上面行的下面
sentinel auth-pass mymaster "zlwy@redis"
3.运行启动
启动查看进程:
# 启动 依次三台在sentinel.conf 配置文件同一级目录执行:
$ cd /
$ redis-sentinel sentinel.conf
# 查看 进程
$ ps -ef
4.测试哨兵故障切换
测试故障切换:
# 停止172.22.1.68
$ docker stop redis-6.2.4
# 登录查看 172.22.1.88 ,172.22.1.94
$ docker exec -it redis-6.2.4 bash
$ redis-cli -a "zlwy@redis"
# 依次查看 172.22.1.88、172.22.1.94 切换
127.0.0.1:6379> info replication
5.手动提升slave服务器为master
# 在需要提升的从服务器上执行slaveof no one (比如 172.22.1.88)
127.0.0.1:6379> slaveof no one
# 切换主机 (比如 172.22.1.94)
127.0.0.1:6379> replicaof 172.22.1.68 6379
6.查看各节点上哨兵信息
$ redis-cli -a "zlwy@redis" -p 26379
127.0.0.1:26379> info sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=mymaster,status=ok,address=172.22.1.68:6379,slaves=2,sentinels=4
三、错误信息汇总
安装碰见的错误信息:
错误1:(error) NOAUTH Authentication required
# 出现认证问题,应该是设置了认证密码,输入密码既可以啦
# 解决方案:
127.0.0.1:6379> auth "zlwy@redis"
错误2:master_link_status:down
检查配置:一般是网络不通或者加密有问题
错误3:(Sentinel)user default on nopass sanitize-payload ~* &* +@all
无法自动切换主从机
解决方案:修改配置文件sentinel.conf 添加权限密码 如下
# mymaster集群中master的密码,注意此行要在上面行的下面
sentinel auth-pass mymaster "zlwy@redis"
参考
本文参考如下:
1、docker搭建Redis集群-主从复制以及哨兵模式
2、SpringBoot集成Redis哨兵模式