欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Redis在Centos7下的集群安装

程序员文章站 2022-05-17 08:35:49
...

最近花了3天时间,终于把Redis的集群搭建起来了,高开低走,开始觉得还算容易,装到后面做集群的时候被Ruby环境坑了2天,不过最后还是搞定了,这里跟大家分享下。

Redis集群的安装分为3大步骤:

步骤一:Redis节点安装

步骤二:OSRuby环境搭建

步骤三:Redis集群配置



Redis节点安装步骤如下:

1,下载Redis文件

下载命令:

$wgethttp://download.redis.io/releases/redis-4.0.2.tar.gz

2,解压命令:

$gunzip redis-4.0.2.tar.gz

$tar -xvf redis-4.0.2.tar

3,编译下载文件

$cd redis-4.0.2

$make

与其它互联网组件略有区别的是执行文件不在bin目录下而是在src下,配置文件没在config下,在主目录下。

4Ruby命令

查看状态:$pe –ef | grep redis

启动redis:进入src$./redis-server

关闭redis:就是kill -9

5,使用Ruby

Src下有一个redis_cli执行文件,cli就是client的缩写,是自带的一个客户端程序,通过它可以操作redis

OK到目前为止单节点的Redis已经安装好了,非常的简单,我们下面开始为集群搭建更多的节点。Redis的集群跟ZookeeperElasticSearch的集群搭建方式不一样,zkes集群搭建极其方便,只需要配置下互相访问的地址就可以了,它们会自主推优。而Redis集群的搭建需要先把节点以单节点的方式都启动起来,再通过redis-trib.rb工具来给他们分配个自己的角色。(要了解Redis集群的原理请参考博文三张图秒懂Redis集群设计原理)。

 

我的集群节点如下

133物理机下安装3个节点

Master17000

Master27001

Master37002

135物理机下安装3个节点

Slaver17000,作为Master1的读

Slaver27001,作为Master2的读

Slaver37002,作为Master3的读

 

先来处理133上的3个结点:

修改redis.conf,如下:
Port 7000
Daemonize yes
cluster-enabled yes
cluster-config-file nodes-7000.conf
cluster-node-timeout 15000
appendonly yes

bind修改成节点自己的IP,关于这个配置项需要详细说明下:

这个需要配置提供服务的网卡,跟Eureka那种配置对端地址的思想完全相反,需要配置自己的IP,默认的127.0.0.1表示只可以通过内部网卡,对于一台物理机内部做集群没问题,但是跨IP跨物理机的时候远程的节点之间是无法访问的。所以我这里133要与135做集群,需要把133bind改成192.168.226.133135bind要改成192.168.226.135

redis主目录下创建个cluster目录,里面再创建700070017002三个子目录,将修改后的redis.conf分别copy到这3个子目录中,copy后修改下portcluster-config-filep(nodes-7000.conf这个文件我们只管配置就好,不需要我们去维护这个文件,由Redis自动维护)

修改完毕后启动这3Redis结点:
Redis在Centos7下的集群安装

 

同样的处理要在135上做一遍。

参考命令aaa@qq.com:/home/docker/redis/redis-4.0.2/cluster/7002/redis.conf .

记得也给135把这3个节点启动起来。

 

OK现在我们已经有了6个启动着的Redis节点,下面通过命令对他们按照我们的蓝图进行配置。

Redis在Centos7下的集群安装

配置使用的是srcredis-trib.rb这个管理工具,此工具需要Ruby环境运行,我们在使用它之前需要给环境搭建好ruby环境。

 

Ruby环境搭建

CentOS自带的Ruby版本是2.0.0,不能直接用于4.0.2版本的Redis,需要对Ruby先做升级,升级的思路就是在CentOS上下载RubySource,编译后安装。

1下载ruby source并安装

下载新版本的ruby

$wget https://ruby.taobao.org/mirrors/ruby/ruby-2.3.0.tar.gz

gunzip tar –xvf解压它

$./configure

$make

$make install

检查ruby是否是新版本

$ruby –v

 

2下载安装RubyGems

$yum install rubygems

3 gem安装redis

$gem install redis --version 4.0.1

Redis在Centos7下的集群安装

4检查安装结果

./redis-trib.rb

执行下会出现命令提示,标识ruby环境准备成功。

Ruby环境搭建浪费我好久,有很多坑在里面,在本文的最后把我遇到的各种错误以及解决办法给予了罗列。


Redis集群配置

集群配置方案一:交给Redis自动分配

配置的思路比较简单,直接上命令:

./redis-trib.rb create --replicas 1 192.168.226.133:7000 192.168.226.133:7001 192.168.226.133:7002 192.168.226.135:7000 192.168.226.135:7001 192.168.226.135:7002

Replicas 1表示要给master挂在1slaver,然后后面的参数就是简单暴力的把所有启动着的节点罗列上去就好。

Redis在Centos7下的集群安装

可以看得出Redis自动帮我们做Solt段和MasterSlaver的分配。

利用redis-cli随便登陆一个节点:

$ ./redis-cli -h 192.168.226.133 -p 7000

查看cluster信息:

Cluster info

Redis在Centos7下的集群安装

Cluster_state:集群目前的状态

Cluster_slots_assigned:多少个slot是被分配了的

Cluster_slots_ok:多少个slot是正常运行的

