zxy-yy

Redis 3.2 & ZooKeeper 3.4.10 安装及使用

Codis 是一个分布式 Redis 解决方案,即由 ZooKeeper 管理的 Redis 集群。

集群中有一台服务器作为 Dashboard,不安装 ZooKeeper。


Redis

安装

  1. Go 环境
mkdir -p /opt/app/codis && \
cd /opt/app/codis && \
wget https://storage.googleapis.com/golang/go1.9.linux-amd64.tar.gz && \
tar -xf go1.9.linux-amd64.tar.gz -C /usr/local

配置环境变量

vim /etc/profile

添加:

export GOROOT=/usr/local/go
# src 的父目录
export GOPATH=/opt/app/codis/codis
export PATH=$JAVA_HOME/bin:$GOROOT/bin:$GOPATH/bin:$PATH

source /etc/profile

验证

go version
  1. Redis
  • 编译安装

    mkdir -p /opt/app/codis/codis/src/github.com/CodisLabs /opt/app/codis/codis/{pid,logs,dbs} && \
    git clone https://github.com/CodisLabs/codis.git -b release3.2 && \
    make
    

    编译时如缺少 autoconf(ali)

    yum install -y autoconf automake libtool
    
  • 拷贝已编译过的 Redis 数据

    一般选择从三平台打包整个 Codis 目录进行拷贝,原因是数据量较少,耗时较短

    解压后须清空 codis/codis/dbs 和 codis/codis/logs

进行系统优化

配置 /opt/app/codis/codis/src/github.com/CodisLabs/codis/config/{redis_9736.conf,redis_9746.conf}(9736、9746 为进程端口号)

  • bind 为本机内网 IP

  • port 为进程端口号

  • 核对 pidfile、logfile 和 dir 对应的路径是否存在,codis 有无读写权限

  • maxmemory 设为云主机内存的 1/4

通过应用用户(codis)启动 redis 节点,以 9736、9746 为例

cd /opt/app/codis/codis/src/github.com/CodisLabs/codis && \
./bin/codis-server ./config/redis_9736.conf && \
./bin/codis-server ./config/redis_9746.conf

启动后,通过netstat -ntlp命令应可以看到本机的 9736、9746 端口能够被监听。

  1. Dashboard

选集群中的一台服务器。

  1. 生成配置文件
/opt/app/codis/codis/src/github.com/CodisLabs/codis/bin/codis-dashboard --default-config | tee ./config/dashboard.conf
  1. 修改配置
product_name:集群名称,往zk中注册
product_auth:requirepass密码,与redis配置中的一致
admin_addr:dashboard监听tcp端口
  1. 启动
nohup bin/codis-dashboard --ncpu=4 --config=./config/dashboard.conf --log-level=WARN  &>> /opt/app/codis/codis/logs/dashboard.log 2>&1 &
--ncpu:CPU 个数
--config:配置文件
--log:日志存储路径
--log-level:日志输出信息级别
dashboard.log 应输出“dashboard is working ...”,ZooKeeper 应生成节点 /codis3/andtalk/topom
  1. Proxy

集群中所有服务器。

  1. 生成配置文件
/opt/app/codis/codis/src/github.com/CodisLabs/codis/bin/codis-proxy --default-config | tee ./config/proxy.conf
  1. 修改配置 proxy.conf
