codis集群搭建

codis集群搭建

清理旧 Redis Cluster

停止所有原生 redis-server 进程

pkill redis-server ps aux | grep redis-server # 确认无残留

查找删除集群标识文件

[root@server1 ~]# find / -name "nodes-*.conf" 2>/dev/null [root@server1 ~]# find / -name "nodes-*.conf" -delete 2>/dev/null

Codis 底层依赖单机模式 Redis,如果残留 Redis Cluster 集群配置文件、开启cluster-enabled yes,后续启动codis-server会直接冲突报错,哪怕你还没编译 Codis。 提前清理能避免编译完成后部署阶段反复排错。

安装 并配置Go 1.7.3

Codis3.2 兼容 Go1.7~1.9,优先选用 go1.7.3 linux/amd64

下载安装

# 下载go1.7.3 linux64安装包 wget https://dl.google.com/go/go1.7.3.linux-amd64.tar.gz # 解压到/usr/local(官方标准路径) tar -zxvf go1.7.3.linux-amd64.tar.gz -C /usr/local

配置环境变量(GOROOT + GOPATH)

编辑全局环境变量

vi /etc/profile

在文件末尾追加下面内容:

# Go1.8 配置 export GOROOT=/usr/local/go # 自定义GOPATH工作目录,可自行修改路径 export GOPATH=/home/codis/gopath export PATH=$PATH:$GOROOT/bin:$GOPATH/bin

生效配置:

source /etc/profile

验证安装

go version # 正确输出:go version go1.8.3 linux/amd64 # 查看GOPATH go env GOPATH # 输出:/home/codis/gopath

Codis 源码编译

# 创建规范GOPATH目录 mkdir -p $GOPATH/src/github.com/CodisLabs cd $GOPATH/src/github.com/CodisLabs # 拉取源码 git clone https://github.com/CodisLabs/codis.git -b release3.2 cd codis # 安装编译依赖 yum install gcc make -y (之前实验装过) # 启动编译 make

系统没有安装 git 工具,无法克隆 Codis 源码

安装git

yum install git -y

重新拉取源码

编译成功后

  • 直接通过 make 进行编译,会看到如下输出:
$ cd $GOPATH/src/github.com/CodisLabs/codis $ make make -j -C extern/redis-3.2.8/ ... ... go build -i -o bin/codis-dashboard ./cmd/dashboard go build -i -o bin/codis-proxy ./cmd/proxy go build -i -o bin/codis-admin ./cmd/admin go build -i -o bin/codis-fe ./cmd/fe

[root@server1 codis]# ls -ln bin/

[root@server1 codis]# cat bin/version

全部二进制文件编译成功
所有核心程序codis-dashboard/codis-proxy/codis-fe/codis-server全部生成并且具备执行权限。

构建codis集群

启动codis-dashboard

使用 脚本启动 dashboard,并查看 dashboard 日志确认启动是否有异常。codis-dashboard-admin.sh

[root@server1 codis]# ./admin/codis-dashboard-admin.sh start

[root@server1 codis]# tail -100 ./log/codis-dashboard.log.2026-08-03 (这里的日期填自己的日期)

dashboard启动成功

dashboard 监听 18080 端口,集群元数据文件系统 /tmp/codis 正常创建。

启动codis-proxy

使用 脚本启动 codis-proxy,并查看 proxy 日志确认启动是否有异常。codis-proxy-admin.sh

[root@server1 codis]# ./admin/codis-proxy-admin.sh start

[root@server1 codis]# tail -100 ./log/codis-proxy.log.2026-08-04

(这里03变04是因为我凌晨做的实验,所以日志时间发生了改变,从8月3号变成了8月4号,以自己的日期为准)

日志内容解读

大量fill slot xxx, backend.addr = , locked = falseCodis 一共有 1024 个槽位(slot 0~1023),当前还没有给 proxy 分配后端 codis-server,所以槽位暂无关联节点,属于正常现象。后续在 Web 面板添加 Redis 分片后,槽位会自动分配。

set sentinels = []实验单机模式没有启用哨兵,为空数组,无需处理。

启动codis-server

使用 脚本启动 codis-server,并查看 redis 日志确认启动是否有异常。codis-server-admin.sh
[root@server1 codis]# ./admin/codis-server-admin.sh start
[root@server1 codis]# tail -100 /tmp/redis_6379.log

redis.conf 配置中 pidfile、logfile 默认保存在 目录,若启动失败,请检查当前用户是否有该目录的读写权限。/tmp

底层 Redis 服务正常监听 6379 端口,作为 Codis 分片节点就绪。

启动codis-fe

使用 脚本启动 codis-fe,并查看 fe 日志确认启动是否有异常。codis-fe-admin.sh

[root@server1 codis]# ./admin/codis-fe-admin.sh start

[root@server1 codis]# tail -100 ./log/codis-fe.log.2026-08-04

代表 Web 管理服务监听 9090 端口,允许任意地址访问。

当前 Codis 全部组件运行状态汇总

grep -E 正则(推荐)
ss -lnp | grep -E "codis-proxy|codis-dashboard|codis-fe|codis-server"

组件端口作用状态
codis-dashboard18080集群元数据管理✅运行
codis-fe9090Web 可视化管理页面✅运行
codis-proxy19000Redis 客户端接入代理✅运行
codis-server6379底层 Redis 分片节点✅运行

Codis-fe Web 页面

浏览器打开:http://192.168.239.132:9090,选中集群名称(示例:codis-demo)

Proxy 栏可看到我们已经启动的 Proxy

  • 新建 Group(槽位分组)

    Codis 所有 slot 槽位会分配到各个 Group,一个 Group 对应一组主从 Redis (codis-server)

    • New Group右侧输入框填写组编号,示例输入1
    • 点击绿色New Group按钮,创建编号为 1 的分组
  • 向分组添加 codis-server 节点

    • Add Server行,填入 codis-server 地址:127.0.0.1:6379
    • 末尾to输入框填写目标 Group 编号:1
    • 点击橙色Add Server,将 Redis 节点加入 Group1

节点同步生效添加完成后,页面表格出现节点,点击SYNC按钮,同步集群配置到 codis-dashboard。

通过初始化slot

新增的集群 slot 状态是 offline,因此我们需要对它进行初始化(将 1024 个 slot 分配到各个 group),而初始化最快的方法可通过 fe 提供的 按钮来做,如下图所示,点击此按钮,我们即快速完成了一个集群的搭建。