Redis Cluster集群的搭建

Python011

Redis Cluster集群的搭建,第1张

搭建集群工作需要以下三个步骤:

1)准备节点

2)节点握手。

3)分配槽。

Redis集群一般由多个节点组成,节点数量至少为6个才能保证组成完整高可用的集群。每个节点需要开启配置cluster-enabled yes,让Redis运行在集群模式下。建议为集群内所有节点统一目录,一般划分三个目录:conf、data、log,分别存放配置、数据和日志相关文件。把6个节点配置统一放在conf目录下,集群相关配置如下:

其他配置和单机模式一致即可,配置文件命名规则redis-{port}.conf,准备好配置后启动所有节点。

Cluster集群启动过程如下图:

每个节点目前只能识别出自己的节点信息,可以执行cluster nodes命令获取集群节点状

态。

节点握手是指一批运行在集群模式下的节点通过Gossip协议彼此通信,达到感知对方的过程。节点握手是集群彼此通信的第一步,由客户端发起命令:cluster meet{ip}{port}

cluster meet命令是一个异步命令,执行之后立刻返回。内部发起与目标节点进行握手通信,握手通信过程:

1)节点6379本地创建6380节点信息对象,并发送meet消息。

2)节点6380接受到meet消息后,保存6379节点信息并回复pong消息。

3)之后节点6379和6380彼此定期通过ping/pong消息进行正常的节点通

信。

分别执行meet命令让其他节点加入到集群中,

最后执行cluster nodes命令确认6个节点都彼此感知并组成集群。

节点建立握手之后集群还不能正常工作,这时集群处于下线状态,所有的数据读写都被禁止,通过cluster info命令可以获取集群当前状态。

Redis集群把所有的数据映射到16384个槽中。每个key会映射为一个固定的槽,只有当节点分配了槽,才能响应和这些槽关联的键命令。通过cluster addslots命令为节点分配槽。这里利用bash特性批量设置槽(slots),命令如下:

执行cluster info查看集群状态,如下所示:

当前集群状态是OK,集群进入在线状态。所有的槽都已经分配给节点,执行cluster nodes命令可以看到节点和槽的分配关系:

集群模式下,Reids节点角色分为主节点和从节点。首次启动的节点和被分配槽的节点都是主节点,从节点负责复制主节点槽信息和相关的数据。使用cluster replicate{nodeId}命令让一个节点成为从节点。其中命令执行必须在对应的从节点上执行,nodeId是要复制主节点的节点ID,命令如下:

Redis集群模式下的主从复制使用了之前介绍的Redis复制流程,依然支持全量和部分复制。复制(replication)完成后,整个集群的结构如图:

集群搭建需要很多步骤当集群节点众多时,必然会加大搭建集群的复杂度和运维成本。因此Redis官方提供了redis-trib.rb工具方便我们快速搭建集群。

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

1、安装Ruby:

2、安装rubygem redis依赖:

3、安装redis-trib.rb:

4、安装完Ruby环境后,执行redis-trib.rb命令确认环境是否正确,输出如

下:

首先我们跟之前内容一样准备好节点配置并启动:

启动好6个节点之后,使用redis-trib.rb create命令完成节点握手和槽分配过程,命令如下:

--replicas参数指定集群中每个主节点配备几个从节点,这里设置为1。

如果部署节点使用不同的IP地址,redis-trib.rb会尽可能保证主从节点不分配在同一机器下,因此会重新排序节点列表顺序。节点列表顺序用于确定主从角色,先主节点之后是从节点。创建过程中首先会给出主从节点角色分配的计划,当我们同意这份计划之后输入yes,redis-trib.rb开始执行节点握手和槽分配操作。

集群完整性指所有的槽都分配到存活的主节点上,只要16384个槽中有一个没有分配给节点则表示集群不完整。可以使用redis-trib.rb check命令检测之前创建的集群是否成功,check命令只需要给出集群中任意一个节点地址就可以完成整个集群的检查工作,命令如下:

安装redis集群需要版本号在3.0以上redis-cluster安装前需要安装ruby环境搭建集群需要使用到官方提供的ruby脚本。需要安装ruby的环境。yum-yinstallrubyyum-yinstallrubygemsredis集群管理工具redis-trib.rb[root@bogon~]#cdredis-3.0.0[[email protected]]#cdsrc[root@bogonsrc]#ll*.rb-rwxrwxr-x.1rootroot48141Apr107:01redis-trib.rb脚本需要的ruby包:redis-3.0.0.gem安装geminstallredis-3.0.0.gem[root@bogon~]#geminstallredis-3.0.0.gemSuccessfullyinstalledredis-3.0.01geminstalledInstallingridocumentationforredis-3.0.0InstallingRDocdocumentationforredis-3.0.0集群的搭建需求,创建6台redis服务器,虚拟机模拟端口号为7001-7006第二步:修改redis的配置文件1、修改端口号第三步:把创建集群的ruby脚本复制到redis-cluster目录下。第四步:启动6个redis实例第五步:创建集群。

一.服务器设置准备

1. 将6379端口在防火墙看开启

[root@redis1 ~]#vi /etc/sysconfig/iptables

-A INPUT -m state --state NEW -m tcp -p tcp --dport 6379 -j ACCEPT

注:必须加在 REJECT 前面。

2.修改Selinux参数

[root@redis1 ~]#vi /etc/selinux/config

SELINUX=disabled

注:分别在其它几个节点上同样配置防火墙和 SELINUX。

