简介
基于代理(Proxy)的 Redis 分布式集群解决方案,主要用于解决单个 Redis 容量不足、并发不足、需要水平扩展的问题。它由豌豆荚开源,使用 Go 编写
客户端 | | codis-proxy | ----------------- | | | Redis1 Redis2 Redis3核心组件
codis-proxy
接收客户端请求,转发给正确的redis实例codis-server
redis实例codis-dashboard
集群管理员,添加节点,删除节点,数据迁移,管理proxyZooKeeper / Etcd
保存集群状态,所有proxy都从这获取信息
codis与redis的区别
- codis分片位置在proxy,大小1024
- 需要代理
- codis本身不自带完整故障转移机制,通常为codis+redis主从+sentinel+proxy高可用
单机codis集群实验
1、安装依赖
yum install -y git wget gcc autoconf automake make安装GO
wget https://go.dev/dl/go1.20.14.linux-amd64.tar.gztar -zxvf go1.20.14.linux-amd64.tar.gz -C /usr/local修改配置文件,添加
vim /etc/profileexport GOROOT=/usr/local/go export GOPATH=/opt/gopath export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
生效
source /etc/profile2、下载codis
创建目录
mkdir -p /opt/gopath/src/github.com/CodisLabs查看
yum install -y treetree /opt/gopath进入codis目录下载源码
cd /opt/gopath/src/github.com/CodisLabsgit clone https://github.com/CodisLabs/codis.git -b release3.2
进入make编译
cd codis make编译报错
解决
cd /opt/gopath/src/github.com/CodisLabs/codissed -i 's/go build -i/go build/g' Makefile检查
grep "go build" Makefile再次编译报错
解决
go env -w GO111MODULE=off查看
go env GO111MODULE再次编译成功
3、安装ZooKeeper
进入安装目录下载Zookeeper
cd /usr/localwget https://archive.apache.org/dist/zookeeper/zookeeper-3.7.2/apache-zookeeper-3.7.2-bin.tar.gz解压
tar -zxvf apache-zookeeper-3.7.2-bin.tar.gz创捷数据目录
mkdir -p /data/zookeeper配置Zookeeper
cd /usr/local/zookeeper/conf复制配置模板
cp zoo_sample.cfg zoo.cfg编辑配置文件
vim zoo.cfg
安装Java
配置JAVA_HOME
vim /etc/profile最后添加
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-11.0.23.0.9-2.el7_9.x86_64 export PATH=$PATH:$JAVA_HOME/bin启动
cd /usr/local/zookeeper/bin./zkServer.sh start4、部署redis三节点
创建redis数据目录
mkdir -p /data/codis/{redis1,redis2,redis3}查看
tree /data/codis准备redis配置文件
进入
cd /opt/gopath/src/github.com/CodisLabs/codis/extern/redis-3.2.11redis1配置
vim /data/codis/redis1/redis.conf写入
port 6379 daemonize yes dir /data/codis/redis1 bind 0.0.0.0 protected-mode noredis2配置
复制
cp /data/codis/redis1/redis.conf /data/codis/redis2/vim /data/codis/redis2/redis.confredis3配置
cp /data/codis/redis1/redis.conf /data/codis/redis3/vim /data/codis/redis3/redis.conf5、启动三个redis
cd /opt/gopath/src/github.com/CodisLabs/codis/extern/redis-3.2.11/src./redis-server /data/codis/redis1/redis.conf./redis-server /data/codis/redis2/redis.conf./redis-server /data/codis/redis3/redis.conf6、启动Codis Dashboard
进入准备dashboaard配置
cd /opt/gopath/src/github.com/CodisLabs/codisls config修改dashboard配置
vim config/dashboard.toml变成这样
启动
./bin/codis-dashboard --config=config/dashboard.toml7、启动codis-proxy
不要关闭当前窗口,重新开启一个
cd /opt/gopath/src/github.com/CodisLabs/codis修改proxy配置
vim config/proxy.tomlproduct_name和和 dashboard 中一致,文件中这个位置改成,因为要连接zookeeper
jodis_name = "zookeeper" jodis_addr = "127.0.0.1:2181" jodis_auth = ""
执行
./bin/codis-proxy --config=config/proxy.toml出现
proxy waiting online ...原因
proxy启动了,但是dashboard还没有创建这个proxy记录并上线。
执行
./bin/codis-admin \ --dashboard=127.0.0.1:18080 \ --create-proxy \ --addr=127.0.0.1:11080变成
proxy is working ...8、创建Redis Group
第三个终端执行
./bin/codis-admin \ --dashboard=127.0.0.1:18080 \ --create-group \ --gid=1把三个redis加入Group1
6379
./bin/codis-admin \ --dashboard=127.0.0.1:18080 \ --group-add \ --gid=1 \ --addr=127.0.0.1:63796380
./bin/codis-admin \ --dashboard=127.0.0.1:18080 \ --group-add \ --gid=1 \ --addr=127.0.0.1:63806381
./bin/codis-admin \ --dashboard=127.0.0.1:18080 \ --group-add \ --gid=1 \ --addr=127.0.0.1:6381查看
./bin/codis-admin \ --dashboard=127.0.0.1:18080 \ --list-group9、初始化slot
./bin/codis-admin \ --dashboard=127.0.0.1:18080 \ --slots-assign \ --beg=0 \ --end=1023 \ --gid=1