product_name:Dashboard 向 ZK 中注册的库,对应 productname
product_auth:服务端认证密码
sessios_aith:客户端认证密码
admin_addr:Proxy 监听 TCP 端口
proxy_addr:Proxy 端口地址
jodis_name:ZooKeeper 名称,固定填写“zk”
jodis_addr:ZooKeeper 集群地址
jodis_timeout:Proxy 注册至 ZK 超时时间
jodis_compatible:ZK 注册的路径,false 为 jodis,true 为 ZK,ZK 更好兼容以前的功能,建议为 true
proxy_max_clients:Proxy 的最大连接数
backend_ping_period:与 codis-server 心跳检测时间
session_send_timeout:Client 连接 Proxy 最大超时时间
  1. 启动

    nohup bin/codis-proxy --ncpu=4 --config=./config/proxy.conf  --log-level=WARN  &>> /opt/app/codis/codis/logs/proxy.log 2>&1 &
    

    --ncpu:最大使用 CPU 数
    --config:配置文件
    --log:日志存储路径
    --log-level:日志输出等级

    Proxy 启动后处于监听(waiting)状态,proxy.log 持续输出“proxy waiting online ...”,需要加入到集群中等候 accept 请求

    cd /opt/app/codis/codis/src/github.com/CodisLabs/codis
    # 在对应主机上分别执行以下命令
    ./bin/codis-admin --dashboard=10.101.33.66:18080 --create-proxy -x 10.101.33.73:11080
    ./bin/codis-admin --dashboard=10.101.33.66:18080 --create-proxy -x 10.101.33.61:11080
    ./bin/codis-admin --dashboard=10.101.33.66:18080 --create-proxy -x 10.101.33.127:11080
    ./bin/codis-admin --dashboard=10.101.33.66:18080 --create-proxy -x 10.101.33.66:11080
    

    --dashboard:Dashboard 服务器 IP 和端口
    --create-proxy:每个 Proxy 节点的IP 和端口

    成功加入后 proxy.log 会输出 “jodis create node /zk/codis/db_PRODUCT_NAME/proxy/...” 和 “proxy is working ...”

    Porxy 添加至集群中 Dashboard 会做出以下操作:
    a. 获取 Proxy 信息,对集群 productname 以及 auth 进行认证,并将其写入
    b. 同步 solt 状态
    c. 将 Proxy 标记为 online,此后 Proxy 开始 accept 连接并对外提供服务

  2. 验证

    [zk: localhost:2181(CONNECTED) 0] ls /
    [zk, codis3, zookeeper]
    [zk: localhost:2181(CONNECTED) 1] ls /zk/codis/db_andtalk/proxy/
    0f395fd26052d12f7d9d512240f929a8 f78573c29694412c13643516ddac5ccf 8bdd757c6394946d2779a7d3dbb9de75 396a2b9cfcb638349694c3af56626e34

  3. 对 codis-server 服务分组(两两分组,交叉进行)

在 Dashboard 服务器上执行

分组

cd /opt/app/codis/codis/src/github.com/CodisLabs/codis && \
./bin/codis-admin --dashboard=10.101.33.66:18080 --create-group --gid=1 && \
./bin/codis-admin --dashboard=10.101.33.66:18080 --create-group --gid=2 && \
./bin/codis-admin --dashboard=10.101.33.66:18080 --create-group --gid=3 && \
./bin/codis-admin --dashboard=10.101.33.66:18080 --create-group --gid=4

向分组添加节点

Group 1

./bin/codis-admin --dashboard=10.101.33.66:18080 --group-add --gid=1 --addr=10.101.33.73:9736 && \
./bin/codis-admin --dashboard=10.101.33.66:18080 --group-add --gid=1 --addr=10.101.33.61:9746

Group 2

./bin/codis-admin --dashboard=10.101.33.66:18080 --group-add --gid=2 --addr=10.101.33.61:9736 && \
./bin/codis-admin --dashboard=10.101.33.66:18080 --group-add --gid=2 --addr=10.101.33.127:9746

Group 3

./bin/codis-admin --dashboard=10.101.33.66:18080 --group-add --gid=3 --addr=10.101.33.127:9736 && \
./bin/codis-admin --dashboard=10.101.33.66:18080 --group-add --gid=3 --addr=10.101.33.66:9746

Group 4

./bin/codis-admin --dashboard=10.101.33.66:18080 --group-add --gid=4 --addr=10.101.33.66:9736 && \
./bin/codis-admin --dashboard=10.101.33.66:18080 --group-add --gid=4 --addr=10.101.33.73:9746

ZooKeeper 应生成节点 /codis3/PRODUCT_NAME/group/group-0001~0004

  1. 同步组内节点数据

在 Dashboard 服务器上执行

./bin/codis-admin --dashboard=10.101.33.66:18080 --sync-action --create --addr=10.101.33.73:9736 && \
./bin/codis-admin --dashboard=10.101.33.66:18080 --sync-action --create --addr=10.101.33.73:9746 && \
./bin/codis-admin --dashboard=10.101.33.66:18080 --sync-action --create --addr=10.101.33.61:9736 && \
./bin/codis-admin --dashboard=10.101.33.66:18080 --sync-action --create --addr=10.101.33.61:9746 && \
./bin/codis-admin --dashboard=10.101.33.66:18080 --sync-action --create --addr=10.101.33.127:9736 && \
./bin/codis-admin --dashboard=10.101.33.66:18080 --sync-action --create --addr=10.101.33.127:9746 && \
./bin/codis-admin --dashboard=10.101.33.66:18080 --sync-action --create --addr=10.101.33.66:9736 && \
./bin/codis-admin --dashboard=10.101.33.66:18080 --sync-action --create --addr=10.101.33.66:9746