二.安装Redis

1.安装系统组件

安装gcc、tcl

yum install –y gcc-c++

yum install –y tcl

2.安装redis

2.1.解压 Redis 到/usr/local目录下

[root@redis1 ~]# tar -zxvf /root/software/redis-3.2.6.tar.gz -C /usr/local/

2.2.在解压后的目录中进行 make 和 make test

[root@redis1 ~]# cd /usr/local/redis-3.2.6

[root@redis1 redis-3.2.6]# make

[root@redis1 redis-3.2.6]# make test

注:要检查 make 和 make test 的结果是否都正确,如果报错,针对性检查并安装系统缺少的组件。

2.3. 复制 redis-server 和 redis-cli 到/usr/local/bin 目录下:

[root@redis1 redis-3.2.6]# cd src

[root@redis1 src]# cp redis-server /usr/local/bin/

[root@redis1 src]# cp redis-cli /usr/local/bin/

2.4验证 Redis 安装是否成功:

[root@redis1 ~]# redis-server

[root@redis1 ~]# redis-cli

注:安装其它 5 台服务器

三.配置集群模式

1.配置 redis.conf

1.1 配置 redis.conf

[root@redis1 ~]# mkdir /etc/redis

[root@redis1 ~]# cd /etc/redis

[root@redis ~]# vi redis.conf

port 6379

daemonize yes

cluster-enabled yes

cluster-config-file /etc/redis/nodes.conf

cluster-node-timeout 5000

appendonly yes

requirepass Ab123456

注 1:cluster-node-timeout 是集群中各节点相互通讯时,允许“失联”的最大毫秒数,本演示

中配置的为 5 秒,如果超过 5 秒某个节点没有向其它节点汇报成功,认为该节点挂了。

注 2:requirepass 是 Redis 访问密码,为了安全起见,该参数建议必须配置,从但客户端

Jedis 版本必须使用 2.8.x 以上的版本,否则需要通过扩展 JedisCluster 来实现对密码访问的

支持。此外几个 Redis 节点的密码应该设置为相同的。

注 3:分别在其它几个节点上创建与上面相同的 redis.conf 文件,内容也相同。

注 4:重启/重建 Redis 集群时,必须删除去/etc/redis/nodes.conf 文件。

1.2以次启动所有节点

[root@redis1 ~]# redis-server /etc/redis/redis.conf

[root@redis2 ~]# redis-server /etc/redis/redis.conf

[root@redis3 ~]# redis-server /etc/redis/redis.conf

[root@redis4 ~]# redis-server /etc/redis/redis.conf

[root@redis5 ~]# redis-server /etc/redis/redis.conf

[root@redis6 ~]# redis-server /etc/redis/redis.conf

2.安装 Redis 集群所需的 Ruby 工具

2.1安装 Ruby 工具:

Redis 集群需要借助其它工具将相关节点加入到 Cluster 中,而这个工具是由 Redis 提供

一个名为 redis-trib.rb 的 ruby 脚本,否则接下来创建 cluster 会失败。

[root@redis1 ~]# cd /usr/local/redis-3.2.6/src

[root@redis1 src]# yum install –y ruby

[root@redis1 src]# yum install -y rubygems

[root@redis1 src]# gem install redis --version 3.0.0

[root@redis1 src]# gem list

2.2 设置 Ruby 连接 Redis 的密码:

[root@redis1 ~]# vi /usr/lib/ruby/gems/1.8/gems/redis-3.0.0/lib/redis/client.rb

:password =>"Ab123456"

注:分别在其它几个节点上用同样的方式安装好 Ruby 工具

3 利用redis-trib.rb 创建 Redis集群

3. 1. 在 src 目录下运行以下脚本:

[root@redis1 ~]# cd /usr/local/redis-3.2.6/src

[root@redis1 src]# ./redis-trib.rb create --replicas 1 10.50.130.101:6379 10.50.130.102:6379

10.50.130.103:6379 10.50.130.104:6379 10.50.130.105:6379 10.50.130.106:6379

注 1:只需在其中某个个节点执行以上脚本(本例在第一个节点执行)。

注 2:利用 redis-trib 创建 Cluster,只需要操作一次即可,假设系统关机、重启,把所有的

节点全部关闭之后,下次重启后,即自动进入 Cluster 模式,不用现次执行 redis-trib.rb cteate

命令。

3.2查看 Cluster 进程:

[root@redis1 ~]# ps -ef|grep redis

[root@redis2 ~]# ps -ef|grep redis

[root@redis3 ~]# ps -ef|grep redis

[root@redis4 ~]# ps -ef|grep redis

[root@redis5 ~]# ps -ef|grep redis

[root@redis6 ~]# ps -ef|grep redis

3.3 查看节点属性(Master/Slave)

[root@redis1 ~]# cd /usr/local/redis-3.2.6/src

[root@redis1 src]# ./redis-trib.rb check 10.50.130.101:6379

[root@redis1 src]# ./redis-trib.rb check 10.50.130.102:6379

[root@redis1 src]# ./redis-trib.rb check 10.50.130.103:6379

[root@redis1 src]# ./redis-trib.rb check 10.50.130.104:6379

[root@redis1 src]# ./redis-trib.rb check 10.50.130.105:6379

[root@redis1 src]# ./redis-trib.rb check 10.50.130.106:6379

3.4查看节点/集群信息

redis-cli 客户端登录到任一个节点,查看:

4.Jedis 测试 Redis 集群