redis cluster集群架构详解(十四)- redis cluster 安装
程序员文章站
2024-03-21 10:56:58
...
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个实例的配置文件建立独立的文件夹。
[aaa@qq.com redis]# mkdir -p redis-cluster-{7001..7006} #创建独立的文件夹
[aaa@qq.com 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
[aaa@qq.com soft]# wget http://www.openssl.org/source/openssl-1.0.2j.tar.gz
[aaa@qq.com soft]# tar -xzf openssl-1.0.2j.tar.gz
[aaa@qq.com soft]# cd openssl-1.0.2j
[aaa@qq.com soft]# ./config --prefix=/usr/local/openssl
[aaa@qq.com soft]# ./config -t
[aaa@qq.com 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 该目录以我们将在任何给定目录内运行的实例的端口号命名。
[aaa@qq.com redis]# mkdir -p redis-cluster-{7001..7006} && touch redis-cluster-{7001..7006}/redis.log
#启动redis
[aaa@qq.com redis]# redis-server ./redis-cluster-7001/7001.conf
[aaa@qq.com redis]# redis-server ./redis-cluster-7002/7002.conf
[aaa@qq.com redis]# redis-server ./redis-cluster-7003/7003.conf
[aaa@qq.com redis]# redis-server ./redis-cluster-7004/7004.conf
[aaa@qq.com redis]# redis-server ./redis-cluster-7005/7005.conf
[aaa@qq.com 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重定向消息。
如下:
推荐阅读
-
redis cluster集群架构详解(十五)- redis cluster常用命令
-
redis cluster集群架构详解(十八)-高可用性与主备切换原理
-
redis cluster集群架构详解(十四)- redis cluster 安装
-
redis cluster集群架构详解(十七)- redis cluster数据分布算法比较-hash算法、一致性hash算法、hash slot算法
-
Redis的Cluster集群搭建(几个文章网址) 博客分类: NoSql---Redis redisclusternosql分布式数据库
-
Docker快速构建Redis集群(cluster)
-
docker redis5.0 cluster集群搭建的实现
-
spring集成redis cluster详解
-
php成功操作redis cluster集群的实例教程
-
php成功操作redis cluster集群的实例教程