redis集群的部署和配置

文章目录

  • 一、Redis Cluster(Redis集群)简介
  • 二、Redis集群搭建的准备
  • 三、相关配置文件的创建和修改
  • 四、搭建集群
    • 1.启动6台redis服务
    • 2.将六个节点合成一个集群
  • 五、集群操作
    • 1.登录
    • 2.设置密码
  • 总结
    • 1.好处
    • 2.不足


一、Redis Cluster(Redis集群)简介

redis集群是完全去中心化的,不存在中心节点或者代理节点;
redis集群是没有统一的入口的,客户端(client)连接集群的时候连接集群中的任意节点(node)即可,集群内部的节点是相互通信的,每个节点都是一个redis实例;
为了实现集群的高可用,即判断节点是否健康(能否正常使用),redis-cluster有这么一个投票容错机制:如果集群中超过半数的节点投票认为某个节点挂了,那么这个节点就挂了(fail)。这是判断节点是否挂了的方法;
那么如何判断集群是否挂了呢? -> 如果集群中任意一个节点挂了,而且该节点没有从节点(备份节点),那么这个集群就挂了。这是判断集群是否挂了的方法;
那么为什么任意一个节点挂了(没有从节点)这个集群就挂了呢? -> 因为集群内置了16384个slot(哈希槽),并且把所有的物理节点映射到了这16384[0-16383]个slot上,或者说把这些slot均等的分配给了各个节点。当需要在Redis集群存放一个数据(key-value)时,redis会先对这个key进行crc16算法,然后得到一个结果。再把这个结果对16384进行求余,这个余数会对应[0-16383]其中一个槽,进而决定key-value存储到哪个节点中。所以一旦某个节点挂了,该节点对应的slot就无法使用,那么就会导致集群无法正常工作。

二、Redis集群搭建的准备

1.因为投票机制的存在.集群中超过半数的节点投票认为某个节点挂了,那么这个节点就挂了.所以我们至少要有3个节点
2.每台主机至少有一台从机,所以至少要启动6个redis服务.
3.由于条件有限,只在一台服务器上启动6个不同端口的redis服务来模拟环境.真实环境步骤一样.

三、相关配置文件的创建和修改

创建文件夹myredis,用于统一存放redis的相关配置文件。
把安装redis时的配置文件redis.conf复制到myredis下。
再复制redis.conf到myredis目录下重命名为redis6379.conf。

cp redis.conf /myredis/redis6379.conf

编辑redis6379.conf文件,把以下配置复制到redis6379.conf中然后保存。

include /myredis/redis.conf
port 6379
pidfile "/var/run/redis_6379.pid"
dbfilename "dump6379.rdb"
dir "/myredis/redis_cluster"
logfile "/myredis/redis_cluster/redis_err_6379.log"
cluster-enabled yes
cluster-config-file "nodes-6379.conf"
cluster-node-timeout 15000

include /myredis/redis.conf这句配置是引用/myredis/redis.conf的配置.redis.conf中要不设置密码(集群搭建后一定要设置密码.而且平时一定要给redis设置密码,因为无密码很容易被黑客攻击用你的服务器挖矿,本人就遇到过),不然集群启动后会无法连接上。
然后把redis6379.conf再复制5份,重命名为reids(端口号).conf。然后把各配置文件中的上面配置的端口改成文件对应的端口
可以通过vim命令批量修改,例如把6379都改成6380

:%s/6379/6380

按上面配置dir “/myredis/redis_cluster”,在myredis目录下新建redis_cluster目录

四、搭建集群

1.启动6台redis服务

按配置文件启动redis-server /myredis/redis6379.conf
在这里插入图片描述
启动之后查看是否启动成功
redis集群的部署和配置_第1张图片

2.将六个节点合成一个集群

组合之前,请确保所有redis实例启动后,nodes-xxxx.conf文件都生成正常。

查看redis_cluster目录下文件

ll /myredis/redis_cluster/

如果出现下图文件说明正常
redis集群的部署和配置_第2张图片
合体:
redis集群搭建需要依赖ruby环境,还需要安装ruby,redis6之后不需要单独安装ruby环境.我的是redis-6.2.1
进入redis安装目录

cd  /opt/redis-6.2.1/src

执行命令

redis-cli --cluster create --cluster-replicas 1 192.168.11.101:6379 192.168.11.101:6380 192.168.11.101:6381 192.168.11.101:6389 192.168.11.101:6390 192.168.11.101:6391

1.上面的ip要用真实IP,不能用127.0.0.1
2.redis-cli --cluster create --cluster-replicas 1 中的1代表每个主机有一个从机,所以会有3主3从
3.执行之后要再输入一次yes
执行之后如果出现
在这里插入图片描述
是因为redis.conf中把密码开启了,无权限,需要把密码注销后再重复以上步骤
如果出现
redis集群的部署和配置_第3张图片
Waiting for the cluster to join…
出现一直等待的情况那就要注意了
本人出现这种情况也很郁闷,后来查资料才知道
redis集群不仅需要开通redis客户端连接的端口,而且需要开通集群总线端口
集群总线端口为redis客户端连接的端口 + 10000
如redis端口为6379
则集群总线端口为16379

需要把6个redis端口对应的总线端口也要开放
开放成功后,再次执行上面的命令就会出现
redis集群的部署和配置_第4张图片

此时集群合并成功,上图红框中是集群中每个节点的信息,正好3主3从.且每个主机的哈希槽(slots)分布也可以看到

五、集群操作

1.登录

redis-cli -c -p 6379

其中-c代表以集群方式登录,不带-c是以普通方式登录

2.设置密码

可以通过cluster nodes 查看所有节点信息,cluster info查看当前节点信息
之前集群没有设置密码,是不安全的,可以登录后给每个节点设置密码

#设置连接密码
config set masterauth <密码>
#设置密码
config set requirepass <密码>
#使配置立刻生效
config rewrite

总结

1.好处

实现扩容
分摊压力
无中心配置相对简单

2.不足

多键操作是不被支持的
多键的Redis事务是不被支持的。lua脚本不被支持
由于集群方案出现较晚,很多公司已经采用了其他的集群方案,而代理或者客户端分片的方案想要迁移至redis cluster,需要整体迁移而不是逐步过渡,复杂度较大。

你可能感兴趣的:(redis,java,redis)