我是靠谱客的博主 暴躁萝莉,最近开发中收集的这篇文章主要介绍Redis优化基础[010]Redis Sentinel简单实现,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

主从复制的问题

Redis主从复制解决了服务器读压力的问题, 但并没有完成高可用.
当master宕机后, 我们需要人工解决切换, 比如使用slaveof no one;
实际上并没有实现高可用. 利用集群中系统的冗余, 当系统中某台机器发生损坏, 其他后备机可以迅速的接替他来提供服务.

Redis Sentinel具有以下几个功能:

  1. 监控: Sentinel节点会 定期检测Redis数据及诶单, 其余Sentinel节点是否可达.
  2. 通知: Sentinel节点会将故障转移的结果童子给应用方.
  3. 主节点故障转移: 实现从节点晋升为主节点并维护后序正确的主从关系.
  4. 配置提供者: 在Redis Sentinel结构中, 客户端在初始化的时候链接的Sentinel节点集合, 从中获得主节点信息.

同时Redis Sentinel 包含了若干个 Sentinel 节点, 这样做也带来了两个好处

  1. 对节点的故障判断是有多个 Sentinel 共同完成的, 这样可以有效的防止误判.
  2. Sentinel 节点集合是由若干个 Sentinel 节点组成的, 这样即使个别 Sentinel 节点不可用, 这个 Sentinel 节点集合依然是健壮的.

Sentinel节点本省就是独立的 Redis 节点, 只不过他们有一些特殊, 他们不存储数据, 值支持部分命令.

docker容器列表

容器名称: redis-sentinel1
IP地址: 172.10.0.9
容器端口: 22530->26379
运行模式: sentinel

容器名称: redis-sentinel2
IP地址: 172.10.0.10
容器端口: 22531->26379
运行模式: sentinel

容器名称: redis-sentinel3
IP地址: 172.10.0.11
容器端口: 22532->26379
运行模式: sentinel

容器名称: redis-master
IP地址: 172.10.0.5
容器端口: 6383->6379
运行模式: master

容器名称: redis-slave1
IP地址: 172.10.0.6
容器端口: 6384->6379
运行模式: slave

容器名称: redis-slave2
IP地址: 172.10.0.7
容器端口: 6385->6379
运行模式: slave

启动容器

# docker run -itd -p 6383:6379 --name redis-master --net mynetwork --ip 172.10.0.5 redis
# docker run -itd -p 6384:6379 --name redis-slave1 --net mynetwork --ip 172.10.0.6 redis
# docker run -itd -p 6385:6379 --name redis-slave2 --net mynetwork --ip 172.10.0.7 redis
# docker run -itd -p 22530:26379 --name redis-sentinel1 --net mynetwork --ip 172.10.0.9 redis
# docker run -itd -p 22531:26379 --name redis-sentinel2 --net mynetwork --ip 172.10.0.10 redis
# docker run -itd -p 22532:26379 --name redis-sentinel3 --net mynetwork --ip 172.10.0.11 redis

查看网络中的容器

# docker network inspect mynetwork

配置主从

# docker exec -it redis-master bash
# vi /etc/redis.conf
---
vi /etc/redis.conf 0.0.0.0
protected-mode no
---
# docker exec -it redis-slave1 bash
# vi /etc/redis.conf
---
bind 0.0.0.0
protected-mode no
slaveof 172.10.0.5 6379
---
# docker exec -it redis-slave2 bash
# vi /etc/redis.conf
---
bind 0.0.0.0
protected-mode no
slaveof 172.10.0.5 6379
---

Sentinel的核心配置

sentinel monitor mymaster 127.0.0.1 7000 2
sentinel monitor 主节点名称 主节点ip 主节点端口 几台
几台: 最后一个2的意思是有几台sentinel发现有问题, 就会发生故障转移, 一般建议将其设置为sentinel总数的一半加一.

# docker exec -it redis-sentinel1 bash
# vi /etc/redis-sentinel.conf
---
bind 0.0.0.0
protected-mode no
sentinel monitor mymaster 172.10.0.5 6379 2
# sentinel auth-pass <master-name> <password> # 密码
---

其他哨兵同上

配置完成后启动和测试

–sentinel服务器–

# redis-sentinel /etc/redis-sentinel.conf &
# cat /var/log/redis/sentinel.log

–主服务器–

# redis-server /etc/redis.conf &
# redis-cli
127.0.0.1:6379> set kevin 123
OK

–从服务器–

# redis-server /etc/redis.conf &
# redis-cli
127.0.0.1:6379> get kevin
"123"

实现主节点切换

进入主节点并停止主节点的redis服务

# netstat -apn|grep 6379
# kill 36

进入sentinel查看日志, 看是哨兵是选择了哪个节点作为主节点

# cat /var/log/redis/sentinel.log
---
slave 172.10.0.7:6379 172.10.0.7 6379 @ mymaster 172.10.0.6 6379
slave 172.10.0.5:6379 172.10.0.5 6379 @ mymaster 172.10.0.6 6379
slave 172.10.0.5:6379 172.10.0.5 6379 @ mymaster 172.10.0.6 6379
---

再进入172.10.0.6

[root@3b562fd488b1 /]# redis-cli
127.0.0.1:6379> info replication
...
role:master
...

看到该节点已经被切换为主节点

最后

以上就是暴躁萝莉为你收集整理的Redis优化基础[010]Redis Sentinel简单实现的全部内容,希望文章能够帮你解决Redis优化基础[010]Redis Sentinel简单实现所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(51)

评论列表共有 0 条评论

立即
投稿
返回
顶部