基于Codis的Redis分布式缓存

下载与编译

下载release binary文件安装

如果是重要的生产环境使用,尽量不要选择alpha、rc版本。 根据自己的部署平台,选择相应的文件下载即可。

编译源码安装

1、安装 Go 运行环境 参考这里
安装完成后可以运行下列命令进行检测:

$ go version
go version go1.7.3 linux/amd64
  • 2、 设置编译环境

注意 $GOPATH 是本机所有第三方库 go 项目所在目录,Codis 仅是其中之一。
添加 $GOPATH/bin$PATH,例如:

PATH=$PATH:$GOPATH/bin。
$ go env GOPATH
/home/codis/gopath
  • 3、下载 Codis 源代码

Codis 源代码需要下载到

$GOPATH/src/github.com/CodisLabs/codis:
$ mkdir -p $GOPATH/src/github.com/CodisLabs
$ cd $_ && git clone https://github.com/CodisLabs/codis.git -b release3.2
  • 4、编译 Codis 源代码

● 直接通过 make 进行编译,会看到如下输出:

$ cd $GOPATH/src/github.com/CodisLabs/codis
$ make
make -j -C extern/redis-3.2.8/
... ...
go build -i -o bin/codis-dashboard ./cmd/dashboard
go build -i -o bin/codis-proxy ./cmd/proxy
go build -i -o bin/codis-admin ./cmd/admin
go build -i -o bin/codis-fe ./cmd/fe

$ ls bin/
total 69124
drwxr-xr-x 4 codis codis     4096 Jan  4 14:55 assets
-rwxr-xr-x 1 codis codis 17600752 Jan  4 14:55 codis-admin
-rwxr-xr-x 1 codis codis 18416320 Jan  4 14:55 codis-dashboard
-rwxr-xr-x 1 codis codis  9498040 Jan  4 14:55 codis-fe
-rwxr-xr-x 1 codis codis 11057280 Jan  4 14:55 codis-proxy
-rwxr-xr-x 1 codis codis  4234432 Jan  4 14:55 codis-server
-rw-r--r-- 1 codis codis      148 Jan  4 14:55 version
... ...

$ cat bin/version
version = 2016-01-03 14:53:22 +0800 @51f06ae3b58a256a58f857f590430977638846a3
compile = 2016-01-04 15:00:17 +0800 by go version go1.5.2 linux/amd64
  • 快速启动

2分钟快速构建一个单机版测试 codis 集群,无任何外部组件依赖.
源码中 admin 文件夹提供了一系列脚本以便快速启动、停止各个组件,提高运维效率。

启动codis-dashboard

使用 codis-dashboard-admin.sh 脚本启动 dashboard,并查看 dashboard 日志确认启动是否有异常。

./admin/codis-dashboard-admin.sh start
 tail -100 ./log/codis-dashboard.log.2017-04-08

2017/04/08 15:16:57 fsclient.go:197: [INFO] fsclient - create /codis3/codis-demo/topom OK
2017/04/08 15:16:57 main.go:140: [WARN] [0xc42025f7a0] dashboard is working ...
2017/04/08 15:16:57 topom.go:424: [WARN] admin start service on [::]:18080
  • 快速启动集群元数据存储使用 filesystem,默认数据路径保存在 /tmp/codis,若启动失败,请检查当前用户是否对该路径拥有读写权限。

启动codis-proxy

使用 codis-proxy-admin.sh 脚本启动 codis-proxy,并查看 proxy 日志确认启动是否有异常。

./admin/codis-proxy-admin.sh start
tail -100 ./log/codis-proxy.log.2017-04-08

2017/04/08 15:39:37 proxy.go:293: [WARN] [0xc4200df760] set sentinels = []
2017/04/08 15:39:37 main.go:320: [WARN] rpc online proxy seems OK
2017/04/08 15:39:38 main.go:210: [WARN] [0xc4200df760] proxy is working ...
  • 启动codis-server

使用 codis-server-admin.sh 脚本启动 codis-server,并查看 redis 日志确认启动是否有异常。

./admin/codis-server-admin.sh start
tail -100 /tmp/redis_6379.log 

5706:M 08 Apr 16:04:11.748 * DB loaded from disk: 0.000 seconds
5706:M 08 Apr 16:04:11.748 * The server is now ready to accept connections on port 6379
  • redis.conf 配置中 pidfile、logfile 默认保存在 /tmp 目录,若启动失败,请检查当前用户是否有该目录的读写权限。

启动codis-fe

使用 codis-fe-admin.sh 脚本启动 codis-fe,并查看 fe 日志确认启动是否有异常。

./admin/codis-fe-admin.sh start
tail -100 ./log/codis-fe.log.2017-04-08

