redis cluster集群架构详解(十四)- redis cluster 安装

5.7 redis集群安装

5.7.1. redis集群配置

首先要安装好redis单机版,这里就不多说了。接下来我们先了解redis cluster的重要配置。

要想开启Redis Cluster模式,有几项配置是必须的。此外为了方便使用和后续的测试,我还额外做了一些配置:
配置项 配置 说明
监听端口 port 7001
绑定地址 bind 192.168.XXX.XXX 不能绑定到127.0.0.1或localhost,否则指导客户端重定向时会报”Connection refused”的错误。
开启Cluster cluster-enabled yes 如果想在特定的Redis实例中启用Redis集群支持就设置为yes。 否则,实例通常作为独立实例启动。
集群超时时间 cluster-node-timeout 15000 1、节点超时多久则认为它宕机了。
2、如果主节点master超过指定的时间不可达,它将由其从属slave进行故障切换。
3、 此参数控制Redis集群中的其他重要事项。
4、每个无法在指定时间内到达大多数主节点的节点将停止接受查询。
槽是否全覆盖 cluster-require-full-coverage no 默认是yes,只要有结点宕机导致16384个槽没全被覆盖,整个集群就全部停止服务,所以一定要改为no。 如果将其设置为yes,则默认情况下,如果key的空间的某个百分比未被任何节点覆盖,则集群停止接受写入。 如果该选项设置为no,则即使只处理关于keys子集的请求,群集仍将提供查询。
后台运行 daemonize yes
pidfile e/var/run/redis_7001.pid 设置redis的pid文件位置
dir ./data 设置持久化文件的存储位置(先创建data文件夹)
集群配置文件 cluster-config-file nodes-7001.conf 1、这个配置文件不是要我们去配的,而是Redis运行时保存配置的文件,所以我们也不可以修改这个文件。
2、Redis集群节点每次发生更改时自动保留集群配置(基本上为状态)的文件,以便能够 在启动时重新读取它。
3、该文件列出了集群中其他节点,它们的状态,持久变量等等信息。 由于某些消息的接收,通常会将此文件重写并刷新到磁盘上。
4、生成的文件在dir指定路径下
输出日志 logfile “./redis-7001.log”
启动故障切换的时间系数 cluster-replica-validity-factor 1、如果设置为0,无论主节点和从节点之间的链路断开连接的时间长短,从节点都将尝试故障切换为主节点。
2、 如果该值为正值,则计算最大断开时间作为节点超时值乘以此选项提供的系数,如果该节点是从节点,则在主链路断开连接的时间超过指定的超时值时,它不会尝试启动故障切换。 例如,如果节点超时设置为5秒,并且有效因子设置为10,则与主节点断开连接超过50秒的从节点将不会尝试对其主节点进行故障切换。
3、请注意,如果没有从服务器节点能够对其进行故障转移,则任何非零值都可能导致Redis集群在主服务器出现故障后不可用。 在这种情况下,只有原始主节点重新加入集群时,集群才会返回可用。
cluster-migration-barrier 主节点将保持连接的最小从节点数量,以便另一个从节点迁移到不受任何从节点覆盖的主节点。有关更多信息,请参阅本教程中有关副本迁移的相应部分。
配置好后,根据我们的集群规模,拷贝出来几份同样的配置文件,唯一不同的就是监听端口。

可以依次改为7001、7002… 因为Redis Cluster如果数据冗余是1的话,至少要3个Master和3个Slave,所以我们拷贝出6个实例的配置文件。

为了避免相互影响,为6个实例的配置文件建立独立的文件夹。
[root@cache01 redis]# mkdir -p redis-cluster-{7001..7006}  #创建独立的文件夹
[root@cache01 redis]# mkdir redis-cluster-{7001..7006}/data  #创建持久化文件的存储位置

5.7.2. redis-trib管理器

**注:redis 5.0以后,redis-trib工具的功能已经移入到redis-cli命令中,如果你使用的是redis5.0,就不需要安装ruby的环境。本小节内容可跳过**

Redis作者应该是个Ruby爱好者,Ruby客户端就是他开发的。这次集群的管理功能没有嵌入到Redis代码中,于是作者又顺手写了个叫做redis-trib的管理脚本。

redis-trib依赖Ruby和RubyGems,以及redis扩展。可以先用which命令查看是否已安装ruby和rubygems,用gem list –local查看本地是否已安装redis扩展。

最简便的方法就是用apt或yum包管理器安装RubyGems后执行gem install redis。如果网络或环境受限的话,可以手动安装RubyGems和redis扩展。



**安装ruby环境**

因为官方提供的创建集群的工具是用ruby写的,需要ruby2.2.2+版本支持,ruby安装需要指定openssl。

1、安装openssl

