linux Redis 5.0集群搭建

前端之家收集整理的这篇文章主要介绍了linux Redis 5.0集群搭建前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

@H_5020@文档结构如下:


@H
502_0@

<img src="/res/2019/01-18/19/a38e7c47d1422b8119a0e80356deffdd.png" alt="">

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

@H_5020@官方网站:


@H
502_0@https://redis.io/topics/cluster-tutorial

Redis数据分区

@H_502_0@Redis cluster 采用虚拟槽分区,所有的键根据哈希函数映射到0~16383整数槽内,计算公式:

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

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

@H_5020@节点A包含从0到5500的散列槽。


@H
5020@节点B包含从5501到11000的散列槽。


@H
5020@节点C包含从11001到16383的散列槽。


@H
502_0@ 

<img src="/res/2019/01-18/19/13e3ba1b92e0e3dee414e5fbddc85d4f.png" alt="">

@H_502_0@由于我的环境只有三台服务器master 和slave为同一台,一台服务器,两张网卡。

Redis Cluster主从模型

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

@H_502_0@在具有节点A,B,C的示例群集中,如果节点B发生故障,则群集无法继续,因为我们不再能够在5501-11000范围内提供服务哈希位置的方法

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

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

@H_502_0@但请注意,如果节点B和B1同时发生故障,Redis Cluster将无法继续运行。

@H_502_0@ 

Redis群集配置参数

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

cluster-enabled:如果是,则在特定Redis实例中启用Redis群集支持。否则,实例像往常一样作为独立实例启动。

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

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

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

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

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

@H_502_0@a)   关闭防火墙


@H_502_0@vi /etc/selinux/config

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


@H
5020@# SELINUX= can take one of these three values:


@H
5020@#     enforcing - SELinux security policy is enforced.


@H
5020@#     permissive - SELinux prints warnings instead of enforcing.


@H
5020@#     disabled - No SELinux policy is loaded.


@H
5020@SELINUX=disabled


@H
5020@# SELINUXTYPE= can take one of these two values:


@H
5020@#     targeted - Targeted processes are protected,


@H
5020@#     mls - Multi Level Security protection.


@H
502_0@SELINUXTYPE=targeted

@H_502_0@setenforce 0

@H_5020@service iptables stop


@H
502_0@chkconfig iptables off

@H_5020@b)   三台服务器配置好yum


@H
5020@mount /dev/sr0 /mnt/


@H
5020@cd /etc/yum.repos.d/


@H
5020@mv redhat.repo redhat.repo.bak


@H
502_0@mv rhel-source.repo rhel-source.repo.bak

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


@H
5020@[rhel-debuginfo]


@H
5020@name=Red Hat Enterprise Linux $releasever - $basearch - Debug


@H
5020@baseurl=file:///mnt/


@H
5020@enabled=1 


@H
502_0@gpgcheck=0  

@H_5020@安装yum:


@H
5020@yum -y install make gcc*  rubygems 


@H
502_0@由于需要安装ruby环境,所以采用yum安装

搭建集群

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

1、环境准备

@H_502_0@下载ruby(5.0可以不用ruby):

@H_502_0@最新为,地址:

@H_
502_0@由于yum 安装的版本不符合要求

@H_502_0@我单独下载的

@H_502_0@tar -zxvf ruby-2.6.0.tar.gz

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

@H_502_0@make

@H_502_0@make install

@H_502_0@cd /usr/local/ruby/

@H_502_0@cp bin/ruby /usr/local/bin/

@H_502_0@cp bin/gem /usr/local/bin/

@H_502_0@ 

<img src="/res/2019/01-18/19/7dddbd954fc83ccf308cbfdf2cc4a153.png" alt="">

@H_502_0@安装rubygem redis 依赖:

@H_5020@最新版本为4.1


@H
5020@<a href="https://rubygems.org/gems/redis/versions/4.1.0"&gt;https://rubygems.org/gems/redis/versions/4.1.0


@H
5020@cd /soft/


@H
5020@/usr/local/bin/gem install -l redis-4.1.0.gem


@H
502_0@ 

<img src="/res/2019/01-18/19/966292411ba99c0062009219524b7e9c.png" alt="">

@H_5020@/usr/local/bin/gem list redis gem


@H
502_0@ 

<img src="/res/2019/01-18/19/cd5f3c52452152039b86da9ca1b69bba.png" alt="">

@H_5020@安装redis5.0 单机


@H
5020@/soft/redis-5.0.0


@H
5020@make


@H
5020@make install


@H
5020@cd /soft/redis-5.0.0/src/


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


@H
502_0@cp redis-cli redis-server ../redis.conf /usr/local/redis-cluster/redis6380

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


@H
502_0@cp redis-cli redis-server ../redis.conf /usr/local/redis-cluster/redis6382

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


@H
502_0@cp redis-cli redis-server ../redis.conf /usr/local/redis-cluster/redis6384

@H_502_0@安装redis-trib.rb

@H_5020@cd /soft/redis-5.0.0/src


@H
5020@./redis-trib.rb –help


@H
502_0@ 

