redis-sentinel—哨兵模式

  1. 哨兵简介:Redis Sentinel
    Sentinel(哨兵)是用于监控redis集群中Master状态的工具,其已经被集成在redis2.4+的版本中是Redis官方推荐的高可用性(HA)解决方案。
    2.作用
    1):Master状态检测
    2):如果Master异常,则会进行Master-Slave切换,将其中一个Slave作为Master,将之前的Master作为Slave
    3):Master-Slave切换后,sentinel.conf的监控目标会随之调换
    3.工作模式

1):每个Sentinel以每秒钟一次的频率向它所知的Master,Slave以及其他 Sentinel 实例发送一个 PING 命令

2):如果一个实例(instance)距离最后一次有效回复 PING 命令的时间超过 down-after-milliseconds 选项所指定的值, 则这个实例会被 Sentinel 标记为主观下线。

3):如果一个Master被标记为主观下线,则正在监视这个Master的所有 Sentinel 要以每秒一次的频率确认Master的确进入了主观下线状态。

4):当有足够数量的 Sentinel(大于等于配置文件指定的值)在指定的时间范围内确认Master的确进入了主观下线状态, 则Master会被标记为客观下线 。
4、主观下线和客观下线

主观下线:Subjectively Down,简称 SDOWN,指的是当前 一个Sentinel 实例对某个redis服务器做出的下线判断。
客观下线:Objectively Down, 简称 ODOWN,指的是多个 Sentinel 实例在对Master Server做出 SDOWN 判断,并且通过 SENTINEL is-master-down-by-addr 命令互相交流之后,得出的Master Server下线判断,然后开启failover
5、配置哨兵模式

1.每台机器上修改redis主配置文件redis.conf文件设置:bind 0.0.0.0   ---已经操作
2.每台机器上修改sentinel.conf配置文件:修改如下配置
[root@redis-master src]# cd ..
[root@redis-master redis]# vim sentinel.conf
sentinel monitor mymaster 10.0.0.137 6379 2 #当集群中有2个sentinel认为master死了时,才能真正认为该master已经不可用了。 (slave上面写的是master的ip,master写自己ip)
sentinel down-after-milliseconds mymaster 3000   #单位毫秒
sentinel failover-timeout mymaster 10000   #若sentinel在该配置值内未能完成failover(故障转移)操作(即故障时master/slave自动切换),则认为本次failover失败。
protected-mode no  #关闭加密模式--新添加到sentinel配置文件中
3.每台机器启动哨兵服务:
[root@redis-master redis]# ./src/redis-sentinel sentinel.conf 
注意:在生产环境下将哨兵模式启动放到后台执行:     ./src/redis-sentinel sentinel.conf &

redis sentinel没有生效 redis sentinel 命令_nginx

将master的哨兵模式退出(Crtl+c),再将redis服务stop了,在两台slave上面查看其中一台是否切换为master:(没有优先级,为随机切换)

redis sentinel没有生效 redis sentinel 命令_nginx_02

扩展:php安装redis的模块

1.安装php7.0
[root@redis ~]# rpm -Uvh https://mirror.webtatic.com/yum/el7/epel-release.rpm
[root@redis ~]# rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm
[root@redis ~]# yum install php70w.x86_64 php70w-cli.x86_64 php70w-common.x86_64 php70w-gd.x86_64 php70w-ldap.x86_64 php70w-mbstring.x86_64 php70w-mcrypt.x86_64 php70w-mysql.x86_64 php70w-pdo.x86_64 php70w-devel zlib-devel  -y
[root@redis ~]# yum -y install php70w-fpm
[root@redis ~]# yum install -y make gcc zlib-devel libmemcached-devel gi
=================================================================================
[root@redis ~]# wget http://pecl.php.net/get/redis-4.0.0RC2.tgz #下载扩展
[root@redis ~]# tar xzf redis-4.0.0RC2.tgz
[root@redis ~]# cd redis-4.0.0RC2
[root@redis redis-4.0.0RC2]# /usr/bin/phpize   #---生成./configure 这个配置文件
[root@redis redis-4.0.0RC2]# ./configure -with-php-config=/usr/bin/php-config
...
configure: creating ./config.status
config.status: creating config.h
config.status: executing libtool commands
[root@ansible-web3 redis-4.0.0RC2]# make && make install  #编译,最后显示如下表示成功
Build complete.
Don't forget to run 'make test'.
Installing shared extensions:     /usr/lib64/php/modules/
=======================================
[root@redis ~]# vi /etc/php.ini #添加扩展
搜索: \.so

redis sentinel没有生效 redis sentinel 命令_nginx_03

2.安装nginx,配置nginx的yum源--略
配置nginx连接php
[root@redis ~]# vi /etc/nginx/conf.d/nginx.conf
server {
    listen       80;
    server_name  localhost;

    location ~ \.php$ {
        root           /usr/share/nginx/html;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }

}
编辑php页面
[root@redis ~]# cd /usr/share/nginx/html/
[root@redis html]# vi index.php
<?php
phpinfo();
?>
启动nginx与php
[root@redis ~]# systemctl start nginx
[root@redis ~]# systemctl start php-fpm

访问:

redis sentinel没有生效 redis sentinel 命令_redis sentinel没有生效_04

安装扩展完成!