Redis教程,Redis集群搭建与Spring-data-redis的使用(集群搭建篇)

soゝso 2016-12-23 11:45:07 3265

Redis教程  ,  Redis  集群搭建系列:

  1. Redis教程,Redis集群搭建与Spring-data-redis的使用(介绍篇)
  2. Redis教程,Redis集群搭建与Spring-data-redis的使用(集群搭建篇)
  3. 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

转载时必须以链接形式注明原始出处及本声明。

本文主题:

如果本文对你有帮助,那么请你赞助我,让我更有激情的写下去,帮助更多的人。

相关文章
Redis教程Redis集群搭建Spring-data-redis使用集群搭建
Redis教程Redis集群搭建Spring-data-redis使用(介绍
Redis教程Redis集群搭建Spring-data-redis使用Spring-data-redis使用
window 环境下 apache james 3.0-beta4 安装、搭建、运行
Shiro教程(四)Shiro + Redis配置
Shiro教程(五)Shiro + Redis实现
Java Redis线程池ShardedJedisPool 使用方法,Java Jedis连接池的使用
Redis与Memcached的比较 ,然后选择了Redis
Redis 密码、端口、ip绑定配置,bat编写运行redis
Redis的理解,Redis是什么,Redis和Memcache谁快?
最新文章
腾讯云代金券 10000 元/ 30000 代金券领取技巧 58
SEO 换友情链接的主意事项,友情链接断链、友情链接套路说明 117
Springboot + Mybatis,数据库多数据源配置项目Demo【源码下载】 1411
Mac mtr 安装并使用,mrt: command not found 186
Java 集成阿里云消息队列,日志消息存储 416
域名备案注意事项,网站域名ICP备案快速通过攻略【干货分享】 349
Springboot 集成Aliyun MQ消息队列,Aliyun 消息队列配置及代码实现 676
SpringBoot 集成Spring-data-redis,redis对象序列化存储 1505
天气API,全国天气 JSON API接口,可以获取十五天的天气预报 478
Springboot + Freemarker 集成配置 2128
最热文章
Elasticsearch教程(四) elasticsearch head 插件安装和使用 124994
免费天气API,全国天气 JSON API接口,可以获取五天的天气预报 98148
Elasticsearch教程(六) elasticsearch Client创建 78294
Elasticsearch教程(八) elasticsearch delete 删除数据(Java) 74065
Elasticsearch教程(二),IK分词器安装 72618
Elasticsearch教程(一),全程直播(小白级别) 64099
Elasticsearch教程(五) elasticsearch Mapping的创建 60616
Elasticsearch教程(三),IK分词器安装 (极速版) 56088
Elasticsearch教程(七) elasticsearch Insert 插入数据(Java) 53015
Java 解析JSON,JSON-LIB jar包下载和使用。 47348

骚码加入我们 / 千人QQ群:259217951

入群需要5元,如果没有QQ钱包,可以先Alipay、微信,赞助然后加群主拉进。

二维码生成 来自 >> 二维码生成器

支付扫码

所有赞助/开支都讲公开明细,用于网站维护:赞助名单查看

正在加载... ...