Redis 的另一个集群版之 Codis 集群

news2024/11/25 20:30:04

文章目录

    • 一、概述
    • 二、Codis 组织架构图
    • 三、Codis 测试规划
    • 四、Codis 安装及配置
      • 4.1 安装 Codis
      • 4.2 启动 Codis Dashboard
      • 4.3 启动 Codis Proxy
      • 4.4 启动 Codis Server
      • 4.5 启动 Codis FE(可选)
    • 五、Codis-FE 配置
    • 六、测试 Codis 服务

如果您对Redis的了解不够深入请关注本栏目,本栏目包括Redis安装,Redis配置文件说明,Redis命令和数据类型说明,Redis持久化配置,Redis主从复制和哨兵机制,Redis Cluster(集群)配置,Redis Predixy 集群,Redis Twemproxy 集群。

一、概述

  • Codis 是什么?

    • Codis 是 Wandoujia Infrastructure Team 开发的一个分布式 Redis 服务,用户可以看成是一个无限内存的 Redis 服务,有动态扩/缩容的能力。对偏存储型的业务更实用,如果你需要 SUBPUB 之类的指令,Codis 是不支持的。时刻记住 Codis 是一个分布式存储的项目.。对于海量的 key,value不太大( <= 1M ),随着业务扩展缓存也要随之扩展的业务场景有特效.
  • 使用 Codis 有什么好处?

    • Redis获得动态扩容/缩容的能力,增减redis实例对client完全透明、不需要重启服务,不需要业务方担心 Redis 内存爆掉的问题。也不用担心申请太大,造成浪费。业务方也不需要自己维护 Redis。
    • Codis支持水平扩容/缩容,扩容可以直接界面的 “Auto Rebalance” 按钮,缩容只需要将要下线的实例拥有的slot迁移到其它实例,然后在界面上删除下线的group即可。
  • Codis由豌豆荚于2014年11月开源,基于go和c开发,国人开发的优秀开源软件之一,稳定性极高,性能也还可以。

  • 开源地址:https://github.com/CodisLabs/codis

  • 中文教程:https://github.com/CodisLabs/codis/blob/master/doc/tutorial_zh.md

  • 下载地址:https://github.com/CodisLabs/codis/releases

二、Codis 组织架构图

  • 以下是 Codis 官网给的组织架构图

在这里插入图片描述

  • ZooKeeper 是Codis的协调器(Coordinator)
    • Codis的协调器支持 zookeeper 、 etcd 、 filesystem。这里我使用 zookeeper 。有关zookeeper 的安装配置请看这里。
  • Codis-Dashboard(监控管理)
    • Codis-Dashboard 是 Codis 的管理界面,提供了对 Codis 集群的配置、监控和管理功能,包括集群状态、节点信息、数据分布等。
    • Codis-Dashboard 通过和 Codis-Proxy 通信,管理和监控整个 Codis 集群的状态和配置。
  • Codis-Proxy(核心组件)
    • Codis-Proxy 是 Codis 的代理组件,它接收客户端的请求,并将请求路由到相应的 Codis-Server 节点。Codis-Proxy 负责处理请求的转发和负载均衡,并提供了一些高级功能,如请求限流、请求重试等。
    • Codis-Proxy 接收客户端的请求,并根据一定的策略将请求路由到相应的 Codis-Server 节点。
  • Codis-Server(本质上就是Redis服务器)
    • Codis-Server 是 Codis 集群中的 Redis 服务器节点,负责存储和处理数据。每个 Codis-Server 节点都管理着一部分数据,并通过主从复制实现数据的高可用性和故障转移。
    • Codis-Server 负责存储和处理数据,并通过主从复制实现高可用性和故障转移。有关Redis主从配置请看这里。
  • Codis-FE(可选组件)
    • Codis-FE 是 Codis 的前端组件,它是 Codis-Dashboard 和 Codis-Proxy 的前端界面,提供了用户与 Codis 集群交互的界面和接口。
    • Codis-FE 是 Codis-Dashboard 和 Codis-Proxy 的前端界面,提供用户与集群的交互。

