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

JSON 2016-12-23 11:45:07 7670

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使用Spring-data-redis使用
window 环境下 apache james 3.0-beta4 安装、搭建、运行
SpringBoot 集成Spring-data-redisredis对象序列化存储
Shiro教程(四)Shiro + Redis配置
Shiro教程(五)Shiro + Redis实现
Linux Centos 使用 Redis service 启动,Redis service 脚本编写
Java Redis线程池ShardedJedisPool 使用方法,Java Jedis连接池的使用
Redis与Memcached的比较 ,然后选择了Redis
Redis的理解,Redis是什么,Redis和Memcache谁快?
最新文章
C语言的变量和常量 30
PHP变量剖析 113
SQL全外连接剖析 276
SQL自然连接剖析 184
springboot启动原理 416
SQL右连接【RIGHT JOIN】详解及图解 467
SQL左链接【LEFT JOIN】详解及图解 396
SQL非等值连接剖析 285
SQL等链接剖析 291
SQL内连接详解及图解 417
最热文章
最新MyEclipse8.5注册码,有效期到2020年 (已经更新) 680231
苹果电脑Mac怎么恢复出厂系统?苹果系统怎么重装系统? 674611
免费天气API,全国天气 JSON API接口,可以获取五天的天气预报 599966
免费天气API,天气JSON API,不限次数获取十五天的天气预报 568861
Jackson 时间格式化,时间注解 @JsonFormat 用法、时差问题说明 552088
我为什么要选择RabbitMQ ,RabbitMQ简介,各种MQ选型对比 509262
Elasticsearch教程(四) elasticsearch head 插件安装和使用 479677
Jackson 美化输出JSON,优雅的输出JSON数据,格式化输出JSON数据... ... 263408
Java 信任所有SSL证书,HTTPS请求抛错,忽略证书请求完美解决 244147
Elasticsearch教程(一),全程直播(小白级别) 225254
支付扫码

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

查看我的收藏

正在加载... ...