返回顶部
首页 > 资讯 > 数据库 >redis 6.0下redis-cluster
  • 299
分享到

redis 6.0下redis-cluster

redis6.0下redis-cluster 2016-07-16 06:07:53 299人浏览 猪猪侠
摘要

伴随着Redis6.0的发布,作为最令人怦然心动的特性之一,Redis官方同时推出Redis集群的proxy了:redis-cluster-proxy,https://GitHub.com/RedisLabs/redis-clus

redis 6.0下redis-cluster

伴随着Redis6.0的发布,作为最令人怦然心动的特性之一,Redis官方同时推出Redis集群的proxy了:redis-cluster-proxy,https://GitHub.com/RedisLabs/redis-cluster-proxy 相比从前访问Redis集群时需要制定集群中所有的IP节点相比: 1,redis的redis-cluster-proxy实现了redis cluster集群节点的代理(屏蔽),类似于VIP,客户端不需要知道集群中的具体节点个数和主从身份,可以直接通过代理访问集群。 2,不仅如此,还是具有一些非常实用的改进,比如在redis集群模式下,增加了对multiple操作的支持,跨slot操作等等(有点关系数据库的分库分表中间件的感觉)。
redis-cluster-proxy主要特性 以下信息来自于官方的说明: redis-cluster-proxy是Redis集群的代理。Redis能够在基于自动故障转移和分片的集群模式下运行。 这种特殊模式(指Redis集群模式)需要使用特殊的客户端来理解集群协议:通过代理,集群被抽象了出来,可以实现像单实例一样实现redis集群的访问。 Redis集群代理是多线程的,默认情况下,它目前使用多路复用通信模型,这样每个线程都有自己的集群连接,所有属于线程本身的客户端都可以共享该连接。 无论如何,在某些特殊情况下(多事务或阻塞命令),多路复用被禁用,客户端将拥有自己的集群连接。 通过这种方式,只发送简单命令(比如get和set)的客户端将不需要一组到Redis集群的私有连接。
Redis集群代理的主要特点如下: 1,自动化路由:每个查询被自动路由到集群的正确节点 2,多线程(它目前使用多路复用通信模型,这样每个线程都有自己的集群连接) 3,支持多路复用和私有连接模型 4,即使在多路复用上下文中,查询执行和应答顺序也是有保证的 5,在请求/重定向错误后自动更新集群配置:当这些类型的错误发生在应答中时,代理通过获取集群的更新配置并重新映射所有slot,自动更新集群的内部表示。     所有查询将在更新完成后重新执行,因此,从客户机的角度来看,一切都将正常运行(客户机不会收到ASK|重定向错误:在更新集群配置之后,它们将直接收到预期的结果)。 6,跨slot/跨节点查询:支持许多涉及属于不同slot(甚至不同集群节点)的多个键的命令。     这些命令将把查询分成多个查询,这些查询将被路由到不同的槽/节点。     这些命令的应答处理是特定于命令的。有些命令,如MGET,将合并所有应答,就好像它们是单个应答一样。     其他命令(如MSET或DEL)将汇总所有应答的结果。由于这些查询实际上破坏了命令的原子性,所以它们的使用是可选的(默认情况下禁用)。 7,一些没有特定节点/slot的命令(如DBSIZE)被传递给所有节点,为了给出所有应答中包含的所有值的和,应答将被映射简化。 8,可用于执行某些特定于代理的操作的附加代理命令。

Redis 6.0以及redis-cluster-proxy gcc 5+编译环境依赖 Redis 6.0以及redis-cluster-proxy的编译依赖于GCc 5+,Centos 7上的默认gcc版本是4.+,无法满足编译要求,在编译时候会出现类似如下的错误 server.h:1022:5: error: expected specifier-qualifier-list before "_Atomic
类似错误参考这里:Https://wanghenshui.github.io/2019/12/31/redis-ce 解决方案参考,笔者环境为centos7,为此折腾了小半天
1,https://stackoverflow.com/questions/55345373/how-to-install-gcc-g-8-on-centos,测试可行 2,https://blog.csdn.net/displayMessage/article/details/85602701 gcc源码包编译安装,120MB的源码包,有人说是需要40分钟,笔者机器上编译超过了1个小时仍未果,因此采用的是上一种方法

 

