0、redis cluster特性简介

redis cluster: 自动支持以下特性:1、master+slave复制和读写分离;2、master+slave高可用和主备切换;3、支持多个master的hash slot支持数据分布式存储。

1、redis cluster的重要配置

cluster-enabled <yes/no> :开启cluster

cluster-config-file <filename> :指定一个文件,供cluster模式下的redis实例将集群状态信息保存,包括集群中其他机器的信息,比如节点的上线和下限,故障转移;redis自动维护这个文件。

cluster-node-timeout <milliseconds&gt:节点的超时时间,超过这个时间认为节点宕机,master宕机的话就会触发主备切换,slave宕机就不会提供服务。

2、在三台机器上启动6个redis实例

一般来讲redis cluster 至少要求3个master,去组成一个高可用的分布式集群。每个master都建议至少给一个slave,这样就组成3个master,3个slave的最小redis cluster系统。
3台机器可以保证master与自己的slave不在同一台机器上。提高可用性。如A的master部署在1号机器上,A的slave部署在2号机器上。以此类推,这样交叉部署。

(1)配置文件

由于我们在3台机器上部署6个redis实例,因此我们在这里将端口设置为:
192.168.200.131:7001
192.168.200.131:7002

192.168.200.132:7003
192.168.200.132:7004

192.168.200.133:7005
192.168.200.133:7006

因此我们需要在对应的机器上创建与之相关的文件夹与文件,我们直接使用端口来命名,方便区分。

sudo mkdir -p /etc/redis-cluster
sudo mkdir -p /var/log/redis
sudo mkdir -p /var/redis/7001 # B机器就是7003与7004
sudo mkdir -p /var/redis/7002

conf配置文件如下,其他实例只需修改7001,改为自己的端口。

port 7001
cluster-enabled yes
cluster-config-file /etc/redis-cluster/node-7001.conf
cluster-node-timeout 15000
daemonize	yes
pidfile		/var/run/redis_7001.pid
dir 		/var/redis/7001
logfile /var/log/redis/7001.log
bind 192.168.200.131
appendonly yes
requirepass "123"

(2)修改或创建Redis服务启动文件(ubuntu server)

ubuntu的.service文件一般都放在这个目录中: /lib/systemd/system 因此在这个目录中创建对应的启动文件,这里以7001为例,其他实列需要将7001替换为自己的端口。
在目录 /lib/systemd/system中,创建以下文件
redis_7001.service
文件内容如下:

[Unit]
Description=Redis persistent key-value database
After=network.target
After=network-online.target
Wants=network-online.target

[Service]
ExecStart=/usr/local/bin/redis-server /etc/redis/7001.conf --protected-mode no
ExecStop=/usr/local/bin/redis-cli -p 7001 shutdown
#Restart=always
Type=forking
#User=redis
#Group=redis
RuntimeDirectory=redis
RuntimeDirectoryMode=0755

[Install]
WantedBy=multi-user.target

最后启动redis
systemctl start redis_7001.service

3、创建集群

创建集群我们需要使用redis提供的redis-trib.rb 脚本,这个脚本一般在redis源码的src文件夹中。由于这个脚本是ruby编写,所以我们需要安装ruby。
在ubuntu中,我们直接用命令:sudo apt-get install ruby-full 安装.
安装完成后使用如下命令创建集群:

redis-trib.rb create --replicas 1 192.168.200.131:7001 192.168.200.131:7002 192.168.200.132:7003 192.168.200.132:7004 192.168.200.133:7005 192.168.200.133:7006

redis-trib.rb 这个命令在新版本的redis中已不可使用,改为redis-cli --cluster 命令来创建集群,如下:

redis-cli --cluster create --replicas 1 192.168.200.131:7001 192.168.200.131:7002 192.168.200.132:7003 192.168.200.132:7004 192.168.200.133:7005 192.168.200.133:7006 -a 123

其中 --replicas 1 表示每个master 有 1个slave。

这个脚本会自动的选择那些机器作为master,那些作为slave,会经历避免将master和对应的slave分配到同一台机器上;然后自动给master分配hash slots。

运行后如下图:

celery cluster redis 支持 redis cluster enable_ruby


如上图所示,redis自动将7001,7003,7005 这3个redis实例设置为master。

将7004设置为7001的slave;
将7006设置为7003的slave;
将7002设置为7005的slave;

将slots:[0-5460] (5461 slots) 分配到7001
将slots:[10923-16383] (5461 slots) 分配到7005
将slots:[5461-10922] (5462 slots) 分配到7003

输入yes开始自动配置:

celery cluster redis 支持 redis cluster enable_ubuntu_02

至此redis-cluster 配置完成。