下载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

配置文件端口设置
1master/redis.conf10010
2slave1/redis.conf10011
3slave2/redis.conf10012

在所有的 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、sentinel2,把redis-sentinel和sentinel.conf文件复制到这些文件夹下,目录结构如下

.
├── sentinel1
│   ├── redis-sentinel
│   └── sentinel.conf
├── sentinel2
│   ├── redis-sentinel
│   └── sentinel.conf
└── sentinel3
    ├── redis-sentinel
    └── sentinel.conf

设置sentinel.conf中的port

配置文件端口设置
1sentinel1/sentinel.conf20010
2sentinel2/sentinel.conf20011
3sentinel3/sentinel.conf20012

在所有的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的高可用