Redis 之 集群搭建(连接带加密认证)
目录
(一)Redis各节点安装
(二)安装Ruby环境
(三)安装RubyGems
(四)使用redis-trib.rb创建集群
(五)集群测试
(六)常见问题
序言
redis-3.2.9.tar.gz(*) http://www.redis.cn/download.html
ruby-2.3.1.tar.gz(*) http://www.ruby-lang.org/en/downloads/
rubygems-2.7.4.tgz(*) https://rubygems.org/pages/download
openssl-1.0.2n.tar.gz https://www.openssl.org/source/
redis-3.2.1.gem(*) https://rubygems.org/gems/redis/
下载上述软件包并上传服务器,开始按如下步骤进入安装。
(一)Redis各节点安装
1.解压redis-3.2.9.tar.gz,编译安装;
cd ~/common
tar -zxvf redis-3.2.9.tar.gz
mv redis-3.2.9 redis-cluster
cd redis-cluster
make
make install --prefix=~/common/redis-cluster
2.修改Redis配置文件;
依次复制出6个节点的配置文件,分别进行编辑配置,操作如下:
mkdir conf
cp redis.conf conf/6001.conf
...
cp redis.conf conf/6006.conf
cd conf
vi 6001.conf
bind 127.0.0.1
port 6001 #指定端口,6001-6006
daemonize yes #后台运行
pidfile /root/common/redis-cluster/pid/redis_6001.pid
logfile "/root/common/redis-cluster/logs/redis_6001.log"
#masterauth 123456
#requirepass 123456 #开启加密认证
cluster-enabled yes #开启集群模式
cluster-node-timeout 15000
cluster-config-file nodes-6001.conf
注:节点加入集群前不可开启加密认证,否则会出现连接不上的现象。
正确做法:先注释该配置启动所有节点,待集群创建完毕后,修改配置重启各个节点即可,或参考本文结尾说明。
3.编写集群启动脚本;
cluster-run.sh
#!/bin/bash
./src/redis-server conf/6001.conf
./src/redis-server conf/6002.conf
./src/redis-server conf/6003.conf
./src/redis-server conf/6004.conf
./src/redis-server conf/6005.conf
./src/redis-server conf/6006.conf
(二)安装Ruby环境
解压ruby-2.3.1.tar.gz,编译安装;
cd ~/common
tar -zxvf ruby-2.3.1.tar.gz
mv ruby-2.3.1 ruby
cd ruby
./configure --prefix=~/common/ruby
make
make install
(三)安装RubyGems
gem install --local redis-3.2.1.gem
[root@localhost ~]# gem install --local redis-3.2.1.gem
Successfully installed redis-3.2.1
Parsing documentation for redis-3.2.1
Installing ri documentation for redis-3.2.1
Done installing documentation for redis after 0 seconds
1 gem installed
(四)使用redis-trib.rb创建集群
./redis-trib.rb create --replicas 1 127.0.0.1:6001 127.0.0.1:6002 127.0.0.1:6003 127.0.0.1:6004 127.0.0.1:6005 127.0.0.1:6006
(使用create命令 --replicas 1 参数表示为每个主节点创建一个从节点,其他参数是实例的地址集合。)
(五)集群测试
略。
(六)常见问题
(一)关于zlib包的报错
[root@localhost zlib]# gem install redis-3.2.1.gem
ERROR: Loading command: install (LoadError)
cannot load such file -- zlib
ERROR: While executing gem ... (NoMethodError)
undefined method `invoke_with_build_args' for nil:NilClass
解决方案:
进入ruby源码文件夹
安装ruby自身提供的zlib包
cd ext/zlib
ruby ./extconf.rb
make
make install
(二)关于openssl的报错
[root@localhost src]# gem install redis-3.2.1.gem
ERROR: While executing gem ... (Gem::Exception)
Unable to require openssl, install OpenSSL and rebuild ruby (preferred) or use non-HTTPS sources
解决方案:
1.安装openssl
tar -xzvf openssl-1.0.2n.tar.gz
mv openssl-1.0.2n/ /usr/local/src/
cd /usr/local/src/openssl-1.0.2n
./config -fPIC --prefix=/usr/local/openssl enable-shared
./config -t
make && make install
cd ext/openssl
ruby extconf.rb --with-openssl-dir=/usr/local/openssl
ln -s ~/common/ruby/include /
make
make install
(三)关于RubyGems的报错
[kd_dev@s2mkf4 src]$ ./redis-trib.rb create --replicas 1 127.0.0.1:6001 127.0.0.1:6002 127.0.0.1:6003 127.0.0.1:6004 127.0.0.1:6005 127.0.0.1:6006
/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 `'
解决方案:
安装RubyGems
gem install --local redis-3.2.1.gem
(四)其它问题
[kd_dev@s2mkf4 src]$ ./redis-trib.rb create --replicas 1 192.168.156.111:7000 192.168.156.111:7001 192.168.156.112:7000 192.168.156.112:7001 192.168.156.113:7000 192.168.156.113:7001
>>> Creating cluster
[ERR] Node 192.168.156.112:7000 is not empty. Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0.
【当前节点处于集群状态,需解除后再重新创建集群 命令:cluster reset】
[kd_dev@s2mkf4 src]$ ./redis-trib.rb create --replicas 1 192.168.156.111:7000 192.168.156.111:7001 192.168.156.112:7000 192.168.156.112:7001 192.168.156.113:7000 192.168.156.113:7001
>>> Creating cluster
[ERR] Sorry, can't connect to node 192.168.156.113:7000
【当前节点处于加密模式 “requirepass 123456”,需注掉配置后重启,方可加入到集群中,之后再做加密】
集群密码设置小结
方式一:修改所有redis集群中的redis.conf文件加入:
masterauth 123456
requirepass 123456
说明:这种方式需要重新启动各节点
方式二:进入各个实例进行设置:
./redis-cli -c -h 192.168.156.113 -p 7000
config set masterauth 123456
config set requirepass 123456
auth 123456
config rewrite
之后分别使用./redis-cli -c -h 192.168.156.113 -p 7001...命令给各节点设置上密码
注意:各个节点密码都必须一致,否则Redirected就会失败, 推荐这种方式,这种方式会把密码写入到redis.conf里面去,且不用重启
设置密码之后如果需要使用redis-trib.rb的各种命令
如:redis-trib.rb check 127.0.0.1:7000,则会报错ERR] Sorry, can’t connect to node 127.0.0.1:7000
解决办法:
修改gem的redis工具下的一个文件client.rb,对应内容如下:
:password => "123456", #指定redis登录密码
(一般默认路径/usr/lib/ruby/gems/1.8/gems/redis-3.2.1/lib/redis/client.rb,另可通过命令find / -name client.rb进行全盘搜索)