Cluster_know_nodes:集群总共有多少个节点构成

Cluster_size:集群有多少个master构成

Cluster_my_epoch:当前节点编号

Cluster_stats_message_XXXX:集群见通信的信息,例如sentreceiverd送出去多少二进制流

,返回多少二进制流等等。

Set一个值测试一下集群:

Redis在Centos7下的集群安装
 

这个错误的意思是:对testcase进行hash之后要落到9596 slot上,cluser nodes得到所有节点的信息发现9596应该在135:7000这个master上。

$ ./redis-cli -h 192.168.226.135 -p 7000

Redis在Centos7下的集群安装

切换到135:7000之后,成功!

我可以看到135:7000这个masterslaver133:7002,所以切换到这个slaver上再试下:

$ ./redis-cli -h 192.168.226.133 -p 7002

Redis在Centos7下的集群安装

直接执行get操作会提示重定向到master上,需要readonly命令告诉该节点我只是来读取数据的,再get就可以获得到master中的数据了。

 

集群配置方式二:自己手动指定关系

这次配置思路是先用1337000700170023master节点的集群(Redis集群至少需要3个节点),然后再将135700070017002分别做为slaver挂在133上。首先,要把方式一中的集群删掉:

Kill133135中的共6redis进程

删除133135中的个文件nodes-7000.confnodes-7001.confnodes-7002.confdump.rdbappendonly.aof

删掉了上面的配置文件和数据文件之后,每个redis节点又成了崭新的了,重启启动起来吧,开始配置。

./redis-trib.rb create 192.168.226.133:7000 192.168.226.133:7001 192.168.226.133:7002

这里去掉了replicas参数标识都是master节点

Redis在Centos7下的集群安装

利用redis-trib.rb add-node命令将1353个节点添加到集群中:

$ ./redis-trib.rb add-node192.168.226.135:7000 192.168.226.133:7000

$ ./redis-trib.rb add-node192.168.226.135:7001 192.168.226.133:7000

$ ./redis-trib.rb add-node192.168.226.135:7002 192.168.226.133:7000

这时检查下cluster nodes的状态,发现6个都是master,只不过有3个没有slot而已。

Redis在Centos7下的集群安装

利用cluster replicate master节点ID这个命令,将某节点作为slaver添加到某个master

Redis在Centos7下的集群安装

3135的节点都添加到对应的133节点上,验证方式同方案一。


 

集群安装时常见问题以及解决办法:

常见错误1

/usr/bin/env: ruby: No such file ordirectory

原因Ruby没安装

 

常见错误2

/usr/share/rubygems/rubygems/core_ext/kernel_require.rb:55:in `require': cannot load such file-- redis (LoadError)

        from/usr/share/rubygems/rubygems/core_ext/kernel_require.rb:55:in `require'

        from./redis-trib.rb:25:in `<main>'

原因RubyGems没安装

 

常见问题3

ERROR: Error installing redis:

        redisrequires Ruby version >= 2.2.2.

原因安装的Ruby版本太低了,centOS7自带的是2.0.0版本的ruby,需要安装新版本的ruby

 

常见问题4

ERROR: Loading command: update (LoadError)

        cannotload such file -- zlib

ERROR: While executing gem ... (NoMethodError)

undefined method`invoke_with_build_args' for nil:NilClass

解决方案:

进入到ruby源码文件夹中的ext/zlib

Redis在Centos7下的集群安装

$ruby ./extconf.rb

Redis在Centos7下的集群安装

如果这里make失败,

$yum search ‘zlib’

$yum install zlib-devel.x86_64

再回去执行extconf.rb

$make

$make install

 

常见问题5

Redis在Centos7下的集群安装

需要安装个openssl,下载地址:https://github.com/openssl/openssl/releases/tag/OpenSSL_1_0_2l

$./config -fPIC --prefix=/usr/local/opensslenable-shared

$./config -t

$make && make install

检查安装结果

$openssl version

再利用ruby源码装ext下的openssl

$ruby extconf.rb --with-openssl-include=/usr/local/openssl/include/ --with-openssl-lib=/usr/local/openssl/lib 

ruby源码目录下的include目录软链接到 / 目录下

$ln -s /home/docker/Templates/ruby-2.3.0/include/

还是在/ext/opensslmake

$make

$make install

 

常见问题6

在执行gem install redis的时候报这个错误

Redis在Centos7下的集群安装

源的问题,请求不到,只能自己再手动下载个扔上去。

https://rubygems.org/downloads/redis-4.0.1.gem

安装命令:

$gem install redis-4.0.1.gem

 

常见问题7

Redis在Centos7下的集群安装

恭喜你,你如果看到这个错误,说明你离最后的成功只差最后一步了,是因为redis这些节点没有启动,或者网络配置问题。

 

常见问题8

一直等待 Waiting for the cluster to join很久都没有反应

Redis在Centos7下的集群安装

原因:

redis集群不仅需要开通redis客户端连接的端口,而且需要开通集群总线端口

集群总线端口为redis客户端连接的端口 + 10000

redis端口为6379

则集群总线端口为16379

故,所有服务器的点需要开通redis的客户端连接端口和集群总线端口

firewall-cmd --zone=public--add-port=9300/tcp --permanent

firewall-cmd --zone=public--add-port=9300/udp --permanent

firewall-cmd --reload

相关标签: 集群 redis