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(哨兵)

部署架构:

 Sentinel+Redis集群高可用_服务器

 

 

 

二、安装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

 Sentinel+Redis集群高可用_redis_02

 

 

启动

[root@localhost bin]# ./redis-server  redis.conf

 

 

 

2.4、设置开机启动

添加开机启动服务

vi  /usr/lib/systemd/system/redis.service

 Sentinel+Redis集群高可用_开机启动_03

 

 

注意: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的模式,从SlaveMaster发起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.63192.168.10.64配置。

 

l 设置主从

从节点依次修改配置redis.conf文件,指定主节点的IP和端口

slaveof <masterip> <masterport>    指定masteripport

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为只读模式

 

 

 

 

 

验证 主从关系

  Redis -h nacos01 -p 6379

  Info replication

 Sentinel+Redis集群高可用_redis_04

 

 

 

Info

 Sentinel+Redis集群高可用_开机启动_05

 

 

四、Sentinel动态监控

4.1、配置Sentinel

复制sentinel文件

cp /usr/local/src/redis-6.2.5/sentinel.conf  /usr/local/redis/bin/

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

 Sentinel+Redis集群高可用_服务器_06

 

 

 

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

 

 Sentinel+Redis集群高可用_开机启动_07

 

 

 

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

 

 Sentinel+Redis集群高可用_开机启动_08

 

 

 

 

 

4.2、启动、测试sentinel

再打开三个xshell窗口,在每一个窗口中,启动一个哨兵实例,并观察日志输出

启动: ./redis-sentinel  ./sentinel.conf

停止: ./redis-cli -p 26379 shutdown

 Sentinel+Redis集群高可用_redis集群_09

 

 

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

 Sentinel+Redis集群高可用_redis_10

 

 

 

确认Master信息

 Sentinel+Redis集群高可用_redis集群_11

 

 

(1)先关闭192.168.10.62:6379节点。发现,确实重新指定了一个主节点

 Sentinel+Redis集群高可用_开机启动_12

 

 

2打开192.168.10.63:6379节点观察

30秒后主节点漂移到了192.168.10.63:6379,实现了redis集群的动态飘逸

 Sentinel+Redis集群高可用_redis集群_13

 

 

 

 

六、参考

javascript:void(0)

javascript:void(0)

javascript:void(0)

 

6.1、节点之间之间建立无秘互信

192.168.10.62  nacos01

192.168.10.63  nacos02

192.168.10.64  nacos03

===========nacos01=======================

1nacos01生成密钥 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=======================

 

2nacos02生成密钥 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======================

 

3nacos03生成密钥 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