当前位置: 首页 > news >正文

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

文章目录

    • 一、概述
    • 二、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>

相关文章:

  • flask踩坑集锦
  • 【Mybatis-Plus】常见的@table类注解
  • 算法题学习
  • Spring Security 6.1.x 系列(2)—— 基于过滤器的基础原理(一)
  • 免费(daoban)gpt,同时去除广告
  • SSH 端口转发:动态转发、本地转发、远程转发
  • git log 用法
  • Python数据分析实战-筛选出DataFrame中指定列都不包含缺失值的记录(附源码和实现效果)
  • 【Spring】SpringWebMVC入门
  • 自定义QChartView实现鼠标放在图表时,显示鼠标位置坐标值(x,y)
  • 能卷死同行的收银系统源码--服装店收银系统+进销存、PHP+mysql
  • 大文件分片上传并发
  • Linux———— 运算命令
  • PyTorch入门学习(十):神经网络-非线性激活
  • QT之多个界面相互切换 (stackedWidget控件)
  • ➹使用webpack配置多页面应用(MPA)
  • 5、React组件事件详解
  • AHK 中 = 和 == 等比较运算符的用法
  • ES6系统学习----从Apollo Client看解构赋值
  • IOS评论框不贴底(ios12新bug)
  • JavaScript函数式编程(一)
  • JS字符串转数字方法总结
  • miniui datagrid 的客户端分页解决方案 - CS结合
  • nfs客户端进程变D,延伸linux的lock
  • overflow: hidden IE7无效
  • Spring Cloud Feign的两种使用姿势
  • Webpack4 学习笔记 - 01:webpack的安装和简单配置
  • 阿里中间件开源组件:Sentinel 0.2.0正式发布
  • 入门到放弃node系列之Hello Word篇
  • 微信公众号开发小记——5.python微信红包
  • 微信开源mars源码分析1—上层samples分析
  • 小程序开发之路(一)
  • 远离DoS攻击 Windows Server 2016发布DNS政策
  • 《码出高效》学习笔记与书中错误记录
  • JavaScript 新语法详解:Class 的私有属性与私有方法 ...
  • PostgreSQL之连接数修改
  • 分布式关系型数据库服务 DRDS 支持显示的 Prepare 及逻辑库锁功能等多项能力 ...
  • ​LeetCode解法汇总2808. 使循环数组所有元素相等的最少秒数
  • (+4)2.2UML建模图
  • (01)ORB-SLAM2源码无死角解析-(66) BA优化(g2o)→闭环线程:Optimizer::GlobalBundleAdjustemnt→全局优化
  • (cljs/run-at (JSVM. :browser) 搭建刚好可用的开发环境!)
  • (poj1.2.1)1970(筛选法模拟)
  • (编程语言界的丐帮 C#).NET MD5 HASH 哈希 加密 与JAVA 互通
  • (大众金融)SQL server面试题(1)-总销售量最少的3个型号的车及其总销售量
  • (二)正点原子I.MX6ULL u-boot移植
  • (官网安装) 基于CentOS 7安装MangoDB和MangoDB Shell
  • (数据结构)顺序表的定义
  • (五)大数据实战——使用模板虚拟机实现hadoop集群虚拟机克隆及网络相关配置
  • (转)h264中avc和flv数据的解析
  • (转)shell中括号的特殊用法 linux if多条件判断
  • ***linux下安装xampp,XAMPP目录结构(阿里云安装xampp)
  • .net core使用ef 6
  • .NET 发展历程
  • .net/c# memcached 获取所有缓存键(keys)
  • .NET/C# 使用反射注册事件