Redis failover
下载 Redis 源码并编译
$ wget http://download.redis.io/releases/redis-2.8.24.tar.gz
$ tar -zxvf redis-2.8.24.tar.gz
$ cd redis-2.8.24
$ make install
编译结束后我们从 src
文件夹下找到可执行文件 redis-server
和 redis-sentinel
,redis 根目录下的 redis.conf 和 sentinel.conf 文件我们接下来也要用到。
主从复制
新建文件夹 master、slave1、slave2,把 redis-server 和 redis.conf 文件复制到这些文件夹下,目录结构如下
.
├── master
│ ├── redis-server
│ └── redis.conf
├── slave1
│ ├── redis-server
│ └── redis.conf
└── slave2
├── redis-server
└── redis.conf
分别修改三个 redis.conf 中的 port
配置文件 | 端口设置 | |
---|---|---|
1 | master/redis.conf | 10010 |
2 | slave1/redis.conf | 10011 |
3 | slave2/redis.conf | 10012 |
在所有的 slave 中添加设置,使得 slave 自动的从 master 中同步数据
slaveof 127.0.0.1 10010
先启动 master 中的 redis-server,然后分别启动 slave1 和 slave2 中的 redis-server
./redis-server redis.conf
此时 master 节点可以读写数据,slave 会自动的同步 master 的数据,slave 可读不可写。
master 失效选举
redis-sentinel 会在 master 失效时使用 raft 算法自动把一个 slave 选举为 master 以实现 failover,redis-sentinel 本身也需要设置多个节点来避免单点故障,sentinel 之间的通信使用 gossip 协议。
新建文件夹 sentinel1、sentinel2、sentinel3,把 redis-sentinel 和 sentinel.conf 文件复制到这些文件夹下,目录结构如下
.
├── sentinel1
│ ├── redis-sentinel
│ └── sentinel.conf
├── sentinel2
│ ├── redis-sentinel
│ └── sentinel.conf
└── sentinel3
├── redis-sentinel
└── sentinel.conf
设置 sentinel.conf 中的 port
配置文件 | 端口设置 | |
---|---|---|
1 | sentinel1/sentinel.conf | 20010 |
2 | sentinel2/sentinel.conf | 20011 |
3 | sentinel3/sentinel.conf | 20012 |
在所有的 sentinel.conf 中添加设置
# 监控master节点,slave的信息可以从master中获取到
# 2表示需要有两个sentinel认为master挂了才可以触发重新选举
sentinel monitor mymaster 127.0.0.1 10010 2
# 超时检测时间设置为1秒钟
sentinel down-after-milliseconds mymaster 1000
接下来启动 sentient
./redis-sentinel sentinel.conf
sentinel 会自动的组成一个集群,一旦 master 超过 1 秒钟没有响应就会把一个 slave 选举为 master。
参考
Redis 复制、Sentinel 的搭建和原理说明
Redis Sentinel 安装与部署,实现 redis 的高可用