[转帖]redis-cluster-proxy安装使用尝试

redis,cluster,proxy,安装,使用,尝试 · 浏览次数 : 0

小编点评

**Redis Cluster Proxy 介绍与安装** **功能介绍:** * Redis 的集群代理适用于 Redis 集群。 * 能够在集群模式下运行,其中一台机器可以充当多个节点。 * 允许您从多个机器上访问相同的 Redis 集群。 **安装步骤:** 1. 下载并运行 `redis-cluster-proxy` 二进制文件。 2. 设置配置文件 `proxy.conf` 中的 IP 地址、端口号、用户名和密码。 3. 启动代理程序。 **启动命令:** ```bash cd /data/redis/binredis-cluster-proxy -c /data/redis/redis-cluster-proxy/proxy.conf ``` **启动参数:** * `-c`:配置文件路径。 * `-c`:代理程序配置文件路径。 **示例配置文件(`proxy.conf`):** ``` # 主机地址:192.168.191.176 node_name: my-redis-proxy # 端口号:6381 port: 6381 # 用户名和密码 auth_user: myuser auth_password: mypassword # 容错配置 fail_safe_max_retry: 10 fail_safe_sleep_sec: 10 ``` **启动代理程序:** ```bash ./redis-cluster-proxy -c proxy.conf ``` **连接核验:** 使用 `redis-cli` 命令连接到代理服务器: ```bash redis-cli -c 192.168.191.176 -p 6381 -a 123456 ``` **故障转移:** 1. 关闭主库实例。 2. 连接到代理服务器。 3. 使用 `redis-cli` 命令查看集群状态。 4. 再次启动主库实例。 **查看集群状态:** 使用 `redis-cli` 命令查看集群状态: ```bash redis-cli --cluster check 192.168.191.176:6381 -a 123456 ``` **结论:** 代理程序允许您在多个机器上访问相同的 Redis 集群,并提供故障转移功能。

正文

https://www.cnblogs.com/gered/p/15210509.html

 

 


【1】gcc 4.9+安装

sudo yum install centos-release-scl

sudo yum install devtoolset-7-gcc*

scl enable devtoolset-7 bash

which gcc

gcc --version

 

【2】redis-cluster-proxy 介绍与安装

 

功能介绍:

Redis的集群代理适用redis-cluster集群。Redis 能够在集群模式下运行,其中一组 Redis 实例将负责故障转移和分区。

这种特殊模式需要使用理解集群协议的特殊客户端:通过使用这个代理来代替集群,集群被抽象出来,并且您可以与组成 Redis 集群的一组实例进行对话,就像它们是单个实例一样。

Redis Cluster Proxy 是多线程的,默认情况下,它当前使用多路复用通信模型,因此每个线程都有自己的集群连接,该连接与属于该线程本身的所有客户端共享。

无论如何,在某些特殊情况下(即。MULTI事务或阻塞命令),多路复用被禁用,客户端将拥有自己的集群连接。

通过这种方式,客户端只需发送诸如 GET 和 SET 之类的简单命令就不需要到 Redis 集群的私有连接集。

因此,这些是 Redis Cluster Proxy 的主要功能:

  • 路由:每个查询都会自动路由到集群的正确节点
  • 多线程
  • 支持多路复用和专用连接模型
  • 即使在多路复用上下文中也能保证查询执行和回复顺序

ASK|MOVED错误后集群配置的自动更新:当这些类型的错误发生在回复中时,代理通过获取集群的更新配置并重新映射所有插槽来自动更新集群的内部表示。更新完成后将重新执行所有查询,因此,从客户端的角度来看,一切正常(客户端不会收到 ASK|MOVED 错误:他们将直接收到预期的回复集群配置已更新)。

  • 跨槽/跨节点查询:支持许多涉及属于不同槽(甚至不同集群节点)的多个键的命令。这些命令会将查询拆分为多个查询,这些查询将路由到不同的插槽/节点。这些命令的回复处理是特定于命令的。某些命令,例如MGET,会将所有回复合并为一个回复。其他命令,例如MSET或DEL将对所有回复的结果求和。由于这些查询实际上破坏了命令的原子性,因此它们的用法是可选的(默认情况下禁用)。请参阅下文了解更多信息。
  • 一些没有特定节点/槽的命令,例如DBSIZE被传递到所有节点,并且回复将被映射减少,以便给出所有回复中包含的所有值的总和。

