美文网首页我爱编程
部署redis集群管理工具-codis

部署redis集群管理工具-codis

作者: 撸大师 | 来源:发表于2016-09-14 10:19 被阅读472次

    一、codis 简介

    摘自官方:Codis 是一个分布式 Redis 解决方案, 对于上层的应用来说, 连接到 Codis Proxy 和连接原生的 Redis Server 没有明显的区别 (有一些命令不支持), 上层应用可以像使用单机的 Redis 一样使用, Codis 底层会处理请求的转发, 不停机的数据迁移等工作, 所有后边的一切事情, 对于前面的客户端来说是透明的, 可以简单的认为后边连接的是一个内存无限大的 Redis 服务

    • Codis 由四部分组成:
     Codis Proxy (codis-proxy)
    Codis Dashboard (codis-config)
    Codis Redis (codis-server)
    ZooKeeper/Etcd
    
    • codis-proxy 是客户端连接的 Redis 代理服务, codis-proxy 本身实现了 Redis 协议, 表现得和一个原生的 Redis 没什么区别 (就像 Twemproxy), 对于一个业务来说, 可以部署多个 codis-proxy, codis-proxy 本身是无状态的.
    • codis-config 是 Codis 的管理工具, 支持包括, 添加/删除 Redis 节点, 添加/删除 Proxy 节点, 发起数据迁移等操作. codis-config 本身还自带了一个 http server, 会启动一个 dashboard, 用户可以直接在浏览器上观察 Codis 集群的运行状态.
    • codis-server 是 Codis 项目维护的一个 Redis 分支, 基于 2.8.21 开发, 加入了 slot 的支持和原子的数据迁移指令. Codis 上层的 codis-proxy 和 codis-config 只能和这个版本的 Redis 交互才能正常运行.
    • Codis 依赖 ZooKeeper 来存放数据路由表和 codis-proxy 节点的元信息, codis-config 发起的命令都会通过 ZooKeeper 同步到各个存活的 codis-proxy.
    • Codis 支持按照 Namespace 区分不同的产品, 拥有不同的 product name 的产品, 各项配置都不会冲突.

    二、codis安装

    1. 环境

    go 1.5.4
    zookeeper 3.4.7
    jdk 1.7

    2. 安装 go,所有节点均安装

    wget http://www.golangtc.com/static/go/1.5.4/go1.5.4.linux-amd64.tar.gz
    tar xvf go1.5.4.linux-amd64.tar.gz -C /data/c-app/
    vim /etc/profile
    #codis
    export GOROOT=/data/c-app/go
    export GOPATH=/data/c-app/mygo
    source /etc/profile
    

    3. 安装zk

    • 安装 jdk
    vim /etc/profile
    JAVA_HOME=/usr/local/jdk1.7.0_51
    CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
    export JAVA_HOME PATH CLASSPATH
    PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
    source /etc/profile
    
    • 安装 zookeeper
    tar xvf zookeeper-3.4.7.tar.gz -C /data/c-app/
    cd /data/c-app/zookeeper-3.4.7/
    vim /etc/profile
    export ZOOKEEPER_HOME=/usr/local/zookeeper-3.4.7
    export PATH=$GOROOT/bin:$ZOOKEEPER_HOME/bin:$PATH
    source /etc/profile
    
    • 配置 zookeeper 集群
    mkdir /data/c-app/{zk_data,zk_logs}/{zk-2181,zk-2182,zk-2183} -p
    cd /data/c-app/zookeeper-3.4.7/conf
    
    • cat 1.zoo.cfg
    tickTime=2000
    dataDir=/data/c-app/zk_data/zk-2181
    dataLogDir=/data/c-app/zk_logs/zk-2181
    clientPort=2181
    initLimit=10
    syncLimit=5
    server.1=127.0.0.1:20881:30881
    server.2=127.0.0.1:20882:30882
    server.3=127.0.0.1:20883:30883
    
    • cat 2.zoo.cfg
    tickTime=2000
    dataDir=/data/c-app/zk_data/zk-2182
    dataLogDir=/data/c-app/zk_logs/zk-2182
    clientPort=2182
    initLimit=10
    syncLimit=5
    server.1=127.0.0.1:20881:30881
    server.2=127.0.0.1:20882:30882
    server.3=127.0.0.1:20883:30883
    
    • cat 3.zoo.cfg
    tickTime=2000
    dataDir=/data/c-app/zk_data/zk-2183
    dataLogDir=/data/c-app/zk_logs/zk-2183
    clientPort=2183
    initLimit=10
    syncLimit=5
    server.1=127.0.0.1:20881:30881
    server.2=127.0.0.1:20882:30882
    server.3=127.0.0.1:20883:30883
    

    4. 安装 codis,除ZooKeeper节点外其余节点均正常安装

    go get -u -d github.com/CodisLabs/codis
    cd $GOPATH/src/github.com/wandoulabs/codis
    make && make gotest
    ln -s $GOPATH/src/github.com/wandoulabs/codis /data/c-app/
    cd /data/c-app/codis
    mkdir {conf,redis_conf,scripts}
    

    5. 配置 redis,仅需要在redis节点,目前都在codis节点

    cd redis_conf

    • cat 6611.conf
    daemonize yes
    pidfile /var/run/redis_6611.pid
    port 6611
    logfile "/data/codis_server/logs/codis_6611.log"
    save 900 1
    save 300 10
    save 60 10000
    dbfilename 6611.rdb
    dir /data/codis_server/data/6611
    
    • cat 6612.conf
    daemonize yes
    pidfile /var/run/redis_6612.pid
    port 6612
    logfile "/data/codis_server/logs/codis_6612.log"
    save 900 1
    save 300 10
    save 60 10000
    dbfilename 6612.rdb
    dir /data/codis_server/data/6612
    
    • 这即是一组 redis主从,可以多配置几组redis主从,多口为6621、6622、6631、6632

    6. 加入内核參数

    echo "vm.overcommit_memory = 1" >>  /etc/sysctl.conf
    sysctl -p
    

    7. 分别启动

    • zookeeper
    cd /data/c-app/zookeeper-3.4.7/
    ./bin/zkServer.sh start ./conf/1.zoo.cfg
    ./bin/zkServer.sh start ./conf/2.zoo.cfg
    ./bin/zkServer.sh start ./conf/3.zoo.cfg
    
    • codis-server(redis)
    cd /data/c-app/codis/redis_conf/
    nohup ./bin/codis-server ./redis_conf/6611.conf &
    nohup ./bin/codis-server ./redis_conf/6612.conf &
    

    # 在启动2组,进程如下

    [root@ops-jenkins-01 codis]# ps -ef|grep codis
    root      6552     1  0 13:35 ?        00:00:00 ./bin/codis-server *:6622                
    root      6558     1  0 13:35 ?        00:00:00 ./bin/codis-server *:6621                
    root      6564     1  0 13:35 ?        00:00:00 ./bin/codis-server *:6631                
    root      6570     1  0 13:35 ?        00:00:00 ./bin/codis-server *:6632                
    root      6576 32270  0 13:35 pts/1    00:00:00 grep codis
    root     24293     1  0 11:07 ?        00:00:07 ./bin/codis-server *:6611                
    root     24299     1  0 11:07 ?        00:00:07 ./bin/codis-server *:6612
    
    • codis dashboard
      # 配置 dashboard
    vim codis-config.ini
    zk=127.0.0.1:2181
    product=test
    dashboard_addr=localhost:18087
    proxy_id=proxy_1
    proto=tcp4
    

    # 启动 dashboard 服务

     nohup /data/c-app/codis/bin/codis-config dashboard --http-log=/data/c-app/codis/dashboard.log &
    [root@ops-jenkins-01 codis]# ps -ef|grep codis
    root     24293     1  0 11:07 ?        00:00:00 ./bin/codis-server *:6611                
    root     24299     1  0 11:07 ?        00:00:00 ./bin/codis-server *:6612                
    root     29326     1  0 11:23 pts/1    00:00:00 /data/c-app/codis/bin/codis-config dashboard --http-log=/data/c-app/codis/dashboard.log
    

    Tips:如果报错:[error]: dashboard already exists: {"addr": "0.0.0.0:18087", "pid": 26035};
    这种问题是由于使用了kill -9导致了dashboard服务异常终止,而退出服务的时候没有在zk上清除自已的信息,所以就出现了这种问题。
    临时性的解决办法就是:

    /data/c-app/zookeeper-3.4.7/bin/zkCli.sh
    rmr /zk/codis/db_test/dashboard
    

    # 初始化 slots

    ./bin/codis-config -c codis-config.ini slot init
    

    # 强制格式化slot

    ./bin/codis-config -c config.ini slot init -f
    

    8. 访问

    codis dashboard的默认端口是18087,我是配置了域名后直接访问

    codis dashboard
    • 至此,codis安装成功,下面讲如何配置使用

    三、codis 使用

    1. 添加codis_server

    • 页面添加


      add codis server 1
    • 命令行添加
    ./bin/codis-config server add 2 127.0.0.1:6621 master
    ./bin/codis-config server add 2 127.0.0.1:6622 slave
    

    刷新页面即可看到:

    codis server 2

    Tips: 点击“Promote to Master”就会将slave的redis提升为master,而原来的master会自己主动下线。

    2. 开启分片

    • 页面添加


      part
      slot status
    • 命令行添加

    ./bin/codis-config -c config.ini slot range-set 512 1023 2 online
    

    # 查看slot


    slot status
    • 扩容,在线添加新分片
    # 在添加一组 codis_server
    ./bin/codis-config server add 2 127.0.0.1:6631 master
    ./bin/codis-config server add 2 127.0.0.1:6632 slave
    # 添加新分片
    ./bin/codis-config -c config.ini slot migrate 256 511 3
    
    solt 3
    • 导入key到 redis,查看主从情况
    cat data.txt|./redis-6131/src/redis-cli --pipe -p 6611
    
    group1

    3. 配置 codis-proxy

    • 一台机器部署 codis-proxy,试了几次不行,于是决定分布在另外几台机器

    。。。未完成,请待之后更新

    参考1:官方文档
    参考2:郑彦生博客


    相关文章

      网友评论

        本文标题:部署redis集群管理工具-codis

        本文链接:https://www.haomeiwen.com/subject/hmwuettx.html