Redis之Codis集群的搭建与使用-yellowcong

来源:互联网 发布:中国网络发展史插画 编辑:程序博客网 时间:2024/05/18 15:28

前面学习了Twitter的Redis集群解决方案Twemproxy,但是这个解决方案存在一个比较大的弊病,无法平滑地扩容/缩容。豌豆荚的Codis项目,可以很好的解决这个问题,我在安装的时候,由于GO语言环境变量的问题,导致安装折腾半天,注意GO语言的环境变量有GOPATH(go第三方包),GOROOT(go安装地址,类始于JAVA HOME),GOBIN(BIN目录,类似java的bin目录).

参考文章:
Codis集群的搭建与使用 : http://www.cnblogs.com/xuanzhi201111/p/4425194.html
Codis的安装: http://www.cnblogs.com/atomicbomb/p/6875327.html
缓存系列之五:通过codis3.2实现redis3.2.8集群的管理: http://www.cnblogs.com/reblue520/p/6874925.html
管网API: https://github.com/CodisLabs/codis/blob/release3.2/doc/tutorial_zh.md

简介

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

以上我们可以看到codis-proxy是单个节点的,因为我们可以通过结合keepalived来实现高可用:
这里写图片描述

搭建准备

1、Java安装:http://blog.csdn.net/yelllowcong/article/details/75943716

2、Zookeeper安装: http://blog.csdn.net/yelllowcong/article/details/76849946

Zookeeper安装常见错误: http://blog.csdn.net/yelllowcong/article/details/78227758

3、Go安装: http://blog.csdn.net/yelllowcong/article/details/78385716

4、Git安装: http://blog.csdn.net/yelllowcong/article/details/78293428


1、Codis Dashboard:集群管理工具,支持 codis-proxy、codis-server 的添加、删除,以及据迁移等操作。在集群状态发生改变时,codis-dashboard 维护集群下所有 codis-proxy 的状态的一致性。

2、Codis Proxy:客户端连接的 Redis 代理服务, 实现了 Redis 协议。 除部分命令不支持以外(不支持的命令列表),表现的和原生的 Redis 没有区别(就像 Twemproxy)。

3、Codis FE:集群管理界面。

4、Codis Admin:集群管理的命令行工具。

1 安装codis

1.1获取安装包

项目github地址: https://codeload.github.com/CodisLabs/codis

中文文档: https://github.com/CodisLabs/codis/blob/release3.2/doc/tutorial_zh.md

#查看go的环境变量go env GOPATH#Codis 源代码需要下载到 $GOPATH/src/github.com/CodisLabs/codis:#创建文件夹mkdir -p $GOPATH/src/github.com/CodisLabs#进入CodisLabs目录,并下载项目文件cd $GOPATH/src/github.com/CodisLabs #下载codis代码git clone https://github.com/CodisLabs/codis.git -b release3.2

目录结构,go路径后面的是自动生成的。

这里写图片描述

1.2 编译安装

#进入codis 安装目录cd $GOPATH/src/github.com/CodisLabs/codis#编译make 

编译成功,可以看到 build完事了,不容易啊。。。
这里写图片描述

1.3执行测试

make gotest

这里写图片描述

目录接口可以看出,bin目录是命令所在地,config是配置所在地,配置有dashboard和proxy两个配置。
这里写图片描述

2 Codis Dashboard

2.1 Zookeeper配置

#进入codis的安装目录cd $GOPATH/src/github.com/CodisLabs/codis#confi目录配置文件vim config/dashboard.toml#使用zookeeper作为外部存储coordinator_name = "zookeeper"#zookeeper的节点,多个节点的情况,使用逗号分割coordinator_addr = "192.168.66.100:2181,192.168.66.100:2182,192.168.66.100:2183"# Set Codis Product Name/Auth.product_name = "codis-demo"product_auth = ""# Set bind address for admin(rpc), tcp only.#管控台地址admin_addr = "192.168.66.100:18080"# Set configs for redis sentinel.sentinel_quorum = 2sentinel_parallel_syncs = 1sentinel_down_after = "30s"sentinel_failover_timeout = "5m"sentinel_notification_script = ""sentinel_client_reconfig_script = ""

配置文件,修改了zookeeper集群和监听的端口
这里写图片描述

参数说明

参数 说明 coordinator_name 外部存储类型,接受 zookeeper/etcd coordinator_addr 外部存储地址 product_name 集群名称,满足正则 \w[\w.-]* product_auth 集群密码,默认为空 admin_addr RESTful API 端口

