Redis学习笔记---Redis Cluster集群(二)

倖福魔咒の 提交于 2020-03-07 21:26:46

前言

Redis Cluster集群 (一) 中了解了集群的相关概念,这一节我们将了解集群平台的搭建。

1. 简介

集群中至少应该有奇数个节点,所以搭建集群最少需要3台主机,同时每个节点至少有一个备份节点,所以下面最少要创建6台机器,才能完成Redis Cluster 集群(主节点,备份节点由redis-cluster集群确定)
真集群:六台服务器存在6个redis服务(这六台redis服务的主机号不同,端口号可以相同)
192.168.1.1.110: 6379
192.168.1.1.111: 6379
192.168.1.1.112: 6379
假集群: 一台服务器存在6个redis服务(这六台redis服务的主机号相同[因为使用同一台服务器],端口号不相同)
192.168.1.111: 6379
192.168.1.111:6380
192.168.1.111:6382

2. 搭建集群环境

在这里由于我们自身设备有限,所以我们采用加集群进行搭建
[1] 创建Redis节点安装目录

mkdir /usr/local/redis_cluster  //指定目录下 创建 redis_cluster

[2] 在redis_cluster目录下,创建7001-7006 个文件夹下

 mkdir 7001 7002 7003 7004 7005 7006

[3] 并将redis-conf 分别拷贝到7001-7006文件夹下

cp /root/redis-4.0.1/redis.conf  ./7001

[4] 分别修改如下配置文件,修如下改内容
<1>protected-mode是为了禁止公网访问redis cache,加强redis安全的。
它启用的条件,有两个:
1)没有bind IP
2)没有设置访问密码
由于我们上面在搭建过程中并没有设置密码,则它满足第二点,所以Linux上的redis处于安全模式,这就让你无法从虚拟机外部去轻松建立连接,如果外部访问: redis.conf 中设置保护模式为 protected-mode no
<2> 其他配置文件的修改如下(redis.conf下)

bind 127.0.0.1  进行注释
port 7001      改掉原来的端口号6379
dameonize yes  改为后台运行(守护进程)
pidfile  /var/run/redis_7001.pid  把该文件的端口进行更改
cluster-enabled yes  将注释去掉(默认是不开启集群的)
cluster-config-file  nodes-7001.conf  将注释去掉,并把文件名改为以端口号为主

[5] 启动各个redis节点
将桌面redis-4.0.1/下src文件拷贝到各个redis 7001-7006目录下。

cd redis-4.0.1   //进入桌面redis解压目录下
cp -r ./src  /usr/local/redis_cluster/7001  //进行拷贝,依次复制到7001-7006

启动各个Redis节点

cd /usr/local/redis_cluster/                // 进去redis集群配置文件
 ./7001/src/redis-server  ./7001/redis.conf   //依次启动7001-7006各节点服务

[6] 检查Redis启动情况

 ps  -ef | grep -i redis

上面的步骤操作完成后,我们就在一台服务器上启动了6个Redis服务,也就是我们所说的假集群的环境搭建完成,接下来我们就能正式创建集群了。

3. 创建集群

Redis官方提供了redis-trib.rb这个工具,就在解压目录的src目录中,(为了方便操作)将其文件复制到 /usr/local/bin 目录(相当于Java目录下的环境变量,可以随时随地进程操作),可直接访问此命令

cd redis-4.0.1/
cd src
cp redis-trib.rb  /usr/local/bin/

可以直接在命令行中执行: ip:port 模式

  redis-trib.rb create  --replicas 1  127.0.0.1:7001  127.0.0.1:7002 127.0.0.1:7003  127.0.0.1:7004  127.0.0.1:7005  127.0.0.1:7006

如果出现此错误:

 /usr/bin/env: ruby:没有那个文件或目录

这个工具是用ruby实现的,所以需要安装ruby.

4. 安装ruby

执行如下命令

 yum -y install ruby ruby-devel rubygems rpm-build
  gem install redis

如果在执行时报错的话

[root@localhost bin]# gem install redis
ERROR:  Error installing redis:
   redis requires Ruby version >= 2.3.0.