cd /soft
[root@cache01 soft]# wget http://www.openssl.org/source/openssl-1.0.2j.tar.gz
[root@cache01 soft]# tar -xzf openssl-1.0.2j.tar.gz
[root@cache01 soft]# cd openssl-1.0.2j
[root@cache01 soft]# ./config --prefix=/usr/local/openssl
[root@cache01 soft]# ./config -t
[root@cache01 soft]# make

2、安装openssl-devel

yum install -y openssl-devel 

3、安装ruby

$ yum remove ruby
$ wget https://cache.ruby-lang.org/pub/ruby/2.7/ruby-2.7.0.tar.gz
$ tar -zxvf ruby-2.7.0.tar.gz
$ cd ruby-2.7.0
$ ./configure --with-openssl-dir=/usr/local/openssl
$ make
$ make install
$ sudo ln -s /usr/local/bin/ruby /usr/bin/ruby

4、安装rubygems

$ wget https://rubygems.org/rubygems/rubygems-3.1.2.tgz
$ tar -zxvf rubygems-3.1.2.tgz
$ cd rubygems-3.1.2
$ ruby setup.rb

5、安装zlib

cd /soft/ruby-2.7.0/ext/zlib
$ vi Makefile
zlib.o: $(top_srcdir)/include/ruby.h
修改为:
zlib.o: ../../include/ruby.h
$ yum install zlib*
$ cd /soft/ruby-2.7.0/ext/zlib
$ ruby extconf.rb
$ make
$ make install

6、安装redis库

$ gem install redis
ERROR:  While executing gem ... (Gem::Exception)
    Unable to require openssl, install OpenSSL and rebuild ruby (preferred) or use non-HTTPS sources

这里可能无法安装,因为无法连接gem服务器:

需要手工下载并安装:

wget https://rubygems.org/downloads/redis-4.1.2.gem
gem install -l ./redis-4.1.2.gem

#安装完成后的目录为:

/usr/local/redis-5.0.5/src/redis-trib.rb

5.7.3. 启动集群服务

首先,启动我们配置好的6个Redis实例。我们创建相关目录,主文件夹是redis-cluster,在此文件夹下建立6个子文件夹,名称分别是:7001,7002,7003,7004,7005,7006 该目录以我们将在任何给定目录内运行的实例的端口号命名。
[root@cache01 redis]# mkdir -p redis-cluster-{7001..7006} && touch redis-cluster-{7001..7006}/redis.log
#启动redis 
[root@cache01 redis]# redis-server ./redis-cluster-7001/7001.conf 
[root@cache01 redis]# redis-server ./redis-cluster-7002/7002.conf 
[root@cache01 redis]# redis-server ./redis-cluster-7003/7003.conf 
[root@cache01 redis]# redis-server ./redis-cluster-7004/7004.conf 
[root@cache01 redis]# redis-server ./redis-cluster-7005/7005.conf 
[root@cache01 redis]# redis-server ./redis-cluster-7006/7006.conf 

此时6个实例还没有形成集群,现在用redis-trb.rb管理脚本建立起集群。

#启动集群
redis-cli --cluster create 192.168.75.187:7001 192.168.75.187:7002 192.168.75.187:7003 192.168.75.187:7004 192.168.75.187:7005 192.168.75.187:7006 --cluster-replicas 1

结果如下:

在这里插入图片描述

注意:redis5.0以后版本,推荐使用redis-cli,而 redis-trib.rb create --replicas…命令已经废弃,如下:

/usr/local/redis-5.0.5/src/redis-trib.rb  create  --replicas  1 192.168.75.187:7001 192.168.75.187:7002 192.168.75.187:7003 192.168.75.187:7004 192.168.75.187:7005 192.168.75.187:7006 

…已经废弃

  	1、redis-trib默认用前3个实例作为Master,后3个作为Slave。因为Redis基于Master-Slave做数据备份,而非像Cassandra或Hazelcast一样不区分结点角色;
  	
  	2、分配Slot的位置到各个结点;
  	
  	3、master与slave 自动复制并。

至此,集群就已经建立成功了!

redis还在utils/create-cluster下提供了一个create-cluster脚本,能够创建出一个集群,类似我们上面建立起的3主3从的集群。

5.7.4. 测试

我们连接到集群中的任意一个结点,启动redis-cli时要加-c选项,存取两个Key-Value感受一下Redis久违的集群功能。

在这里插入图片描述

仔细观察能够注意到,redis-cli根据指示,不断在7001和7002结点之前重定向跳转。如果启动时不加-c选项的话,就能看到以错误形式显示出的MOVED重定向消息。

如下:

在这里插入图片描述

发布了155 篇原创文章 · 获赞 23 · 访问量 11万+

猜你喜欢

转载自blog.csdn.net/makyan/article/details/104798811