linux Redis 5.0集群搭建
文档结构如下: Redis cluster 是redis的分布式解决方案,在3.0版本正式推出后,有效的解决了redis分布式方面的需求;当遇到单机内存,并发,流量等瓶颈是,可以采用cluster架构方案达到负载均衡的目的。 官方网站: https://redis.io/topics/cluster-tutorial 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在 cluster-enabled cluster-config-file cluster-node-timeout cluster-slave-validity-factor cluster-migration-barrier cluster-require-full-coverage 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依赖环境。 1、环境准备下载ruby(5.0可以不用ruby): 最新为,地址: 由于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 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具有以下功能: 1、 create :创建集群 2、 check :检查集群 3、 info :查看集群信息 4、 fix :修复集群 5、 reshard :在线迁移slot 6、 rebalance :平衡集群节点slot数量 7、 add-node :将新节点加入集群 8、 del-node :从集群中删除节点 9、 set-timeout :设置集群节点间心跳连接的超时时间 10、 call :在集群全部节点上执行命令 11、 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 ? 2、集群创建例子: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不可用。用的第一种方法。 3、查看集群信息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个槽 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |