概述
主从复制的问题
Redis主从复制解决了服务器读压力的问题, 但并没有完成高可用.
当master宕机后, 我们需要人工解决切换, 比如使用slaveof no one;
实际上并没有实现高可用. 利用集群中系统的冗余, 当系统中某台机器发生损坏, 其他后备机可以迅速的接替他来提供服务.
Redis Sentinel具有以下几个功能:
- 监控: Sentinel节点会 定期检测Redis数据及诶单, 其余Sentinel节点是否可达.
- 通知: Sentinel节点会将故障转移的结果童子给应用方.
- 主节点故障转移: 实现从节点晋升为主节点并维护后序正确的主从关系.
- 配置提供者: 在Redis Sentinel结构中, 客户端在初始化的时候链接的Sentinel节点集合, 从中获得主节点信息.
同时Redis Sentinel 包含了若干个 Sentinel 节点, 这样做也带来了两个好处
- 对节点的故障判断是有多个 Sentinel 共同完成的, 这样可以有效的防止误判.
- 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简单实现所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复