运维开发网

搭建redis集群(cluster模式)详细配置

运维开发网 https://www.qedev.com 2021-04-15 12:19 出处:51CTO 作者:mb6072e237393be
每个redis实例可称为一个节点,安装redis并以默认端口启动是节点,不关闭,以另一个端口启动,是一个新节点。在另一台机器安装redis并启动,也是一个新节点。节点分为主节点 (master) ,从节点 (slave) ,数据从主节点向多个从节点上同步 。redis3.0开始支持集群,redis集群是没有统一的入口的,客户端(client)连接集群的时候连接集群中的任意节点(node)即可,集群

每个redis实例可称为一个节点,安装redis并以默认端口启动是节点,不关闭,以另一个端口启动,是一个新节点。在另一台机器安装redis并启动,也是一个新节点。

节点分为主节点 (master) ,从节点 (slave) ,数据从主节点向多个从节点上同步 。

redis3.0开始支持集群,redis集群是没有统一的入口的,客户端(client)连接集群的时候连接集群中的任意节点(node)即可,集群内部的节点是相互通信的(PING-PONG机制)。

搭建集群

这里以cluster为实例,下面开始搭建

机器和IP分布:3台机器,IP为  192.168.1.248    192.168.1.250    192.168.1.251

每台机器运行2个redis节点

下载源码包并解压

要先在系统中安装好gcc环境,(不然编译redis会报错)

wget http://download.redis.io/releases/redis-5.0.4.tar.gz

tar -zxvf redis-5.0.4.tar.gz

mkdir /usr/local/redis

mv redis-5.0.4 /usr/local/redis/

编译安装

cd /usr/local/redis/redis-5.0.4/

make && make install

创建cluster相应文件夹

mkdir /usr/local/redis-cluster

cd /usr/local/redis-cluster

mkdir -p {9001,9002}/data

mkdir bin

复制源码包中的执行文件到cluster目录中

cd /usr/local/redis/redis-5.0.4/src/

cp mkreleasehdr.sh redis-benchmark redis-check-aof redis-check-rdb redis-cli redis-sentinel redis-server redis-trib.rb /usr/local/redis-cluster/bin/

cp /usr/local/redis/redis-5.0.4/* /usr/local/redis-cluster/9001/

cp /usr/local/redis/redis-5.0.4/* /usr/local/redis-cluster/

#其他两台机器上也同时执行此操作,创建9003、9004、9005、9006

主要修改的地方为:

bind 192.168.119.128(绑定当前电脑的 IP,这是我虚拟机的,你绑定成你虚拟机的ip)

port 9001(因为我这是一台机器运行6个redis实例,所以要启动6个实例,得为它配置6个不同的端口,若你是6台机器,默认的端口就行,无需更改)

daemonize yes(这是设置是否后台启动 Redis,默认 no ,但是生产环境肯定要默认就开启 Redis,所以这里设置为 yes 。)

pidfile /var/run/redis_9001.pid(_9001这个一定要和第一个配置的端口一样)

dir /usr/local/redis-cluster/9001/data/(数据文件存放位置,我换成指定目录下存放)

appendonly yes

cluster-enabled yes(启动集群模式)

cluster-config-file nodes9001.conf(9001这个也要和之前的端口对应)

cluster-node-timeout 15000(超时时间)

#其他的9002 9003 9004 9005 9906里的redis.conf也同时修改

启动服务

#192.168.1.250

/usr/local/bin/redis-server /usr/local/redis-cluster/9001/redis.conf

/usr/local/bin/redis-server /usr/local/redis-cluster/9002/redis.conf

#192.168.1.251

/usr/local/bin/redis-server /usr/local/redis-cluster/9003/redis.conf

/usr/local/bin/redis-server /usr/local/redis-cluster/9004/redis.conf

#192.168.1.248

/usr/local/bin/redis-server /usr/local/redis-cluster/9005/redis.conf

/usr/local/bin/redis-server /usr/local/redis-cluster/9006/redis.conf

创建集群

redis-cli --cluster create 192.168.1.250:9001 192.168.1.250:9002 192.168.1.251:9003 192.168.1.251:9004 192.168.1.248:9005 192.168.1.248:9006 --cluster-replicas 1

进入redis中查看状态

redis-cli -c -h 192.168.1.250 -p 9001

192.168.1.250:9001>cluster info

...

192.168.1.250:9001>cluster nodes

...

192.168.1.250:9001> set name ppp

-> Redirected to slot [5798] located at 192.168.1.251:9003

OK

当前登录在192.168.1.250:9001,保存数据后存放在192.168.1.251:9003,并在所有机器节点上都可以查看到此数据

1,故障转移机制详解

集群中的节点会向其它节点发送PING消息(该PING消息会带着当前集群和节点的信息),如果在规定时间内,没有收到对应的PONG消息,就把此节点标记为疑似下线。当被分配了slot槽位的主节点中有超过一半的节点都认为此节点疑似下线(就是其它节点以更高的频次,更频繁的与该节点PING-PONG),那么该节点就真的下线。其它节点收到某节点已经下线的广播后,把自己内部的集群维护信息也修改为该节点已事实下线。节点资格审查:然后对从节点进行资格审查,每个从节点检查最后与主节点的断线时间,如果该值超过配置文件的设置,那么取消该从节点的资格。准备选举时间:这里使用了延迟触发机制,主要是给那些延迟低的更高的优先级,延迟低的让它提前参与被选举,延迟高的让它靠后参与被选举。(延迟的高低是依据之前与主节点的最后断线时间确定的)选举投票:当从节点获取选举资格后,会向其他带有slot槽位的主节点发起选举请求,由它们进行投票,优先级越高的从节点就越有可能成为主节点,当从节点获取的票数到达一定数值时(如集群内有N个主节点,那么只要有一个从节点获得了N/2+1的选票即认为胜出),就会替换成为主节点。替换主节点:被选举出来的从节点会执行slaveof no one把自己的状态从slave变成master,然后执行clusterDelSlot操作撤销故障主节点负责的槽,并执行 clusterAddSlot把这些槽分配给自己,之后向集群广播自己的pong消息,通知集群内所有的节点,当前从节点已变为主节点。接管相关操作:新的主节点接管了之前故障的主节点的槽信息,接收和处理与自己槽位相关的命令请求。

0

精彩评论

暂无评论...
验证码 换一张
取 消