welcome to xlongwei.com

欢迎大家一起学习、交流、分享


QQ:9167702333 邮箱:admin@xlongwei.com

redis cluster


分类 Linux   关键字 分享   标签 linux   发布 hongwei  1567596069535
注意 转载须保留原文链接,译文链接,作者译者等信息。  

redis cluster集群功能提高了缓存系统的可靠性,避免了单机版redis缓存宕机造成严重后果。

首先,下载最新版redis源码并编译

tar zxvf redis-5.0.4.tar.gz

cd redis-5.0.4

make

cp src/redis-server /soft/redis-cluster

也可以下载已编译好的二进制文件,但不一定能正常运行。


然后,下载相关配置和脚本redis-cluster.tgz

tar zxvf redis-cluster.tgz

redis.conf,做了一些修改:

port {port}    #支持单机多节点,避免冲突
pidfile /var/run/redis_{port}.pid
daemonize yes   #后台进程
dbfilename dump-{port}.rdb
cluster-enabled yes     #打开注释,集群模式运行
cluster-config-file nodes-{port}.conf
databases 1   #集群模式只支持1个库

redis.sh,事先规划好集群包含多少台独立主机(3或5等奇数),每台主机运行多少redis(slave不一定要独立主机)

示例:3*2(三台主机,每台2个redis),端口为6381-6382,运行sh redis.sh后会生成redis1.conf、redis2.conf,方便重启某个redis

for n in {1..2}; do
     echo "======== starting redis-server 638$n ========"
     sed -e "s/{port}/638$n/g"  < redis.conf | grep -v ^# | egrep 'port|pidfile|cluster' -
     #sed -e "s/{port}/638$n/g"  < redis.conf | grep -v ^# | grep -v ^$ | ./redis-server -
     sed -e "s/{port}/638$n/g"  < redis.conf | grep -v ^# | grep -v ^$ > redis$n.conf
     #./redis-server redis$n.conf
done

cluster.sh,在某一台主机上运行即可,

cluster_ips=(
127.0.0.1   # 每行一个IP地址,这里配置集群所有主机的内网IP(外网也可以,但要相互开放iptables端口)
)

cluster_nodes=""

for ((i=0; i<${#cluster_ips[@]}; ++i))
do
cluster_ip=${cluster_ips[i]}
#echo $cluster_ip

    for n in {1..2}; do
         cluster_nodes="$cluster_nodes $cluster_ip:638$n"
     done
#echo $cluster_nodes

done

echo "redis-cli --cluster create $cluster_nodes --cluster-replicas 1"
./redis-cli --cluster create $cluster_nodes --cluster-replicas 1
# 这条命令可以创建集群,不必用ruby脚本了

集群创建好之后,可以连接任意redis查看状态

./redis-cli –p 6381 –c   # –c 支持redirect跳至其他redis
cluster nodes    # 可以看到每个redis的身份:master或slave

通常master和对应的slave不在相同主机上,这时某一台主机挂了(或redis挂了),slave会自动提升为master,等这台主机恢复后,会自动成为slave

如果一组master和对应的slave都挂了,则集群就挂了,某些槽访问不到数据了。

3台主机可以容忍1台挂机,5台主机可以容忍2台挂机,这时每组master+slave需要至少分布3台主机(挂2个还有1个可以提升为master),这时就可以是master+slave*2的模式


密码保护:内网集群不推荐

  • 创建集群时:修改redis.conf,打开masterauth、requirepass的注释
  • 集群运行时:连接所有redis,运行config set masterauth yourpass、config set requirepass yourpass