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

2018-02-05 11:07:36来源:oschina作者:天佑我儿人点击

分享


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



参考文章:Codis集群的搭建与使用 : http://www.cnblogs.com/xuanzhi201111/p/4425194.htmlCodis的安装: 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 = 2
sentinel_parallel_syncs = 1
sentinel_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配置文件
#配置proxy
vim config/proxy.toml
product_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、启动bashboard
nohup ./bin/codis-proxy --ncpu=4 --config=./config/proxy.toml--log=proxy.log --log-level=WARN &>/dev/null &
#2、启动proxy
nohup ./bin/codis-proxy --ncpu=4 --config=./config/proxy.toml--log=proxy.log --log-level=WARN &>/dev/null &
#3、启动fe
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 &
#4、启动ha
nohup ./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的暴漏的bin
export GOBIN=$GOPATH/bin
#GOROOT 第三方包的安装包路径(自定义)
export GOPATH=/home/codis/gopath
#需要BIN目录和GOPATH
export PATH=$PATH:$GOBIN:$GOPATH

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

微信扫一扫

第七城市微信公众平台