Sentinel(哨兵)是Redis 的高可用性解决方案:由一个或多个Sentinel 实例 组成的Sentinel 系统可以监视任意多个主服务器,以及这些主服务器属下的所有从服务器,并在被监视的主服务器进入下线状态时,自动将下线主服务器属下的某个从服务器升级为新的主服务器。

例如:

redis MONITOR 命令解析_配置文件

在Server1 掉线后:

redis MONITOR 命令解析_redis MONITOR 命令解析_02

升级Server2 为新的主服务器:

redis MONITOR 命令解析_配置文件_03

第一步:三台机器修改哨兵配置文件

三台机器执行以下命令修改redis的哨兵配置文件

cd /export/servers/redis-3.2.8

vim sentinel.conf


# 配置监听的主服务器,这里sentinel monitor代表监控,mymaster代表服务器的名称,可以自定义,192.168.11.128代表监控的主服务器,6379代表端口,2代表只有两个或两个以上的哨兵认为主服务器不可用的时候,才会进行failover操作。

#修改bind配置,每台机器修改为自己对应的主机名

bind node01 

#配置sentinel服务后台运行是新增,配置文件中没有

daemonize yes

#修改三台机器监控的主节点,现在主节点是node01服务器

sentinel monitor mymaster node01 6379 2

# sentinel author-pass定义服务的密码,mymaster是服务名称,123456是Redis服务器密码

# sentinel auth-pass <master-name> <password>

第二步:三台机器启动哨兵服务

cd /export/servers/redis-3.2.8

src/redis-sentinel sentinel.conf

第三步:node01服务器杀死redis服务进程

使用kill  -9命令杀死redis服务进程,模拟redis故障宕机情况

过一段时间之后,就会在node02与node03服务器选择一台服务器来切换为主节点

 


redis集群

1、redis集群的介绍

dis 集群是一个提供在多个Redis节点之间共享数据的程序集。

Redis 集群并不支持同时处理多个键的 Redis 命令,因为这需要在多个节点间移动数据,这样会降低redis集群的性能,在高负载的情况下可能会导致不可预料的错误。

Redis 集群通过分区来提供一定程度的可用性,即使集群中有一部分节点失效或者无法进行通讯, 集群也可以继续处理命令请求。

Redis 集群的优势:

1.缓存永不宕机:启动集群,永远让集群的一部分起作用。主节点失效了子节点能迅速改变角色成为主节点,整个集群的部分节点失败或者不可达的情况下能够继续处理命令;

2.迅速恢复数据:持久化数据,能在宕机后迅速解决数据丢失的问题;

3.Redis可以使用所有机器的内存,变相扩展性能;

4.使Redis的计算能力通过简单地增加服务器得到成倍提升,Redis的网络带宽也会随着计算机和网卡的增加而成倍增长;

5.Redis集群没有中心节点,不会因为某个节点成为整个集群的性能瓶颈;

6.异步处理数据,实现快速读写。

redis MONITOR 命令解析_配置文件_04


 

 

redis集群环境搭建

由于redis集群当中最少需要三个主节点,每个主节点,最少需要一个对应的从节点,所以搭建redis集群最少需要三主三从的配置,所以redis集群最少需要6台redis的实例,我们这里使用三台机器,每台服务器上面运行两个redis的实例。我们这里使用node01服务器,通过配置不同的端口,实现redis集群的环境搭建

第一步:node01服务器解压redis压缩包

node01执行以下命令重新解压redis压缩包到/export路径下

cd /export/softwares/

tar -zxf redis-3.2.8.tar.gz -C /export/

第二步:安装redis必须依赖环境并进行编译

node01执行以下命令安装redis的依赖环境

yum -y install gcc-c++ tcl

对redis进行编译

cd /export/redis-3.2.8

make && make install

第三步:创建redis不同实例的配置文件夹

创建文件夹,并将redis的配置文件拷贝到以下这些目录

cd /export/redis-3.2.8

mkdir -p /export/redis-3.2.8/clusters/7001

mkdir -p /export/redis-3.2.8/clusters/7002

mkdir -p /export/redis-3.2.8/clusters/7003

mkdir -p /export/redis-3.2.8/clusters/7004

mkdir -p /export/redis-3.2.8/clusters/7005

mkdir -p /export/redis-3.2.8/clusters/7006

第四步:修改redis的六个配置文件

node01执行以下命令修改redis的配置文件

mkdir -p /export/redis-3.2.8/logs

mkdir -p /export/redis-3.2.8/redisdata/7001

mkdir -p /export/redis-3.2.8/redisdata/7002

mkdir -p /export/redis-3.2.8/redisdata/7003

mkdir -p /export/redis-3.2.8/redisdata/7004

mkdir -p /export/redis-3.2.8/redisdata/7005

mkdir -p /export/redis-3.2.8/redisdata/7006

