美文网首页
codis 小结 ( 部署)

codis 小结 ( 部署)

作者: 杰杰微电 | 来源:发表于2018-12-23 13:54 被阅读0次

    一。名词解释:

    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 可自行扩展。

    安装包下载

    #go: wget https://dl.google.com/go/go1.10.3.linux-amd64.tar.gz

    #zookeeper: wget http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.4.12/zookeeper-3.4.12.tar.gz

    #codis: git clone https://github.com/CodisLabs/codis.git -b release3.2

    一。 codis 部署

    1:解压:

    tar -xf zookeeper-3.4.12.tar.gz

    mv zookeeper-3.4.12 /usr/local/zookeeper

    2:编辑配置文件:

    cd /usr/local/zookeeper/conf

    cp zoo_sample.cfg zoo.cfg

    配置文件(zoo.cfg)见下面,对比单机模式多了server.ID

    tickTime=2000

    initLimit=10

    syncLimit=5

    dataDir=/data/zookeeper/data

    dataLogDir=/data/zookeeper/log

    clientPort=2181

    #要是一台装三个zk,可以按照端口区分:192.168.163.131:2887:3887/192.168.163.132:2887:3887/192.168.163.133:2887:3887

    server.1=192.168.163.131:2888:3888

    server.2=192.168.163.132:2888:3888

    server.3=192.168.163.133:2888:3888

    注意:2888表示zookeeper监听端口,3888表示zookeeper选举通信端口;以上server.1 server.2 server.3都要配置到三台zookeeper的zoo.cfg文件。

    配置说明:

    集群模式中, 集群中的每台机器都需要感知其它机器, 在 zoo.cfg 配置文件中, 可以按照如下格式进行配置, 每一行代表一台服务器配置:server.id=host:port:port

    id 被称为 Server ID, 用来标识服务器在集群中的序号。同时每台 ZooKeeper 服务器上, 都需要在数据目录(即 dataDir 指定的目录) 下创建一个 myid 文件, 该文件只有一行内容, 即对应于每台服务器的Server ID。

    ZooKeeper 集群中, 每台服务器上的 zoo.cfg 配置文件内容一致。

    server.1 的 myid 文件内容就是 "1"。每个服务器的 myid 内容都不同, 且需要保证和自己的 zoo.cfg 配置文件中 "server.id=host:port:port" 的 id 值一致。

    id 的范围是 1 ~ 255。

    创建myid文件:设置zookeeper的id,和server.ID对应。

    在 dataDir 指定的目录下 (即 /data/zookeeper/data 目录) 创建名为 myid 的文件, 文件内容和 zoo.cfg 中当前机器的 id 一致。根据上述配置, master 的 myid 文件内容为 1。

    按照相同步骤, 为 132 和 133 配置 zoo.cfg 和 myid 文件。zoo.cfg文件内容相同, 132 的 myid 文件内容为 2, 133 的 myid 文件内容为 3。

    #在第1台zookeeper(192.168.163.131)上设置id=1

    echo "1" >/data/zookeeper/data/myid

    #在第2台zookeeper(192.168.163.132)上设置id=2

    echo "2" >/data/zookeeper/data/myid

    #在第3台zookeeper(192.168.163.133)上设置id=3

    echo "3" >/data/zookeeper/data/myid

    三台启动:zkServer.sh start

    # zkServer.sh start

    ZooKeeper JMX enabled by default

    Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg

    Starting zookeeper ... STARTED

    zkServer.sh status

    root@test1:~# zkServer.sh status

    ZooKeeper JMX enabled by default

    Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg

    Mode: leader

    root@test2:~# zkServer.sh status

    ZooKeeper JMX enabled by default

    Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg

    Mode: follower

    root@test3:~# zkServer.sh status

    ZooKeeper JMX enabled by default

    Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg

    Mode: follower

    关闭:zkServer.sh stop

    root@test2:~#zkServer.sh stop

    ZooKeeper JMX enabled by defaultUsing config: /usr/local/zookeeper/bin/../conf/zoo.cfg

    Stopping zookeeper ... STOPPED

    到此Zookeeper安装完毕。



    新建codis-server(redis):三台上都安装

    cp/usr/local/codis/extern/redis-3.2.11/redis.conf /etc/codis/codis-server/redis7021.conf

    修改redis7021.conf:

    # bind 127.0.0.1

    protected-mode no

    port 7021

    daemonize yes

    pidfile /var/lib/redis_7021/redis_7021.pid

    logfile "/var/lib/redis_7021/redis_7021.log"

    dbfilename 7021dump.rdb

    dir /var/lib/redis_7021/

    appendfilename  "7021appendonly.aof"

    创建配置文件里所需的目录:

    mkdir/var/lib/redis_7021

    再新建一个codis-server:

    cd /etc/codis/codis-server

    cp redis7021.conf redis7022.conf 

    sed-i"s/7021/7022/g" redis7022.conf mkdir/var/lib/redis_7022

    开启codis-server:

    codis-server /etc/codis/codis-server/redis7021.conf

    codis-server /etc/codis/codis-server/redis7022.conf

    说明:每台机器上有2个codis-server实例,端口为:7021、7022,没有做主从。为了防止单点的问题,可以交错的设置主从,防止一台服务器挂掉,codis-server不可用。如下表格所示:

    Group      主                                                  从

    1            192.168.163.131:7021                    192.168.163.132:7022

    2            192.168.163.132:7021                    192.168.163.133:7022

    3            192.168.163.133:7021                    192.168.163.131:7022

    通过codis-fe  添加各个Group节点:需要先开启 codis-dashboard 和 codis-fe,在 ⑤ 之后操作。

    ③ 配置codis-dashboard(一台)

    cd /etc/codis/codis-dashboard/ 

    cp/usr/local/codis/config/dashboard.toml  /etc/codis/codis-dashboard/

    修改配置:vim /etc/codis/codis-dashboard/dashboard.toml

    ##################################################

    #                                                #

    #                  Codis-Dashboard              #

    #                                                #

    ##################################################

    # Set Coordinator, only accept "zookeeper"&"etcd"&"filesystem".

    # forzookeeper/etcd, coorinator_auth accept"user:password"

    # Quick Start

    #coordinator_name ="filesystem"

    #coordinator_addr ="/tmp/codis"

    coordinator_name ="zookeeper"

    coordinator_addr ="192.168.163.131:2181,192.168.163.132:2181,192.168.163.133:2181"  

    #zk地址,多个逗号隔开

    #coordinator_auth =""

    # Set Codis Product Name/Auth.

    product_name ="codis-testX" 

    #集群名称product_auth =""      #集群密码

    # Set bind address foradmin(rpc), tcp only.

    admin_addr ="192.168.163.131:18080"         #restful api地址

    # Set arguments fordata migration (only accept'sync'&'semi-async').

    migration_method ="semi-async"

    migration_parallel_slots =100

    migration_async_maxbulks =200

    migration_async_maxbytes ="32mb"

    migration_async_numkeys =500

    migration_timeout ="30s"

    # Set configs for redis sentinel.

    sentinel_client_timeout ="10s"

    sentinel_quorum =2

    sentinel_parallel_syncs =1

    sentinel_down_after ="30s"

    sentinel_failover_timeout ="5m"

    sentinel_notification_script =""

    sentinel_client_reconfig_script =""

    参数说明

    coordinator_name外部存储类型,接受 zookeeper/etcd

    coordinator_addr外部存储地址

    product_name集群名称,满足正则\w[\w\.\-]*

    product_auth集群密码,默认为空

    admin_addrRESTful API 端口

    创建codis日志目录(存放codis所有log):

    mkdir/usr/local/codis/logs

    启动codis-dashboard服务:(一台)

    codis-dashboard --ncpu=1--config=/etc/codis/codis-dashboard/dashboard.toml --log=/usr/local/codis/logs/dashboard.log --log-level=warn &

    参数说明:##--ncpu=N 最大使用 CPU 个数;

    ## -c  CONF, --config=CONF 指定启动配置文件;

    ## -l  FILE, --log=FILE 设置 log 输出文件;

    ##--log-level=LEVEL 设置 log 输出等级:INFO,WARN,DEBUG,ERROR;默认INFO,推荐WARN;

    ##对于同一个业务集群而言,可以同时部署多个codis-proxy 实例;

    ##不同 codis-proxy 之间由 codis-dashboard 保证状态同步。

    关闭codis-dashboard服务:

    codis-admin --dashboard=192.168.163.131:18080--shutdown

    ④:配置codis-proxy(三台):每台配置一个Proxy,也可以一台配置多个Proxy。

    注意参数:proxy_max_clients

    cd /etc/codis/codis-proxy/cp/usr/local/codis/config/proxy.toml /etc/codis/codis-proxy/

    修改配置:vim /etc/codis/codis-proxy/proxy.toml

    ##################################################

    #                                                #

    #                  Codis-Proxy                  #

    #                                                #

    ##################################################

    # Set Codis Product Name/Auth.

    product_name ="codis-testX"           #和dashboard对应

    product_auth =""

    # Set auth for client session

    #  1. product_auth is usedforauth validation among codis-dashboard,

    #      codis-proxy and codis-server.

    #  2. session_auth is different from product_auth, it requires clients

    #      to issue AUTH before processing any other commands.

    session_auth =""

    # Set bind address foradmin(rpc), tcp only.

    admin_addr ="192.168.163.131:11080"          #同一台服务器可以根据端口创建多个Proxy

    # Set bind address forproxy, proto_type can be"tcp","tcp4","tcp6","unix"or"unixpacket".

    proto_type ="tcp4"

    proxy_addr ="192.168.163.131:19000"           #同一台服务器可以根据端口创建多个Proxy

    # Set jodis address & session timeout

    #  1. jodis_name isshortforjodis_coordinator_name, only accept"zookeeper"&"etcd".

    #  2. jodis_addr isshortfor jodis_coordinator_addr

    #  3. jodis_auth isshortforjodis_coordinator_auth,forzookeeper/etcd,"user:password" is accepted.

    #  4. proxy will be registered as node:

    #        ifjodis_compatible =true (not suggested):

    #          /zk/codis/db_{PRODUCT_NAME}/proxy-{HASHID} (compatible with Codis2.0)

    #        or else#          /jodis/{PRODUCT_NAME}/proxy-{HASHID}

    jodis_name ="zookeeper"

    jodis_addr="192.168.163.131:2181,192.168.163.132:2181,192.168.163.133:2181"

    jodis_auth =""

    jodis_timeout ="20s"

    jodis_compatible =false...

    ...

    参数                                         说明:

    product_name                          集群名称,参考 dashboard 参数说明

    product_auth                            集群密码,默认为空

    admin_addr                              RESTful API 端口

    proto_typeRedis                       端口类型,接受 tcp/tcp4/tcp6/unix/unixpacket

    proxy_addrRedis                       端口地址或者路径

    jodis_addr                                  Jodis 注册 zookeeper 地址

    jodis_timeoutJodis                      注册 session timeout 时间,单位 second

    jodis_compatibleJodis                 注册 zookeeper 的路径

    backend_ping_period                   与 codis-server 探活周期,单位 second,0 表示禁止

    session_max_timeout与 client       连接最大读超时,单位 second,0 表示禁止

    session_max_bufsize与 client         连接读写缓冲区大小,单位 byte

    session_max_pipeline与 client         连接最大的 pipeline 大小

    session_keepalive_period                 与 client 的 tcp keepalive 周期,仅 tcp 有效,0 表示禁止

    启动codis-proxy服务(三台):

    codis-proxy --ncpu=1--config=/etc/codis/codis-proxy/proxy.toml --log=/usr/local/codis/logs/proxy.log --log-level=warn &

    codis-proxy 启动后,处于waitingonline 状态(日志查询),监听proxy_addr地址,但是不会accept连接,添加到集群并完成集群状态的同步,才能改变状态为online。添加的方法有以下两种:

    通过 codis-fe 添加:通过Add Proxy按钮,将admin_addr加入到集群中;⑤之后。

    通过 codis-admin 命令行工具添加,方法如下:

    codis-admin --dashboard=192.168.163.131:18080 --create-proxy -x 192.168.163.131:11080

    其中192.168.163.131:18080以及192.168.163.131:11080分别为 dashboard 和 proxy 的admin_addr地址;可以在后面的codis-fe里看到

    添加过程中,dashboard 会完成如下一系列动作:

    获取 proxy 信息,对集群 name 以及 auth 进行验证,并将其信息写入到外部存储中(zookeeper);

    同步 slots 状态;

    标记 proxy 状态为online,此后 proxy 开始accept连接并开始提供服务;

    停止codis-proxy服务:

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

    注意:直接kill Proxy进程zk的codis3里会有残留数据,建议codis-admin方式停codis-proxy服务 

    ⑤:配置codis-fe(一台)

    配置文件 codis.json 可以手动编辑,也可以通过 codis-admin 从外部存储中拉取:

    cd /etc/codis/codis-fe/

    codis-admin --dashboard-list --zookeeper=192.168.163.131:2181 | teecodis.json

    启动codis-fe:

    codis-fe --ncpu=1--dashboard-list=/etc/codis/codis-fe/codis.json --listen=192.168.163.131:18090--log=/usr/local/codis/logs/fe.log --log-level=warn --assets-dir=/usr/local/codis/bin/assets/ &

    关闭codis-fe:

    ps-ef | grep codis-fe| grep-v grep| awk'{print $2}'| xargs   kill

    相关文章

      网友评论

          本文标题:codis 小结 ( 部署)

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