三、Codis 测试规划

  • 准备2个Codis Server(我为了简单没有搭建主从复制,您可以自己搭建,有关Redis 主从复制看请这里),端口分别为 6371、6372。
  • 准备1个Zookeeper 集群,我配置的集群地址是“192.168.8.51:2181,192.168.8.52:2181,192.168.8.53:2181”。有关zookeeper 的安装配置请看这里。
  • 准备1个 Codis-Proxy (可以多个)
  • 准备1个 Codis-Dashboard (可以多个)
  • 准备1个 Codis-FE (可以没有)
  • 下面是我测试的架构图:

在这里插入图片描述

四、Codis 安装及配置

4.1 安装 Codis

  • 依次执行以下命令来安装 Codis
yum install wget unzip -y
wget https://github.com/CodisLabs/codis/releases/download/3.1.5/codis3.1.5-go1.7.5-linux.zip
unzip codis3.1.5-go1.7.5-linux.zip  -d /opt/
ls /opt/
cd /opt/codis3.1.5-go1.7.5-linux
mkdir conf logs

4.2 启动 Codis Dashboard

  • 导出 Codis Dashboard 默认配置文件(只执行一次)

    ./codis-dashboard --default-config > conf/dashboard.toml
    
  • 修改 Codis Dashboard 配置文件: vi conf/dashboard.toml

    • 我这里仅修改了 coordinator_addr,这个地址您根据实际情况修改。
    # Set Coordinator, only accept "zookeeper" & "etcd" & "filesystem".
    # 配置 Codis 协调器为 zookeeper
    coordinator_name = "zookeeper"
    #coordinator_addr = "127.0.0.1:2181"
    # 配置 Codis 协调器为 zookeeper 集群的址
    coordinator_addr = "192.168.8.51:2181,192.168.8.52:2181,192.168.8.53:2181"
    
    # Set Codis Product Name/Auth.
    # 配置 Codis 集群名称为 codis-demo
    product_name = "codis-demo"
    # 配置 Codis 集群密码为空
    product_auth = ""
    
    # Set bind address for admin(rpc), tcp only.
    # Codis Dashboard 管理地址及端口
    admin_addr = "0.0.0.0:18080"
    
    # Set configs for redis sentinel.
    sentinel_quorum = 2
    sentinel_parallel_syncs = 1
    sentinel_down_after = "30s"
    sentinel_failover_timeout = "5m"
    
    
  • 启动 Codis Dashboard

    • –ncpu=4 最大使用 CPU 个数为4个
    • –config=conf/dashboard.toml 启动配置文件
    • –log=logs/dashboard.log 日志输出文件
    • –log-level=WARN 日志输出等级(INFO,WARN,DEBUG,ERROR)
    • & 后台方式运行
    ./codis-dashboard --ncpu=4 --config=conf/dashboard.toml --log=logs/dashboard.log --log-level=WARN &
    
    • 启动成功后您可以访问 http://127.0.0.1:18080/ 查看,他是 RESTful API ,可以看到返回数据。如果失败可以看 logs/dashboard.log 日志文件。

