Redis教程,Redis集群搭建与Spring-data-redis的使用(集群搭建篇)
- Redis教程,Redis集群搭建与Spring-data-redis的使用(介绍篇)
- Redis教程,Redis集群搭建与Spring-data-redis的使用(集群搭建篇)
- Redis教程,Redis集群搭建与Spring-data-redis的使用(Spring-data-redis使用篇)
前面介绍了Redis集群和 Redis 集群一些状态,接下来我们要安装Redis集群了。 具体Redis-Cluster介绍请看上一篇:Redis教程,Redis 集群搭建(介绍篇)
Redis集群安装
安装 Redis 集群的过程中,可能会遇到一些问题,我遇到的坑我都会说一遍怎么解决的,也会说一些Redis集群过程中注意事项。
1.环境安装准备。
最好是有2台机器, Redis 集群最少准备6个点,那样就可以每一台机器3个节点,创建出3 master
和3 salve
环境。但是我由于资源有限,那么我就一台Linux CentOS 64
位。
还有,我演示的 Redis 版本是3.03
,集群的方式是Cluster,具体Redis-Cluster介绍请看上一篇:Redis教程,Redis 集群搭建(介绍篇),如果想了解Redis更多,后面我也会发布中文的Redis简介,到时候链接地址会展现在这里。好吧废话不多说,开搞。
2.下载Redis安装包和解压缩
#进入local
cd /usr/local/
#创建一个redis_cluster文件夹,你可以创建redis也可以。
mkdir redis_cluster
#进去redis_cluster文件夹
cd redis_cluster
#下载Redis 3.03安装包
wget http://download.redis.io/releases/redis-3.0.3.tar.gz
#解压Redis 3.03安装包
tar -zxvf redis-3.0.3.tar.gz
#重命名为redis
mv redis-3.0.3 redis
3.编译&安装Redis
#进入redis
cd redis
#编辑安装
make && make install
这里需要jemalloc
的支持,如果报找不到jemalloc
。错误大概如下,我没有出错过。
make[1]: Entering directory `/redis/src'
CC adlist.o
In file included from adlist.c:34:
zmalloc.h:50:31: error: jemalloc/jemalloc.h: No such file or directory
zmalloc.h:55:2: error: #error "Newer version of jemalloc required"
make[1]: *** [adlist.o] Error 1
make[1]: Leaving directory `/redis/src'
make: *** [all] Error 2
原因是没有安装jemalloc
内存分配器,可以安装 jemalloc 或直接输入make MALLOC=libc && make install
(未尝试)。
4.创建Redis节点
我们开篇提到,要6个节点,那么我们现在来创建6个 Redis 节点用来集群。
#进入集群安装目录
cd /usr/local/redis_cluster
#创建6个节点,如果是有几台服务器,可以分开装
mkdir 10000 10001 10002 10003 10004 10005
#复制到每个节点目录
cp redis 10000
cp redis 10001
cp redis 10002
cp redis 10003
cp redis 10004
cp redis 10005
5.复制和修改每个节点的redis.conf 配置文件
5.1 单独复制一份redis.conf
出来到每个节点目录里,方便使用,并且不动原来的配置文件,因为集群的配置和单点的配置不一样。
#复制一份10000节点文件下的一个redis.conf 复制到每个节点
cp 10000/redis/redis.conf 10000
cp 10000/redis/redis.conf 10001
cp 10000/redis/redis.conf 10002
cp 10000/redis/redis.conf 10003
cp 10000/redis/redis.conf 10004
cp 10000/redis/redis.conf 10005
5.2 修改每个配置文件的配置。你可以 把5.1的步骤放到 5.2 步骤之后,但是还是要每个改一遍,自己看着弄。
下面是集群的配置信息,每项对应的含义都有说明白,不懂就照样配置即可,ip 一项请参考解释配置。要不然集群你可能要重新配置了。
daemonize yes //redis后台运行
pidfile /var/run/redis_ 10000.pid //pidfile文件对应10000
port 10000 //端口10000
cluster-enabled yes //开启集群 把注释#去掉
cluster-config-file nodes_10000.conf //集群的配置 配置文件首次启动自动生成
cluster-node-timeout 5000 //请求超时 设置5秒够了
appendonly yes //aof日志开启 有需要就开启,它会每次写操作都记录一条日志
bind 127.0.0.1 //这里要注意了,如果你只想在本机访问用127.0.0.1 ,如果是局域网,请配置内网ip,如果想外网请配置外网ip
vi 10000/redis/redis.conf
vi 10001/redis/redis.conf
#....省略了,每个文件都要修改成上面的属性。有就修改,没有就添加
6.启动Redis 全部节点
#进入集群目录
cd /usr/local/redis_cluster
#逐一启动
./10000/redis/src/redis-server 10000/redis.conf
./10001/redis/src/redis-server 10001/redis.conf
./10002/redis/src/redis-server 10002/redis.conf
./10003/redis/src/redis-server 10003/redis.conf
./10004/redis/src/redis-server 10004/redis.conf
./10005/redis/src/redis-server 10005/redis.conf
检查看下是否启动成功。用命令 ps -ef|grep redis
或者ps -aux|grep redis
可以看到启动的节点。如果是多台机器集群,记得关闭防火墙,或者设置这些端口能够访问。
root 31518 0.1 0.0 141540 4664 ? Ssl 09:54 0:54 ./10000/redis/src/redis-server 127.0.0.1:10000 [cluster]
root 31583 0.1 0.0 141540 4596 ? Ssl 09:56 0:54 ./10001/redis/src/redis-server 127.0.0.1:10001 [cluster]
root 31601 0.1 0.0 137444 4124 ? Ssl 09:56 0:53 ./10002/redis/src/redis-server 127.0.0.1:10002 [cluster]
root 31619 0.1 0.0 141540 4588 ? Ssl 09:56 0:53 ./10003/redis/src/redis-server 127.0.0.1:10003 [cluster]
root 31637 0.1 0.0 137444 4128 ? Ssl 09:56 0:52 ./10004/redis/src/redis-server 127.0.0.1:10004 [cluster]
root 31656 0.1 0.0 137444 4120 ? Ssl 09:56 0:52 ./10005/redis/src/redis-server 127.0.0.1:10005 [cluster]
如上,表示启动成功。如果只有1个点,或者6个点没有全部启动成功。那么你找到这个点,把这个 redis 节点点里的redis.conf
文件中的daemonize yes
项修改为no
,也就是daemonize no
不在后台启动就能看到启动的错误信息。然后启动看错误日志。下面以10001
启动不起来为例。
#进入集群目录
cd /usr/local/redis_cluster
#编辑启动不起来的 10001节点配置文件
vi 10001/redis.conf
#找到daemonize项,修改为no。
#保存
:wq
#重启看错误
./10000/redis/src/redis-server 10000/redis.conf
这里的异常信息,我没保存,一般有2种异常,配置文件配错了,导致Redis解析失败不认识。另外一种是文件占用,请确认下这个节点的配置文件是否遵循了 5.2 说明的修改,别和其他节点公用一个文件,有这2个文件分别是:redis_ 10000.pid
、redis_ 10000.pid
,我搭建的过程中是nodes_10000.conf
文件没有加端口,导致文件占用。
7.创建集群
前面已经准备好了搭建集群的redis cluster 6个节点,接下来我们要把这些节点都串连起来搭建集群。
官方提供了一个工具:redis-trib.rb
,如果没有安装请先安装。它是用ruby
写的一个程序,所以我们还得安装ruby
。如果是多台机器,要都重复一遍。
#安装ruby
yum -y install ruby ruby-devel rubygems rpm-build
再用 gem
这个命令来安装 redis
对外提供的集群接口。
gem install redis #这里需要等一会,需要点时间
提示以下信息表示成功。
Usage: redis-trib <command> <options> <arguments ...>
reshard host:port
--to <arg>
--yes
--slots <arg>
--from <arg>
check host:port
call host:port command arg arg .. arg
set-timeout host:port milliseconds
add-node new_host:new_port existing_host:existing_port
--master-id <arg>
--slave
del-node host:port node_id
fix host:port
import host:port
--from <arg>
help (show this help)
create host1:port1 ... hostN:portN
--replicas <arg>
For check, fix, reshard, del-node, set-timeout you can specify the host and port of any working node in the cluster.
再次
用命令 ps -ef|grep redis
或者ps -aux|grep redis
确认所有的Redis节点已经全部启动。
开始集群,我们用create
命令来创建Redis -cluster集群,如下运行:
/usr/local/redis_cluster/10000/redis/src/redis-trib.rb create --replicas 1 127.0.0.1:10000 127.0.0.1:10001 127.0.0.1:10002 127.0.0.1:10003 127.0.0.1:10004 127.0.0.1:10005
说明:--replicas 1 表示 自动为每一个master
节点分配一个slave
节点 上面有6个节点,程序会按照一定规则生成 3个master
(主),3个slave
(从) 。
再次提醒,如果这里创建失败,请检查Redis 失败的节点是否启动成功。是多台机器集群检查是否有防火墙。
这里不提示失败的话有一条信息出现:
Can I set the above configuration? (type 'yes' to accept): yes
请输入 yes
然后会出现: Waiting for the cluster to join.......... ,可能需要等一会。
8.我们来测试Redis-cluster
./10000/redis/src/redis-cli -p 10000 -h 127.0.0.1(如果是127.0.0.1 可以不输入)
进去后测试数据:
set sayhi sojson
set sojson sojson.com
get sojson
多测试一些数据,你会发现前面的ip端口会变化。是因为 Redis 有16383
个slot
组成,分布到多个节点上,根据你存入数据的hash
值来匹配到对应的slot
节点上。
容灾测试:
停止1个master
再来测试,你会发现还是可以使用,当你停止掉2个master的时候,那就是cluster is down
,集群不可用了,所以集群健不健康,是看down
掉的是否超过一半的master
。所以我们一般配置到多台服务器上去,就是为了容灾。建议自己多测试。kill
掉节点然后测试是否可用
补充:查看集群的状态,可以随便链接一个节点输入“ cluster info
” 就可以看到详细信息。
cluster_state:ok
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:6
cluster_size:3
cluster_current_epoch:6
cluster_my_epoch:1
cluster_stats_messages_sent:221908
cluster_stats_messages_received:221908
后面会以 spring-data-redis 来实现 Java 对 Redis 集群的操作。这篇 Redis 集群安装篇到此结束。
Redis Cluster 再次安装出现的异常
今天补充一下一个异常,当你Redis Cluster 集群在集群一次,比如IP地址要变化或者什么的,你再次集群的时候你会发现一个异常:
Node 127.0.0.1:10001 is not empty. Either the nodealready knows other nodes (check with CLUSTER NODES) or contains some key in database 0.
这个时候你需要把开始生成的nodes_*.conf
、appendonly.aof
、dump.rdb
文件删除,再次集群就可以了。
版权所属:SO JSON在线解析
原文地址:https://www.sojson.com/blog/202.html
转载时必须以链接形式注明原始出处及本声明。
如果本文对你有帮助,那么请你赞助我,让我更有激情的写下去,帮助更多的人。