Redis cluster部署及在Laravel中的配置

环境说明

  • CentOS7(ip: 192.168.8.11)
  • Redis5.0.2(可执行命令已复制到/usr/local/bin/,可在任意目录执行)
  • Laravel5.5
  • predis1.1
  • ruby执行环境(可用命令yum -y install ruby ruby-devel rubygems rpm-build一键安装)
  • ruby redis客户端(安装命令gem install redis --version 3.0.0

cluster部署

用来生成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的搭建可分为四步:

  1. 是开启准备节点;
  2. 是节点间meet握手,让彼此知道对方的存在;
  3. 分配主从节点;
  4. 分配槽。

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

Redis cluster部署及在Laravel中的配置_第1张图片
分配完后可看到6417节点的槽分配:
Redis cluster部署及在Laravel中的配置_第2张图片

Laravel配置

下面配置中仅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

你可能感兴趣的:(Laravel,Redis,运维)