如同步成功,ZooKeeper /codis3/PRODUCT_NAME/group/group-0001~0004 对应值中的 state 应为 synced

如同步失败,state 为 synced_failed

[zk: localhost:2181(CONNECTED) 13] ls /
[jodis, codis3, zookeeper]
[zk: localhost:2181(CONNECTED) 14] ls /codis3
[CloudMas]
[zk: localhost:2181(CONNECTED) 15] ls /codis3/CloudMas/group
[group-0002, group-0003, group-0004, group-0001]
[zk: localhost:2181(CONNECTED) 16] get /codis3/CloudMas/group/group-000
group-0002 group-0003 group-0004 group-0001
[zk: localhost:2181(CONNECTED) 16] get /codis3/CloudMas/group/group-0001

通过 Redis info 查看集群状态

./bin/redis-cli -h 10.101.33.73 -p 9736 -a Umfintech_0PS info
# Replication
role:master
connected_slaves:1
slave0:ip=10.101.33.61,port=9746,state=online,offset=435,lag=1
master_repl_offset:435
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:434
./bin/redis-cli -h 10.101.33.61 -p 9746 -a Umfintech_0PS info
# Replication
role:slave
master_host:10.101.33.73
master_port:9736
master_link_status:up
master_last_io_seconds_ago:1
master_sync_in_progress:0
slave_repl_offset:533
slave_priority:100
slave_read_only:1
connected_slaves:0
master_repl_offset:0
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0

  1. 配置 fe 服务,实现 WEB 查看 Redis 集群状态

在 Dashboard 服务器上执行

  1. 创建配置文件

    mkdir -p /opt/app/codis/codis/src/github.com/CodisLabs/codis/conf && \
    /opt/app/codis/codis/src/github.com/CodisLabs/codis/bin/codis-admin --dashboard-list --zookeeper=10.101.33.73:2181,10.101.33.61:2181,10.101.33.127:2181 | tee /opt/app/codis/codis/src/github.com/CodisLabs/codis/conf/codis.json
    
  2. 启动

    nohup ./bin/codis-fe --ncpu=4 --log-level=WARN --dashboard-list=./conf/codis.json --listen=192.168.1.144:18090 &>> /opt/app/codis/codis/logs/fe.log 2>&1 &
    

    ncpu:最大 CPU 数
    log:日志存储路径
    dashboard-list:配置文件路径
    listen:fe 服务器 IP 及监听端口

  3. 验证

    访问 https:$dashboard-IP:Port

  4. 配置 solt,对各分组分配 solt,未设置 solt 时不可通过 Proxy 端口访问

    cd /opt/app/codis/codis/src/github.com/CodisLabs/codis && \
    ./bin/codis-admin --dashboard=10.101.33.66:18080 --slot-action --create-range --beg=0 --end=255 --gid=1 && \
    ./bin/codis-admin --dashboard=10.101.33.66:18080 --slot-action --create-range --beg=256 --end=511 --gid=2 && \
    ./bin/codis-admin --dashboard=10.101.33.66:18080 --slot-action --create-range --beg=512 --end=767 --gid=3 && \
    ./bin/codis-admin --dashboard=10.101.33.66:18080 --slot-action --create-range --beg=768 --end=1023 --gid=4
    

    slot 范围 0-1023,组内均分
    solt 值可去 ZK 查看,同理查看组节点数据

基本命令

  1. 查看集群信息
/opt/app/codis/codis/src/github.com/CodisLabs/codis/bin/redis-cli -h $ip -p $port -a $password info
  1. 监控

  2. 导出数据

  • 命令行导出。只能导出 key,适用于确认数据类型

    ./bin/redis-cli --raw -h $ip -a $password -p $port --scan --pattern "*:*" &>> ./temp.log
    

    *

分类:

技术点:

相关文章:

  • 2021-07-12
  • 2022-03-02
  • 2022-01-03
  • 2021-09-01
  • 2021-11-15
  • 2022-12-23
  • 2021-09-28
  • 2021-04-27
猜你喜欢
  • 2021-10-22
  • 2021-11-19
  • 2021-07-05
  • 2021-09-29
  • 2021-05-18
  • 2022-01-11
  • 2022-12-23
相关资源
相似解决方案