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

Redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hashs(哈希类型)

这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的.

在此基础上,redis支持各种不同方式的排序.与memcached一样,为了保证效率,数据都是缓存在内存中.

区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步.

Redis的优点:

性能极高 – Redis能支持超过 100K+ 每秒的读写频率。

丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。

原子 – Redis的所有操作都是原子性的,同时Redis还支持对几个操作全并后的原子性执行。

丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性。

1.准备工作(下列部分命令都在root用户下操作,建议sudo或者root权限)

先建立一个/app文件夹
mkdir /app && cd /app
wget http://download.redis.io/releases/redis-4.0.2.tar.gz
tar -xvf redis-4.0.2.tar.gz
cd redis-4.0.2 
make

2.配置端口(我是配置了6个节点,看业务需求,若不确定,可以先跳过该步骤)

按照默认的配置文件redis.conf配置其他的节点,默认是一个
nodes-7000.conf
nodes-7001.conf
nodes-7002.conf
nodes-7003.conf
nodes-7004.conf
nodes-7005.conf

一般我是修改下面node-700*.conf的下面几项参数

bind 127.0.0.1 
port 700*
pidfile /var/run/redis_700*.pid
logfile "/app/redis-4.0.2/log/700*.log"
dbfilename "700*.rdb"
dir "/app/redis-4.0.2/data"
appendonly yes
appendfilename "appendonly-700*.aof"
cluster-config-file "nodes-700*.conf"
cluster-enabled yes
cluster-migration-barrier 1

3.安装集群所需软件ruby

/app目录下
wget https://cache.ruby-lang.org/pub/ruby/2.4/ruby-2.4.2.tar.gz
tar -xvf ruby-2.4.2.tar.gz
./configure
make && 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 -- zlibERROR: While executing gem ... (NoMethodError)undefined method `invoke_with_build_args' for nil:NilClass解决:进入ruby源码文件夹

cd /app/ruby-2.4.2/ext/zlib

安装ruby自身提供的zlib包

ruby ./extconf.rb

若报错:checking for deflateReset() in -lz... nochecking for deflateReset() in -llibz... nochecking for deflateReset() in -lzlib1... nochecking for deflateReset() in -lzlib... nochecking for deflateReset() in -lzdll... nochecking for deflateReset() in -lzlibwapi... no

解决:在Ubuntu中使用新的安装包zlib1g-dev,包zlib1g默认已经安装好了。

apt-get install zlib1g-dev

安装完成后执行ruby ./extconf.rb

ruby ./extconf.rb

编译安装

make

若报错:

make: *** No rule to make target `/include/ruby.h', needed by `zlib.o'. Stop.

解决:复制 cp /app/ruby-2.4.2/include/ /

 cp /app/ruby-2.4.2/include/ /

再执行编译安装

make make install

成功再执行gem install redis

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没有安装,那么进入 [/app/ruby-2.4.2/ext/openssl]目录下的

cd /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

tar解压后后进入 openssl-1.1.0g

cd openssl-1.1.0g

执行./config -fPIC --prefix=/usr/local/openssl enable-shared ./config -t 

./config -fPIC --prefix=/usr/local/openssl enable-shared ./config -t 

然后等待配置完成后编译安装

 make && make install

 然后再到cd /app/ruby-2.4.2/ext/openssl

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

ruby extconf.rb --with-openssl-include=/usr/local/openssl/include/ --with-openssl-lib=/usr/local/openssl/lib

再执行make && make install

make && make install

完成再执行gem install redis

gem install redis

创建/app/redis-4.0.2/log和/app/redis-4.0.2/data这个目录(如果安装了则跳过)

mkdir /app/redis-4.0.2/log && mkdir /app/redis-4.0.2/data

修改各个节点的配置文件nodes700*.confappendonly yesdeemonize yesmasterauth(只为从节点增加该密码,也可以不加,我没加)requirepass passwd(自定义redis密码,也可以不加.

可以参考下面的这个朋友遇到的记一次Redis被攻击的事件,博主也有一位朋友在2017 10月-11月 个人搭建&测试redis期间,被攻击拿去挖矿了的,还被阿里云技术支持给封了实例,哈哈)

配置文件中开启集群模式 nodes700*.conf

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 一般写内网IP

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

按照对应提示输入yes啥啥啥的

登录测试,如果没设置密码就无需 输入-a 密码

redis-cli -c -h ip -p 7000 -a 密码
 

>>set aaa bbbbok

>>get aaa

就等到键值为bbbbok

Redis中 cluster info 命令可以查看集群状态

重做redis的方法如果需要重做集群,停止进程pkill redis, 删除data下的文件,清理redis相关的log日志,

查一遍nodes700*, appedonly700*

PS:我经常没清理干净导致重启集群失败,于是我就采用清理完上面的日志配置信息之后 reboot 再启用redis各个节点 再重新做集群对了。

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

2018年6月27日15:45:35 

我把上面的问题想明白了,因为内网的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 密码

猜你喜欢

转载自blog.csdn.net/wayne_primes/article/details/78978117
今日推荐