4.3 启动 Codis Proxy

  • 导出 Codis Proxy 默认配置文件(只执行一次)

    ./codis-proxy --default-config > conf/proxy.toml
    
  • 修改 Codis Proxy 配置文件: vi conf/proxy.toml

    • 这修改了 jodis_name = “zookeeper”, jodis_addr = “192.168.8.51:2181,192.168.8.52:2181,192.168.8.53:2181”
    # Set Codis Product Name/Auth.
    # 配置 Codis 集群名称为 codis-demo
    product_name = "codis-demo"
    # 配置 Codis 集群密码为空
    product_auth = ""
    
    # Set bind address for admin(rpc), tcp only.
    # Codis Proxy 管理地址及端口
    admin_addr = "0.0.0.0:11080"
    
    # Set bind address for proxy, proto_type can be "tcp", "tcp4", "tcp6", "unix" or "unixpacket".
    # Redis 端口类型,接受 tcp/tcp4/tcp6/unix/unixpacket
    proto_type = "tcp4"
    # Redis 端口地址或者路径
    proxy_addr = "0.0.0.0:19000"
    
    # Set jodis address & session timeout, only accept "zookeeper" & "etcd".
    jodis_name = "zookeeper"
    # Jodis 注册 zookeeper 地址
    jodis_addr = "192.168.8.51:2181,192.168.8.52:2181,192.168.8.53:2181"
    # odis 注册 session timeout 时间,单位 second
    jodis_timeout = "20s"
    # Jodis 注册 zookeeper 的路径
    jodis_compatible = false
    
    # Set datacenter of proxy.
    proxy_datacenter = ""
    
    # Set max number of alive sessions.
    proxy_max_clients = 1000
    
    # Set max offheap memory size. (0 to disable)
    proxy_max_offheap_size = "1024mb"
    
    # Set heap placeholder to reduce GC frequency.
    proxy_heap_placeholder = "256mb"
    
    # Proxy will ping backend redis (and clear 'MASTERDOWN' state) in a predefined interval. (0 to disable)
    # 与 codis-server 探活周期,单位 second,0 表示禁止
    backend_ping_period = "5s"
    
    # Set backend recv buffer size & timeout.
    backend_recv_bufsize = "128kb"
    backend_recv_timeout = "30s"
    
    # Set backend send buffer & timeout.
    backend_send_bufsize = "128kb"
    backend_send_timeout = "30s"
    
    # Set backend pipeline buffer size.
    backend_max_pipeline = 1024
    
    # Set backend never read replica groups, default is false
    backend_primary_only = false
    
    # Set backend parallel connections per server
    backend_primary_parallel = 1
    backend_replica_parallel = 1
    
    # Set backend tcp keepalive period. (0 to disable)
    backend_keepalive_period = "75s"
    
    # If there is no request from client for a long time, the connection will be closed. (0 to disable)
    # Set session recv buffer size & timeout.
    # 与 client 连接读写缓冲区大小,单位 byte
    session_recv_bufsize = "128kb"
    # 与 client 连接最大读超时,单位 second,0 表示禁止
    session_recv_timeout = "30m"
    
    # Set session send buffer size & timeout.
    session_send_bufsize = "64kb"
    session_send_timeout = "30s"
    
    # Make sure this is higher than the max number of requests for each pipeline request, or your client may be blocked.
    # Set session pipeline buffer size.
    # 与 client 连接最大的 pipeline 大小
    session_max_pipeline = 1024
    
    # Set session tcp keepalive period. (0 to disable)
    # 与 client 的 tcp keepalive 周期,仅 tcp 有效,0 表示禁止
    session_keepalive_period = "75s"
    
    # Set session to be sensitive to failures. Default is false, instead of closing socket, proxy will send an error response to client.
    session_break_on_failure = false
    
    # Set metrics server (such as http://localhost:28000), proxy will report json formatted metrics to specified server in a predefined period.
    metrics_report_server = ""
    metrics_report_period = "1s"
    
    # Set influxdb server (such as http://localhost:8086), proxy will report metrics to influxdb.
    metrics_report_influxdb_server = ""
    metrics_report_influxdb_period = "1s"
    metrics_report_influxdb_username = ""
    metrics_report_influxdb_password = ""
    metrics_report_influxdb_database = ""
    
    
  • 启动 Codis Proxy

    • –ncpu=4 最大使用 CPU 个数为4个
    • –config=conf/proxy.toml 启动配置文件
    • –log=logs/proxy.log 日志输出文件
    • –log-level=WARN 日志输出等级(INFO,WARN,DEBUG,ERROR)
    • & 后台方式运行
    ./codis-proxy --ncpu=4 --config=conf/proxy.toml --log=logs/proxy.log --log-level=WARN &
    
    • 启动成功后您可以访问 http://127.0.0.1:11080/ 查看,他是 RESTful API ,可以看到返回数据。如果失败可以看 logs/proxy.log 日志文件。

    • 然后可以使用以下命令将 Codis Proxy 加入/移除 Codis Dashboard 集群。建议等后面安装 Codis FE 后使用图形化界面配置。

      • 添加 Codis Proxy

      ./codis-admin --dashboard=127.0.0.1:18080 --create-proxy -x 127.0.0.1:11080

      • 删除 Codis Proxy

      ./codis-admin --dashboard=127.0.0.1:18080 --remove-proxy --addr=127.0.0.1:11080 --force

