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
    ...

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值