Redis Cluster
5.0新版安装集群方式
#配置yes开启redis-cluster
cluster-enabled yes
#配置节点之间超时时间
cluster-node-timeout 15000
#这个配置很重要,cluster开启必须重命名指定cluster-config-file,不能与别的节点相同,否则会启动失败,最好按主机+端口命名
cluster-config-file nodes-6379.conf
完成以上配置之后,可以使用src下的redis-server命令,逐个启动redis实例。
redis-cli --cluster create 127.0.0.1:6379 127.0.0.1:6380 127.0.0.1:6381 127.0.0.1:6382 127.0.0.1:6383 127.0.0.1:6384 --cluster-replicas 1
redis-cli --cluster check host:port
检查集群状态slots详细分配
安装环境
yum install ruby
或下载tar,编译安装,最低版本2.2(Redis3.2.0)
gem install redis
要让集群正常运作至少需要三个主节点,强烈建议使用六个节点: 其中三个为主节点, 而其余三个则是各个主节点的从节点。
主要配置
cd /usr/local/redis
mkdir cluster/{7001 7002 7003 7004 7005 7006}
cd cluster
vi redis.conf
port 7001
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
daemonize yes
protected-mode no
requirepass 12345678
masterauth 12345678
pidfile "/usr/local/redis/cluster/7001/redis.pid"
logfile "/usr/local/redis/cluster/7001/redis.log"
dbfilename "dump-7001.rdb"
dir "/usr/local/redis/cluster/7001/"
注意设置密码后,需要在ruby下的gem /usr/local/lib/ruby/gems/2.5.0/gems/redis-4.0.1/lib/redis/client.rb
修改password
属性;如不设置密码,将protected-mode设为yes,bind改为服务器的IP地址。
修改并复制到各个节点目录
sed -i 's@7001@7002@' redis.conf && cp redis.conf 7002/redis.conf
启动各个节点
redis-server 7001/redis.conf
使用redis-trib.rb
工具创建集群
/usr/local/redis/bin/redis-trib.rb create --replicas 1 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 127.0.0.1:7006
显示以下信息,表示创建成功
[OK] All 16384 slots covered
注:trib.rb脚本只在第一次创建集群使用
添加节点:./redis-trib.rb add-node 127.0.0.1:7006 127.0.0.1:7001
add-node --slave
添加为从节点
移除节点:./redis-trib.rb del-node 127.0.0.1:7001
redis客户端连接
redis-cli -c -p 7001 -a 12345678
-c表示连接集群 -a连接密码
> cluster nodes
所有节点
> cluster info
当前节点信息
Redis测试脚本
#!/bin/bash
echo "redis tools 0.0.1"
OPT=$1
if [ ! -n "$OPT" ];then
echo "Usage: $0 operate"
exit 1;
fi
DIR=/usr/local/redis/cluster
PORTS="7001 7002 7003 7004 7005 7006"
IP="172.16.15.216"
redis_pid() {
echo `ps -ef | grep redis-server | grep -v grep | tr -s " "|cut -d" " -f2`
}
start() {
cd $DIR
for d in $PORTS
do
redis-server $d/redis.conf
done
echo "redis servers has started."
}
stop() {
pid=$(redis_pid)
for p in $pid
do
kill $p
done
echo "redis servers has stopped."
}
reset() {
cd $DIR
for d in $PORTS
do
rm -rf $d/appendonly.aof $d/dump-$d.rdb $d/nodes.conf $d/redis.log
done
echo "redis cluster has reseted and all config&db files has deleted."
}
create() {
cd $DIR
ips=""
for d in $PORTS
do
ips="$ips $IP:$d"
done
/usr/local/redis/bin/redis-trib.rb create --replicas 1 $ips
echo "redis cluster created."
}
case $OPT in
start)
stop
start
;;
stop)
stop
;;
reset)
stop
reset
;;
create)
start
sleep 5
create
;;
*)
echo "Usage: $0 operate"
;;
esac