4.4 启动 Codis Server

  • 启动两个 Codis Server,端口分别为 6371 和 6372。

    ./codis-server --port 6371
    ./codis-server --port 6372
    

    Codis Server 就是 Redis Server, 跟以前启动 Redis Server 一样的(类似 redis-server redis.conf)。Codis Server 启动时也可以使用配置文件,各参数配置也一样,请参考Redis 配置文件。

    启动完成后可直接使用 redis-cli -p 6371 连接测试。

    然后可以使用以下命令将 Codis Server加入/移除 Codis Dashboard 集群。这里要用到组号,建议等后面安装 Codis FE 后使用图形化界面配置。这里只是列出来说明可以使用命令操作(各版本可能不一样)。

    ​ codis-admin --dashboard=127.0.0.1:18080 --list-group

    ​ codis-admin -c codis.json group create <group_id>

    ​ codis-admin -c codis.json group remove <group_id>

    ​ codis-admin -c codis.json server add <group_id> <redis_host> <redis_port> <redis_password>

    ​ codis-admin -c codis.json server remove <server_id>

    ​ codis-admin -c codis.json server list

    如:

    ./codis-admin -c codis.json server add 1 127.0.0.1 6371

    ./codis-admin -c codis.json server add 1 127.0.0.1 6372

4.5 启动 Codis FE(可选)

  • 导出 Codis FE 默认配置文件(只执行一次)

    ./codis-dashboard --default-config > conf/dashboard.toml
    
  • 启动 Codis FE

    • –ncpu=4 最大使用 CPU 个数为4个
    • –log=logs/fe.log 日志输出文件
    • –log-level=WARN 日志输出等级(INFO,WARN,DEBUG,ERROR)
    • zookeeper=192.168.8.51:2181,192.168.8.52:2181,192.168.8.53:2181 这是 Zookeeper 集群地址,请根据您的实际情况配置
    • –listen=127.0.0.1:8080 HTTP 服务端口,启动后你可以在浏览器中打开这个地址,使用UI管理 Codis (生产环境为了安全都会使用内网IP地址,我测试时使用 0.0.0.0 )
    • & 后台方式运行
    ./codis-fe --ncpu=4 --log=logs/fe.log --log-level=WARN --zookeeper=192.168.8.51:2181,192.168.8.52:2181,192.168.8.53:2181 --listen=0.0.0.0:8080 &
    
    • 启动成功后您可以访问 http://127.0.0.1:8080/ 查看。

五、Codis-FE 配置

  • 在浏览器打开 Codis-FE,主界面如下

    在这里插入图片描述

  • 把 Codis Server 加入 Codis 集群(把页面往下拉,找到 Group)

    • 在 New Group 后面输入1,然后点击 New Group

    • 在 Add Server 后面输入 Codis Server 地址(127.0.0.1:6371)和 Group(1)后点占击 Add Server。

    • 再输入第二个 Codis Server 地址(127.0.0.1:6372)和 Group(1)后点占击 Add Server。

      Codis 集群可以分配 9999 个组,取值范围为 1~9999。

    在这里插入图片描述

  • 分配槽位(拖动页面,找到 Slots)

    • 分配槽位可以手动分配,也可以自动分配,我这里使用自动分配。点击 Rebalance All Slots 然后确定。可以看到提示将 0~1023槽位全部分配给了组1(group1)

      如果你不了解槽位,请看Redis Cluster,这个里面讲解了槽位分配的情况 。

    在这里插入图片描述

  • 添加 Codis Proxy

    • 只需把 Codis Proxy 填入就可以了。

    在这里插入图片描述

  • 在 Codis-FE 中也可以为集群配置 哨兵,在 Codis-FE 中也可以为集群配置哨兵,哨兵配置请参考这里。

    在这里插入图片描述

