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\>

    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>
相关推荐
阿里云大数据AI技术42 分钟前
云栖实录|MaxCompute全新升级:AI时代的原生数据仓库
大数据·数据库·云原生
不剪发的Tony老师1 小时前
Valentina Studio:一款跨平台的数据库管理工具
数据库·sql
weixin_307779131 小时前
在 Microsoft Azure 上部署 ClickHouse 数据仓库:托管服务与自行部署的全面指南
开发语言·数据库·数据仓库·云计算·azure
六元七角八分2 小时前
pom.xml
xml·数据库
Achou.Wang2 小时前
源码分析 golang bigcache 高性能无 GC 开销的缓存设计实现
开发语言·缓存·golang
虚行2 小时前
Mysql 数据同步中间件 对比
数据库·mysql·中间件
奥尔特星云大使2 小时前
mysql读写分离中间件Atlas安装部署及使用
数据库·mysql·中间件·读写分离·atlas
牛马baby2 小时前
【mysql】in 用到索引了吗?
数据库·mysql·in
杀气丶2 小时前
L2JBR - 修复数据库编码为UTF8
数据库·sql·oracle
-Xie-2 小时前
Mysql杂志(三十)——索引失效情况
数据库·mysql