一、 Redis单个实例
当系统中只有一台Redis运行时,一旦该Redis挂了,会导致整个系统无法运行。

二、 备份模式
由于单台Redis出现单点故障,就会导致整个系统不可用,所以想到的办法自然就是备份(一般工业界认为比较安全的备份数应该是3份)。当一台Redis出现问题了,另一台Redis可以继续提供服务。当1出现故障时,可以将Redis切换到2上面,保证数据的可用性,但是切到备份的Redis服务器时,只能读取数据,不能写入数据。

三、自动故障转移(哨兵模式)
虽然上面Redis做了备份,可以保证服务的不中断。但由于Redis目前只支持主从复制备份(不支持主主复制),当主Redis挂了,从Redis只能提供读服务,无法提供写服务。所以,当主Redis挂了,让从Redis升级成为主Redis。
这就需要自动故障转移,Redis sentinel带有这个功能,当一个主Redis不能提供服务时,Redis sentinel可以将一个从Redis升级为主Redis,并对其他从Redis进行配置,让它们使用新的主Redis进行复制备份。

四、哨兵模式环境搭建
4.1 环境搭建
这里使用三台服务器CentOS 7,内存16G,四核八线程,内核3.10。每台服务器上开启一个Redis-server和Redis-sentinel服务,Redis-server端口为8000,Redis-sentinel的端口为6800。
Redis-server说明:
10.2.1.140:8000 主
10.2.1.145:8000 从
10.2.1.150:8000 从
Redis-sentinel说明:
10.2.1.140:6800
10.2.1.145:6800
10.2.1.150:6800
4.2 搭建Redis系统
首先下载安装Redis
wget http://download.Redis.io/releases/Redis-4.0.2.tar.gz
tar zxvf Redis-4.0.2.tar.gz
cd Redis-4.0.2
make & make install
cd src
#复制Redis相关命令到/usr/sbin目录下,这样就可以直接执行这些命令,不用写全路径。
sudo cp redis-cli redis-server redis-sentinel /usr/sbin/
4.3 配置主从Redis的配置文件
在Redis目录下有redis.conf和sentinel.conf配置文件示例,使用命令
sudo cp redis.conf sentinel.conf /etc/
将两个配置文件复制到/etc目录下,然后修改配置文件。
vim /etc/redis.conf
修改主redis-server配置文件内容如下:
port 8000
daemonize yes
bind 0.0.0.0 #监听在所有地址上
pidfile /var/run/redis-8000.pid
logfile /var/log/redis/redis-8000.log
protected-mode no # redis版本3.2后新增protected-mode配置,默认是yes,即开启保护模式。
修改从redis-server配置文件内容如下:
port 8000
daemonize yes
bind 0.0.0.0 #监听在所有地址上
pidfile /var/run/redis-8000.pid
logfile /var/log/redis/redis-8000.log
protected-mode no # redis版本3.2后新增protected-mode配置,默认是yes,即开启保护模式。
slaveof 10.2.1.140 8000 #从redis比主redis多这一行,表示的是主Redis的ip地址以及端口,其他的都是从redis。
启动redis-server服务
sudo redis-server /etc/redis.conf
4.4 配置sentinel的配置文件
从命令行输入:
vim /etc/sentinel.conf
配置的内容如下:
daemonize yes
port 6800(默认是26379,可更改)
logfile /var/log/redis/sentinel.log
pidfile /var/run/sentinel.pid
sentinel monitor mymaster 10.2.1.140 8000 2 (格式是:sentinel monitor <master-name> <ip> <redis-port> <quorum>。master-name可以自定义。ip是你的主redis的ip地址。quorum是一个数字,指明当有多少个sentinel认为一个master失效时,master才算真正失效。)
#5秒内mymaster没有响应,就认为SDOWN
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 15000
启动redis-sentinel。
redis-sentinel /etc/sentinel.conf
三个redis-sentinel服务启动完毕后,连接任意sentinel服务可以获知当前主redis服务信息。
至此,Redis的哨兵模式高可用系统搭建完成。
为了方便大家相互交流学习,创建了一个微信群:《大数据和云计算技术交流群》,人数已经1500+,欢迎大家加下面微信。