六、测试 Codis 服务

  • 测试时直接使用 Redis Client 连接 Codis Proxy 就可以了(默认端口19000),如下:

    redis-cli -p 19000
    

    [root@yiqifu-redis ~]# redis-cli -p 19000
    127.0.0.1:19000> set aaa 1111
    OK
    127.0.0.1:19000> get aaa
    “1111”
    127.0.0.1:19000> incr aaa
    (integer) 1112
    127.0.0.1:19000> get aaa
    “1112”
    127.0.0.1:19000>

  • 完成后你可以看数据被分配那个 Codis Server,如下,我直接连接 Codis Server 查看分布情况

    [root@yiqifu-redis ~]# redis-cli -p 6371
    127.0.0.1:6371> keys *
    1) "aaa"
    127.0.0.1:6371>
    
    [root@yiqifu-redis ~]# redis-cli -p 6372
    127.0.0.1:6372> keys *
    (empty array)
    127.0.0.1:6372>
    
    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1167487.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【借力打力】记一次由于堆栈信息不详细的错误排查方法,利用访问日志进行定位问题

【借力打力】记一次由于堆栈信息不详细的错误排查方法&#xff0c;利用访问日志进行定位问题 1&#xff0c;背景2&#xff0c;排查步骤2.1 调用方问题2.2 Nginx手段2.3 运维工具辅助2.4 嵌入tomcat日志记录 3&#xff0c;结果 1&#xff0c;背景 异常信息每隔50分钟显示一次&a…

FFmpeg——使用Canvas录制视频尚存问题的解决方案

个人简介 &#x1f440;个人主页&#xff1a; 前端杂货铺 &#x1f64b;‍♂️学习方向&#xff1a; 主攻前端方向&#xff0c;正逐渐往全干发展 &#x1f4c3;个人状态&#xff1a; 研发工程师&#xff0c;现效力于中国工业软件事业 &#x1f680;人生格言&#xff1a; 积跬步…

DELPHI安卓开发如何初始化frame 生成create方法

记住名字需要一样create 点击create这时按住ctrlshiftc 弹出以后就就完成frame的初始化create方法

Map和Set(JAVA)

本篇文章建议在了解了哈希表和二叉搜索树后食用更佳。 链接: 二叉搜索树 和 哈希表 (JAVA) Map和Set都是一种专门用来进行搜索的容器或者数据结构&#xff0c;其搜索的效率与其具体的实例化子类有关。 Map接口 Map是一个接口&#xff0c;不能直接实例化对象&#xff0c;如果…

kibana显示时间数据时的时区问题及时间显示格式设置

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

电源纹波示波器测试方法:示波器纹波测试步骤详解

示波器测试电源纹波的步骤 一、准备测试设备 测试之前选择一台示波器和合适的电压探头。探头有无源探头和有源探头两种&#xff0c;综合来讲一般选择衰减比例1:1的无源探头测量输出阻抗及频率较低的电源纹波。 二、连接电源 连接示波器探头和电源输出端&#xff0c;确保连接完好…

Kafka反序列化RCE漏洞(CVE-2023-34040)

漏洞描述 Spring Kafka 是 Spring Framework 生态系统中的一个模块&#xff0c;用于简化在 Spring 应用程序中集成 Apache Kafka 的过程&#xff0c;记录 (record) 指 Kafka 消息中的一条记录。 受影响版本中默认未对记录配置 ErrorHandlingDeserializer&#xff0c;当用户将…

PSP - 蛋白质-核酸复合物结构预测 RoseTTAFoldNA 算法框架 (Protein-RNA、Protein-DNA、RNA)

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/134208615 Paper: Accurate prediction of nucleic acid and protein-nucleic acid complexes using RoseTTAFoldNA GitHub: RoseTTAFold2NA 蛋白…

分享99个工作总结PPT,总有一款适合您

分享99个工作总结PPT&#xff0c;总有一款适合您 PPT下载链接&#xff1a;https://pan.baidu.com/s/1ETaGRUsTRRQq3i5PJUX7tA?pwd8888 提取码&#xff1a;8888 Python采集代码下载链接&#xff1a;采集代码.zip - 蓝奏云 黑金商务路演工作汇报PPT模板 古韵中国风财务计…

JavaSE java对象的比较

