共计 9342 个字符,预计需要花费 24 分钟才能阅读完成。
1. 测试环境
master:127.0.0.1 6379
slave1: 127.0.0.1 6479
slave2: 127.0.0.1 6579
master-sentinel: 127.0.0.1 26379
slave1-sentinel: 127.0.0.1 26479
slave2-sentinel: 127.0.0.1 26579
2. 下载安装 Redis 2.8.3
cd
wget http://download.redis.io/releases/redis-2.8.3.tar.gz
tar –zxvf redis-2.8.3.tar.gz
cd redis-2.8.3
make;make install(此处可用 PREFIX 参数将 redis 安装到其他目录)
3. 配置测试环境
—- 创建目录:
cd /usr/local
mkdir redis_cluster
mkdir redis_cluster/master_6379
mkdir redis_cluster/slave_6479
mkdir redis_cluster/slave_6579
—- 配置 redis:
master:
cp –a –R –p ~/redis-2.8.3/redis.conf ./redis_cluster/master_6379/
cp –a –R –p ~/redis-2.8.3/sentinel.conf ./redis_cluster/master_6379/6379-sentinel.conf
vi ./redis_cluster/master_6379/redis.conf(将对应配置修改成如下)
——————————————————————————————-
####master redis.conf
#### 端口
port 6379
#### 授权密码,在安全的环境中可以不设置
requirepass luyx30
masterauth luyx30
#### 注释指令重命名,若已配置则不需要修改
#rename-command
#### 开启 AOF
appendonly yes
save“”
slave-read-only yes
——————————————————————————————-
vi ./redis_cluster/master_6379/6379-sentinel.conf
——————————————————————————————-
####master sentinel.conf
##sentinel 实例之间的通讯端口
port 26379
####sentinel 需要监控的 master 信息:<mastername> <masterIP> <masterPort> <quorum>.
####<quorum> 应该小于集群中 slave 的个数, 只有当至少 <quorum> 个 sentinel 实例提交 ”master 失效 ” 才会认为 master 为 ODWON(“ 客观 ” 失效) .
sentinel monitor mymaster 127.0.0.1 6379 2
#### 授权密码,在安全的环境中可以不设置
sentinel auth-pass mymaster luyx30
####master 被当前 sentinel 实例认定为“失效”(SDOWN) 的间隔时间
sentinel down-after-milliseconds mymaster 30000
#### 当新 master 产生时,同时进行“slaveof”到新 master 并进行同步复制的 slave 个数。
## 在 salve 执行 salveof 与同步时,将会终止客户端请求。
## 此值较大,意味着“集群”终止客户端请求的时间总和和较大。
## 此值较小, 意味着“集群”在故障转移期间,多个 salve 向客户端提供服务时仍然使用旧数据。
sentinel parallel-syncs mymaster 1
####failover 过期时间,当 failover 开始后,在此时间内仍然没有触发任何 failover 操作,当前 sentinel 将会认为此次 failoer 失败。
sentinel failover-timeout mymaster 900000
——————————————————————————————-
slave1:
cp –a –R –p ~/redis-2.8.3/redis.conf ./redis_cluster/slave_6479/
cp –a –R –p ~/redis-2.8.3/sentinel.conf ./redis_cluster/slave_6479/6479-sentinel.conf
vi ./redis_cluster/slave_6479/redis.conf(将对应配置修改成如下)
——————————————————————————————-
####slave1 redis.conf
port 6479
slaveof 127.0.0.1 6379
##———– 其他配置和 master redis.conf 保持一致 ———–##
——————————————————————————————-
vi ./redis_cluster/slave_6479/6479-sentinel.conf
——————————————————————————————-
####slave1 sentinel.conf
port 26479
##——– 其他配置和 master sentinel.conf 保持一致 ——-##
——————————————————————————————-
slave2:
cp –a –R –p ~/redis-2.8.3/redis.conf ./redis_cluster/slave_6579/
cp –a –R –p ~/redis-2.8.3/sentinel.conf ./redis_cluster/slave_6579/6579-sentinel.conf
vi ./redis_cluster/slave_6579/redis.conf(将对应配置修改成如下)
——————————————————————————————-
####slave1 redis.conf
port 6579
slaveof 127.0.0.1 6379
##———– 其他配置和 master redis.conf 保持一致 ———–##
——————————————————————————————-
vi ./redis_cluster/slave_6579/6579-sentinel.conf
——————————————————————————————-
####slave1 sentinel.conf
port 26579
##——– 其他配置和 master sentinel.conf 保持一致 ——-##
——————————————————————————————-
—- 启动查看:
注意:首次构建 sentinel 环境时,必须首先启动 master。
Redis 的详细介绍:请点这里
Redis 的下载地址:请点这里
推荐阅读:
Redis 集群明细文档 http://www.linuxidc.com/Linux/2013-09/90118.htm
Ubuntu 12.10 下安装 Redis(图文详解)+ Jedis 连接 Redis http://www.linuxidc.com/Linux/2013-06/85816.htm
Redis 系列 - 安装部署维护篇 http://www.linuxidc.com/Linux/2012-12/75627.htm
CentOS 6.3 安装 Redis http://www.linuxidc.com/Linux/2012-12/75314.htm
Redis 配置文件 redis.conf 详解 http://www.linuxidc.com/Linux/2013-11/92524.htm
启动 master 和 master-sentinel:
Redis-server –include /usr/local/redis_cluster/master-6379/redis.conf
redis-sentinel /usr/local/redis_cluster/master-6379/6379-sentinel.conf
克隆会话,启动 slave1 和 slave1-sentinel:
redis-server –include /usr/local/redis_cluster/slave-6479/redis.conf
redis-sentinel /usr/local/redis_cluster/slave-6479/6479-sentinel.conf
克隆会话,启动 slave2 和 slave2-sentinel:
redis-server –include /usr/local/redis_cluster/slave-6579/redis.conf
redis-sentinel /usr/local/redis_cluster/slave-6579/6579-sentinel.conf
查看 master 的状态:
redis-cli -h 127.0.0.1 -p 6379
查看 slave 的状态:
redis-cli –h 127.0.0.1 –p 6479
4. 测试:
—- 场景 1:slave 宕机
关闭 slave1:
查看 sentinel 状态:
查看 master 的 Replication 信息:
此时只存在一个 slave。
—- 场景 2:slave 恢复
重新开启 slave1:
redis-server /usr/local/redis_cluster/slave-6479/redis.conf
查看 sentinel 状态:
sentinel 能快速的发现 slave 加入到集群中:
查看 master 的 Replication 信息:
1. 测试环境
master:127.0.0.1 6379
slave1: 127.0.0.1 6479
slave2: 127.0.0.1 6579
master-sentinel: 127.0.0.1 26379
slave1-sentinel: 127.0.0.1 26479
slave2-sentinel: 127.0.0.1 26579
2. 下载安装 Redis 2.8.3
cd
wget http://download.redis.io/releases/redis-2.8.3.tar.gz
tar –zxvf redis-2.8.3.tar.gz
cd redis-2.8.3
make;make install(此处可用 PREFIX 参数将 redis 安装到其他目录)
3. 配置测试环境
—- 创建目录:
cd /usr/local
mkdir redis_cluster
mkdir redis_cluster/master_6379
mkdir redis_cluster/slave_6479
mkdir redis_cluster/slave_6579
—- 配置 redis:
master:
cp –a –R –p ~/redis-2.8.3/redis.conf ./redis_cluster/master_6379/
cp –a –R –p ~/redis-2.8.3/sentinel.conf ./redis_cluster/master_6379/6379-sentinel.conf
vi ./redis_cluster/master_6379/redis.conf(将对应配置修改成如下)
——————————————————————————————-
####master redis.conf
#### 端口
port 6379
#### 授权密码,在安全的环境中可以不设置
requirepass luyx30
masterauth luyx30
#### 注释指令重命名,若已配置则不需要修改
#rename-command
#### 开启 AOF
appendonly yes
save“”
slave-read-only yes
——————————————————————————————-
vi ./redis_cluster/master_6379/6379-sentinel.conf
——————————————————————————————-
####master sentinel.conf
##sentinel 实例之间的通讯端口
port 26379
####sentinel 需要监控的 master 信息:<mastername> <masterIP> <masterPort> <quorum>.
####<quorum> 应该小于集群中 slave 的个数, 只有当至少 <quorum> 个 sentinel 实例提交 ”master 失效 ” 才会认为 master 为 ODWON(“ 客观 ” 失效) .
sentinel monitor mymaster 127.0.0.1 6379 2
#### 授权密码,在安全的环境中可以不设置
sentinel auth-pass mymaster luyx30
####master 被当前 sentinel 实例认定为“失效”(SDOWN) 的间隔时间
sentinel down-after-milliseconds mymaster 30000
#### 当新 master 产生时,同时进行“slaveof”到新 master 并进行同步复制的 slave 个数。
## 在 salve 执行 salveof 与同步时,将会终止客户端请求。
## 此值较大,意味着“集群”终止客户端请求的时间总和和较大。
## 此值较小, 意味着“集群”在故障转移期间,多个 salve 向客户端提供服务时仍然使用旧数据。
sentinel parallel-syncs mymaster 1
####failover 过期时间,当 failover 开始后,在此时间内仍然没有触发任何 failover 操作,当前 sentinel 将会认为此次 failoer 失败。
sentinel failover-timeout mymaster 900000
——————————————————————————————-
slave1:
cp –a –R –p ~/redis-2.8.3/redis.conf ./redis_cluster/slave_6479/
cp –a –R –p ~/redis-2.8.3/sentinel.conf ./redis_cluster/slave_6479/6479-sentinel.conf
vi ./redis_cluster/slave_6479/redis.conf(将对应配置修改成如下)
——————————————————————————————-
####slave1 redis.conf
port 6479
slaveof 127.0.0.1 6379
##———– 其他配置和 master redis.conf 保持一致 ———–##
——————————————————————————————-
vi ./redis_cluster/slave_6479/6479-sentinel.conf
——————————————————————————————-
####slave1 sentinel.conf
port 26479
##——– 其他配置和 master sentinel.conf 保持一致 ——-##
——————————————————————————————-
slave2:
cp –a –R –p ~/redis-2.8.3/redis.conf ./redis_cluster/slave_6579/
cp –a –R –p ~/redis-2.8.3/sentinel.conf ./redis_cluster/slave_6579/6579-sentinel.conf
vi ./redis_cluster/slave_6579/redis.conf(将对应配置修改成如下)
——————————————————————————————-
####slave1 redis.conf
port 6579
slaveof 127.0.0.1 6379
##———– 其他配置和 master redis.conf 保持一致 ———–##
——————————————————————————————-
vi ./redis_cluster/slave_6579/6579-sentinel.conf
——————————————————————————————-
####slave1 sentinel.conf
port 26579
##——– 其他配置和 master sentinel.conf 保持一致 ——-##
——————————————————————————————-
—- 启动查看:
注意:首次构建 sentinel 环境时,必须首先启动 master。
Redis 的详细介绍:请点这里
Redis 的下载地址:请点这里
推荐阅读:
Redis 集群明细文档 http://www.linuxidc.com/Linux/2013-09/90118.htm
Ubuntu 12.10 下安装 Redis(图文详解)+ Jedis 连接 Redis http://www.linuxidc.com/Linux/2013-06/85816.htm
Redis 系列 - 安装部署维护篇 http://www.linuxidc.com/Linux/2012-12/75627.htm
CentOS 6.3 安装 Redis http://www.linuxidc.com/Linux/2012-12/75314.htm
Redis 配置文件 redis.conf 详解 http://www.linuxidc.com/Linux/2013-11/92524.htm
—- 场景 3:master 宕机
master-sentinel 作为 master 1 的 leader,会选取一个 master 1 的 slave 作为新的 master。slave 的选取是根据一个判断 DNS 情况的优先级来得到,优先级相同通过 runid 的排序得到,但目前优先级设定还没实现,所以直接获取 runid 排序得到 slave 1。
然后发送命令 slaveof no one 来取消 slave 1 的 slave 状态来转换为 master。当其他 sentinel 观察到该 slave 成为 master 后, 就知道错误处理例程启动了。sentinel A 然后发送给其他 slave slaveof new-slave-ip-port 命令,当所有 slave 都配置完后,sentinel A 从监测的 masters 列表中删除故障 master,然后通知其他 sentinels。
关闭 master:
查看 sentinel 状态:
6379-sentinel:
自动将 slave2 即 6579 切换成 master,原来的 master 变成 slave。
6579-sentinel:
显示了 failover 的过程:
—- 场景 4:master 恢复
重新启动原来的 master:
Redis-server /usr/local/redis_cluster/master-6379/redis.conf
查看 sentinel 状态:
原来的 master 自动切换成 slave,不会自动恢复成 master:
测试完成。
注意:若在 sentinel 已选出新主但尚未完成其它实例的 reconfigure 之前,重启 old master,则整个系统会出现无法选出 new master 的异常。