ip地址 | 端口号 | 角色 |
---|---|---|
192.168.98.15 | 6379 | 主机(master) |
192.168.98.17 | 6379 | 从机(slave) |
192.168.98.18 | 6379 | 从机(slave) |
/usr/local/redis/redis.conf
配置文件,修改参数如下所示:#Redis 默认只允许本机访问,把 bind 修改为 0.0.0.0 表示允许所有远程访问。如果想指定限制访问,可设置对应的 ip。
bind 0.0.0.0
#Redis 端口配置
port 6379
#关闭保护模式,可以外部访问。
protected-mode no
#设置为后台启动。
daemonize yes
#Redis 日志文件,生成后在 bin 目录下可找到。
logfile ./redis.log
#设置 redis 连接密码。
requirepass root
#slave 服务连接 master 的密码。
masterauth root
从机配置,修改/usr/local/redis/redis.conf
配置文件,修改参数如下所示:
#Redis 默认只允许本机访问,把 bind 修改为 0.0.0.0 表示允许所有远程访问。如果想指定限制访问,可设置对应的 ip。
bind 0.0.0.0
#Redis 端口配置
port 6379
#关闭保护模式,可以外部访问。
protected-mode no
#设置为后台启动。
daemonize yes
#Redis 日志文件,生成后在 bin 目录下可找到。
logfile ./redis.log
#设置 redis 连接密码。
requirepass root
#slave 服务连接 master 的密码。
masterauth root
#指定当本机为 slave 服务时,设置 master 服务的IP地址及端口,在 redis 启动的时候会自动跟 master 进行数据同步,所以两台从机都这样配置即可。
replicaof 192.168.98.15 6379
配置完成之后重启redis服务:
kill -9 id
redis-server /usr/local/redis/redis.conf
此处注意:由于我们搭建的集群需要自动容灾切换,主数据库可能会变成从数据库,所以三台机器上都需要同时设置 requirepass 和 masterauth 配置项。
查看Redis主从节点是否配置成功:
主从数据同步验证:
在主机(master)添加几条数据,看从机(slave)是否可以获取到,如果能获取,说明数据已经同步到了从机,主机添加数据,如下:
哨兵模式详解
Redis Sentinel是Redis 的高可用性解决方案,由一个或多个Sentinel(哨兵)实例组成。它可以监视任意多个主服务器,以及这些主服务器属下的所有从服务器,并在被监视的主服务器进入下线状态时,自动将下线主服务器属下的某个从服务器升级为新的主服务器,它的主要功能如下:
监控(Monitoring):Sentinel会不断地检查你的主服务器和从服务器是否运作正常。
通知(Notification):当被监控的某个 Redis 服务器出现问题时, Sentinel可以通过API向管理员或者其他应用程序发送通知。
故障迁移:当主服务器不能正常工作时,Sentinel会自动进行故障迁移,也就是主从切换。
统一的配置管理:连接者询问sentinel取得主从的地址。
哨兵原理
Sentinel 使用的算法核心是 Raft 算法,主要用途就是用于分布式系统,系统容错,以及Leader选举,每个Sentinel都需要定期的执行以下任务:
每个 Sentinel 会自动发现其他 Sentinel 和从服务器,它以每秒钟一次的频率向它所知的主服务器、从服务器以及其他 Sentinel 实例发送一个 PING 命令。 如果一个实例(instance)距离最后一次有效回复 PING 命令的时间超过 down-after-milliseconds 选项所指定的值, 那么这个实例会被 Sentinel 标记为主观下线。 有效回复可以是: +PONG 、 -LOADING 或者 -MASTERDOWN 。 如果一个主服务器被标记为主观下线, 那么正在监视这个主服务器的所有Sentinel要以每秒一次的频率确认主服务器的确进入了主观下线状态。 如果一个主服务器被标记为主观下线, 并且有足够数量的Sentinel(至少要达到配置文件指定的数量)在指定的时间范围内同意这一判断, 那么这个主服务器被标记为客观下线。 在一般情况下, 每个Sentinel会以每 10 秒一次的频率向它已知的所有主服务器和从服务器发送 INFO 命令。 当一个主服务器被Sentinel标记为客观下线时,Sentinel向下线主服务器的所有从服务器发送 INFO 命令的频率会从 10 秒一次改为每秒一次。 当没有足够数量的Sentinel同意主服务器已经下线, 主服务器的客观下线状态就会被移除。 当主服务器重新向Sentinel的 PING 命令返回有效回复时, 主服务器的主管下线状态就会被移除。
哨兵搭建
在主服务器上编辑sentinel.conf
配置文件:
cd /usr/local/redis/
vi sentinel.conf
修改内容如下:
#端口默认为26379。
port 26379
#关闭保护模式,可以外部访问。
protected-mode no
#设置为后台启动。
daemonize yes
#日志文件。
logfile ./sentinel.log
#指定主机IP地址和端口,并且指定当有2台哨兵认为主机挂了,则对主机进行容灾切换。
sentinel monitor mymaster 192.168.98.15 6379 2
#当在Redis实例中开启了requirepass,这里就需要提供密码。
sentinel auth-pass mymaster root
#这里设置了主机多少秒无响应,则认为挂了。
sentinel down-after-milliseconds mymaster 3000
#主备切换时,最多有多少个slave同时对新的master进行同步,这里设置为默认的1。
sentinel parallel-syncs mymaster 1
#故障转移的超时时间,这里设置为三分钟。
sentinel failover-timeout mymaster 180000
启动哨兵
redis-sentinel /usl/local/redis/sentinel.conf
登录查看哨兵信息:
redis-cli -p 26379
info sentinel
可以看到,哨兵已经监听到当前的主机IP端口和运行状态,并且有2台从机,3个哨兵,信息如下所示;
容灾测试:
模拟主机宕机情况,将主机Redis 服务关闭,:
redis-cli -p 6379 shutdown
现在我们去看三台服务器的情况,发现刚才的主机(192.168.98.15 6379)已经变成了从机,如下
哨兵(Sentinel)通过选举机制选举了从机(192.168.98.17 6379)作为了新的主机,如下
需要注意的是,主从切换后配置文件已经被自动进行了更改,我们现在看一下新上位的主机 redis 日志,如下
可以看到,当主机挂了的时候,一直连接主机被拒绝,当哨兵选举它为主机后,它成功执行重写的配置文件,并且连接了其他从机。