linux Redis 5.0集群搭建

 

文档结构以下:node

 

 

Redis cluster 是redis的分布式解决方案,在3.0版本正式推出后,有效的解决了redis分布式方面的需求;当遇到单机内存,并发,流量等瓶颈是,能够采用cluster架构方案达到负载均衡的目的。linux

 

官方网站:redis

https://redis.io/topics/cluster-tutorialruby

Redis数据分区

Redis cluster 采用虚拟槽分区,全部的键根据哈希函数映射到0~16383整数槽内,计算公式:服务器

Slot=CRC16(key)&16384。每一个节点负责维护一部分槽以及槽所映射的键值数据。架构

 

redis群集中的每一个节点都负责哈希槽的子集,例如,您可能拥有一个包含3个节点的群集,其中:并发

 

节点A包含从0到5500的散列槽。负载均衡

节点B包含从5501到11000的散列槽。运维

节点C包含从11001到16383的散列槽。分布式

 

 

因为个人环境只有三台服务器master 和slave为同一台,一台服务器,两张网卡。

 

Redis Cluster主从模型

为了在主节点子集发生故障或没法与大多数节点通讯时保持可用,Redis Cluster使用主从模型,其中每一个散列槽从1(主机自己)到N个副本(N) -1个额外的从节点)。

在具备节点A,B,C的示例群集中,若是节点B发生故障,则群集没法继续,由于咱们再也不可以在5501-11000范围内提供服务哈希位置的方法。

然而,当建立集群时(或稍后),咱们向每一个主节点添加一个从节点,以便最终集群由做为主节点的A,B,C和做为从节点的A1,B1,C1组成。 ,若是节点B出现故障,系统就能继续运行。

节点B1复制B,B失败,集群将节点B1升级为新的主节点,并将继续正常运行。

但请注意,若是节点B和B1同时发生故障,Redis Cluster将没法继续运行。

 

 

 

Redis群集配置参数

咱们即将建立一个示例集群部署。在继续以前,让咱们介绍Redis Cluster在redis.conf文件中引入的配置参数。有些人会很明显,有些人会在你继续阅读时更清楚。

cluster-enabled<yes/no>:若是是,则在特定Redis实例中启用Redis群集支持。不然,实例像往常同样做为独立实例启动。

cluster-config-file<filename>:请注意,尽管有此选项的名称,但这不是用户可编辑的配置文件,而是每次发生更改时Redis群集节点自动保持群集配置(基本上是状态)的文件,为了可以在启动时从新阅读它。该文件列出了集群中其余节点,状态,持久变量等内容。因为某些消息接收,一般会将此文件重写并刷新到磁盘上。

cluster-node-timeout<milliseconds>:Redis群集节点不可用的最长时间,不会被视为失败。若是主节点的可访问时间超过指定的时间,则其从属节点将进行故障转移。此参数控制Redis群集中的其余重要事项。值得注意的是,在指定时间内没法访问大多数主节点的每一个节点都将中止接受查询。

cluster-slave-validity-factor<factor>:若是设置为零,则从站将始终尝试对主站进行故障切换,而无论主站和从站之间的链路是否保持断开链接的时间长短。若是该值为正,则计算最大断开时间做为节点超时值乘以此选项提供的因子,若是节点是从属节点,则若是主连接断开链接的时间超过指定的时间,则不会尝试启动故障转移。例如,若是节点超时设置为5秒,而且有效性因子设置为10,则从主设备断开超过50秒的从设备将不会尝试故障转移其主设备。请注意,若是没有从站可以对其进行故障转移,则任何不一样于零的值均可能致使Redis群集在主站发生故障后不可用。在这种状况下,只有当原始主服务器从新加入群集时,群集才会返回。

cluster-migration-barrier<count>:主服务器将保持链接的最小从服务器数,以便另外一个从服务器迁移到再也不由任何从服务器覆盖的主服务器。有关详细信息,请参阅本教程中有关副本迁移的相应部分。

cluster-require-full-coverage<yes/no>:若是设置为yes,则默认状况下,若是任何节点未覆盖某个百分比的密钥空间,则集群将中止接受写入。若是该选项设置为no,即便只能处理有关键子集的请求,群集仍将提供查询。

 

 

a)   关闭防火墙

vi /etc/selinux/config

 

# This file controls the state of SELinux on the system.

# SELINUX= can take one of these three values:

#     enforcing - SELinux security policy is enforced.

#     permissive - SELinux prints warnings instead of enforcing.

#     disabled - No SELinux policy is loaded.

SELINUX=disabled

# SELINUXTYPE= can take one of these two values:

#     targeted - Targeted processes are protected,

#     mls - Multi Level Security protection.

SELINUXTYPE=targeted

 

setenforce 0

 

service iptables stop

chkconfig iptables off

 

 

b)   三台服务器配置好yum

mount /dev/sr0 /mnt/

cd /etc/yum.repos.d/

mv redhat.repo redhat.repo.bak

mv rhel-source.repo rhel-source.repo.bak

 

vi /etc/yum.repos.d/rhel-debuginfo.repo

[rhel-debuginfo]

name=Red Hat Enterprise Linux $releasever - $basearch - Debug

baseurl=file:///mnt/

enabled=1 

gpgcheck=0  

 

安装yum:

yum -y install make gcc*  rubygems 

因为须要安装ruby环境,因此采用yum安装

