1.1  准备工作

1.1.1 检查是否有安装gcc

# gcc -v

-bash: gcc: command not found

# yum -y install gcc

1.1.2 软件清单

redis-3.0.4.tar.gz

wget http://download.redis.io/releases/redis-3.0.4.tar.gz 

ruby-2.2.3.tar.gz

https://www.ruby-lang.org/en/news/2015/08/18/ruby-2-2-3-released/

redis-3.2.1-gem.zip

https://rubygems.global.ssl.fastly.net/gems/redis-3.2.1.gem 

1.2  安装步骤

开发环境的redis服务采用单机部署就可以满足情况,文档针对单机安装配置。

1.2.1 创建目录

创建一个安装目录,如:/gap/redis,然后将软件清单的所有文件上传到该目录。

如下:

mkdir –p /gap/redis

将清单列表内容上传到创建目录

1.2.2 安装服务

在服务器上面安装redis-3.0.4服务,命令如下:

# cd /gap/redis

# tar -zxvf redis-3.0.4.tar.gz

# cd redis-3.0.4

# make

# make install

# cd /usr/local/bin/

可根据实际需要拷贝脚本到别的目录,如:“/gap/app/redis/script/”

cp ./redis-server ./redis-cli /gap/app/redis/script/

 

1.3   集群配置

研发环境为一台服务器模拟配置集群,实际集群的配置与该章节配置相似,只是将各节点分布到不同服务器上面。

初始配置文件在解压后的Redis程序目录下:/gap/redis/redis-3.0.4/redis.conf

将redis.conf配置文件拷贝到redis配置目录,比如“/gap/app/redis/script/”下,

cd /gap/redis/redis-3.0.4
cp redis.conf /gap/app/redis/script

在平台开发环境中,我们创建6个redis服务模拟集群,端口分别为3000、4000、5000、3001、4001、5001。

1)创建对应的数据存储目录:

mkdir -pv /gap/app/redis/3000/{data,logs}
mkdir -pv /gap/app/redis/3001/{data,logs}
mkdir -pv /gap/app/redis/4000/{data,logs}
mkdir -pv /gap/app/redis/4001/{data,logs}
mkdir -pv /gap/app/redis/5000/{data,logs}
mkdir -pv /gap/app/redis/5001/{data,logs}

2)创建redis-3000.conf配置文件:

执行命令:

# cd /gap/app/redis/script

# cp redis.conf redis-3000.conf

# vi redis-3000.conf

修改redis-3000.conf内容如下:

daemonize:后台启动,修改为“yes”

redis最新版本rpm redis 3.0 4.0 5.0_gem

pidfile:pid文件路径,根据实际调整

redis最新版本rpm redis 3.0 4.0 5.0_redis最新版本rpm_02

port:端口号,根据实际调整

redis最新版本rpm redis 3.0 4.0 5.0_gem_03

bind:绑定IP地址,实际服务器地址

redis最新版本rpm redis 3.0 4.0 5.0_ridis_04

tcp-keepalive:心跳检测,修改为“60”

redis最新版本rpm redis 3.0 4.0 5.0_ruby_05

logfile:日志文件路径,根据实际调整

redis最新版本rpm redis 3.0 4.0 5.0_gem_06

save:是否存盘,置为"",旧的配置注释掉

redis最新版本rpm redis 3.0 4.0 5.0_ruby_07

dir:数据目录,根据实际调整

redis最新版本rpm redis 3.0 4.0 5.0_ridis_08

maxmemory:最大内存,根据实际调整

redis最新版本rpm redis 3.0 4.0 5.0_redis最新版本rpm_09

maxmemory-policy:数据替换策略,置为“allkeys-lru”

redis最新版本rpm redis 3.0 4.0 5.0_ridis_10

cluster-enabled:是否启用集群,置为“yes”

redis最新版本rpm redis 3.0 4.0 5.0_ridis_11

cluster-config-file:集群配置的文件名,根据实际调整

redis最新版本rpm redis 3.0 4.0 5.0_ridis_12

cluster-node-timeout:集群心跳,置为“5000”

redis最新版本rpm redis 3.0 4.0 5.0_gem_13

使用 grep -v ^# /gap/app/redis/script/redis-3000.conf |grep -v ^$

查看如下:

daemonize yes
pidfile /gap/app/redis/3000/redis-3000.pid
port 3000
tcp-backlog 511
bind 172.0.0.9
timeout 0
tcp-keepalive 60
loglevel notice
logfile /gap/app/redis/3000/logs/redis-3000.log
databases 16
save ""
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
dir /gap/app/redis/3000/data
slave-serve-stale-data yes
slave-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-disable-tcp-nodelay no
slave-priority 100
maxmemory 256m
maxmemory-policy allkeys-lru
appendonly no
appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
lua-time-limit 5000
cluster-enabled yes
cluster-config-file nodes-3000.conf
cluster-node-timeout 5000
slowlog-log-slower-than 10000
slowlog-max-len 128
latency-monitor-threshold 0
notify-keyspace-events ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-entries 512
list-max-ziplist-value 64
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
aof-rewrite-incremental-fsync yes

集群节点3000创建和配置如上,接下来创建其他端口配置文件,

cd /gap/app/redis/script
cp redis-3000.conf redis-3001.conf
cp redis-3000.conf redis-4000.conf
cp redis-3000.conf redis-4001.conf
cp redis-3000.conf redis-5000.conf
cp redis-3000.conf redis-5001.conf

然后依次修改3001到5001配置文件中的端口信息,完善配置文件。

 

1.4 安装Ruby相关

只需要某一台服务器安装Ruby服务

安装Ruby

# cd /gap/redis
# tar -zxvf ruby-2.2.3.tar.gz
# cd ruby-2.2.3
# ./configure
# make
# make install
# ruby -v

redis最新版本rpm redis 3.0 4.0 5.0_gem_14

安装RubyGems

# cd /gap/redis
# unzip redis-3.2.1-gem.zip
# gem install -l ./redis-3.2.1.gem

问题1:原因是缺少zlib依赖,需要安装zlib库

 

[root@hmb3 redis]# gem install -l ./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

解决1:

估计原因是gem运行缺少zlib库支持,所以需要
1、yum install zlib-devel
2、下载rails源码
3、进入ruby源码文件夹,安装ruby自身提供的zlib包

# cd /gap/redis/ruby-2.2.3/ext/zlib/
 # cd ext/zlib
 # ruby ./extconf.rb
 # make
 # make install


成功效果:

redis最新版本rpm redis 3.0 4.0 5.0_gem_15

问题2:

ERROR:  While executing gem ... (Gem::Exception)
Unable to require openssl, install OpenSSL and rebuild ruby (preferred) or use non-HTTPS sources

提示缺少openssl库,这两个库可以通过yum安装,但是安装了需要集成到ruby中。
解决:略

1.5 创建集群

1.5.1 启动所有redis服务

cd /gap/app/redis/script
./redis-server ./redis-3000.conf
./redis-server ./redis-3001.conf
./redis-server ./redis-4000.conf
./redis-server ./redis-4001.conf
./redis-server ./redis-5000.conf
./redis-server ./redis-5001.conf
ps -ef | grep redis

问题:路径或者文件或者文件夹写错缺失

[root@hmb3 script]# ./redis-server ./redis-3000.conf

*** FATAL CONFIG FILE ERROR ***
Reading the configuration file, at line 103
>>> 'logfile /gap/app/redis/3000/log/redis-3000.log'
Can't open the log file: No such file or directory

处理:

redis最新版本rpm redis 3.0 4.0 5.0_gem_16

正常:

redis最新版本rpm redis 3.0 4.0 5.0_redis_17

 

1.5.2  创建集群

进入Ruby集群命令目录

cd /gap/redis/redis-3.0.4/src

创建集群,命令如下:只需要执行一次集群创建命令

./redis-trib.rb create --replicas 1 172.0.0.9:3000 172.0.0.9:4000 172.0.0.9:5000 172.0.0.9:3001 172.0.0.9:4001 172.0.0.9:5001
注释:前面的IP:端口为主节点,接下去的IP:端口为从节点,需要一一对应:

1.5.3 查看集群状态

1.5.3.1 登录客户端

cd /gap/app/redis/script;

./redis-cli  -c  -h  172.0.0.9  -p 3000

1.5.3.2 查询状态

命令:cluster nodes

1.5.3.3 集群是否正常

命令:set 键 值,get 键

set key01 value02

get key01 

问题:Redis群集转移故障行为

(error) CLUSTERDOWN The cluster is down

参考:https://github.com/antirez/redis/issues/1869 ,输入:yes

Can I set the above configuration? (type 'yes' to accept): yes
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join...

1.5.3.4 启动服务

如果服务器重启或者Redis关闭后,只需要启动Redis各个节点服务,不需要重新创建集群。

1.6   系统平台配置

Redis配置后,需要配置平台参数数据文件,执行如下脚本

update t_public_properties t
   set t.dic_value = '172.0.0.9:3000/3001/4000/4001/5000/5001'
 where t.dic_id = 'redis_cluster_nodes';

代码运行效果:

redis最新版本rpm redis 3.0 4.0 5.0_redis最新版本rpm_18