出现上述错误的原因: Centos默认支持ruby 到2.0.0,可gem安装redis需要的最低是2.3.0
解决办法是先安装rvm,再把ruby版本提升

5. 安装RVM和相应的ruby版本

(安装的详细过程可参考上述文章)

6. Redis Cluster集群搭建

在完成上述的操作后,我们总算把各种场景搭建完毕,这样我们再一次使用redis-trib.rb这个工具的相关命令就不会报错了。

 redis-trib.rb create  --replicas 1  127.0.0.1:7001  127.0.0.1:7002 127.0.0.1:7003  127.0.0.1:7004  127.0.0.1:7005  127.0.0.1:7006

在这里插入图片描述
是否允许默认配置 yes (然后它就会自动搭建集群了)
在这里插入图片描述

7.Redis Cluster 集群验证

[1] Redis集群测试:
为了方便测试,可将redis-cli客户端命令放到 /usr/local/bin 目录下

cd  /home/gs/redis-4.0.1/src  # /home/gs/redis-4.0.1是我安装redis的目录
cp redis-cli /usr/local/bin

[2] 在某台机器上(或)连接集群的7001端口的节点:

 redis-cli  -h  127.0.0.1  -c  -p  7001

加参数-C 可连接到集群,因为上面redis.conf 将bind改为了ip 地址, 所以 -h 参数不可以省略。
在这里插入图片描述
解析: 在该7001的节点下添加对应key数据,由于集群的机器都是平等的,所以有可能重定向到另一台机器(如上面的主服务器7002)而它的从服务器7005 也可以进行相关的读取命令。
[3] redis cluster 在设计的时候,就考虑到了去中心化,去中间件,也就是说,集群中的每个节点都是平等关系。都是对等的。每个节点都保存各自的数据和整个集群的状态。每个节点都和其他所有的节点连接,而且这些连接保持活跃,这样就保证了我们只需要连接集群中的任意一个节点,就可以获取其他节点的数据。
[4] 基本命令
info replication 通过Cluster Nodes命令和Cluster Info命令来看看集群效果
在这里插入图片描述
cluster nodes 获取集群节点的信息
在这里插入图片描述
把上诉信息粘贴到文本编辑器中,你会有所发现。
在这里插入图片描述
每个Redis的节点都有一个ID值,此ID将被此特定redis实例永久使用,以便实例在集群上下文中具有唯一的名称,每个节点都会记住使用此ID的每个其他节点,而不是通过IP或端口。IP地址和端口可能会发生变化,但唯一的节点标识符在节点的整个生命周期内都不会改变。我们简单地称这个标识符为节点ID

[5] 我们也可以通过java进行集群的相关测试
<1> 这时我们要开启相应的端口权限
依次开放端口7001 7002 … 7006 (如下命令只针对Centos7以上)

 查看已经开放的端口 :  firewall-cmd  --list-ports
  开启端口:  firewall-cmd --zone=public  --add-port=7001/tcp  --permanent
  重启防火墙      firewall-cmd  --reload  

<2> java测试代码

public static void main(String[] args){
 //第一步:使用JedisCluster对象,需要一个Set<HostAndPort>参数,Redis节点的列表
Set<HostAndPort> nodes = new HashSet<HostAndPort>();
  nodes.add(new HostAndPort(“127.0.0.1”, 7001));
  nodes.add(new HostAndPort(“127.0.0.1”, 7002));
  nodes.add(new HostAndPort(“127.0.0.1”, 7003));
  nodes.add(new HostAndPort(“127.0.0.1”, 7004));
  nodes.add(new HostAndPort(“127.0.0.1”, 7005));
  nodes.add(new HostAndPort(“127.0.0.1”, 7006));
  JedisCluster jedisCluster  = new JedisCluster (nodes);
  // 第二步:直接使用JedisCluster对象操作redis, 在系统中单例存在
  jedisCluster.set(“qfjy”, “千锋教育”);
  String result = jediscluster.get(“qfjy”);
  //第三步:打印结果
  System.out.println(result); 
}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!