文章目录
-
- 一、概述
- [二、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/blob/master/doc/tutorial_zh.md
二、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
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 &
- 启动成功后您可以访问 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),如下:
bashredis-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>