<img src="/res/2019/01-18/19/258a30f54bba15e772822369095ae50c.png" alt="">

@H_5020@5.0 redis-cli --cluster


@H
502_0@ 

<img src="/res/2019/01-18/19/a15cd63a1900d2a274550101f9588706.png" alt="">

@H_502_0@redis-cli --cluster help具有以下功能

@H_5020@1、 create :创建集群


@H
5020@2、 check :检查集群


@H
5020@3、 info :查看集群信息


@H
5020@4、 fix :修复集群


@H
5020@5、 reshard :在线迁移slot


@H
502_0@6、 rebalance :平衡集群节点slot数量


@H_5020@7、 add-node :将新节点加入集群


@H
502_0@8、 del-node :从集群中删除节点


@H_5020@9、 set-timeout :设置集群节点间心跳连接的超时时间


@H
5020@10、 call :在集群全部节点上执行命令


@H
502_0@11、 import :将外部redis数据导入集群

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

@H_502_0@准备目录:

@H_5020@mkdir –p /redis6379


@H
5020@mkdir –p /redis6380


@H
5020@mkdir -p /usr/local/redis-cluster/redis6379


@H
5020@mkdir -p /usr/local/redis-cluster/redis6380


@H
502_0@cp

@H_5020@mkdir –p /redis6381


@H
5020@mkdir –p /redis6382


@H
5020@mkdir -p /usr/local/redis-cluster/redis6381


@H
502_0@mkdir -p /usr/local/redis-cluster/redis6382

@H_5020@mkdir –p /redis6383


@H
5020@mkdir –p /redis6384


@H
5020@mkdir -p /usr/local/redis-cluster/redis6383


@H
502_0@mkdir -p /usr/local/redis-cluster/redis6384

@H_502_0@准备redis 集群配置文件


@H_502_0@redis6379.cnf

@H_5020@save 900 1


@H
5020@bind 0.0.0.0    --运行所有IP


@H
5020@daemonize yes


@H
5020@port 6379


@H
5020@loglevel warning


@H
5020@timeout 60


@H
5020@logfile "6379.log"


@H
5020@dbfilename dump6379.rdb


@H
502_0@pidfile /var/run/redis6379.pid


@H
5020@maxmemory-policy volatile-ttl


@H
5020@auto-aof-rewrite-min-size 10GB


@H
5020@cluster-enabled yes


@H
5020@cluster-node-timeout 15000


@H
5020@cluster-config-file nodes-6379.conf


@H
502_0@protected-mode no   --让客户端都可以连接redis

@H_502_0@其他节点按照6379进行相应的修改成对应的端口。

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


@H
5020@redis-server /usr/local/redis-cluster/redis6380/redis6380.conf


@H
502_0@

<img src="/res/2019/01-18/19/53604a425f0540f98878b1a59aaad565.png" alt="">

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


@H
5020@redis-server /usr/local/redis-cluster/redis6382/redis6382.conf


@H
502_0@ 

<img src="/res/2019/01-18/19/24eabe1f3e042f948445c15357987e85.png" alt="">

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


@H
5020@redis-server /usr/local/redis-cluster/redis6384/redis6384.conf


@H
502_0@ 

<img src="/res/2019/01-18/19/92f92dbf35d9ff4c9567df3e00354f76.png" alt="">

2、集群创建

@H_502_0@例子:create创建集群

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

@H_502_0@ 在3.0每个有一个slave的集群的创建命令如下:

@H_502_0@由于redis5.0版本与3.0差异很大

@H_502_0@官方如下:

@H_502_0@

<img src="/res/2019/01-18/19/43b407a4798b89f1913528ad0b1d0191.png" alt="" width="668" height="449">

@H_502_0@有两种方法


@H_502_0@方法一:


@H_5020@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


@H
502_0@ 

<img src="/res/2019/01-18/19/622966e9ccb1c0d4e0330ceebe082445.png" alt="">


@H_502_0@

<img src="/res/2019/01-18/19/faddae092108acceb24d5f4279139fe7.png" alt="">

@H_502_0@方法二:

@H_5020@/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


@H
502_0@ 

<img src="/res/2019/01-18/19/43c9d4ed195e407aeedb140d8cb4da2c.png" alt="">

@H_502_0@由于我的redis-trib.rb不可用。用的第一种方法

3、查看集群信息

@H_502_0@redis-cli -h 172.16.10.21 -p 6379 –c

@H_502_0@cluster nodes

@H_502_0@查看节点信息:

@H_502_0@ 

@H_502_0@

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

@H_5020@查看集群信息


@H
5020@cluster info


@H
502_0@ 

<img src="/res/2019/01-18/19/d816337fccd23a3e2c5f744d3dddf758.png" alt="" width="466" height="214">

@H_5020@查看集群完整性:


@H
5020@redis-cli --cluster check 172.16.10.21:6379


@H
502_0@ 

<img src="/res/2019/01-18/19/22f83cc4d7983fb1a361c44eb37e26da.png" alt="" width="541" height="361">


@H_502_0@可以看出来,三个master 中的slots正好分配完16384个槽

猜你在找的Redis相关文章