PROXY可用于执行某些特定于代理的操作的附加命令。

 

下载安装:

官网:https://github.com/RedisLabs/redis-cluster-proxy

 

解压安装:

unzip redis-cluster-proxy-unstable.zip

cd redis-cluster-proxy-unstable

make PREFIX=/data/redis/ install

mkdir /data/redis/redis-cluster-proxy

cp proxy.conf /data/redis/redis-cluster-proxy/proxy.conf

 

注意:此前我们已经安装配置好一个 3主3从的集群

 

配置文件:

复制代码
cat <<eof >/data/redis/redis-cluster-proxy/proxy.conf
# ./redis-cluster-proxy -c /path/to/proxy.conf

# cluster 127.0.0.1:7000
cluster 192.168.191.176:6381
cluster 192.168.191.176:6382
cluster 192.168.191.211:6383
cluster 192.168.191.211:6384
cluster 192.168.191.70:6385
cluster 192.168.191.70:6386


################################### MAIN ######################################

port 7777
# bind 127.0.0.1
unixsocket /data/redis/redis-cluster-proxy/proxy.socket
threads 8
tcpkeepalive 300
connections-pool-size 10
connections-pool-min-size 10
daemonize yes

pidfile /data/redis/redis-cluster-proxy/proxy.pid
logfile /data/redis/redis-cluster-proxy/proxy.log
enable-cross-slot yes
#max-clients 1000
auth 123456

# Authentication username (supported by Redis >= 6.0)
# auth-user myuser

################################# LOGGING #####################################

# Log level: can be debug, info, success, warning o error.
log-level error

# Dump queries received from clients in the log (log-level debug required)
# dump-queries no

# Dump buffer in the log (log-level debug required)
# dump-buffer no

# Dump requests' queues (requests to send to cluster, request pending, ...)
# in the log (log-level debug required)
# dump-queues no

eof
复制代码

 

 

启动

cd /data/redis/bin

redis-cluster-proxy -c /data/redis/redis-cluster-proxy/proxy.conf

 

【3】连接核验

redis-cli -c 192.168.191.176 -p 7777 -a 123456

如下图:发现的确是写到不同的节点上去了

【4】故障转移

【4.0】查看集群状态

redis-cli --cluster check 192.168.191.176:6381 -a 123456

我们可以看到,6381 6386 6385 是主库

 

【4.1】集群挂一个主库的影响

现在集群6个节点状态是好的

我们关闭掉 6381 实例试试;

redis-cli -h 192.168.191.176 -p 6381 -a 123456 shutdown

 

如下图:从代理连接,我们可以看到 6381 的节点连接已断开

 

  

 

如下图:从redis-cluster 角度来看,已经很好的故障转移了

  

我们看看这个是否还可以用:

发现有关存储在 6381 实例上的 key 都不可用;

 

如下图:错误日志:在查询 存储在 6381 的 key 的时候,报错 不能链接到 6381 redis实例,我们 proxy cluster update 的时候,直接就报错 失败获取集群配置了;

  

 

但我们直连集群是可以正常操作的:

  

 

结论:代理程序并没有挂,但是无法做任何操作;

只有当配置文件中的所有配置 IP 实例 都正常后,重启代理,才可以正常运行;

 

【4.2】集群挂一个从库的影响

现在集群6个节点状态是好的

那我们现在关闭 6382 试试;

redis-cli -h 192.168.191.176 -p 6382 -a 123456 shutdown

 

关闭后:

 

我们连接代理=》查看集群状态:

  

 

集群状态是没有问题的,且下面的nodes中,也显示所有主节点都有一个从库(但实际上从库挂了,对应的主库所在节点的 replicas 应该为0才对,但并没有);

 

但我们更新一下集群状态;

如下图:代理状态直接变成失败、中断 broken;且不可用,任何操作都是这种报错

 

  

 

虽然这种情任何操作都会报错,但是代理并没有关闭,可以登录,只是无法做任何操作,如下图

  

 

日志信息:

  

这个时候,把 6382再启动,也自动加入集群了;但是代理并没有恢复,也无法在现有情况 proxy cluster update 更新回集群连接状态信息

  

 

必须要重启代理才可以:

  

 

【结论】

