Codis集群部署

参考:
http://idning.github.io/codis.html
http://blog.csdn.net/hengyunabc/article/details/19006911
http://liuhongjiang.github.io/tech/blog/2013/01/23/zk-overview/
http://navyaijm.blog.51cto.com/4647068/1637688
http://0xffff.me/blog/2014/11/11/codis-de-she-ji-yu-shi-xian-1/
http://0xffff.me/blog/2014/11/11/codis-de-she-ji-yu-shi-xian-part-2/
http://0xffff.me/blog/2014/11/11/codis-de-she-ji-yu-shi-xian-part-3/
http://blog.shantuwqk.wang/2015/04/14/redis-cluster-dev-0v1.html
一:Codis 由四部分组成:

    Codis Proxy (codis-proxy)                ##提供连接集群redis服务的入口
    Codis Manager (codis-config)            ##作为工具运行, 调用dashboard api修改配置.
    Codis Redis (codis-server)                ##修改后的redis
    ZooKeeper                                ##需要作为服务运行
二:多Proxy架构:

architecture

__________________________________________________________

三:角色
    1.zookeeper,codis-proxy
        10.155.20.167
        10.155.20.168
        10.155.20.169
    2.codis-config
        10.155.20.167
    3.codis-server   
        10.155.20.167:6381    master    10.155.20.169:6382    slave
        10.155.20.168:6381    master    10.155.20.167:6382    slave
        10.155.20.169:6381    master    10.155.20.168:6382    slave   

