Sentinel+Redis集群高可用
一、环境准备及部署架构
所谓的Redis集群,就是通过添加服务器的数量,提供相同的服务,从而让服务器达到一个稳定、高效的状态。
Redis 的 Sentinel 系统用于管理多个 Redis 服务器(instance),实现监控,提醒,故障迁移的效果,在sentinel网络中,只要还有一个sentinel活着,就可以实现故障切换。
环境主备:
192.168.10.62 reids01(master)/sentinel(哨兵)
192.168.10.63 reids02(slave)/sentinel(哨兵)
192.168.10.64 reids03(slave)/sentinel(哨兵)
部署架构:
二、安装Redis
2.1、安装gcc依赖
由于 redis 是用 C 语言开发,安装之前必先确认是否安装 gcc 环境(gcc -v),如果没有安装,执行以下命令进行安装
[root@localhost local]# yum install -y gcc
2.2、下载并解压安装包
cd /usr/local/src/
wget http://download.redis.io/releases/redis-6.2.5.tar.gz
tar -zxvf redis-6.2.5.tar.gz
cd redis-6.2.5
make
make install PREFIX=/usr/local/redis
2.3、启动服务
前台启动
cd /usr/local/redis/bin/
./redis-server
后台启动
从 redis 的源码目录中复制 redis.conf 到 redis 的安装目录
cp /usr/local/src/redis-6.2.5/redis.conf /usr/local/redis/bin
修改 redis.conf 文件,把 daemonize no 改为 daemonize yes
vi /usr/local/redis/bin/redis.conf
启动
[root@localhost bin]# ./redis-server redis.conf
2.4、设置开机启动
添加开机启动服务
vi /usr/lib/systemd/system/redis.service
注意:ExecStart配置成自己的路径
设置开机启动
[root@localhost bin]# systemctl daemon-reload
[root@localhost bin]# systemctl start redis.service
[root@localhost bin]# systemctl enable redis.service
创建 redis 命令软链接
[root@localhost ~]# ln -s /usr/local/redis/bin/redis-cli /usr/bin/redis
服务操作命令:
systemctl start redis.service #启动redis服务
systemctl stop redis.service #停止redis服务
systemctl restart redis.service #重新启动服务
systemctl status redis.service #查看服务当前状态
systemctl enable redis.service #设置开机自启动
systemctl disable redis.service #停止开机自启动
三、Redis集群配置
Redis支持主从同步。数据可以从主服务器向任意数量的从服务器上同步,同步使用的是发布/订阅机制,Mater Slave的模式,从Slave向Master发起SYNC命令,最终实现读写分离、容灾备份效果。
3.1、 主从结构搭建
l 说明
192.168.10.62:6379 master
192.168.10.63:6379 slave
192.168.10.64:6379 slave
l Master节点修改配置文件
vi /usr/local/redis/bin/redis.conf
# Redis使用后台模式
daemonize yes
# 关闭保护模式
protected-mode no
# 注释以下内容开启远程访问
# bind 127.0.0.1
# 修改启动端口为6379
port 6379
# 修改pidfile指向路径
pidfile /var/run/redis_6379.pid
以此类推,修改端口192.168.10.63及192.168.10.64配置。
l 设置主从
从节点依次修改配置redis.conf文件,指定主节点的IP和端口
slaveof <masterip> <masterport> 指定master的ip和port
slaveof 192.168.10.62 6379
也可以用以下命令,临时使用:
127.0.0.1:6379> slaveof 192.168.10.62 6379
masterauth <master-password> master有验证的情况下
slave-read-only yes 设置slave为只读模式
l 验证 主从关系
Redis -h nacos01 -p 6379
Info replication
Info
四、Sentinel动态监控
4.1、配置Sentinel
l 复制sentinel文件
cp /usr/local/src/redis-6.2.5/sentinel.conf /usr/local/redis/bin/
l macos01 配置sentinel.conf文件,修改端口,并指定要监控的主节点。(从节点不需要指定,sentinel会自动识别)
port 26379
daemonize yes
dir "/usr/local/redis/data" #工作目录
logfile "/usr/local/redis/data/26379.log" #日志
sentinel down-after-milliseconds mymaster 30000 #主节点故障飘逸时间毫秒
pidfile /var/run/redis-sentinel.pid
sentinel monitor mymaster 192.168.10.62 6379 2
l macos02和macos03依次 配置sentinel.conf文件,修改端口,并指定要监控的主节点。(从节点不需要指定,sentinel会自动识别)
port 26379
daemonize yes
dir "/usr/local/redis/data" #工作目录
logfile "/usr/local/redis/data/26379.log" #日志
sentinel down-after-milliseconds mymaster 30000 #主节点故障飘逸时间毫秒
pidfile /var/run/redis-sentinel.pid
sentinel monitor mymaster 192.168.10.62 6379 2
l macos03依次 配置sentinel.conf文件,修改端口,并指定要监控的主节点。(从节点不需要指定,sentinel会自动识别)
编辑config目录下的sentinel配置,加入守护进程启动,工作目录,日志文件名,监听master的端口号
port 26379 #端口
daemonize yes #开始守护进行
dir "/usr/local/redis/data" #工作目录
logfile "/usr/local/redis/data/26379.log" #日志
sentinel down-after-milliseconds mymaster 30000 #主节点故障飘逸时间毫秒
pidfile /var/run/redis-sentinel.pid
sentinel monitor mymaster 192.168.10.62 6379 2
4.2、启动、测试sentinel
再打开三个xshell窗口,在每一个窗口中,启动一个哨兵实例,并观察日志输出
启动: ./redis-sentinel ./sentinel.conf
停止: ./redis-cli -p 26379 shutdown
4.3、Sentinel命令
1 2 3 4 5 6 |
127.0.0.1:26379> sentinel masters 127.0.0.1:26379> sentinel slaves mymaster 127.0.0.1:26379> SENTINEL get-master-addr-by-name mymaster 127.0.0.1:26379> SENTINEL reset mymaster 127.0.0.1:26379> SENTINEL failover mymaster 127.0.0.1:26379> SENTINEL flushconfig mymaster |
五、测试
确认:
# redis-cli -p 26379
127.0.0.1:26379> INFO sentinel
确认Master信息
(1)先关闭192.168.10.62:6379节点。发现,确实重新指定了一个主节点
(2)打开192.168.10.63:6379节点观察
30秒后主节点漂移到了192.168.10.63:6379,实现了redis集群的动态飘逸
六、参考
https://www.cnblogs.com/vieta/p/11192137.html
https://www.cnblogs.com/heqiuyong/p/10463334.html
https://my.oschina.net/u/3371837/blog/1789891
6.1、节点之间之间建立无秘互信
192.168.10.62 nacos01
192.168.10.63 nacos02
192.168.10.64 nacos03
===========nacos01=======================
1、nacos01生成密钥 62
yum install -y openssh-clients
ssh-keygen
ssh-copy-id -i .ssh/id_rsa.pub root@nacos02
ssh-copy-id -i .ssh/id_rsa.pub root@nacos03
===========nacos02=======================
2、nacos02生成密钥 63
yum install -y openssh-clients
ssh-keygen
ssh-copy-id -i .ssh/id_rsa.pub root@nacos01
ssh-copy-id -i .ssh/id_rsa.pub root@nacos03
===========nacos03======================
3、nacos03生成密钥 64
yum install -y openssh-clients
ssh-keygen
ssh-copy-id -i .ssh/id_rsa.pub root@nacos01
ssh-copy-id -i .ssh/id_rsa.pub root@nacos02