1. 首页
  2. 数据库运维

Linux系统Redis cluster集群安装和配置

Redis 是一个开源的 key-value 存储系统,由于出众的性能,大部分互联网企业都用来做服务器端缓存。Redis 在3.0版本前只支持单实例模式,虽然支持主从模式、哨兵模式部署来解决单点故障,但是现在互联网企业动辄大几百G的数据,可完全是没法满足业务的需求,所以,Redis 在 3.0 版本以后就推出了集群模式。

Redis 集群采用了P2P的模式,完全去中心化。Redis 把所有的 Key 分成了 16384 个 slot,每个 Redis 实例负责其中一部分 slot 。集群中的所有信息(节点、端口、slot等),都通过节点之间定期的数据交换而更新。集群中的每个节点都是平等的关系,Redis 客户端可以在任意一个 Redis 实例发出请求。如果所需数据不在该实例中,通过重定向命令引导客户端访问所需的实例。

Redis 集群至少需要6个节点(3主3从模式),本次实验直接在一台服务器上进行,分别指定不同的端口。主master节点挂掉后备slave节点会选举成为master。

开始配置集群先需要在本地已经安装有redis,redis安装不清楚的可以参考这篇文章:《CentOS系统Redis安装》。

第一步:创建目录

计划把cluster的配置放置在/usr/local/redis/cluster目录,存放配置文件和数据文件。

mkdir /usr/local/redis/cluster
cd /usr/local/redis/cluster
mkdir conf var
mkdir var/17701 var/17702 var/17703 var/17704 var/17705 var/17706

第二步:修改配置

在/usr/local/redis/cluster/conf目录,分别创建redis-17701.conf,redis-17702.conf ,redis-17703conf ,redis-17704.conf ,redis-17705.conf ,redis-17706.conf 配置文件。

内容类似如下:

bind 0.0.0.0
protected-mode yes
port 17701
tcp-backlog 511
timeout 0
tcp-keepalive 300
daemonize yes
supervised systemd
pidfile "/usr/local/redis/cluster/var/17701/redis.pid"
loglevel notice
logfile "/usr/local/redis/cluster/var/17701/redis.log"
databases 16
always-show-logo yes
save ""
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename "dump.rdb"
dir "/usr/local/redis/cluster/var/17701"
slave-serve-stale-data yes
slave-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-disable-tcp-nodelay no
slave-priority 100
lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
slave-lazy-flush no
appendonly no
appendfilename "appendonly.aof"
appendfsync no
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
aof-use-rdb-preamble no
lua-time-limit 5000
cluster-enabled yes
cluster-config-file nodes-17701.conf
cluster-node-timeout 15000
slowlog-log-slower-than 10000
slowlog-max-len 128
latency-monitor-threshold 0
notify-keyspace-events ""
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-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
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
hz 10
aof-rewrite-incremental-fsync yes

集群配置文件基本都一样,只需要修改如下几个参数为指定的路径或端口即可。

redis_cluster_1

第三步:集群启动和停止脚本

启动脚本

#!/bin/bash

function green(){
    echo -e "33[32m[ $1 ]33[0m"
}

for i in `seq 17701 17706`;do
  green "start redis cluster, node $i ..."

  /usr/local/redis/src/redis-server /usr/local/redis/cluster/conf/redis-${i}.conf
  sleep 3
  ps -ef|grep "/usr/local/redis/src/redis-server .*:${i} [cluster]"

done

停止脚本

#!/bin/bash

function green(){
    echo -e "33[32m[ $1 ]33[0m"
}
function bred(){
    echo -e "33[31m33[01m33[05m[ $1 ]33[0m"
}
function blue(){
    echo -e "33[34m[ $1 ]33[0m"
}


for i in `seq 17701 17706`;do
  blue "stop redis cluster, node $i ..."

  pid=`cat /usr/local/redis/cluster/var/${i}/redis.pid 2>/dev/null`
  if [ $? -eq 0 ];then
    /bin/kill -SIGTERM $pid
    #/bin/kill -9 $pid
  fi

  sleep 3

  left=`ps -ef|grep -c "/usr/local/redis/src/redis-server .*:${i} [cluster]"`
  if [ $left -eq 0 ];then
    green "redis cluster node $i stop successfully."
  else
    bred "redis cluster node $i stop failed."
    ps -ef|grep "/usr/local/redis/src/redis-server .*:${i} [cluster]"
  fi

done

然后就可以运行脚本启动和关闭集群了。

redis_cluster_2

第四步:添加集群

到这里集群其实已经启动好了,但是还不能直接使用,直接使用会报这种错误。

[redis@mail cluster]$ redis-cli -c -p 17701
127.0.0.1:17701> set name "nbhao.org"
(error) CLUSTERDOWN Hash slot not served
127.0.0.1:17701> 

这是因为虽然我们配置并启动了 Redis 集群服务,但是他们暂时还并不在一个集群中,互相直接发现不了,而且还没有可存储的位置,就是所谓的slot(槽)。

添加集群使用redis-trib.rb脚本,他是用ruby写的,所以在运行之前还需要安装ruby 。

yum install ruby
yum install rubygems
gem install redis

如果gem install redis出错,参考这篇文章:CentOS7安装Redis集群提示requires Ruby version >= 2.2.2的问题

/usr/local/redis/bin/redis-trib.rb create --replicas 1 127.0.0.1:17701 127.0.0.1:17702 127.0.0.1:17703 127.0.0.1:17704 127.0.0.1:17705 127.0.0.1:17706

使用这个命令添加集群,出现这个说明添加成功。

redis_cluster_3

第五步:集群测试

redis_cluster_4

一切正常!

参考地址:

CentOS 7系统Redis安装步骤

CentOS7安装Redis集群提示requires Ruby version >= 2.2.2的问题

http://www.cnblogs.com/mafly/p/redis_cluster.html

联系我们

0574-55011290

QQ:248687950

邮件:admin@nbhao.org

工作时间:周一至周五,9:00-18:00,节假日休息

QR code