下载 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-serverredis-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 的高可用