Redis-Cluster是从redis 3.0版本之后,官方退出的一款高可用集群,其效果和业内常用的 KeepAlived+HAproxy+Twemproxy+redis实现的集群在功能上是大致相同的,但是redis-cluster更加简单.
一.redis-cluster架构图
二.redis-cluster选举机制
redis cluster 为了保证数据的高可用性,加入了主从模式,一个主节点对应一个或多个从节点,主节点提供数据存取,从节点则是从主节点拉取数据备份,当这个主节点挂掉后,就会有这个从节点选取一个来充当主节点,从而保证集群不会挂掉。
三.redis-cluster配置
(1)安装redis(路径仅供参考)
下载解压包并解压到/usr/local/src/目录
tar zxvf /srv/ftp/redis.3.2.9 /usr/local/src/
编译安装
make && make install
笔者为了方便,将启动项和配置文件导入/usr/local/redis/
mkdir -p /usr/local/redis/{conf,src}
创建数据存放目录
mkdir -p /usr/data/redis/{redis-6379,redis-6380,redis-6381,redis-6382,redis-6383,redis-6384,redis-6385,redis-6386}/{logs,dbcache,run}/
(2)配置src
将编译好的安装包中的下面三项移入 /usr/local/redis/src/
名称 | 作用 |
---|---|
redis-benchmark | 性能测试 |
redis-cli | redis客户端启动 |
redis-server | redis服务启动 |
(3)配置conf,笔者采用了8个redis搭载集群,所以要配置8个配置文件
文件内容参考
reids-6379.conf
pidfile "/usr/data/redis/redis-6379/run/redis_6379.pid"
save 900 1
save 300 10
save 60 10000
slave-serve-stale-data yes
slave-read-only yes
replication
slaves
repl-diskless-sync no
socket
server
repl-diskless-sync-delay 5
change
repl-disable-tcp-nodelay no
slave-priority 100
appendfilename "appendonly.aof"
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
lua-time-limit 5000
cluster-enabled yes
cluster-node-timeout 15000
slowlog-log-slower-than 10000
slowlog-max-len 128
latency-monitor-threshold 0
notify-keyspace-events ""
directives.
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-size -2
list-compress-depth 0
set-max-intset-entries 512
zset-max-ziplist-value 64
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
aof-rewrite-incremental-fsync yes
masterauth "123"
requirepass "123"
配置redis-cluster的配置文件的注意事项
1.切记不要配密码(requirespass 123)
2.打开cluster支持(cluster-enable yes)
3.配置挂掉时间(cluster-node-timeout 15000)
4.没有主从关系(#slave of)
5.切记protected mode no,必须为no,因为保护一开redis-cluster无法从外部进行配置
四.redis-cluster部署
(1)部署前,先确保安装有ruby编译环境
apt-get install ruby ruby-dev rubygems
(2)首先需要进行redis编译处理
gem install redis
(3)复制redis-trib.rb到redis的主目录内
cp /usr/local/src/redis-3.2.9/src/redis-trib.rb /usr/local/redis/src
(4)启动redis服务
/usr/local/redis/src/redis-server /usr/local/redis/conf/redis-6379.conf
/usr/local/redis/src/redis-server /usr/local/redis/conf/redis-6380.conf
/usr/local/redis/src/redis-server /usr/local/redis/conf/redis-6381.conf
/usr/local/redis/src/redis-server /usr/local/redis/conf/redis-6382.conf
/usr/local/redis/src/redis-server /usr/local/redis/conf/redis-6383.conf
/usr/local/redis/src/redis-server /usr/local/redis/conf/redis-6384.conf
/usr/local/redis/src/redis-server /usr/local/redis/conf/redis-6385.conf
/usr/local/redis/src/redis-server /usr/local/redis/conf/redis-6386.conf
(5)启动redis-cluster集群
/usr/local/redis/src/redis-trib.rb create --replicas 1 192.168.74.148:6379 192.168.74.148:6380 192.168.74.148:6381 192.168.74.148:6382 192.168.74.148:6383 192.168.74.148:6384 192.168.74.148:6385 192.168.74.148:6386
(6)启动成功
启动成功后会出现如下提示信息
主从分配是redis-cluster自动分配,M代表主服务器,S代表从服务器
输入yes代表同意集群自动分配的主从关系
五.redis-cluster集群测试
(1)启动任何一个节点,因为在redis-cluster集群当中,任何一个节点都是平等的关系,所以启动任何一个都代表进入了集群
/usr/local/redis/src/redis-cli -h 192.168.74.148 -p 6379 -a 123 -c
(2)存入数据进行测试
set hello sjw
会出现提示信息,把当前数据存放在6381端口的服务器中,并跳转到6381
在此提醒切记配置好redis-cluster后不可单独操作某一节点否则会产生如下错误
则需要进入每一个节点进行
cluster reset
此时代表配置成功!!!