Redis集群环境搭建 测试环境拓扑图,如下所示,基于Docker的3主3从6个节点的redis cluster集群

redis cluster 集群信息,参考之前的文章,redis cluster 自动化安装、扩容和缩容,快速实现Redis集群搭建

  redis-cluster-proxy 安装 安装步骤: 1,git clone https://github.com/artix75/redis-cluster-proxy
   cd redis-cluster-proxy 2,解决gcc版本依赖问题,笔者折腾了好久,gcc 5.0+ 源码包编译安装花了一个多小时未果。
 后来尝试如下这种方法可行,参考https://stackoverflow.com/questions/55345373/how-to-install-gcc-g-8-on-centos
On CentOS 7, you can install GCC 8 from Developer Toolset. First you need to enable the Software Collections repository:
yum install centos-release-scl

Then you can install GCC 8 and its c++ compiler:
yum install devtoolset-8-gcc devtoolset-8-gcc-c++

To switch to a shell which defaults gcc and g++ to this GCC version, use:
scl enable devtoolset-8 -- bash

You need to wrap all commands under the scl call, so that the process environment changes perfORMed by this command affect all subshells. For example, you could use the scl command to invoke a shell script that performs the required actions.
3,make PREFIX=/usr/local/redis_cluster_proxy install    4,关于rediscluster-proxy配置文件 启动的时候可以直接在命令行中指定参数,但最好是使用配置文件模式启动,配置文件中的节点如下,很清爽,注释也很清晰,简单备注了一下,期待发现更多的新特性。
# Redis Cluster Proxy configuration file example.
# 如果指定以配置文件的方式启动,必须指定-c 参数
# ./redis-cluster-proxy -c /path/to/proxy.conf
 

################################## INCLUDES ###################################
# Include one or more other config files here.  Include files can include other files.
# 指定配置文件的路径
# If instead you are interested in using includes to override configuration options, it is better to use include as the last line.
# include /path/to/local.conf
# include /path/to/other.conf

######################## CLUSTER ENTRY POINT ADDRESS ##########################
# Indicate the entry point address in the same way it can be indicated in the
# redis cluster集群自身节点信息,这里是3主3从的6个节点,分别是192.168.0.61~192.168.0.66
# redis-cluster-proxy command line arguments.
# Note that it can be overridden by the command line argument itself.
# You can also specify multiple entry-points, by adding more lines, ie:
# cluster 127.0.0.1:7000
# cluster 127.0.0.1:7001
# You can also use the "entry-point" alias instead of cluster, ie:
# entry-point 127.0.0.1:7000
#
# cluster 127.0.0.1:7000
cluster 192.168.0.61:8888
cluster 192.168.0.62:8888
cluster 192.168.0.63:8888
cluster 192.168.0.64:8888
cluster 192.168.0.65:8888
cluster 192.168.0.66:8888


################################### MAIN ######################################
# Set the port used by Redis Cluster Proxy to listen to incoming connections
# redis-cluster-proxy 端口号指定
# from clients (default 7777)
port 7777
 
#  IP地址绑定,这里指定为redis-proxy-cluster所在节点的IP地址
# If you want you can bind a single interface, if the bind option is not
# specified all the interfaces will listen for incoming connections.
# You can also bind on multiple interfaces by declaring bind on multiple lines
#
# bind 127.0.0.1
bind 192.168.0.12
 
#  socket 文件路径
# Specify the path for the Unix socket that will be used to listen for
# incoming connections. There is no default, so Redis Cluster Proxy won"t
# listen on a Unix socket when not specified.
#
# unixsocket /path/to/proxy.socket

# Set the Unix socket file permissions (default 0)
#
# unixsocketperm 760
 
#  线程数量
# Set the number of threads.
threads 8

# Set the TCP keep-alive value on the Redis Cluster Proxy"s socket
#
# tcpkeepalive 300

