redis-cluster集群搭建
此内容有部分转载,如有冲突,请联系本人,我会删除的。
搭建:
这里我准备了6个节点,就是6台虚拟机来测试。
IP:
192.168.200.31 192.168.200.32 192.168.200.33
192.168.200.34 192.168.200.35 192.168.200.36
首先就是安装redis,支持cluster的redis只有3.0+版本。
正常的修改配置文件,相比单机版多了几条:
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
以上这几条基本可以看做是开启cluster功能。(但是切记,配置了这个功能以后,不要指定主从的IP具体那一条看下面图片)
装完redis以后正常启动
redis-server /usr/local/redis/redis.conf
将此命令复制
cp redis-trib.rb /usr/local/redis/bin/
ln -s /usr/local/redis/bin/* /usr/local/bin/
然后需要安装几个依赖包
yum -y install ruby ruby-devel rubygems rpm-build
如果6.5的镜像不够,可以配置公网YUM源,我就是这么装的,一个阿里的一个网易的
然后就算你是公网yum装完了也有可能遇到ruby报错,看下面这个ERROR:
如果报这个错,请按照这个地址上的方法操作,贼鸡详细,贼鸡好用:
http://blog.csdn.net/fengye_yulu/article/details/77628094
我自己也给贴出来
在执行gem install redis时
提示:
gem install redis
ERROR: Error installing redis:
redis requires Ruby version >= 2.2.2.
查了查资料,CentOS7 yum库中ruby的版本支持到 2.0.0,可gem 安装redis需要最低是2.2.2,自己编译的ruby源码,再执行还是报错…最后google结合几篇文章解决了:
采用rvm来更新ruby:
1.安装RVM:
gpg2 --keyserver hkp://keys.gnupg.net --recv-keys D39DC0E3
curl -L get.rvm.io | bash -s stable
find / -name rvm -print
/usr/local/rvm
/usr/local/rvm/src/rvm
/usr/local/rvm/src/rvm/bin/rvm
/usr/local/rvm/src/rvm/lib/rvm
/usr/local/rvm/src/rvm/scripts/rvm
/usr/local/rvm/bin/rvm
/usr/local/rvm/lib/rvm
/usr/local/rvm/scripts/rvm
source /usr/local/rvm/scripts/rvm
2.查看rvm库中已知的ruby版本
rvm list known
MRI Rubies
[ruby-]1.8.6[-p420]
[ruby-]1.8.7[-head] # security released on head
[ruby-]1.9.1[-p431]
[ruby-]1.9.2[-p330]
[ruby-]1.9.3[-p551]
[ruby-]2.0.0[-p648]
[ruby-]2.1[.10]
[ruby-]2.2[.6]
[ruby-]2.3[.3]
[ruby-]2.4[.0]
ruby-head
….
3.安装一个ruby版本
rvm install 2.3.3
No checksum for downloaded archive, recording checksum in user configuration.
ruby-2.3.3 - #extracting rubygems-2.6.12….
ruby-2.3.3 - #removing old rubygems………
ruby-2.3.3 - #installing rubygems-2.6.12…………………….
ruby-2.3.3 - #gemset created /usr/local/rvm/gems/[email protected]
ruby-2.3.3 - #importing gemset /usr/local/rvm/gemsets/global.gems…………..|
ruby-2.3.3 - #generating global wrappers……..
ruby-2.3.3 - #gemset created /usr/local/rvm/gems/ruby-2.3.3
ruby-2.3.3 - #importing gemsetfile /usr/local/rvm/gemsets/default.gems evaluated to empty gem list
ruby-2.3.3 - #generating default wrappers……..
ruby-2.3.3 - #adjusting #shebangs for (gem irb erb ri rdoc testrb rake).
Install of ruby-2.3.3 - #complete
Ruby was built without documentation, to build it run: rvm docs generate-ri
4.使用一个ruby版本
rvm use 2.3.3
Using /usr/local/rvm/gems/ruby-2.3.3
[5].设置默认版本
rvm use 2.3.3 --default
Using /usr/local/rvm/gems/ruby-2.3.3
[6].卸载一个已知版本
rvm remove 2.0.0
查看ruby版本:
ruby --version
ruby 2.3.3p222 (2016-11-21 revision 56859) [x86_64-linux]
安装redis:
gem install redis
Fetching: redis-4.0.0.gem (100%)
Successfully installed redis-4.0.0
Parsing documentation for redis-4.0.0
Installing ri documentation for redis-4.0.0
Done installing documentation for redis after 1 seconds
1 gem installed
以上gem install redis 做完,就可以执行下面这个命令实现集群生成了,然后输出内容如下:
redis-trib.rb create --replicas 1 192.168.200.31:6379 192.168.200.32:6379 192.168.200.33:6379 192.168.200.34:6379 192.168.200.35:6379 192.168.200.36:6379
这里要注意了,如果你是很懒的,直接scp目录过去的,那小心nodes.conf这个文件,如果里面的nodesID相同,那就会出现
Waiting for the cluster to join.........................................................后面点个没完,连接不上的问题。
解决办法就是把每个节点上的那个文件删掉,然后重启redis就好了。
如果发生主从连接不上的状态,用info命令查看后发现master和slave无法正常连接,有可能是redis.conf配置文件里给设定了master密码,把密码那条删掉就好了。
记住-c参数。
最后,故障转移测试, 放宽来说cluster集群最高支持3个节点宕机,但这只是横向的,就是说,只能支持三个从节点,或者三个主节点宕机。如果有一主一从一起宕了,那就整个集群瘫痪。
有意思的是,cluster集群没有读写分离,所有主从都可以写入和读出。如果非要做也可以,进行二次开发。