Redis集群搭建(哨兵模式+一主两从)
背景:甲方服务器的漏洞扫描提示redis6.2.6集群版本存在很多漏洞,需要升级版本;先后升级到了7.0.15,7.2.6本以为搞定的时候,甲方临时发布通知:强制要求更新到7.4.3;辛辛苦苦的又要重来!!!!
架构图:
1、下载需要的reids版本,以7.0.15为例,7.4.3版本同样安装方式:
https://download.redis.io/releases/
2、找到3台服务器
redis:
192.168.1.166:6380 master
192.168.1.201:6380 slaver
192.168.1.201:6381 slaver
sentinel:
192.168.1.166:26379 master
192.168.1.201:26379 slaver
192.168.1.201:26380 slaver
3、分别上传redis安装包到指定文件下,并解压:
tar -zxvf redis-7.0.15.tar.gz
4、进入解压的文件,执行安装:
make && make install
如果出现:/bin/sh: cc: command not found错误,是因为没有安装 gcc 环境,使用命令yum install gcc安装 gcc 环境即可;
检查gcc是否安装:gcc --version
gcc离线安装:下载离线安装包,然后执行(自行下载文件)
rpm -ivh *.rpm --nodeps --force
安装完之后,删除之前解压出来的reids文件夹,重新解压执行make && make install
5、进入redis文件夹,备份配置文件:
cp redis.cof redis_back.conf
cp sentinel.conf sentinel_back.conf
6、修改主节点redis.conf:
1)//让Redis绑定在 0.0.0.0 这个 IP 地址上,表示可以接收任何 IP 地址的连接。将bind 127.0.0.1 -::1 替换为 bind 0.0.0.0
2)//这个表示支持后台启动
将 daemonize on 替换成 daemonize yes
3)//protected-mode 保护模式,一定要关闭
将protected-mode 改为no
4)//Redis运行日志
日志logfile “./redis.log”
5)//登录密码 建议设置为相同密码维护成本低,不同也可以
masterauth 123456
requirepass 123456
从节点增加配置:
replicaof 192.168.1.166 6380
7、启动redis,先主后从:
redis-server redis.conf
查看进程:ps -ef|grep redis
常用命令:
#进入redis
1)redis-cli -p 6379
或者:redis-cli -p 6380 -a 123456
#验证密码
2)auth 123456
#常用命令
3)命令
keys *
get key
set key value
ttl key
select 0
查看redis集群信息:
info replication
8、修改sentinel.conf:
# vim sentinel.conf
#端口默认为26379。
port 26379
#关闭保护模式,可以外部访问。
protected-mode no
#设置为后台启动。
daemonize yes
#日志文件。
logfile /root/redis-7.2.4/log/sentinel.log
#指定主机IP地址和端口,并且指定当有2台哨兵认为主机挂了,则对主机进行容灾切换。(两个或以上哨兵认为主服务器不可⽤时,才会进⾏failover操作。)
sentinel monitor mymaster 192.168.1.166 6380 2
#当在Redis实例中开启了requirepass,这里就需要提供密码。
sentinel auth-pass mymaster 123456
#这里设置了主机多少秒无响应,则认为挂了。这里设置为30秒
sentinel down-after-milliseconds mymaster 30000
#主备切换时,最多有多少个slave同时对新的master进行同步,这里设置为默认的1。
sentinel parallel-syncs mymaster 1
#故障转移的超时时间,这里设置为一分钟。
sentinel failover-timeout mymaster 60000
9、启动哨兵:redis-server sentinel.conf --sentinel
10、三个哨兵都启动后,可使用如下命令查看哨兵信息
redis-cli -p 26379
info sentinel
如果一直是两个sentinel,排查一下sentinel.conf中的myid是否相同,他是哨兵的唯一标识;(直接删除,重新启动会重新生成)
还有需要判断服务器的网络是否通ping
11、redis数据迁移,因为系统的key比较少,我目前是使用了两种方式
1)在线迁移:
进入到目的地的redis,然后执行命令:迁移数据源的redis(192.168.1.201 6380迁移zhangsan的值)
migrate 192.168.1.201 6380 zhangsan 0 5000 copy auth 123456
2)物理迁移:
redis迁移:(7.4.3不太好用上边的migrate ,不知道为什么一直显示nokey,于是换了这种方法)
所谓的物理迁移,指的是在redis开启了持久化存储过后,我们可以通过复制dump.rdb文件的方式都redis进行数据迁移。具体实施方法如下:
● 在redis源端,找到正确的数据持久化存储文件dump.rdb
● 将dump.rdb复制到目标端的redis指定的持久化存储所在的路径
● 启动redis
如果redis是一主二从的,则先关闭从redis,然后关闭主redis,再把rdb文件传过去,然后重启主redis,最后重启从redis使数据同步。
3)当然还有别的方法,我没用过,所以不做研究;
12、验证reids集群+哨兵模式生效
1)ps -ef|grep redis
2)kill -9 pid其中一个redis
3)发现master节点自动切换到了别的节点,进入redis执行info replication查看节点详情;