需要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