(1)集群某个机器down后,如果不更新代理连接集群,还是可以正常使用的;

  如果down的是主库,则通过代理无法访问该主库节点

  如果down的是从库,则不影响

(2)代理在启动重新、拉取集群连接信息时,如果在配置文件中配置的任意实例无法连接,则整个代理不可用;

(3)如果redis 集群没有启动成功,redis-cluster-proxy 启动是无法连接到 redis 节点的;

如果出现 redis 集群启动 Waiting for the cluster to join 的情况,redis-cluster-proxy 可以启动成功,但是无法操作。

 (4)无法支持故障转移

与[转帖]redis-cluster-proxy安装使用尝试相似的内容:

[转帖]redis-cluster-proxy安装使用尝试

https://www.cnblogs.com/gered/p/15210509.html 【1】gcc 4.9+安装 【2】redis-cluster-proxy 介绍与安装 下载安装: 配置文件: 启动 【3】连接核验 【4】故障转移 【4.0】查看集群状态 【4.1】集群挂一个主库的影响 【4

[转帖]Redis 6.0 redis-cluster-proxy 说明

https://www.cnblogs.com/zhoujinyi/p/13267222.html Redis3.0版本之后开始支持了Redis Cluster,Redis也开始有了分布式缓存的概念。关于Redis Cluster的相关说明,可以看之前的几篇文章:Redis Cluster 原理相关

[转帖]Redis 6.1 redis-cluster-proxy 实践说明

https://tool.4xseo.com/article/190027.html 摘要: 背景RedisCluster从Redis 3.0开始就得到支持,并且Redis已经开始有分布式缓存的概念。有关R ... 展开 背景 ​ Redis3.0版本之后开始支持了Redis Cluster,Red

[转帖]Redis系列(十五)、Redis6新特性之集群代理(Cluster Proxy)

在之前的文章中介绍了Redis6的集群搭建和原理,我们可以使用dummy和smart客户端连接集群,本篇介绍Redis6新增的一个功能:集群代理。客户端不需要知道集群中的具体节点个数和主从身份,可以直接通过代理访问集群,对于客户端来说通过集群代理访问的集群就和单机的Redis一样,因此也能解决很多集

[转帖]Redis系列(十五)、Redis6新特性之集群代理(Cluster Proxy)

在之前的文章中介绍了Redis6的集群搭建和原理,我们可以使用dummy和smart客户端连接集群,本篇介绍Redis6新增的一个功能:集群代理。客户端不需要知道集群中的具体节点个数和主从身份,可以直接通过代理访问集群,对于客户端来说通过集群代理访问的集群就和单机的Redis一样,因此也能解决很多集

[转帖]Redis cluster故障复盘,预案、工具、判断一样都不能少!

http://blog.itpub.net/31545813/viewspace-2924677/ 背景 最近从ELK日志分析发现: 有很多应用连接redis 超时; 监控平台出现”redis 集群不健康“告警; 结合之前的经验,我们一般的应处理手段为:重启连接redis超时的应用,原因有以下两点:

[转帖]Redis 运维实战 第02期:Redis Cluster

https://cloud.tencent.com/developer/article/1986819 Redis 最为突出的特性就是:执行命令的速度非常快(原因是所有数据都存放在内存中)。但是单机 Redis 总会遇到瓶颈的,比如:并发、流量、内存等。在 Redis 3.0 之前,官方并没有提供集

[转帖]Redis的info信息.

Info信息 以下信息是在redis-cli中执行info命令,可能和redis cluster版本有点不同的地方,仅此作为参考。 123456789101112131415161718192021222324252627282930313233343536373839404142434445464

[转帖]Redis进阶实践之十二 Redis的Cluster集群动态扩容

https://www.cnblogs.com/PatrickLiu/p/8473135.html 一、引言 上一篇文章我们一步一步的教大家搭建了Redis的Cluster集群环境,形成了3个主节点和3个从节点的Cluster的环境。当然,大家可以使用 Cluster info 命令查看Cluste

[转帖]当Redis数据磁盘坏掉之后会发生什么

https://www.zeekling.cn/articles/2020/11/09/1604937462651.html 问题简介 当Redis cluster集群数据所在磁盘的RAID卡坏掉了之后会发生什么?集群会不会进行故障迁移,以及怎么快速恢复。 问题1:cluster集群会进行故障迁移嘛