搭建集群

 

Redis-trib.rb是采用ruby实现的redis集群管理工具。内部经过cluster相关命令简化集群建立,检查,槽迁移和均衡等常见运维操做,使用以前须要安装Ruby依赖环境。

一、环境准备

下载ruby(5.0能够不用ruby):

最新为Ruby 2.6.0,地址:http://www.ruby-lang.org/zh_cn/downloads/

因为yum 安装的版本不符合要求

我单独下载的

tar -zxvf ruby-2.6.0.tar.gz

./configure -prefix=/usr/local/ruby

make

make install

cd /usr/local/ruby/

cp bin/ruby /usr/local/bin/

cp bin/gem /usr/local/bin/

 

 

 

安装rubygem redis 依赖:

 

最新版本为4.1

https://rubygems.org/gems/redis/versions/4.1.0

cd /soft/

/usr/local/bin/gem install -l redis-4.1.0.gem

 

 

/usr/local/bin/gem list redis gem

 

 

 

安装redis5.0 单机

/soft/redis-5.0.0

make

make install

cd /soft/redis-5.0.0/src/

cp redis-cli redis-server ../redis.conf /usr/local/redis-cluster/redis6379

cp redis-cli redis-server ../redis.conf /usr/local/redis-cluster/redis6380

 

cp redis-cli redis-server ../redis.conf /usr/local/redis-cluster/redis6381

cp redis-cli redis-server ../redis.conf /usr/local/redis-cluster/redis6382

 

cp redis-cli redis-server ../redis.conf /usr/local/redis-cluster/redis6383

cp redis-cli redis-server ../redis.conf /usr/local/redis-cluster/redis6384

 

 

安装redis-trib.rb

 

cd /soft/redis-5.0.0/src

./redis-trib.rb –help

 

 

5.0 redis-cli --cluster

 

 

redis-cli --cluster help具备如下功能:

 

一、 create :建立集群

二、 check :检查集群

三、 info :查看集群信息

四、 fix :修复集群

五、 reshard :在线迁移slot

六、 rebalance :平衡集群节点slot数量

七、 add-node :将新节点加入集群

八、 del-node :从集群中删除节点

九、 set-timeout :设置集群节点间心跳链接的超时时间

十、 call :在集群所有节点上执行命令

十一、 import :将外部redis数据导入集群

 

 

cp /soft/redis-5.0.0/src/redis-trib.rb /usr/local/bin/

 

准备目录:

 

mkdir –p /redis6379

mkdir –p /redis6380

mkdir -p /usr/local/redis-cluster/redis6379

mkdir -p /usr/local/redis-cluster/redis6380

cp

 

mkdir –p /redis6381

mkdir –p /redis6382

mkdir -p /usr/local/redis-cluster/redis6381

mkdir -p /usr/local/redis-cluster/redis6382

 

mkdir –p /redis6383

mkdir –p /redis6384

mkdir -p /usr/local/redis-cluster/redis6383

mkdir -p /usr/local/redis-cluster/redis6384

 

 

准备redis 集群配置文件:

redis6379.cnf

 

save 900 1

bind 0.0.0.0    --运行全部IP

daemonize yes

port 6379

loglevel warning

timeout 60

logfile "6379.log"

dbfilename dump6379.rdb

pidfile /var/run/redis_6379.pid

maxmemory-policy volatile-ttl

auto-aof-rewrite-min-size 10GB

cluster-enabled yes

cluster-node-timeout 15000

cluster-config-file nodes-6379.conf

protected-mode no   --让客户端均可以链接redis

 

其余节点按照6379进行相应的修改为对应的端口。

 

redis-server /usr/local/redis-cluster/redis6379/redis6379.conf

redis-server /usr/local/redis-cluster/redis6380/redis6380.conf

 

redis-server /usr/local/redis-cluster/redis6381/redis6381.conf

redis-server /usr/local/redis-cluster/redis6382/redis6382.conf

 

 

redis-server /usr/local/redis-cluster/redis6383/redis6383.conf

redis-server /usr/local/redis-cluster/redis6384/redis6384.conf

 

 

二、集群建立

 

例子:create建立集群

 

 create命令可选replicas参数,replicas表示须要有几个slave。

 

 在3.0每一个有一个slave的集群的建立命令以下:

 

因为redis5.0版本与3.0差别很大

 

官方以下:

 

 

 

有两种方法:

方法一:

redis-cli --cluster create 172.16.10.21:6379 172.16.10.23:6381 172.16.10.25:6383 172.16.10.22:6380 172.16.10.24:6382 172.16.10.26:6384 --cluster-replicas 1

 

 

方法二:

 

/usr/local/bin/redis-trib.rb create --replicas 1 172.16.10.21:6379 172.16.10.23:6381 172.16.10.25:6383 172.16.10.22:6380 172.16.10.24:6382 172.16.10.26:6384

 

 

因为个人redis-trib.rb不可用。用的第一种方法。

 

三、查看集群信息

redis-cli -h 172.16.10.21 -p 6379 –c

cluster nodes

查看节点信息:

 

 

 

 

a1 这个槽位在10.25这台redis上。

 

查看集群信息

cluster info

 

 

查看集群完整性:

redis-cli --cluster check 172.16.10.21:6379

 

能够看出来,三个master 中的slots正好分配完16384个槽

相关文章
相关标签/搜索