codis部署(go+jdk+zookeeper)

参考文档:

(1)https://blog.csdn.net/lockey23/article/details/78287606

(2)https://blog.csdn.net/sszgg2006/article/details/78443733

(3)https://blog.csdn.net/gold2008/article/details/69948892

简介Codis

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

Codis 3.x 组件包含:

  • Codis Server:基于 redis-3.2.8 分支开发。增加了额外的数据结构,以支持 slot 有关的操作以及数据迁移指令。具体的修改可以参考文档 redis 的修改。

  • Codis Proxy:客户端连接的 Redis 代理服务, 实现了 Redis 协议。 除部分命令不支持以外(不支持的命令列表),表现的和原生的 Redis 没有区别(就像 Twemproxy)。 
    对于同一个业务集群而言,可以同时部署多个 codis-proxy 实例; 
    不同 codis-proxy 之间由 codis-dashboard 保证状态同步。

  • Codis Dashboard:集群管理工具,支持 codis-proxy、codis-server 的添加、删除,以及据迁移等操作。在集群状态发生改变时,codis-dashboard 维护集群下所有 codis-proxy 的状态的一致性。 
    对于同一个业务集群而言,同一个时刻 codis-dashboard 只能有 0个或者1个; 
    所有对集群的修改都必须通过 codis-dashboard 完成。

  • Codis Admin:集群管理的命令行工具。 
    可用于控制 codis-proxy、codis-dashboard 状态以及访问外部存储。

  • Codis FE:集群管理界面。 
    多个集群实例共享可以共享同一个前端展示页面; 
    通过配置文件管理后端 codis-dashboard 列表,配置文件可自动更新。

  • Storage:为集群状态提供外部存储。 
    提供 Namespace 概念,不同集群的会按照不同 product name 进行组织; 
    目前仅提供了 Zookeeper、Etcd、Fs 三种实现,但是提供了抽象的 interface 可自行扩展。

  •  

     

     

    集群搭建主机环境(rhel6.5 x86_64bit)

    172.25.5.91 redis-master 
    172.25.5.92 redis-master 
    172.25.5.93 redis-slaver of 1,2

    所有主机均安装Zookeeper(3.4.6)、golang(1.8)、JDK(7u79)、Codis(3.2)

    go环境的搭建请参阅上篇分分钟快速构建一个单机版测试 codis 集群 
    java环境的配置请参阅 Tomcat+Memcache 
    Codis的编译安装请参阅上篇

    本为直接从Zookeeper开始搭建环境

    1. Zookeeper环境搭建(3台主机同步)

    [root@rhel65-lockey1 ~]# tar xvf zookeeper-3.4.6.tar.gz -C /usr/local/ 
    [root@rhel65-lockey1 ~]# ln -s /usr/local/zookeeper-3.4.6/ /usr/local/zookeeper 
    [root@rhel65-lockey1 ~]# cd /usr/local/zookeeper/conf 
    [root@rhel65-lockey1 conf]# cp zoo_sample.cfg zoo.cfg

    [root@rhel65-lockey1 ~]# sed -n ‘/#/!p’ /usr/local/zookeeper/conf/zoo.cfg

    tickTime=2000
    initLimit=10
    syncLimit=5
    dataDir=/data/zookeeper/db
    dataLogDir=/data/zookeeper/log
    clientPort=2181
    server.1=172.25.5.91:2888:3888
    server.2=172.25.5.92:2888:3888
    server.3=172.25.5.93:2888:3888
    
  •  
  • [root@rhel65-lockey1 ~]# mkdir /data/zookeeper/{db,log} -p

    [root@rhel65-lockey1 ~]#echo 1 > /data/zookeeper/db/myid 
    [root@rhel65-lockey2 ~]# echo 2 > /data/zookeeper/db/myid 
    [root@rhel65-lockey3 ~]# echo 3 > /data/zookeeper/db/myid

    贴上本人的环境变量设置:

    export GOROOT=/usr/local/go
    export PATH=$GOROOT/bin:$PATH
    export GOPATH=/home/user/go
    export JAVA_HOME=/usr/local/jdk
    export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
    export PATH=$PATH:$JAVA_HOME/bin
    export ZOOKEEPER_HOME=/usr/local/zookeeper
    export PATH=$PATH:$ZOOKEEPER_HOME/bin:/home/user/go/src/github.com/CodisLabs/codis/bin/:/data/codis/redis/bin
    
  •  
  • [root@rhl65-lockey* ~]# source /etc/profile

  • 启动服务查看状态: 
    这里写图片描述
    [root@rhel65-lockey* ~]# zkServer.sh start

    [root@rhel65-lockey3 ~]# zkServer.sh status 
    JMX enabled by default 
    Using config: /usr/local/zookeeper-3.4.6/bin/../conf/zoo.cfg 
    Mode: leader

    [root@rhel65-lockey2 ~]# zkServer.sh status 
    JMX enabled by default 
    Using config: /usr/local/zookeeper-3.4.6/bin/../conf/zoo.cfg 
    Mode: follower

    [root@rhel65-lockey1 ~]# zkServer.sh status 
    JMX enabled by default 
    Using config: /usr/local/zookeeper-3.4.6/bin/../conf/zoo.cfg 
    Mode: follower

    2. Codis目录重建

    [root@rhel65-lockey1 ~]# mkdir -p /data/codis/sh 
    [root@rhel65-lockey1 ~]# mkdir -p /data/codis/conf 
    [root@rhel65-lockey1 ~]# mkdir -p /data/codis/log 
    [root@rhel65-lockey1 ~]# mkdir -p /data/codis/run 
    [root@rhel65-lockey1 ~]# mkdir -p /data/codis/redis/bin 
    [root@rhel65-lockey1 ~]# mkdir -p /data/codis/redis/redis-6379 
    [root@rhel65-lockey1 ~]# mkdir -p /data/codis/redis/redis-6380

    [root@rhel65-lockey1 ~]# cd $GOPATH/src/github.com/CodisLabs/codis/extern/redis-3.2.8/src/
    
  • 1
  • 2
  • 配置启动Codis各组件—-启动Redis 
    主库:/data/codis/redis/redis-6379/redis.conf

    [root@rhel65-lockey1 ~]# sed -n ‘/#/!p’ /data/codis/redis/redis-6379/redis.conf

    daemonize yes
    pidfile /data/codis/run/redis-6379.pid
    port 6379
    tcp-backlog 65535
    bind 0.0.0.0
    timeout 0
    tcp-keepalive 0
    loglevel notice
    logfile "/data/codis/log/redis-6379.log"
    databases 16
    lua-time-limit 5000
    maxclients 10000
    
    slowlog-log-slower-than 10000
    slowlog-max-len 128
    
    maxmemory 3G
    maxmemory-policy noeviction
    
    
    
    client-output-buffer-limit normal 0 0 0
    client-output-buffer-limit slave 256mb 64mb 60
    client-output-buffer-limit pubsub 32mb 8mb 60
    
    hash-max-ziplist-entries 512
    hash-max-ziplist-value 64
    list-max-ziplist-entries 512
    list-max-ziplist-value 64
    set-max-intset-entries 512
    zset-max-ziplist-entries 128
    zset-max-ziplist-value 64
    hll-sparse-max-bytes 3000
    activerehashing yes
    latency-monitor-threshold 0
    
  •  
  • 从库:/data/codis/redis/redis-6380/redis.conf

    [root@rhel65-lockey1 ~]# sed -n ‘/#/!p’ /data/codis/redis/redis-6380/redis.conf

    daemonize yes
    pidfile /data/codis/run/redis-6380.pid
    port 6380
    tcp-backlog 65535
    bind 0.0.0.0
    timeout 0
    tcp-keepalive 0
    loglevel notice
    logfile "/data/codis/log/redis-6380.log"
    databases 16
    lua-time-limit 5000
    maxclients 10000
    
    slowlog-log-slower-than 10000
    slowlog-max-len 128
    
    maxmemory 3G
    maxmemory-policy noeviction
    
    
    no-appendfsync-on-rewrite yes
    appendonly yes
    appendfilename "appendonly.aof"
    appendfsync no
    auto-aof-rewrite-min-size 512mb
    auto-aof-rewrite-percentage 100
    aof-load-truncated yes
    aof-rewrite-incremental-fsync yes
    
    client-output-buffer-limit normal 0 0 0
    client-output-buffer-limit slave 256mb 64mb 60
    client-output-buffer-limit pubsub 32mb 8mb 60
    
    hash-max-ziplist-entries 512
    hash-max-ziplist-value 64
    list-max-ziplist-entries 512
    list-max-ziplist-value 64
    set-max-intset-entries 512
    zset-max-ziplist-entries 128
    zset-max-ziplist-value 64
    hll-sparse-max-bytes 3000
    activerehashing yes
    latency-monitor-threshold 0
    
  •  
  • 使用codis-server启动redis 
    [root@rhel65-lockey* ~]# codis-server /data/codis/redis/redis-6379/redis.conf

    [root@rhel65-lockey* ~]# codis-server /data/codis/redis/redis-6380/redis.conf

    3.配置启动Codis各组件

    启动dashboard

    首先生成默认的配置文件:

    [root@rhel65-lockey1 ~]# codis-dashboard --default-config | tee /data/codis/conf/dashboard.toml
    

 

  • 启动

    [root@rhel65-lockey1 ~]# nohup codis-dashboard --ncpu=2 --config=/data/codis/conf/dashboard.toml --log=/data/codis/log/dashboard.log --log-level=WARN &
    

 

  • 启动codis-proxy(集群中所有节点)

    生成配置文件

    [root@rhel65-lockey1 ~]#  codis-proxy --default-config | tee /data/codis/conf/proxy.toml
    

 

  • 启动

    [root@rhel65-lockey1 ~]# nohup codis-proxy --ncpu=2 --config=/data/codis/conf/proxy.toml --log=/data/codis/log/proxy.log --log-level=WARN &
    

 

  • 启动codis-fe

    首先生成默认的配置文件,配置文件codis.json可以手动编辑,也可以通过codis-admin从外部存储(这里是zookeeper)中拉取,如下操作:
    
    [root@rhel65-lockey1 ~]#  codis-admin --dashboard-list --zookeeper=127.0.0.1:2181 | tee /data/codis/conf/codis.json
    

 

  • 启动

    [root@rhel65-lockey1 ~]#   nohup `which codis-fe` --ncpu=2 --log=/data/codis/log/fe.log --log-level=WARN --dashboard-list=/data/codis/conf/codis.json --listen=0.0.0.0:8080 &
    

 

  • 关闭proxy

    codis-admin --proxy=172.25.5.91:11080  --shutdown
    

 

  • 或者

    codis-admin --dashboard=10.0.60.152:18080 --remove-proxy --addr=127.0.0.1:11080 --force
    

 

  • 建组

    codis-admin –dashboard=172.25.5.91:18080 –create-group –gid=1 
    codis-admin –dashboard=172.25.5.91:18080 –create-group –gid=2 
    这里写图片描述
    往组内加redis实例

    codis-admin –dashboard=172.25.5.91:18080 –group-add –gid=1 –addr=172.25.5.92:6379 
    codis-admin –dashboard=172.25.5.91:18080 –group-add –gid=1 –addr=172.25.5.94:6379

    这里写图片描述

    设置同步

    codis-admin –dashboard=172.25.5.91:18080 –sync-action –create –addr=172.25.5.93:6379

    加slave

    codis-admin –dashboard=172.25.5.91:18080 –promote-server –gid=1 –addr=172.25.5.93:6379

    创建slot

    codis-admin –dashboard=10.0.60.152:18080 –slot-action –create-range –beg=0 –end=511 –gid=1 
    $ codis-admin –dashboard=10.0.60.152:18080 –slot-action –create-range –beg=512 –end=1023 –gid=2 

  •  
阅读更多
文章标签: codis go语言 zookeeper
个人分类: 运维 linux
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