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_ipfor n in {1..2}; do
cluster_nodes="$cluster_nodes $cluster_ip:638$n"
done
#echo $cluster_nodesdone
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