2.2 启动Dashboard

启动dashboard,注意配置文件路径

#执行启动nohup  ./bin/codis-dashboard --ncpu=4 --config=./config/dashboard.toml --log=dashboard.log --log-level=WARN &>/dev/null &

浏览器访问
这里写图片描述

3 proxy

3.1配置文件

#配置proxyvim config/proxy.tomlproduct_name = "codis-demo"product_auth = ""# Set bind address for admin(rpc), tcp only.#绑定的地址admin_addr = "192.168.66.100:11080"# Set bind address for proxy, proto_type can be "tcp", "tcp4", "tcp6", "unix" or "unixpacket".proto_type = "tcp4"#代理服务器地址proxy_addr = "192.168.66.100:19000"# Set jodis address & session timeout, only accept "zookeeper" & "etcd".#外部存储jodis_name = "zookeeper"#zookeeper节点jodis_addr = "192.168.66.100:2181,192.168.66.100:2182,192.168.66.100:2183"jodis_timeout = "20s"jodis_compatible = false

这里写图片描述

3.2 启动proxy服务

#启动服务#--config proxy配置文件#--log 日志文件#--log-level 日志等级#--ncpu cpu数量#&>/dev/null & 不输出到控制台上nohup ./bin/codis-proxy --ncpu=4 --config=./config/proxy.toml  --log=proxy.log --log-level=WARN &>/dev/null &#查看启动情况ps -ef| grep codis

启动情况
这里写图片描述

3 启动codis-fe

启动codis-fe,Listen监听端口不要为8080,指定8090

#启动codis-fe#--zookeeper 集群节点#--listen 监听的端口# &>/dev/null & 表示不输出日志到控制台nohup ./bin/codis-fe --ncpu=1 --log=fe.log --log-level=WARN --zookeeper=192.168.66.100:2181,192.168.66.100:2182,192.168.66.100:2183 --listen=192.168.66.100:8090 &>/dev/null &

web访问
这里写图片描述

4、关闭codis服务

4.1 dashboard服务

---------dashboard服务----------------./codis-admin --dashboard=192.168.66.100:18080 --start./codis-admin --dashboard=192.168.66.100:18080 --shutdown#强制kill掉后要执行命令清楚zookeeper中节点./codis-admin --remove-lock --product=codis-test --zookeeper=192.168.66.100:2181,192.168.66.100:2182,192.168.66.100:2183

4.1 proxy服务

---------proxy服务----------------#启动proxy服务./bin/codis-admin --proxy=192.168.66.100:11080  --start#关闭proxy服务./bin/codis-admin --proxy=192.168.66.100:11080  --shutdown#强制kill掉proxy服务./bin/codis-admin --dashboard=192.168.66.100:18080 --remove-proxy --addr=192.168.66.100:11080 --force

5 启动服务顺序

#启动codis-admin,增加代理服务(这个看你有没有这个代理了)./bin/codis-admin --dashboard=192.168.66.100:18080 --create-proxy -x 192.168.66.100:11080#1、启动bashboardnohup ./bin/codis-proxy --ncpu=4 --config=./config/proxy.toml  --log=proxy.log --log-level=WARN &>/dev/null &#2、启动proxynohup ./bin/codis-proxy --ncpu=4 --config=./config/proxy.toml  --log=proxy.log --log-level=WARN &>/dev/null &#3、启动fenohup ./bin/codis-fe --ncpu=1 --log=fe.log --log-level=WARN --zookeeper=192.168.66.100:2181,192.168.66.100:2182,192.168.66.100:2183 --listen=192.168.66.100:8090 &>/dev/null &#4、启动hanohup ./bin/codis-ha --log=/tmp/ha.log --log-level=WARN --dashboard=192.168.66.100:18080 & 

问题集合

安装报错go build -i -o bin/codis-dashboard ./cmd/dashboard

这里写图片描述

导致这个原因的问题是go环境变量配置有问题,我配置的时候只配置了一个,实际上需要配置三个。

#go语言的程序包安装的地址(看你自己的安装路径了)export GOROOT=/usr/local/go#go的暴漏的binexport GOBIN=$GOPATH/bin#GOROOT 第三方包的安装包路径(自定义)export GOPATH=/home/codis/gopath#需要BIN目录和GOPATHexport PATH=$PATH:$GOBIN:$GOPATH

环境变量配置
这里写图片描述

原创粉丝点击