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

文章目录

    • 一、概述
    • [二、Codis 组织架构图](#二、Codis 组织架构图)
    • [三、Codis 测试规划](#三、Codis 测试规划)
    • [四、Codis 安装及配置](#四、Codis 安装及配置)
      • [4.1 安装 Codis](#4.1 安装 Codis)
      • [4.2 启动 Codis Dashboard](#4.2 启动 Codis Dashboard)
      • [4.3 启动 Codis Proxy](#4.3 启动 Codis Proxy)
      • [4.4 启动 Codis Server](#4.4 启动 Codis Server)
      • [4.5 启动 Codis FE(可选)](#4.5 启动 Codis FE(可选))
    • [五、Codis-FE 配置](#五、Codis-FE 配置)
    • [六、测试 Codis 服务](#六、测试 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-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
bash 复制代码
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 默认配置文件(只执行一次)

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

    • 我这里仅修改了 coordinator_addr,这个地址您根据实际情况修改。
    bash 复制代码
    # 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)
    • & 后台方式运行
    bash 复制代码
    ./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 默认配置文件(只执行一次)

    bash 复制代码
    ./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"
    bash 复制代码
    # 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)
    • & 后台方式运行
    bash 复制代码
    ./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。

    bash 复制代码
    ./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 默认配置文件(只执行一次)

    bash 复制代码
    ./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 )
    • & 后台方式运行
    bash 复制代码
    ./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 &

五、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)

  • 添加 Codis Proxy

    • 只需把 Codis Proxy 填入就可以了。
  • 在 Codis-FE 中也可以为集群配置 哨兵,在 Codis-FE 中也可以为集群配置哨兵,哨兵配置请参考这里

六、测试 Codis 服务

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

    bash 复制代码
    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 查看分布情况

    bash 复制代码
    [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>
相关推荐
Karoku06617 分钟前
【企业级分布式系统】ELK优化
运维·服务器·数据库·elk·elasticsearch
fpcc1 小时前
redis6.0之后的多线程版本的问题
c++·redis
小技与小术1 小时前
数据库表设计范式
数据库·mysql
刘九灵1 小时前
Redis ⽀持哪⼏种数据类型?适⽤场景,底层结构
redis·缓存
安迁岚2 小时前
【SQL Server】华中农业大学空间数据库实验报告 实验三 数据操作
运维·服务器·数据库·sql·mysql
安迁岚2 小时前
【SQL Server】华中农业大学空间数据库实验报告 实验九 触发器
数据库·sql·mysql·oracle·实验报告
Loganer2 小时前
MongoDB分片集群搭建
数据库·mongodb
LKID体2 小时前
Python操作neo4j库py2neo使用之创建和查询(二)
数据库·python·neo4j
刘大浪2 小时前
后端数据增删改查基于Springboot+mybatis mysql 时间根据当时时间自动填充,数据库连接查询不一致,mysql数据库连接不好用
数据库·spring boot·mybatis
一只爱撸猫的程序猿2 小时前
简单实现一个系统升级过程中的数据平滑迁移的场景实例
数据库·spring boot·程序员