Sentinel 哨兵是 redis 官方提供的高可用方案,可以用它来监控多个 Redis 服务实例的运 行情况。Redis Sentinel 是一个运行在特殊模式下的 Redis 服务器。Redis Sentinel 是在多个 Sentinel 进程环境下互相协作工作的。
Sentinel 系统有三个主要任务:
1、监控:Sentinel 不断的检查主服务和从服务器是否按照预期正常工作。
2、提醒:被监控的 Redis 出现问题时,Sentinel 会通知管理员或其他应用程序。
3、自动故障转移:监控的主 Redis 不能正常工作,Sentinel 会开始进行故障迁移操作。
将一个从服务器升级新的主服务器。 让其他从服务器挂到新的主服务器。同时向客户端 提供新的主服务器地址。
1、复制三份sentinel.conf文件:
Sentinel系统默认 port 是26379 。
三个配置port分别设置为 26380 , 26382 , 26384 。
三个文件分别命名:
⚫ sentinel26380.conf
⚫ sentinel26382.conf
⚫ sentinel26384.conf
2、三份 sentinel 配置文件修改
(1)、修改 port 26380、 port 26382、 port 26384
(2)、修改 sentinel monitor mymaster 127.0.0.1 6380 2
格式:sentinel monitor
Sentinel监控主(Master)Redis, Sentinel根据Master的配置自动发现Master的Slave,Sentinel 默认端口号为26379
(3)、修改port
(4)、修改监控的 master 地址
(5)、修改另外两个 sentinel
sentinel26382.conf 修改port 26382 , master的port 6382
sentinel26384.conf 修改port 26384 , master的port 6382
3、启动主从(Master/Slave)Redis
查看 Master 的配置信息 连接到 6382 端口
使用 info 命令查看 Master/Slave
5、启动 Sentinel
redis安装时make编译后就产生了redis-sentinel程序文件,可以在一个redis中运行多个 sentinel进程。
启动一个运行在Sentinel模式下的Redis服务实例
./redis-sentinel sentinel 配置文件
执行以下三条命令,将创建三个监视主服务器的Sentinel实例
./redis-sentinel ../sentinel26380.conf
./redis-sentinel ../sentinel26382.conf
./redis-sentinel ../sentinel26384.conf
1、主 Redis 不能工作
让 Master 的 Redis 停止服务, 执行 shutdown 先执行 info replication
确认 Master 的 Redis ,再执行 shutdown
查看当前 Redis 的进程情况
2、Sentinel 的起作用
在 Master 执行 shutdown 后, 稍微等一会 Sentinel 要进行投票计算,从可用的 Slave 选举新的 Master。
查看 Sentinel 日志,三个 Sentinel 窗口的日志是一样的。
查看新的 Master
3、新的 Redis 加入 Sentinel 系统,自动加入 Master
重新启动 6382
查看 6384 的信息
4、测试数据
在 6382 上读取数据,不能写入
1)Sentinel 会不断检查 Master 和 Slave 是否正常
2)如果 Sentinel 挂了,就无法监控,所以需要多个哨兵,组成 Sentinel 网络,一个健康的Sentinel 至少有 3 个 Sentinel 应用
彼此在独立的物理机器或虚拟机。
3)监控同一个 Master 的 Sentinel 会自动连接,组成一个分布式的 Sentinel 网络,互相通信 并交换彼此关于被监控服务器的信息
4)当一个 Sentinel 认为被监控的服务器已经下线时,它会向网络中的其它 Sentinel 进行确 认,判断该服务器是否真的已经下线
5)如果下线的服务器为主服务器,那么 Sentinel 网络将对下线主服务器进行自动故障转移, 通过将下线主服务器的某个从服务器
提升为新的主服务器,并让其从服务器转移到新的主服 务器下,以此来让系统重新回到正常状态
6)下线的旧主服务器重新上线,Sentinel 会让它成为从,挂到新的主服务器下
主从复制,解决了读请求的分担,从节点下线,会使得读请求能力有所下降,Master 下 线,写请求无法执行
Sentinel 会在 Master 下线后自动执行故障转移操作,提升一台 Slave 为 Master,并让其它 Slave 成为新 Master 的 Slave
访问 Redis 默认是没有密码的,这样不安全,任意用户都可以访问。可以启用使用密码 才能访问 Redis。 设置 Redis 的访问密码,修改 redis.conf 中这行 requirepass 密码。密码要 比较复杂,不容易破解,而且需要定期修改。因为 redis 速度相当快,所以在一台比较好的 服务器下,一个外部的用户可以在一秒钟进行 150K 次的密码尝试,需要指定非常非常强大 的密码来防止暴力破解。
1、开启访问密码设置
修改 redis.conf , 使用 vim 命令。 找到 requirepass 行去掉注释,requirepass 空格后就是 密码。
例 1:设置访问密码是 123456 ,生产环境要设置复杂密码 修改 redis.conf,文件 480 行左右。原始内容:
# requirepass foobared
修改后
requirepass 123456
如果 Redis 已经启动,关闭后,重新启动。
访问有密码的 Redis 两种方式:
1:在连接到客户端后,使用命令 auth 密码 , 命令执行成功后,可以正常使用 Redis
2:在连接客户端时使用 -a 密码。例如 ./redis-cli -h ip -p port -a password
修改 redis 的端口,这一点很重要,使用默认的端口很危险,redis.conf 中修改 port 6379 将其修改为自己指定的端口(可随意),端口 1024 是保留给操作系统使用的。用户可以使用 的范围是 1024-65535
使用 -p 参数指定端口,例如:./redis-cli -p 新设置端口