# Set the TCP backlog on the Redis Cluster Proxy"s socket
#
# tcp-backlog 511

#  连接池信息
# Size of the connections pool used to provide ready-to-use sockets to
# private connections. The number (size) indicates the number of starting
# connections in the pool.
# Use 0 to disable connections pool at all.
# Every thread will have its pool of ready-to-use connections.
# When the proxy starts, every thread will populate a pool containing
# connections to all the nodes of the cluster.
# Whenever a client needs a private connection, it can take a connection
# from the pool, if available. This will speed-up the client transition from
# the thread"s shared connection to its own private connection, since the
# connection from the thread"s pool should be already connected and
# ready-to-use. Otherwise, clients with priovate connections must re-connect
# the the nodes of the cluster (this re-connection will act in a "lazy" way).
#
# connections-pool-size 10

# Minimum number of connections in the the pool. Below this value, the
# thread will start re-spawning connections at the defined rate until
# the pool will be full again.
#
# connections-pool-min-size 10

# Interval in milliseconds used to re-spawn connections in the pool.
# Whenever the number of connections in the pool drops below the minimum
# (see "connections-pool-min-size" above), the thread will start
# re-spawing connections in the pool, until the pool will be full again.
# New connections will be added at this specified interval.
#
# connections-pool-spawn-every 50

# Number of connections to re-spawn in the pool at every cycle that will
# happen with an interval defined by "connections-pool-spawn-every" (see above).
#
# connections-pool-spawn-rate 50
 
#  运行模式,一开始最好指定为no,运行时直接打印出来启动日志或者异常信息,这样可以方便地查看启动异常
#  非常奇怪的是:笔者一开始指定为yes,异常日志输出到文件,竟然跟直接打印日志输出的信息不一致
# Run Redis Cluster Proxy as a daemon.
daemonize yes
 
#  pid 文件指定
# If a pid file is specified, the proxy writes it where specified at startup
# and removes it at exit.
#
# When the proxy runs non daemonized, no pid file is created if none is
# specified in the configuration. When the proxy is daemonized, the pid file
# is used even if not specified, defaulting to
# "/var/run/redis-cluster-proxy.pid".
#
# Creating a pid file is best effort: if the proxy is not able to create it
# nothing bad happens, the server will start and run normally.
#
#pidfile /var/run/redis-cluster-proxy.pid


#  日志文件指定,如果可以正常启动,强烈建议指定一个输出日志文件,所有的运行异常或者错误都可以从日志中查找
# Specify the log file name. Also the empty string can be used to force
# Redis Cluster Porxy to log on the standard output. Note that if you use
# standard output for logging but daemonize, logs will be sent to /dev/null
#
#logfile ""
logfile "/usr/local/redis_cluster_proxy/redis_cluster_proxy.log"


#  跨slot操作,这里设置为yes,允许
# Enable cross-slot queries that can use multiple keys belonging to different
# slots or even different nodes.
# WARN: these queries will break the the atomicity deisgn of many Redis
# commands.
# NOTE: cross-slots queries are not supported by all the commands, even if
# this feature is enabled
#
# enable-cross-slot no
enable-cross-slot yes
 
# Maximum number of clients allowed
#
# max-clients 10000
 
# 连接到redis cluster时候的身份认证,如果redis集群节点设置了身份认证的话,强烈建议redis集群所有节点设置一个统一的auth
# Authentication password used to authenticate on the cluster in case its nodes
# are password-protected. The password will be used both for fetching cluster"s
# configuration and to automatically authenticate proxy"s internal connections
# to the cluster itself (both multiplexing shared connections and clients"
# private connections. So, clients connected to the proxy won"t need to issue
# the Redis AUTH command in order to be authenticated.
#
# auth mypassw
auth your_redis_cluster_password
 
#  这个节点是redis 6.0之后的用户名,这里没有指定
# 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

启动redis-cluster-proxy,./bin/redis-cluster-proxy -c ./proxy.conf
需要注意的是,首次运行时直接打印出来启动日志或者异常信息,保证可以正常启动,然后再以daemonize方式运行
因为笔者一开始遇到了一些错误,发现同样的错误,控制台直接打印出来的日志,跟daemonize方式运行打印到文件的日志不完全一致。

 

