
简介基于代理Proxy的 Redis 分布式集群解决方案主要用于解决单个 Redis 容量不足、并发不足、需要水平扩展的问题。它由豌豆荚开源使用 Go 编写客户端 | | codis-proxy | ----------------- | | | Redis1 Redis2 Redis3核心组件codis-proxy接收客户端请求转发给正确的redis实例codis-serverredis实例codis-dashboard集群管理员添加节点删除节点数据迁移管理proxyZooKeeper / Etcd保存集群状态所有proxy都从这获取信息codis与redis的区别codis分片位置在proxy大小1024需要代理codis本身不自带完整故障转移机制通常为codisredis主从sentinelproxy高可用单机codis集群实验1、安装依赖yum install -y git wget gcc autoconf automake make安装GOwget 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 GO111MODULEoff查看go env GO111MODULE再次编译成功3、安装ZooKeeper进入安装目录下载Zookeepercd /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配置Zookeepercd /usr/local/zookeeper/conf复制配置模板cp zoo_sample.cfg zoo.cfg编辑配置文件vim zoo.cfg安装Java配置JAVA_HOMEvim /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、启动三个rediscd /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 --configconfig/dashboard.toml7、启动codis-proxy不要关闭当前窗口重新开启一个cd /opt/gopath/src/github.com/CodisLabs/codis修改proxy配置vim config/proxy.tomlproduct_name和和 dashboard 中一致文件中这个位置改成因为要连接zookeeperjodis_name zookeeper jodis_addr 127.0.0.1:2181 jodis_auth 执行./bin/codis-proxy --configconfig/proxy.toml出现proxy waiting online ...原因proxy启动了但是dashboard还没有创建这个proxy记录并上线。执行./bin/codis-admin \ --dashboard127.0.0.1:18080 \ --create-proxy \ --addr127.0.0.1:11080变成proxy is working ...8、创建Redis Group第三个终端执行./bin/codis-admin \ --dashboard127.0.0.1:18080 \ --create-group \ --gid1把三个redis加入Group16379./bin/codis-admin \ --dashboard127.0.0.1:18080 \ --group-add \ --gid1 \ --addr127.0.0.1:63796380./bin/codis-admin \ --dashboard127.0.0.1:18080 \ --group-add \ --gid1 \ --addr127.0.0.1:63806381./bin/codis-admin \ --dashboard127.0.0.1:18080 \ --group-add \ --gid1 \ --addr127.0.0.1:6381查看./bin/codis-admin \ --dashboard127.0.0.1:18080 \ --list-group9、初始化slot./bin/codis-admin \ --dashboard127.0.0.1:18080 \ --slots-assign \ --beg0 \ --end1023 \ --gid1