Linux下配置Redis集群

需要ruby rubygems zlib gcc ,这些东西确保centos7中都有

# yum -y install ruby ruby-devel rubygems rpm-build 

1、下载Redis文件

$wget http://download.redis.io/releases/redis-3.2.12.tar.gz

2,解压命令:

$tar -zxvf redis-3.2.12.tar.gz

3,编译下载文件

$cd redis-3.2.12

$make

$make install

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

4,

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

启动redis:src/server redis.conf 或者进入src下$./redis-server  redis.conf

关闭redis:就是kill -9 或者 src/redis-cli -h 192.168.37.129 -p 6379 shutdown

5.创建redis-cluster目录,再创建redis-7001,redis-7002,redis-7003,redis-7004,redis-7005,redis-7006节点目录,再把redis-conf分别复制到节点目录下分别修改节点下redis-conf文件,由于在一台机器上,因此每个实例应该有不同的端口;(网上查询说Redis至少3个节点/*3主3从*/才能支撑集群搭建,具体原因未知)

6.修改redis.conf文件,每个都修改成相应的信息
port  7000                //端口7000,7002,7003        
bind 192.168.37.129      //默认ip为127.0.0.1 需要改为其他节点机器可访问的ip 否则创建集群时无法访问对应的端口,无法创建集群
daemonize    yes         //redis后台运行
pidfile  ./redis_7000.pid          //pidfile文件对应7000,7001,7002
cluster-enabled  yes                   //开启集群  把注释#去掉
cluster-config-file  nodes_7000.conf   //集群的配置  配置文件首次启动自动生成 7000,7001,7002
cluster-node-timeout  15000                //请求超时  默认15秒,可自行设置
appendonly  yes                           //aof日志开启  有需要就开启,它会每次写操作都记录一条日志 

7.启动端口试试,跟第4步启动一样,只是注意修改路径

8. 下载安装接口

     $gem install redis --version 3.2.1(注意最好跟你安装的Redis大版本一致)

9,第一种方式,简单直接交给Redis自动分配 --replicas 1表示为集群的master节点创建1个副本。那么6个实例里,有三个master,有三个是slave。--replicas 2 意思为为每个 master 分配 2 各 slave,replicas表示需要有几个slave。不填写这个参数是可以创建成功的,

 redis-trib.rb create --replicas 1 10.93.84.53:7000 10.93.84.53:7001 10.93.84.53:7002 10.93.84.53:7003 10.93.84.53:7004 10.93.84.53:7005

(一般情况下Redis会把前三个当成主节点,后三个设置成从节点)

摘抄:首先,--replicas 1   1其实代表的是一个比例,就是主节点数/从节点数的比例。那么想一想,在创建集群的时候,哪些节点是主节点呢?哪些节点是从节点呢?答案是将按照命令中IP:PORT的顺序,先是3个主节点,然后是3个从节点。

其次,注意到图中slot的概念。slot对于Redis集群而言,就是一个存放数据的地方,就是一个槽。对于每一个Master而言,会存在一个slot的范围,而Slave则没有。在Redis集群中,依然是Master可以读、写,而Slave只读。数据的写入,实际上是分布的存储在slot中,这和以前1.X的主从模式是不一样的(主从模式下Master/Slave数据存储是完全一致的),因为Redis集群中3台Master的数据存储并不一样。

10.

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

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

Kill掉133和135中的共6个redis进程

删除133和135中的个文件nodes-7000.conf、nodes-7001.conf、nodes-7002.conf、dump.rdb、appendonly.aof

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

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

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

$ ./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而已。

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

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

11. 方式一验证

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

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

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

查看cluster信息:

Cluster info

Cluster_state:集群目前的状态

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

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

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

Cluster_size:集群有多少个master构成

Cluster_my_epoch:当前节点编号

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

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

Set一个值测试一下集群:

192.168.37.129:7000>set testkey redisTest

切换到从库192.168.37.129:7003>get testkey

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

 

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

常见错误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

 

$ruby ./extconf.rb

 

如果这里make失败,

$yum search ‘zlib’

$yum install zlib-devel.x86_64

再回去执行extconf.rb

$make

$make install

 

常见问题5:

 

需要安装个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/openssl下make

$make

$make install

 

常见问题6:

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

 

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

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

安装命令:

$gem install redis-4.0.1.gem

 

常见问题7:

 

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

 

常见问题8:

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

 

原因:

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

 

部分信息来自https://blog.csdn.net/yejingtao703/article/details/78520618

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值