2017/04/08 16:12:13 main.go:100: [WARN] set ncpu = 1
2017/04/08 16:12:13 main.go:103: [WARN] set listen = 0.0.0.0:9090
2017/04/08 16:12:13 main.go:115: [WARN] set assets = /home/codis/go/src/github.com/CodisLabs/codis/admin/../bin/assets
2017/04/08 16:12:13 main.go:153: [WARN] set --filesystem = /tmp/codis
  • 通过fe添加group

通过web浏览器访问集群管理页面(fe地址:127.0.0.1:9090) 选择我们刚搭建的集群 codis-demo,在 Proxy 栏可看到我们已经启动的 Proxy, 但是 Group 栏为空,因为我们启动的 codis-server 并未加入到集群 添加 NEW GROUP,NEW GROUP 行输入 1,再点击 NEW GROUP 即可 添加 Codis Server,Add Server 行输入我们刚刚启动的 codis-server 地址,添加到我们刚新建的 Group,然后再点击 Add Server 按钮即可,如下图所示
这里写图片描述

通过fe初始化slot

新增的集群 slot 状态是 offline,因此我们需要对它进行初始化(将 1024 个 slot 分配到各个 group),而初始化最快的方法可通过 fe 提供的 rebalance all slots 按钮来做,如下图所示,点击此按钮,我们即快速完成了一个集群的搭建。
这里写图片描述

通过 ansible 快速部署集群

使用 ansible 可快速在单机、多机部署多套 codis 集群。 ansible 文件夹包含了部署 codis 集群的 playbook,根据自己部署环境修改 groups_var/all 文件里参数,修改 hosts 文件添加部署的环境 IP 即可。 ansible 安装也及其简单,各部署机器无需安装任何额外的 agent,彼此之间通过 ssh 通信。

git clone git://github.com/ansible/ansible.git -b stable-2.3
cd ./ansible
source ./hacking/env-setup
cd $codis_dir/ansible
ansible-playbook -i hosts site.yml
  • 启动参数

注意:请按照顺序逐步完成操作。生产环境建议修改dashboard coordinator_name配置,使用 zookeeper 或etctd作为外部存储。
注意:Codis 3.x 支持 AUTH,但是要求所有组件使用的 AUTH 必须完全相同。

Codis Dashboard

1、启动命令

$ nohup ./bin/codis-dashboard --ncpu=4 --config=dashboard.toml \
    --log=dashboard.log --log-level=WARN &
  • 默认配置文件 dashboard.toml 可由 codis-dashboard 生成。

2、详细说明
● 启动参数说明:

$ ./bin/codis-dashboard -h
Usage:
    codis-dashboard [--ncpu=N] [--config=CONF] [--log=FILE] [--log-level=LEVEL] [--host-admin=ADDR]
    codis-dashboard  --default-config
    codis-dashboard  --version

Options:
    --ncpu=N                    最大使用 CPU 个数
    -c CONF, --config=CONF      指定启动配置文件
    -l FILE, --log=FILE         设置 log 输出文件
    --log-level=LEVEL           设置 log 输出等级:INFO,WARN,DEBUG,ERROR;默认INFO,推荐WARN
参数 --host-admin 请参见与 Docker 有关章节。
  • 默认配置文件:
$ ./bin/codis-dashboard --default-config | tee dashboard.toml
##################################################
#                                                #
#                  Codis-Dashboard               #
#                                                #
##################################################

# Set Coordinator, only accept "zookeeper" & "etcd"
coordinator_name = "zookeeper"
coordinator_addr = "127.0.0.1:2181"

# Set Codis Product {Name/Auth}.
product_name = "codis-demo"
product_auth = ""

# Set bind address for admin(rpc), tcp only.
admin_addr = "0.0.0.0:18080"
参数说明coordinator_name外部存储类型,接受 zookeeper/etcdcoordinator_addr外部存储地址product_name集群名称,满足正则 \w[\w\.\-]*product_auth集群密码,默认为空admin_addrRESTful API 端口
## Codis Proxy
  • 1、启动命令
$ nohup ./bin/codis-proxy --ncpu=4 --config=proxy.toml \
    --log=proxy.log --log-level=WARN &
  • 默认配置文件 proxy.toml 可由 codis-proxy 生成。

codis-proxy 启动后,处于 waiting 状态,监听 proxy_addr 地址,但是不会 accept 连接,添加到集群并完成集群状态的同步,才能改变状态为 online。添加的方法有以下两种:
● 通过 codis-fe 添加:通过 Add Proxy 按钮,将 admin_addr 加入到集群中;
● 通过 codis-admin 命令行工具添加,方法如下:
$ ./bin/codis-admin –dashboard=127.0.0.1:18080 –create-proxy -x 127.0.0.1:11080
其中 127.0.0.1:18080 以及 127.0.0.1:11080 分别为 dashboard 和 proxy 的 admin_addr 地址;
添加过程中,dashboard 会完成如下一系列动作:
● 获取 proxy 信息,对集群 name 以及 auth 进行验证,并将其信息写入到外部存储中;
● 同步 slots 状态;
● 标记 proxy 状态为 online,此后 proxy 开始 accept 连接并开始提供服务;
2、详细说明
● 启动参数说明:

