一.Redis Cluster简介
Redis Cluster集群是一种去中心化的高可用服务,其内置的sentinel功能可以提供高可用性:当集群中少数master不可用时,该集群仍可用。
Cluster集群通过哈希槽算法来分片存储数据。集群中有16384(0-16383)个哈希槽,通过CRC16算法对要存取的变量得出值,384 得到的余数存入相应的槽范围的主库,或从中取出。
客户端访问集群中的任意一台机器,都可以存取数据;访问集群中的从库时,数据存取时会连接主库再执行操作。从库会自动同步主库的数据。
二.部署
redis5版本以上的cluster集群不需要依赖ruby.生产环境中一个redis cluster集群最少需要6台机器(3主3从,3主6从,…),此次为测试环境,故选用三台机器,每台机器上启动两个服务。
环境说明:
系统:centos7.6
redis版本:5.0.8
服务器&&IP:
172.31.228.200:6379
172.31.228.200:6380
172.31.228.201:6379
172.31.228.201:6380
172.31.228.199:6379
172.31.228.199:6380
1.运行安装脚本(以172.31.228.200:6379为例,此为单机版安装脚本):
centos_version=7
password=5gUfpN1wgQr5t$e^nutaxKQp
private_ip=`ip a | grep eth0 | grep inet | awk '{print $2}'
|awk -F /
'{print $1}'`
config_file=/etc/redis.conf
port=6379
yum -y install gcc
yum install -y [http://rpms.famillecollet.com/enterprise/remi-release-${centos_version}.rpm](http://rpms.famillecollet.com/enterprise/remi-release-${centos_version}.rpm)
yum --enablerepo=remi -y install redis #安装最新版本的redis
sed -i -r 69s/bind (.*) /bind ${private_ip}/ ${config_file}
#
sed -i 92s/6379/${port}/ ${config_file}
#port
sed -i '136s/no/yes/' ${config_file}
#daemonize
sed -i '147s/no/systemd/' ${config_file}
#supervised 设置为systemd
sed -i 158s/6379/${port}/ ${config_file}
sed -i '699s/no/yes/' ${config_file}
#appendonly
sed -i -r '507s/^#(.*) /\1/' ${config_file}
sed -i 507s/foobared/${password}/ ${config_file}
#requirepass
echo
rename-command CONFIG redis${port}config #重命名高危命令
rename-command SHUTDOWN redis${port}shutdown #重命名高危命令
rename-command FLUSHDB '' #禁用高危命令
rename-command FLUSHALL '' #禁用高危命令
-
>> ${config_file}
chmod 600 ${config_file}
#修改配置文件的权限
sed -i '12a
Restart=always ' /usr/lib/systemd/system/redis.service #设置redis服务自动重启
sed -i '13a
StartLimitIntervalSec=0' /usr/lib/systemd/system/redis.service #设置服务启动间隔时间为0
systemctl daemon-reload #重新加载systemd
systemctl start redis.service #启动服务
systemctl enable redis.service #设置开机自启
2.然后修改配置文件/etc/redis.conf
cluster-enabled yes #去掉注释
cluster-config-file nodes-6379.conf
#去掉注释
cluster-node-timeout 15000
#去掉注释
masterauth 5gUfpN1wgQr5t$e^nutaxKQp #开启集群间密码验证
3.重启服务: systemctl restart reids.service
其他五个节点按上述3个步骤进行(注意修改port,dir(创建数据库目录并修改权限),redis.conf名,pidfile, logfile, redis.service文件名及其内配置的启动命令)
接下来可在任意一个节点配置集群,集群设置方法有两种,
方法1:先指定主库,再添加从库到对应主库