yum -y install ruby ruby-devel rubygems rpm-build
一键安装)gem install redis --version 3.0.0
)用来生成cluster节点配置文件的脚本:
#!/bin/sh
#create redis cluster conf
#/data/sh/new-cluster-conf.sh
#接收两个参数,一是起始端口,二是结尾端口,代表生成这区间内每个端口的配置文件
p1=$1
p2=$2
for((p=p1;p<=p2;p++))
do
conf="/usr/local/etc/cluster-${p}.conf"
echo "port ${p}" > ${conf}
echo "daemonize yes" >> ${conf}
echo "dir /data/redis/" >> ${conf}
echo "dbfilename dump-${p}.rdb" >> ${conf}
echo "logfile /data/redis/cluster-${p}.log" >> ${conf}
echo "cluster-config-file /usr/local/etc/nodes-${p}.conf" >> ${conf}
echo "bind 0.0.0.0" >> ${conf}
echo "cluster-enabled yes" >> ${conf}
echo "cluster-node-timeout 15000" >> ${conf}
echo "cluster-require-full-coverage no" >> ${conf}
done
用来启动cluster节点的脚本:
#!/bin/sh
#/data/sh/start-cluster.sh
#接收若干个参数,每个参数是要开启的节点端口号
for p in "$@" ; do
redis-server /usr/local/etc/cluster-${p}.conf
done
执行命令
#新建各个节点的配置文件
sh /data/sh/new-cluster-conf.sh 6411 6416
#开启准备节点
sh /data/sh/start-cluster.sh 6411 6412 6413 6414 6415 6416
#运行自动配置工具完成后续操作,命令设置了每个主节点分配一个从节点,前面的节点是主,后面那几个是从
redis-cli --cluster create 127.0.0.1:6411 127.0.0.1:6412 127.0.0.1:6413 127.0.0.1:6414 127.0.0.1:6415 127.0.0.1:6416 --cluster-replicas 1
cluster的搭建可分为四步:
Redis5中使用redis-cli --cluster
(单独执行redis-cli --cluster help
可获得该命令的帮助信息)代替了redis-trib.rb
集群自动操作工具的全部功能,使用自动工具可以一条命令执行完第2步到第4步的操作,可靠且高效。
上面3条命令执行完成后,cluster就算部署好了。然后可用下图命令查看集群节点情况(rdc
是我自定义的redis-cli
命令别名),端口6411、6412和6413是主节点,其余是从节点,每个主节点配有一个从节点。cennected后面接的是被分配的槽的范围。
假设业务需要扩展集群容量,新增端口6417的节点为主节点,6418为从节点,那需要执行3步操作,1开启前面提到的两个节点;2执行自动命令添加节点到已有的集群和分配主从;3分配槽。
已开启准备节点后再执行下面命令
#6417节点加入集群,默认成为主节点,6411节点是已存在集群内的节点,指示目标集群
redis-cli --cluster add-node 192.168.8.11:6417 192.168.8.11:6411
#6418节点加入集群,`--cluster-slave --cluster-master-id`后接的是其对应的主节点id
redis-cli --cluster add-node 192.168.8.11:6418 192.168.8.11:6411 --cluster-slave --cluster-master-id fb7bbf981b7339221f6deac111d8a68e91657a07
#给目标集群调整槽的分配,如下图示,分别输入要分配的槽大小(4096)、目标节点(6417)的id和槽的来源节点
redis-cli --cluster reshard 192.168.8.11:6411
下面配置中仅prifix
项是可有可无的,其它的都必须要有,default组下的每个元素都是配置一个节点的信息,要将集群里无论主从节点都加入其中。
'redis' => [
'options' => [
'prefix' => 'test::',
'cluster' => 'redis', //使用原生集群
],
'client' => 'predis',
'clusters' => [
'default' => [
[
'host' => '192.168.8.11',
'password' => null,
'port' => 6411,
'database' => 0,
],
[
'host' => '192.168.8.11',
'password' => null,
'port' => 6412,
'database' => 0,
],
[
'host' => '192.168.8.11',
'password' => null,
'port' => 6414, //端口6411的从节点
'database' => 0,
],
[
'host' => '192.168.8.11',
'password' => null,
'port' => 6415, //端口6412的从节点
'database' => 0,
],
·
·
·
//为了简明表达,这里略去了若干个节点,实际操作中一定要全部加上
],
],
],
end