最近公司项目中要求使用Redis集群,用来加快数据访问速度,减少数据库IO压力,所以研究了一下,做下记录,也方便后来的朋友以供参考。
本节主要介绍Redis集群环境如何搭建:
测试环境情况如下:
操作系统:hyper-v虚拟机下centos6.5,磁盘空间50G,内存2G;
Redis版本:redis-3.0.2,
官方下载地址:http://download.redis.io/releases/redis-3.0.2.tar.gz
第一步:安装redis服务器
cd /home/redis-3.0.2
wget http://download.redis.io/releases/redis-3.0.2.tar.gz
tar -zxvf redis-3.0.2.tar.gz
cd redis3.0.2
make
make test
make install
第二步:建立集群目录(至少6台redis服务器才能建立集群)
mkdir /usr/local/redis
mkdir /usr/local/redis/redis6379
mkdir /usr/local/redis/redis6380
mkdir /usr/local/redis/redis6381
mkdir /usr/local/redis/redis6382
mkdir /usr/local/redis/redis6383
mkdir /usr/local/redis/redis6384
第三步:修改redis配置文件内容
cp redis.conf /usr/local/redis/redis6379
vi /usr/local/redis/redis6379/redis.conf修改配置文件中的下面选项:
port 6379 //其它不同服务器请自行更改
daemonize yes //指定redis是否要用守护线程的方式启动,redis会在后台运行,并将进程pid号写入至redis.conf选项pidfile设置的文件中,此时redis将一直运行,除非手动kill该进程
cluster-enabled yes //选项用于开实例的集群模式
cluster-config-file nodes-6379.conf //选项则设定了保存节点配置文件的路径, 默认值为 nodes.conf
cluster-node-timeout 5000
appendonly yes
dir /usr/local/redis/redis6379/
第四步:为其它五台redis服务器copy config文件(记得修改里面的端口)
cp /usr/local/redis/redis6379/redis.conf /usr/local/redis/redis6380
cp /usr/local/redis/redis6379/redis.conf /usr/local/redis/redis6381
cp /usr/local/redis/redis6379/redis.conf /usr/local/redis/redis6382
cp /usr/local/redis/redis6379/redis.conf /usr/local/redis/redis6383
cp /usr/local/redis/redis6379/redis.conf /usr/local/redis/redis6384
第五步:启动redis服务器
redis-server /usr/local/redis/redis6379/redis.conf
redis-server /usr/local/redis/redis6380/redis.conf
redis-server /usr/local/redis/redis6381/redis.conf
redis-server /usr/local/redis/redis6382/redis.conf
redis-server /usr/local/redis/redis6383/redis.conf
redis-server /usr/local/redis/redis6384/redis.conf
检查:ps -ef|grep redis 看服务是否启动
第六步:创建集群
/home/redis-3.0.2/src/redis-trib.rb create - -replicas 1 192.168.0.106:6379 192.168.0.106:6380 192.168.0.106:6381 192.168.0.106:6382 192.168.0.106:6383 192.168.0.106:6384
ps: 192.168.0.106是我linux的地址IP,建议不要使用localhost或127.0.0.1,原因是后面java项目里面访问集群时会报错。
6.1一般来说,上面命令是执行不成功的,因为是执行的ruby的脚本,需要ruby的环境
错误内容:/usr/bin/env: ruby: No such file or directory
所以需要安装ruby的环境,这里推荐使用yum install ruby安装
yum install ruby
6.2再次执行创建集群的命令,还会报错,提示缺少rubygems组件,使用yum安装
错误内容:
./redis-trib.rb:24:in `require’: no such file to load – rubygems (LoadError)
from ./redis-trib.rb:24
yum install rubygems
6.3然后再执行创建集群命令,依旧报错,提示不能加载redis,是因为缺少redis和ruby的接口,使用gem 安装
错误内容:
/usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in gem_original_require': no such file to load -- redis (LoadError) from /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in
require’
from ./redis-trib.rb:25
gem install redis
升级ruby版本:查看链接
创建集群提示:[ERR] Sorry, can’t connect to node 124.232.246.218:7000,
是因为在创建集群时不能设置密码,需要修改client.rb,查看方法
6.4 再次执行创建集群命令,终于OK,如下图:
由上图标红处可以看出,6379\6380\6381三台服务器被创建为master,而另外三台被创建为slave,具体对应关系见图
输入yes
至此,redis集群搭建完成。
第七步:检验集群是否OK
/home/redis-3.0.2/src/redis-cli -c -p 6379
set hello world
get hello
显示:“world”
说明OK
附上基本操作命令:
redis 127.0.0.1:6379> info #查看server版本内存使用连接等信息
redis 127.0.0.1:6379> client list #获取客户连接列表
redis 127.0.0.1:6379> client kill 127.0.0.1:33441 #终止某个客户端连接
redis 127.0.0.1:6379> dbsize #当前保存key的数量
redis 127.0.0.1:6379> save #立即保存数据到硬盘
redis 127.0.0.1:6379> bgsave #异步保存数据到硬盘
redis 127.0.0.1:6379> flushdb #当前库中移除所有key
redis 127.0.0.1:6379> flushall #移除所有key从所有库中
redis 127.0.0.1:6379> lastsave #获取上次成功保存到硬盘的unix时间戳
redis 127.0.0.1:6379> monitor #实时监测服务器接收到的请求
redis 127.0.0.1:6379> slowlog len #查询慢查询日志条数
redis 127.0.0.1:6379> slowlog get #返回所有的慢查询日志,最大值取决于slowlog-max-len配置
redis 127.0.0.1:6379> slowlog get 2 #打印两条慢查询日志
redis 127.0.0.1:6379> slowlog reset #清空慢查询日志信息
./redis-cli --cluster check 124.232.226.18:6381 -a 123456
./redis-cli -c -h 124.232.146.226 -p 6381 -a 123456 cluster info
更详细的命令请参考官网:http://redisdoc.com/
中文网站:http://www.redis.cn/commands.html
第八步:其它
1)关于集群重启的问题:
有时候机器被重启了,需要重新启动集群,只需要将6台redis启起来,集群自动就会加载,恢复之前保存过的数据,不需要再次创建集群。
每次重启机器后再去启动redis的服务,这是很麻烦的,所以将Redis作为 Linux 服务随机启动是很有必要的,这里我们可以自行写个shell脚本,并将shell脚本设置成启动时执行。具体的大家可以自行度娘,这里就不具体写了。
2)后续后继续补充有关redis集群中master\slave节点的增删操作。
安装错误一:You need tcl 8.5 or newer in order to run the Redis test
wget http://mirror.centos.org/centos/7/os/x86_64/Packages/tcl-8.5.13-8.el7.x86_64.rpm
rpm -ivh tcl-8.5.13-8.el7.x86_64.rpm
================================
redis5版本后面建集群不再需要安装ruby了,直接
./redis-cli --cluster create --cluster-replicas 1 192.168.0.106:6379 192.168.0.106:6380 192.168.0.106:6381 192.168.0.106:6382 192.168.0.106:6383 192.168.0.106:6384 -a *password123*
如果加了密码,那么创建集群时就需要加-a password123参数