第一个配置文件修改

vim  /export/redis-3.2.8/redis.conf


bind node01

port 7001

cluster-enabled yes

cluster-config-file nodes-7001.conf

cluster-node-timeout 5000

appendonly yes

daemonize yes

pidfile /var/run/redis_7001.pid

logfile "/export/redis-3.2.8/logs/7001.log"

dir /export/redis-3.2.8/redisdata/7001

第二个配置文件修改

cp /export/redis-3.2.8/redis.conf /export/redis-3.2.8/clusters/7002

vim  /export/redis-3.2.8/clusters/7002/redis.conf


bind node01

port 7002

cluster-enabled yes

cluster-config-file nodes-7002.conf

cluster-node-timeout 5000

appendonly yes

daemonize yes

pidfile /var/run/redis_7002.pid

logfile "/export/redis-3.2.8/logs/7002.log"

dir /export/redis-3.2.8/redisdata/7002

第三个配置文件修改

cp /export/redis-3.2.8/redis.conf /export/redis-3.2.8/clusters/7003

vim  /export/redis-3.2.8/clusters/7003/redis.conf


bind node01

port 7003

cluster-enabled yes

cluster-config-file nodes-7003.conf

cluster-node-timeout 5000

appendonly yes

daemonize yes

pidfile /var/run/redis_7003.pid

logfile "/export/redis-3.2.8/logs/7003.log"

dir /export/redis-3.2.8/redisdata/7003

第四个配置文件修改

cp /export/redis-3.2.8/redis.conf /export/redis-3.2.8/clusters/7004

vim  /export/redis-3.2.8/clusters/7004/redis.conf


bind node01

port 7004

cluster-enabled yes

cluster-config-file nodes-7004.conf

cluster-node-timeout 5000

appendonly yes

daemonize yes

pidfile /var/run/redis_7004.pid

logfile "/export/redis-3.2.8/logs/7004.log"

dir /export/servers/redis-3.2.8/redisdata/7004

第五个配置文件修改

cp /export/redis-3.2.8/redis.conf /export/redis-3.2.8/clusters/7005

vim  /export/redis-3.2.8/clusters/7005/redis.conf


bind node01

port 7005

cluster-enabled yes

cluster-config-file nodes-7005.conf

cluster-node-timeout 5000

appendonly yes

daemonize yes

pidfile /var/run/redis_7005.pid

logfile "/export/redis-3.2.8/logs/7005.log"

dir /export/servers/redis-3.2.8/redisdata/7005

第六个配置文件修改

cp /export/redis-3.2.8/redis.conf /export/redis-3.2.8/clusters/7006

vim  /export/redis-3.2.8/clusters/7006/redis.conf


bind node01

port 7006

cluster-enabled yes

cluster-config-file nodes-7006.conf

cluster-node-timeout 5000

appendonly yes

daemonize yes

pidfile /var/run/redis_7006.pid

logfile "/export/redis-3.2.8/logs/7006.log"

dir /export/servers/redis-3.2.8/redisdata/7006

第六步:安装ruby运行环境

node01执行以下命令,安装ruby运行环境,因为redis集群的启动需要借助ruby的环境

yum install ruby

yum install rubygems

gem install redis

这个时候可能会报错,如下:

redis MONITOR 命令解析_redis_05


安装完毕:

执行

cd /usr/local/ruby/

cp bin/ruby /usr/local/bin

cp bin/gem /usr/local/bin

第七步:创建redis集群

node01执行以下命令创建redis集群

cd /export/redis-3.2.8

gem install

src/redis-trib.rb create --replicas 1 192.168.154.100:7001 192.168.154.100:7002 192.168.154.100:7003 192.168.154.100:7004 192.168.154.100:7005 192.168.154.100:7006

redis MONITOR 命令解析_配置文件_06

第八步:连接redis客户端

node01执行以下命令连接redis客户端

cd /export/redis-3.2.8

src/redis-cli  -h node01 -c -p 7001

 


redis集群管理

添加一个新节点作为主节点

启动新节点的redis服务,然后添加到集群当中去

启动服务

src/redis-server clusters/7007/redis.conf

src/redis-trib.rb add-node 192.168.100.100:7007 192.168.100.100:7001

添加一个新节点作为副本

src/redis-server clusters/7008/redis.conf

src/redis-trib.rb add-node --slave 192.168.100.100:7008 192.168.100.100:7001

删除一个节点

命令格式

src/redis-trib del-node 127.0.0.1:7000 `<node-id>`
src/redis-trib.rb del-node 192.168.100.100:7008 7c7b7f68bc56bf24cbb36b599d2e2d97b26c5540

重新分片

./redis-trib.rb reshard node01:7001
./redis-trib.rb reshard --from <node-id> --to <node-id> --slots <number of slots> --yes <host>:<port>