redis-cluster-proxy尝试
与普通的redis 集群链接方式不同,redis-cluster-proxy模式下,客户端可以连接至redis-cluster-proxy节点,而无需知道Redis集群自身的详细信息,这里尝试执行一个multpile操作

这里使用传统的集群链接方式,来查看上面multiple操作的数据,可以发现的确是写入到集群中不同的节点中了。

 

故障转移测试
简单粗暴地关闭一个主节点,这里直接关闭192.168.0.61节点,看看redis-cluster-proxy能否正常读写
1,首先redis cluster自身的故障转移是没有问题的,完全成功

2,192.168.0.64接替192.168.0.61成为主节点

3,proxy节点操作数据卡死

查看redis-cluster-proxy的日志,说192.168.0.61节点无法连接,proxy失败失败退出

由此可见,正如日志里说明的,Redis Cluster Proxy v999.999.999 (unstable),期待有更稳定的版本推出。
类似问题坐着本人也有回应,参考:https://github.com/RedisLabs/redis-cluster-proxy/issues/36
The Proxy currently requires that all nodes of the cluster must be up at startup when it fetches the cluster"s internal map.
I"ll probably change this in the next weeks.

 

redis-cluster-proxy是完美的解决方案?
因为刚推出不久,生产环境基本上不会有太多实际的应用,里面肯定有不少坑,但不妨害对其有更多的期待。
初次尝试可以感受的到,redis-cluster-proxy是一个非常轻量级,清爽简单的proxy代理层,它解决了一些redis cluster存在的一些实际问题,对应于程序来说也带来了一些方便性。
如果没有源码开发能力,相比其他第三方proxy中间件,必须要承认官方可靠性和权威性。
那么,redis-cluster-proxy是一个完美的解决方案么,留下两个问题
1,如何解决redis-cluster-proxy单点故障?
2,proxy节点的如何面对网络流量风暴?

 

 
您可能感兴趣的文档:

--结束END--

本文标题: redis 6.0下redis-cluster

