Redis 2.8主从集群及故障自动切换

Redis官网:https://redis.io/

一、架构

操作系统:Debian 7

Master:127.0.0.1,端口:6379

Slave1::127.0.0.1,端口:6378

Slave2::127.0.0.1,端口:6377

Sentinel1:127.0.0.1,端口:26379

Sentinel2:127.0.0.1,端口:26378

Sentinel3:127.0.0.1,端口:26377

二、主从配置

1、下载redis压缩包,并解压,我这里下载的是2.8.24版本:

1

tar -zxvf redis-2.8.24.tar.gz

2、进入解压目录,修改配置文件redis.conf

1

2

cd redis-2.8.24

vi redis.conf

3、其他保持默认,为客户端连接增加密码为fish

1

2

masterauth fish

requirepass fish

至此,master节点配置完毕。下面开始配置slave节点。

4、拷贝一份redis-2.8.24目录的副本,命名为redis-2.8.24-slave1

1

cp  redis-2.8.24  redis-2.8.24-slave1

5、进入上面目录,修改配置文件redis.conf

1

2

cd redis-2.8.24-slave1

vi redis.conf

6、分别进行以下修改:

1

2

3

4

5

6

7

8

9

10

11

#端口

port  6378

#设置连接主节点的密码:

masterauth fish

#修改路径

dir "/home/fish/redis/redis-2.8.24-slave1/src"

#配置为slave

slaveof 127.0.0.1 6379

7、同样的步骤再复制一份redis-2.8.24-slave2目录,并修改配置文件:

1

2

3

4

port  6377

masterauth fish

dir "/home/fish/redis/redis-2.8.24-slave2/src"

slaveof 127.0.0.1 6379

至此,两个slave也配置完毕。

8、测试集群配置

1)启动master节点:

1

2

cd  redis-2.8.24

src/redis-server  redis.conf

应该可以看到如下界面:

2)启动slave1节点

新开一个终端并执行:

1

2

cd  redis-2.8.24-slave1

src/redis-server  redis.conf

可以看到如下界面:

表示已经开始和master节点通信。

3)新开一个终端,同样方式启动slave2。

4)客户端连接master节点,查看信息

1

2

3

4

cd  redis-2.8.24

src/redis-cli

127.0.0.1:6379> auth fish

127.0.0.1:6379> info replication

可以看到当前连接的是master节点,并且有两个slave节点:

存储一个string到redis:

1

127.0.0.1:6379> set name zhangsan

可以观察到两个slave节点也将信息同步到自己这边:

5)客户端连接slave节点,查看信息

退出客户端连接:

1

127.0.0.1:6379> quit

再重新连接一个slave节点:

1

2

3

src/redis-cli -p 6378

127.0.0.1:6378> auth fish

127.0.0.1:6378> info replication

可以看到当前连接信息和master的信息:

从slave节点上获取存入master节点的值:

1

2

127.0.0.1:6378> get name

"zhangsan"

至此,主从集群配置完毕。但是如果master节点发生故障,尚不能自动切换到slave节点。下面使用redis sentinel来配置监控集群,便于自动切换。

三、Sentinel集群配置

1、Redis Sentinel

Sentinel(哨兵)是用于监控redis集群中Master状态的工具,其已经被集成在redis2.4+的版本中
Sentinel作用:
1):Master状态检测

2):如果Master异常,则会进行Master-Slave切换,将其中一个Slave作为Master,将之前的Master作为Slave

3):Master-Slave切换后,master_redis.conf、slave_redis.conf和sentinel.conf的内容都会发生改变,即master_redis.conf中会多一行slaveof的配置,sentinel.conf的监控目标会随之调换。

2、进入redis目录,修改sentinel配置文件

1

2

cd  redis-2.8.24

cp  sentinel.conf  sentinel_bak.conf

清空原文件内容

1

>sentinel_bak.conf

存入内容:

1

2

3

4

5

6

7

port 26379

#master

sentinel monitor master 127.0.0.1 6379 3

sentinel down-after-milliseconds master 5000

sentinel auth-pass master fish

sentinel config-epoch master 8

sentinel leader-epoch master 9

其中标红的3:代表有3个sentinel实例

3、复制两份sentinel.conf,分别命名为sentinel23678.confsentinel23677.conf

1

2

cp  sentinel.conf  sentinel23678.conf

cp  sentinel.conf  sentinel23677.conf

并分别修改端口为2367823677

4、运行redis-sentinel

开三个终端,分别执行

1

2

3

src/redis-sentinel  sentinel.conf  --sentinel

src/redis-sentinel sentinel26378.conf --sentinel

src/redis-sentinel sentinel26377.conf --sentinel

可以看到启动信息:

5、通过sentinel查看主从信息:

1

2

3

cd  redis-2.8.24

src/redis-cli  -p  26379

127.0.0.1:26379> info

四、测试故障切换配置

1、停掉master节点

在master节点的运行终端中,按下Ctrl+C。

2、观察sentinel的输出信息,会看到已经检测到变化,slave1节点(6378端口)自动切换为master:

3、观察slave1节点的输出信息,说明它已经切换到master状态:

 

至此,Redis的主从集群、故障自动切换机制已经完成