4、redis cluster搭建
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>:节点的超时时间,超过这个时间认为节点宕机,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。
运行后如下图:
如上图所示,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开始自动配置:
至此redis-cluster 配置完成。