本文链接: https://lsjlt.com/news/5898.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • redis 6.0下redis-cluster
    伴随着Redis6.0的发布,作为最令人怦然心动的特性之一,Redis官方同时推出Redis集群的proxy了:redis-cluster-proxy,https://github.com/RedisLabs/redis-clus...
    99+
    2016-07-16
    redis 6.0下redis-cluster
  • redis 6.0 redis-cluster
    伴随着Redis6.0的发布,作为最令人怦然心动的特性之一,Redis官方同时推出Redis集群的proxy了:redis-cluster-proxy,https://github.com/RedisLabs/redis-clus...
    99+
    2020-12-24
    redis 6.0 redis-cluster
  • 【Redis】redis-cluster到redis-cluster的快速复制
    现有个需求是redis-cluster到redis-cluster的快速迁移,并且迁移过后两套redis-cluster都要独立使用无依赖 方法一:使用前面redis迁移中的在线迁移工具 r...
    99+
    2024-04-02
  • 浅析Redis Sentinel 与 Redis Cluster
    目录一、前言二、Redis Sentinel 及 Redis Cluster 简介1、Redis Sentinel1.1、Redis Sentinel 集群模式的 “仲裁会”2、Re...
    99+
    2024-04-02
  • Redis Cluster 扩容
    在上一篇介绍了Redis Cluster的部署实战《Redis Cluster 集群部署实战》若因业务无法支撑现有访问或对以后容量进行扩容预案,如何扩容?可以提前做好快速扩容的脚本,进行一键扩容或是手工进行...
    99+
    2024-04-02
  • Redis集群(Cluster)
    Redis集群 集群解决的问题代理主机和无中心化集群Redis集群的特点Redis集群环境搭建slots(插槽)在集群中录入值查询集群中的值故障恢复Redis集群的优缺点 集群解决的问...
    99+
    2023-08-31
    redis 数据库 服务器
  • 什么是Redis Cluster
    本篇内容介绍了“什么是Redis Cluster”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!=(一)什么...
    99+
    2024-04-02
  • redis cluster (3) 配置
    一、redis 持久化说明1) 手工持久化   SAVE(同步回写)和 BGSAVE(异步回写) 两个命令都会调用 rdbSave 函数,它们都实现RDB持久化,但它们调用的方式各有不同:  SAVE 直接调用 rdbSave ,阻塞 R...
    99+
    2023-01-31
    redis cluster
  • redis 3.0 cluster 集群
    周氏一族,整理技术文档,给下一代留点教程......redis 3.0 cluster 安装篇,请看 http://zhoushouby.blog.51cto.com/9150272/1560400 本篇,是在 "redis 3.0 clu...
    99+
    2023-01-31
    集群 redis cluster
  • 使用redis-shake迁移redis cluster实操
         使用参考:https://help.aliyun.com/knowledge_detail/111066.html 校验工具:redis-full-check   版本1.4.8     使用参考:https://help.a...
    99+
    2017-06-01
    使用redis-shake迁移redis cluster实操
  • Redis高可用集群redis-cluster详解
    哨兵模式主要解决了手动切换主从节点的问题 1 , 哨兵模式的缺陷 .主从节点切换的时候存在访问瞬断,等待时间较长, .只有一个master节点提供写,slave节点提供读,尽管写的效...
    99+
    2024-04-02
  • CentOS 7使用Redis Cluster
    本文更新于2021-11-03,使用Redis 4.0.8,操作系统为CentOS 7.5。 CentOS 7下直接运行redis-trib.rb可能出现如下提示,原因是没有安装Ruby: /usr/bin/env: ruby: N...
    99+
    2017-07-30
    CentOS 7使用Redis Cluster
  • Redis Cluster--运维管理
    上一篇博客我们讲了如何安装配置Redis Cluster,详情参考:Redis Cluster--安装配置,今天我们来学习一下Redis Cluster的日常运维操作Cluster常用命令cluster&n...
    99+
    2024-04-02
  • Redis Cluster在线迁移
    由于之前的redis cluster物理硬件性能不足。决定升级到更好的服务器上。考虑到redis是核心生产数据库,决定在线迁移,迁移过程,不中断服务。下面是测试环境的完成迁移步骤:1. 原环境(测试环境,没...
    99+
    2024-04-02
  • Redis Cluster--安装配置
    背景本篇主要讲Redis Cluster的安装,让我们先用起来,感受一下到底是怎么回事,后面再继续学习有关如何Cluster如何failover,添加节点,删除节点,迁移slots等功能。Redis Clu...
    99+
    2024-04-02
  • 解析Redis Cluster原理
    目录一、前言二、为什么需要RedisCluster三、RedisCluster是什么四、节点负载均衡五、什么是一致性哈希六、虚拟节点机制七、RedisCluster采用的什么算法八、...
    99+
    2024-04-02
  • Redis 6.0 新特性 ACL 介绍
    redis 6.0 acl 介绍 Redis 6.0 新特性 ACL 介绍 Intro 在 Redis 6.0 中引入了 ACL(Access Control List) 的支持,在此前的版本中 Re...
    99+
    2022-03-30
    Redis 6.0 新特性 ACL 介绍
  • 如何搭建Windows环境下Redis Cluster环境
    这篇文章将为大家详细讲解有关如何搭建Windows环境下Redis Cluster环境,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。搭建 Redis集群,三个主节点,三个...
    99+
    2024-04-02
  • 【Redis】Redis高可用之Redis Cluster集群模式详解(Redis专栏启动)
    📫作者简介:小明java问道之路,2022年度博客之星全国TOP3,专注于后端、中间件、计算机底层、架构设计演进与稳定性建工设优化。文章内容兼具广度深度、大厂技术方案,对待技术喜欢推理加验证,就职于知名金融公司后端高级...
    99+
    2023-09-01
    java 面试 开发语言 redis 集群
  • Redis中redis-cluster如何删除指定的key
    这篇文章主要为大家展示了“Redis中redis-cluster如何删除指定的key”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Redis中redis-clu...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作