Redis是一款优秀的NoSQLDB,它在2.x版本不支持集群,集群必须通过外部手段集成;但由于集成方法过于复杂,研发测试和运维要求较高。新版本Redis3.x发布后,自带集群功能,降低了分布式缓存的使用门槛。
Redis2.x单实例支持的业务能力并不小,Redis3.x内部集群后,集群负担工作有一定系统开销,如果使用选型需要结合业务具体分析。一般来说,必须使用分布式场景的或业务数据过亿的可以首先Redis3.x。
Redis3.0.7为目前推荐的最稳定版本,本文基于该版本修订。
Redis3.x引入了一个hash槽的概念,集群将整个系统分为16384个hash槽,这16384个槽位要全部分布在集群中的主节点上。主节点是Redis的读写节点,每个主节点可以配置一个或多个从节点,从节点自动同步主节点数据;当主节点下线时,从节点自动代替主节点工作。
jedis-2.7.2版本开始支持java访问Redis3.x集群。
缩略语/术语 |
全 称 |
说 明 |
append only file(aof) |
全持久化模式 |
|
|
Redis解压目录 |
|
$REDIS_HOME |
Redis安装目录 |
|
如果没有redis用户,请如下创建:
groupadd db
useradd -u 544 -d /usr/redis -g db -m redis
passwd redis
输入redis2017
如果Redis已经安装过,请先备份原Redis的所有配置文件,即$REDIS_HOME目录下的所有文件。
* 每一次修改环境变量之后记得source ~/.bashrc
* 每一次保存新的环境变量,只对当前会话或新连接的会话生效
Redis3.x的最小集群需要3主3从6个实例;在生产环境最小配置3台服务器。测试验证工作可以部署在一台物理机上,用端口来区分实例。本次使用六个端口代表六个实例,搭建“三主三从”的集群环境,六个端口分别为6381 6382 6383 6384 6385 6386。
为方便操作,目录路径统一定义,先创建以下两个常用目录:Redis安装包目录:${REDIS_FILE}、Redis最终安装目录:${REDIS_HOME}。操作如下:
以redis/redis2017登录进入主目录;
创建目录software用于存放所有软件安装包:
mkdir software
创建目录environment用于存放所有软件安装目录:
mkdir environment
创建本次环境搭建必要的几项安装目录:
cd environment
mkdir redis ruby
创建本次环境搭建必要的几项安装包目录,并将有需要的bin加入到PATH,示例:
vim ~/.bashrc
- - - - - - -
# User specific aliases and functions
export REDIS_HOME=/usr/redis/environment/redis
export RUBY_HOME=/usr/redis/environment/ruby
export PATH=$PATH:$REDIS_HOME/bin:$RUBY_HOME/bin
- - - - - - -
source ~/.bashrc
Redis到官方网站:http://www.redis.io/download下载
本文档用http://download.redis.io/releases/redis-3.0.7.tar.gz
cd software
wget -c http://download.redis.io/releases/redis-3.0.7.tar.gz
Redis是Remote Dictionary Server的缩写。他本质上一个Key/Value数据库,与Memcached类似的NoSQL型数据库,但是他的数据可以持久化的保存在磁盘上,解决了服务重启后数据不丢失的问题,他的值可以是string(字符串)、list(列表)、sets(集合)或者是ordered sets(被排序的集合),所有的数据类型都具有push/pop、add/remove、执行服务端的并集、交集、两个sets集中的差别等等操作,这些操作都是具有原子性的,Redis还支持各种不同的排序能力。redis3.x加入了集群功能(此功能需Ruby环境)。
根目录下:
redis.conf 默认配置文件
src目录:
redis-trib.rb 创建集群
make命令执行完成后,会在安装目录的bin下生成5个可执行文件,分别是redis-server、redis-cli、redis-benchmark、redis-check-aof、redis-check-dump
解压Redis的tar包:
cd software
tar -zxvf redis-3.0.7.tar.gz
这样就在当前目录下新建了一个包含发行版源代码的目录
将redis安装包目录加入环境变量:
export REDIS_FILE=/usr/redis/software/redis-3.0.7
进入redis解压目录:
cd $REDIS_FILE
执行如下命令指定目录安装Redis:
make PREFIX=$REDIS_HOME install
进入Redis安装目录:
cd $REDIS_HOME
为了简洁明了,此处工作目录以端口号命名:
mkdir 6381 6382 6383 6384 6385 6386
分别在6381 6382 6383 6384 6385 6386目录下创建data、log、run、conf文件夹,例如在6381 目录下创建:
cd 6381
mkdir data log run conf
复制配置文件redis.conf到6381 6382 6383 6384 6385 6386目录下的conf目录中
cp $REDIS_FILE/redis.conf $REDIS_HOME/6381/conf/redis.conf
cp $REDIS_FILE/redis.conf $REDIS_HOME/6382/conf/redis.conf
cp $REDIS_FILE/redis.conf $REDIS_HOME/6383/conf/redis.conf
cp $REDIS_FILE/redis.conf $REDIS_HOME/6384/conf/redis.conf
cp $REDIS_FILE/redis.conf $REDIS_HOME/6385/conf/redis.conf
cp $REDIS_FILE/redis.conf $REDIS_HOME/6386/conf/redis.conf
分别修改6381 6382 6383 6384 6385 6386 conf目录下的redis.conf文件,此处以6381为例(注意:这配置文件必须绝对路径):
bind 0.0.0.0
pidfile /usr/redis/environment/redis/6381/run/redis.pid
port 6381
logfile “/usr/redis/environment/redis/6381/log/stdout.log”
dir /usr/redis/environment/redis/6381/data
daemonize yes
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
建议:
先改好一个结点的redis.conf,再复制到其它结点;
使用vim 替换命令全部替换端口号,即::%s/6381/6385/g
查看配置文件:grep -v '^#\|^$' redis.conf
修注:1.pidfile 或logfile目录配置内容可以用双引号括起来。
2. 配置文件中有默认的tcp-backlog 511参数,该参数配置不正确不能成功启动。从注释来看该值取/proc/sys/net/core/somaxconn 和tcp_max_syn_backlog二者的最小配置,二者需要root权限才可以查看,我在centos上配置为tcp-backlog 100。
root查看方法:
cat /proc/sys/net/ipv4/tcp_max_syn_backlog
cat /proc/sys/net/core/somaxconn
进入$REDIS_HOME的bin目录下,命令:
可先将$REDIS_HOME/bin加到PATH:
export PATH=$PATH:$REDIS_HOME/bin
redis-server $REDIS_HOME/6381/conf/redis.conf
redis-server $REDIS_HOME/6382/conf/redis.conf
redis-server $REDIS_HOME/6383/conf/redis.conf
redis-server $REDIS_HOME/6384/conf/redis.conf
redis-server $REDIS_HOME/6385/conf/redis.conf
redis-server $REDIS_HOME/6386/conf/redis.conf
注:此命令仅有一个启动参数,用以指定配置文件,不加参数执行默认配置。
建议:将所有redis的启动命令写在一个shell快捷文件
可指定端口,关闭服务:
redis-cli -p 6381 shutdown
redis-cli -p 6382 shutdown
redis-cli -p 6383 shutdown
redis-cli -p 6384 shutdown
redis-cli -p 6385 shutdown
redis-cli -p 6386 shutdown
建议:将所有redis的停止命令写在一个shell快捷文件
注:为了下面的操作,如果执行了关闭服务的操作,请重新执行4.7.1重新开启服务
单实例链接方式:
redis-cli -h主机IP -p 端口号(默认为127.0.0.1 6379)
集群连接需要增加 –c 参数,主机和端口号随便连接一个主节点即可,当操作没有命中链接的主节点时集群内部路由到hash命中节点。这一步路由在网络条件不好时测试性能影响较大。
redis-cli –c -h主机IP -p 端口号(默认为127.0.0.1 6379)
示例:
redis-cli -c -h 127.0.0.1 -p 6381
注:至此,redis便安装完毕了。
redis集群的创建需要ruby环境
Ruby到官方网站:https://www.ruby-lang.org/en/downloads下载
本文挡用ruby-2.4.1
cd software
wget -c https://cache.ruby-lang.org/pub/ruby/2.4/ruby-2.4.1.tar.gz
解压Ruby的tar包:
cd software
tar -zxvf ruby-2.4.1.tar.gz
将redis安装包目录加入环境变量:
export RUBY_FILE=/usr/redis/software/ruby-2.4.1
进入Ruby解压目录
cd $RUBY_FILE
执行一下命令进行安装
./configure prefix=$RUBY_HOME
make
make install
查看版本号:
至此,Ruby便安装好了。
确保系统安装zlib,否则后续gem install会报 (no such file to load -- zlib)
cd software
wget -c http://www.zlib.net/zlib-1.2.11.tar.gz
tar -xzvf zlib-1.2.11.tar.gz
cd zlib-1.2.11
./configure
make
sudo make install (输入redis2017)
可从官网上找最新版本rubygem:https://rubygems.org/pages/download
以上方式复制rubygem的下载地址,下载到software目录:
cd software
wget -c https://rubygems.org/rubygems/rubygems-2.6.12.tgz
tar -zxvf rubygems-2.6.12.tgz
cd rubygems-2.6.12
ruby setup.rb
注:本次采用此方法安装。
创建redis集群需要ruby环境,而ruby需要redis接口(redis-gem),因此先安装redis接口(对应之前redis版本,这里同样用3.0.7版本):
gem install --local redis-3.0.7.gem
因国内网络环境无法连接到ruby资源库,淘宝给出了解决方案,我们只需要替换资源地址便可,详情可查看http://ruby.taobao.org
移除ruby官方的资源库地址:
gem sources --remove https://rubygems.org/
加入淘宝的资源地址:
gem sources -a https://ruby.taobao.org/
查看此时是否只有ruby.taobao.org:
gem sources –l
安装redis接口:
gem install redis
一般来说,安装Redis的服务器链接外网都比较困难,通过以上的网络方式安装局限性较大,建议下载到本地安装。通过命令-l (local)方式安装。
gem install redis-3.2.1.gem -l
进入redis解压目录的src下:
cd $REDIS_FILE/src
执行命令创建集群(此处1表示1个主master对应一个从slave):
./redis-trib.rb create --replicas 1 127.0.0.1:6381 127.0.0.1:6382 127.0.0.1:6383 127.0.0.1:6384 127.0.0.1:6385 127.0.0.1:6386
注:创建集群需使用真实IP,而非127.0.0.1
开发服务器:
./redis-trib.rb create --replicas 1 172.20.4.90:6381 172.20.4.90:6382 172.20.4.90:6383 172.20.4.90:6384 172.20.4.90:6385 172.20.4.90:6386
测试服务器:
./redis-trib.rb create --replicas 1 172.20.4.90:6381 172.20.4.90:6382 172.20.4.90:6383 172.20.4.90:6384 172.20.4.90:6385 172.20.4.90:6386
安装过程根据提示输入yes并enter
注:如果报错提示redis未启动,按照“4.7.1启动Redis服务器”启动:
redis集群创建成功。
注意:这里的redis主从是自动分配的。
登录多个redis实例的客户端,通过set
觉得对你有帮助,关注博客和公众号。不定期分享最新前沿技术框架和bat大厂常用技术等,加群不定期分享行业内大牛直播讲课以及获得视频课件资料等。