四:部署
    1.install zookeeper(依赖jdk,需要提前安装好jdk)

        wget http://apache.fayea.com/zookeeper/zookeeper-3.3.6/zookeeper-3.3.6.tar.gz
        tar zxf zookeeper-3.3.6.tar.gz
        mv zookeeper-3.3.6 /tol/app/zookeeper-3.3.6
        ln -s zookeeper-3.3.6 zookeeper
        vim /etc/hosts
            10.155.20.167 ZooKeeper-node1
            10.155.20.168 ZooKeeper-node2
            10.155.20.169 ZooKeeper-node3
        vim /tol/app/zookeeper/conf/zoo.cfg
            tickTime=2000                            ##CS通信心跳数
            initLimit=10                            ##LF初始通信时限
            syncLimit=5                            ##LF同步通信时限
            dataDir=/tol/app/zookeeper/data            ##数据文件目录
            dataLogDir=/tol/app/zookeeper/logs            ##日志文件目录
            clientPort=2181                            ##客户端连接端口
            server.1=ZooKeeper-node1:2888:3888        ##服务器名称与地址:集群信息(服务器编号,服务器地址,LF通信端口,选举端口)
            server.2=ZooKeeper-node2:2888:3888
            server.3=ZooKeeper-node3:2888:3888
        mkdir -p /tol/app/zookeeper/{data,logs}       
        echo “1” >/tol/app/zookeeper/data/myid            ##生成ID,这里需要注意, myid对应的zoo.cfg的server.ID
        重复上述流程在另外的zookeeper集群安装zookeeper.
        /tol/app/zookeeper/bin/zkServer.sh start               ##启动zookeeper
        /tol/app/zookeeper/bin/zkServer.sh status               ##查看zookeeper的Mode(leader,follower)
    2.install go(codis是go语言编写的,在运行codis各个角色的服务器都需要安装go)
        wget https://storage.googleapis.com/golang/go1.4.1.linux-amd64.tar.gz
        tar -zxvf go1.4.1.linux-amd64.tar.gz
        mv go /tol/app/
        cd /tol/app/go/src/
        bash all.bash
        cat >> ~/.bashrc << _bashrc_export
        export GOROOT=/tol/app/go
        export PATH=$PATH:$GOROOT/bin
        export GOARCH=amd64
        export GOOS=linux
        export GOPATH=/tol/app/codis
        _bashrc_export
        source ~/.bashrc
    3.install codis(codis-config、codis-proxy、codis-server所在的机器,需要git)
        mkdir -p /tol/app/codis
        /tol/app/go/bin/go get github.com/wandoulabs/codis
        cd /tol/app/codis/src/github.com/wandoulabs/codis
        ./bootstrap.sh
        make gotest
    4.codis服务启动(启动顺序:zookeeper,dashboard,redis)
        4.1 启动dashboard(在codis-config上操作)
            cat config.ini                            ##配置文件
                zk=10.155.20.167:2181,10.155.20.168:2181,10.155.20.169:2181
                product=flow                        ## 在codis-ha需要使用此product
                proxy_id=proxy_167                    ##多个proxy,proxy_id 需要唯一
                net_timeout=5
                dashboard_addr=10.155.20.167:18087
                coordinator=zookeeper
            nohup /tol/app/codis/bin/codis-config -c /tol/app/codis/etc/config.ini -L /tol/app/codis/logs/dashboard.log dashboard –addr:18087 –http-log=/tol/app/codis/requests.log &>/dev/null &
        4.2 初始化slots(codis-config上操作)
            /tol/app/codis/bin/codis-config -c /tol/app/codis/etc/config.ini slot init -f
                slots initializing…
                {
                  “msg”: “OK”,
                  “ret”: 0
                }
        4.3 启动codis-server(和官方的redis启动参数一样,在codis-server上操作)
            /tol/app/codis/bin/codis-server /tol/app/codis/etc/redis_conf/6381.conf &> /tol/app/codis/logs/redis_6381.log
            /tol/app/codis/bin/codis-server /tol/app/codis/etc/redis_conf/6382.conf &> /tol/app/codis/logs/redis_6382.log
        4.4 添加Redis Server Group(可以通过dashboard操作,也可以使用命令行)
            每一个 Server Group 作为一个 Redis 服务器组存在, 只允许有一个 master, 可以有多个 slave, group id 仅支持大于等于1的整数(codis-config上操作)
            /tol/app/codis/bin/codis-config -c /tol/app/codis/etc/config.ini server add 1 10.155.20.167:6381 master
            /tol/app/codis/bin/codis-config -c /tol/app/codis/etc/config.ini server add 1 10.155.20.169:6382 slave
            /tol/app/codis/bin/codis-config -c /tol/app/codis/etc/config.ini server add 2 10.155.20.168:6381 master
            /tol/app/codis/bin/codis-config -c /tol/app/codis/etc/config.ini server add 2 10.155.20.167:6382 slave
            /tol/app/codis/bin/codis-config -c /tol/app/codis/etc/config.ini server add 3 10.155.20.169:6381 master
            /tol/app/codis/bin/codis-config -c /tol/app/codis/etc/config.ini server add 3 10.155.20.168:6382 slave
        4.5 设置Server Group服务的slot范围,Codis 采用 Pre-sharding 的技术来实现数据的分片, 默认分成 1024 个 slots (0-1023), 对于每个key来说, 通过以下公式确定所属的 Slot Id : SlotId = crc32(key) % 1024 每一个 slot 都会有一个特定的 server group id 来表示这个 slot 的数据由哪个 server group 来提供.(codis-config上操作)
            /tol/app/codis/bin/codis-config -c /tol/app/codis/etc/config.ini slot range-set 0 300 1 online
            /tol/app/codis/bin/codis-config -c /tol/app/codis/etc/config.ini slot range-set 301 700 2 online
            /tol/app/codis/bin/codis-config -c /tol/app/codis/etc/config.ini slot range-set 0 701 1023 3 online
            set slot ranges to server groups…
            {
              “msg”: “OK”,
              “ret”: 0
            }
        4.6 启动codis-proxy(在codis-proxy上操作,如果有多个proxy,请修改proxy_id)
            /tol/app/codis/bin/codis-proxy -c /tol/app/codis/etc/config.ini -L /tol/app/codis/logs/proxy.log –cpu=8 –addr=0.0.0.0:19000 –http-addr=0.0.0.0:11000
        4.7 设置proxy上线
            /tol/app/codis/bin/codis-config -c /tol/app/codis/etc/config.ini proxy online proxy_167
                set proxy_167 online
                {
                  “msg”: “OK”,
                  “ret”: 0
                }
        4.8 检查codis的服务情况以及进入web界面
http://10.155.20.167:18087/admin
        4.9 开启codis-ha
            /tol/app/codis/bin/codis-ha –codis-config=10.155.20.167:18087 –productName=flow   
                –codis-config:dashboard的api server address   
                –productName:can be found in codis-proxy’s config

五:FAQ

    1.codis-proxy的日志切割,codis-proxy的默认日志级别是info,日志量很大,目前codis-proxy还不支持热重启,想修改启动参数还是比较麻烦的,日志切割推荐用logrotate.
    2.codis-proxy的监听地址默认没有具体ipv4,也就是codis-proxy启动之后没有0.0.0.0:19000这样的监听,这样会导致的问题就是前端lvs没有办法负载均衡codis-proxy,不能转发请求过,在codis-proxy启动的配置文件中加上proto=tcp4这个参数就支持监听ipv4.
    3.codis集群内部通讯是通过主机名的,如果主机名没有做域名解析那dashboard是通过主机名访问不到proxy的http-addr地址的,这会导致从web界面上看不到 OP/s的数据.

此条目发表在Redis分类目录,贴了, , , , 标签。将固定链接加入收藏夹。

发表评论

电子邮件地址不会被公开。 必填项已用*标注