$ ./bin/codis-proxy -h
Usage:
    codis-proxy [--ncpu=N] [--config=CONF] [--log=FILE] [--log-level=LEVEL] [--host-admin=ADDR] [--host-proxy=ADDR] [--ulimit=NLIMIT]
    codis-proxy  --default-config
    codis-proxy  --version

Options:
    --ncpu=N                    最大使用 CPU 个数
    -c CONF, --config=CONF      指定启动配置文件
    -l FILE, --log=FILE         设置 log 输出文件
    --log-level=LEVEL           设置 log 输出等级:INFO,WARN,DEBUG,ERROR;默认INFO,推荐WARN
    --ulimit=NLIMIT             检查 ulimit -n 的结果,确保运行时最大文件描述不少于 NLIMIT
  •  默认配置文件:
$ ./bin/codis-proxy --default-config | tee proxy.toml
##################################################
#                                                #
#                  Codis-Proxy                   #
#                                                #
##################################################

# Set Codis Product {Name/Auth}.
product_name = "codis-demo"
product_auth = ""

# Set bind address for admin(rpc), tcp only.
admin_addr = "0.0.0.0:11080"

# Set bind address for proxy, proto_type can be "tcp", "tcp4", "tcp6", "unix" or "unixpacket".
proto_type = "tcp4"
proxy_addr = "0.0.0.0:19000"

# Set jodis address & session timeout.
jodis_addr = ""
jodis_timeout = 10
jodis_compatible = false

# Proxy will ping-pong backend redis periodly to keep-alive
backend_ping_period = 5

# If there is no request from client for a long time, the connection will be droped. Set 0 to disable.
session_max_timeout = 1800

# Buffer size for each client connection.
session_max_bufsize = 131072

# Number of buffered requests for each client connection.
# Make sure this is higher than the max number of requests for each pipeline request, or your client may be blocked.
session_max_pipeline = 1024

# Set period between keep alives. Set 0 to disable.
session_keepalive_period = 60
  • 参数说明product_name集群名称,参考 dashboard 参数说明product_auth集群密码,默认为空admin_addrRESTful API 端口proto_typeRedis 端口类型,接受 tcp/tcp4/tcp6/unix/unixpacketproxy_addrRedis 端口地址或者路径jodis_addrJodis 注册 zookeeper 地址jodis_timeoutJodis 注册 session timeout 时间,单位 secondjodis_compatibleJodis 注册 zookeeper 的路径backend_ping_period与 codis-server 探活周期,单位 second,0 表示禁止session_max_timeout与 client 连接最大读超时,单位 second,0 表示禁止session_max_bufsize与 client 连接读写缓冲区大小,单位 bytesession_max_pipeline与 client 连接最大的 pipeline 大小session_keepalive_period与 client 的 tcp keepalive 周期,仅 tcp 有效,0 表示禁止

注:Codis3 会将 jodis 节点注册在 /jodis/{PRODUCT_NAME} 下,这点与 Codis2 不太兼容,所以为了兼容性,可以考虑将 jodis_compatible 设置成 true。

Codis Server

● 启动 ./bin/codis-server,与启动普通 redis 的方法一致。
● 启动完成后,可以通过 codis-fe 提供的界面或者 codis-admin 命令行工具添加到集群中

Codis FE(可选组件)

1、启动命令

$ nohup ./bin/codis-fe --ncpu=4 --log=fe.log --log-level=WARN \
    --zookeeper=127.0.0.1:2181 --listen=127.0.0.1:8080 &
  • 2、详细说明

● 启动参数说明:

$ ./bin/codis-fe -h
Usage:
    codis-fe [--ncpu=N] [--log=FILE] [--log-level=LEVEL] [--assets-dir=PATH] (--dashboard-list=FILE|--zookeeper=ADDR|--etcd=ADDR|--filesystem=ROOT) --listen=ADDR
    codis-fe  --version

Options:
    --ncpu=N                        最大使用 CPU 个数
    -d LIST, --dashboard-list=LIST  配置文件,能够自动刷新
    -l FILE, --log=FILE             设置 log 输出文件
    --log-level=LEVEL               设置 log 输出等级:INFO,WARN,DEBUG,ERROR;默认INFO,推荐WARN
    --listen=ADDR                   HTTP 服务端口
  • 配置文件 codis.json 可以手动编辑,也可以通过 codis-admin 从外部存储中拉取,例如:
$ ./bin/codis-admin --dashboard-list --zookeeper=127.0.0.1:2181 | tee codis.json
[
    {
        "name": "codis-demo",
        "dashboard": "127.0.0.1:18080"
    },
    {
        "name": "codis-demo2",
        "dashboard": "127.0.0.1:28080"
    }
]
  •  

猜你喜欢

转载自blog.csdn.net/weixin_42167918/article/details/81603337