您的位置:首页 > 数据库 > Redis

Ubuntu 14.04 Redis4.02 集群部署并记录遇到的问题以及对应解决方案

2018-01-05 10:21 766 查看
1.准备工作(下列部分命令都在root用户下操作,建议sudo或者root权限)
先建立一个/app文件夹
wget http://download.redis.io/releases/redis-4.0.2.tar.gz lstar xzf redis-4.0.2.tar.gzcd redis-4.0.2make
2.配置端口(我是配置了6个节点,看业务需求)
nodes-7000.conf
nodes-7001.conf
nodes-7002.conf
nodes-7003.conf
nodes-7004.conf
nodes-7005.conf
3.安装集群所需软件
/app目录下
wgethttps://cache.ruby-lang.org/pub/ruby/2.4/ruby-2.4.2.tar.gz
tar -xvf ruby-2.4.2.tar.gz
./configuremake && make install
测试启动/app/redis-4.0.2/src/redis-server(也可能启动但是看不出报错,若无报错直接跳到,启动节点步骤)
若报错:
/usr/local/lib/ruby/2.4.0/rubygems/core_ext/kernel_require.rb:55:in `require': cannot load such file -- redis (LoadError)
from /usr/local/lib/ruby/2.4.0/rubygems/core_ext/kernel_require.rb:55:in `require'
from ./redis-trib.rb:25:in `<main>'
解决:
那么说明Ruby的redis接口没有安装,可以通过sudo gem install redis 进行安装。
gem install redis
若报错:
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源码文件夹/app/ruby-2.4.2/ext/zlib
安装ruby自身提供的zlib包
ruby ./extconf.rb
若报错:
checking for deflateReset() in -lz... no
checking for deflateReset() in -llibz... no
checking for deflateReset() in -lzlib1... no
checking for deflateReset() in -lzlib... no
checking for deflateReset() in -lzdll... no
checking for deflateReset() in -lzlibwapi... no
解决:
在Ubuntu中使用新立得安装包zlib1g-dev,包zlib1g默认已经安装好了。
apt-get install zlib1g-dev
ruby ./extconf.rb成功
make
若报错:
make: *** No rule to make target `/include/ruby.h', needed by `zlib.o'. Stop.
解决:
新建/include
复制cp /app/ruby-2.4.2/include/ruby.h /include/
再执行make
make install
成功
再执行
gem install redis
若报错:
root@testzhiweiweb2:/app/ruby-2.4.2/ext/zlib# gem install redis
ERROR: While executing gem ... (Gem::Exception)
Unable to require openssl, install OpenSSL and rebuild ruby (preferred) or use non-HTTPS sources
应该是openssl没有安装
进入ruby源码[/app/ruby-2.4.2/ext/openssl]目录下的
wget https://www.openssl.org/source/openssl-1.1.0g.tar.gz tar -xvf openssl-1.1.0g.tar.gz后进入 openssl-1.1.0g
执行./config -fPIC --prefix=/usr/local/openssl enable-shared  
./config -t  
 make && make install 

然后再到cd /app/ruby-2.4.2/ext/openssl
执行命令ruby extconf.rb --with-openssl-include=/usr/local/openssl/include/ --with-openssl-lib=/usr/local/openssl/lib
再执行make && make install
完成再执行gem install redis
创建/app/redis-4.0.2/log/app/redis-4.0.2/data这个目录(如果安装了则跳过)
修改各个节点的配置文件nodes700*.conf
appendonly yes
deemonize yes
masterauth(只为从节点增加该密码,也可以不加,我没加)
requirepass passwd(自定义redis密码,也可以不加.可以参考下面的这个朋友遇到的记一次Redis被攻击的事件,博主也有一位朋友在2017 10月-11月 个人搭建&测试redis期间,被攻击拿去挖矿了的,还被阿里云技术支持给封了实例,哈哈)
开启集群模式
cluster-enabled yes
cluster-slave-validity-factor 10
cluster-migration-barrier 1

启动节点
也可以放在脚本执行 也可以一次性复制执行
/app/redis-4.0.2/src/./redis-server /app/redis-4.0.2/nodes-7000.conf
/app/redis-4.0.2/src/./redis-server /app/redis-4.0.2/nodes-7001.conf
/app/redis-4.0.2/src/./redis-server /app/redis-4.0.2/nodes-7002.conf
/app/redis-4.0.2/src/./redis-server /app/redis-4.0.2/nodes-7003.conf
/app/redis-4.0.2/src/./redis-server /app/redis-4.0.2/nodes-7004.conf
/app/redis-4.0.2/src/./redis-server /app/redis-4.0.2/nodes-7005.conf
下面中的./redis-trib.rb create --replicas1这个1必须要添加 否则报错如下
报错:
*** ERROR: Invalid configuration for cluster creation.
*** Redis Cluster requires at least 3 master nodes.
*** This is not possible with 5 nodes and 192 replicas per node.
*** At least 579 nodes are required
创建集群
./redis-trib.rb create --replicas 1 ip:7000 ip:7001 ip:7002 ip:7003 ip:7004 ip:7005
按照对应提示输入yes啥啥啥的

测试
redis-cli -c -h ip -p 7000 -a 密码
>>set aaa bbbb
ok
>>get aaa
bbbb
重做redis的方法
如果需要重做集群,停止进程pkill redis, 删除data下的文件,清理redis相关的log日志,查一遍nodes700*, appedonly700*
PS:我经常没清理干净导致重启集群失败,于是我就采用清理完上面的日志配置信息之后 reboot 再启用redis各个节点 再重新做集群

对了,还有一个很有意思的问题,我通过haproxy外网代理虽然可以转发并轮询内网下的redis端口,但是本地测试的时候竟然提示连接不了,实际上是转发成功的,我也想不通,。内转内是没有问题的
如有更好的见解,请评论多多指教,学无止境~

2018年1月23日10:30:45再次更新
发现一个小问题,就是在配置文件添加密码之后,再启动集群的话会出现集群建立不了的情况,会提示类似于下面的报错。
can't connect to node *.*.*.* :7000
于是测试之后,决定不在配置文件添加密码,正常创建完集群后,再登录集群中创建密码
redis-cli -c -h ip -p 7000
>> config set masterauth 密码
>> config set requirepass 密码
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息