目录 1 问题提出2 元素的比较2.1 基本类型的比较2.2 对象的比较 3 对象的比较3.1 覆写基类的equal3.2 基于Comparble接口类的比较3.3 基于比较器比较3.4 三种方式对比 4 集合框架中PriorityQueue的比较方式5 总结 1 问题提出 上节课我们讲了优先级队列&#xff0c;优先级队列在…

汇编-字符串

字符串常量是用单引号或双引号括起来的一个字符序列 当以下面例子中的方式使用时&#xff0c;嵌入引号也是允许的&#xff1a; 正如字符常量以整数形式存放一样&#xff0c;字符串常量在内存中的存储形式为整数字节值的序列。例如&#xff0c; 字符串字面量“ABCD”包含四个字…

SPSS单样本K-S检验

前言&#xff1a; 本专栏参考教材为《SPSS22.0从入门到精通》&#xff0c;由于软件版本原因&#xff0c;部分内容有所改变&#xff0c;为适应软件版本的变化&#xff0c;特此创作此专栏便于大家学习。本专栏使用软件为&#xff1a;SPSS25.0 本专栏所有的数据文件请点击此链接下…

第25期 | GPTSecurity周报

GPTSecurity是一个涵盖了前沿学术研究和实践经验分享的社区&#xff0c;集成了生成预训练 Transformer&#xff08;GPT&#xff09;、人工智能生成内容&#xff08;AIGC&#xff09;以及大型语言模型&#xff08;LLM&#xff09;等安全领域应用的知识。在这里&#xff0c;您可以…

GEE:GEE中实现简单计算器

作者&#xff1a;CSDN _养乐多_ 本文记录了在 Google Earth Engine&#xff08;GEE&#xff09;上实现简单计算器的代码。 APP链接&#xff1a;https://949384116.users.earthengine.app/view/simplecalculator 文章目录 一、完整代码二、代码链接 一、完整代码 // 定义初始…

二十、泛型(1)

本章概要 基本概念 与 C 的比较 简单泛型 一个元组类库一个堆栈类RandomList 基本概念 普通的类和方法只能使用特定的类型&#xff1a;基本数据类型或类类型。如果编写的代码需要应用于多种类型&#xff0c;这种严苛的限制对代码的束缚就会很大。 多态是一种面向对象思想的泛…

预制构建生产管理系统

在建筑施工领域&#xff0c;预制构件的使用越来越广泛&#xff0c;它能够提高工程质量和施工效率&#xff0c;减少施工现场对环境的影响。通过凡尔码的二维码管理平台&#xff0c;系统从&#xff1a;生产过程、生产数据、生产计划、生产管理、成品交付等多个环节、工序和流程进…

mermaid学习第一天/更改主题颜色和边框颜色/《需求解释流程图》

mermaid 在线官网&#xff1a; https://mermaid-js.github.io/ 在线学习文件&#xff1a; https://mermaid.js.org/syntax/quadrantChart.html 1、今天主要是想做需求解释的流程图&#xff0c;又不想自己画&#xff0c;就用了&#xff0c;框框不能直接进行全局配置&#xff0…

如何助力机构单位提升运营效率?有什么靠谱的大数据管理平台?

随着数字化时代的到来&#xff0c;大数据管理平台已成为机构单位提高效率、优化资源配置的关键工具。其中&#xff0c;工单管理系统作为大数据管理平台的重要组成部分&#xff0c;对于机构单位运营的优化和提升具有举足轻重的地位。本文小编将为您介绍一款优秀的工单管理系统—…

Zygote进程通信为什么用Socket而不是Binder?

Zygote进程是Android系统中的一个特殊进程&#xff0c;它在系统启动时被创建&#xff0c;并负责孵化其他应用进程。它的主要作用是预加载和共享应用进程的资源&#xff0c;以提高应用启动的速度。 在Android系统中&#xff0c;常用的进程通信方式有以下几种&#xff1a; Intent…

概率论和数理统计(一)基本概念

前言 生活中对于事件的发生,可以概括为 确定现象&#xff1a;在一定条件下必然发生&#xff0c;如日出随机现象&#xff1a;在个别试验中其结果呈现出不确定性&#xff0c;在大量重复试验中其结果又具有统计规律的现象&#xff0c;称之为随机现象。 随机现象的特点&#xff…