码迷,mamicode.com
首页 > 其他好文 > 详细

codis+redis 集群搭建管理

时间:2017-11-09 16:23:49      阅读:285      评论:0      收藏:0      [点我收藏+]

标签:otto   ase   content   nod   star   startup   chkconfig   width   遇到   

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

Codis 由四部分组成:

Codis Proxy (codis-proxy)
Codis Dashboard (codis-config)
Codis Redis (codis-server)
ZooKeeper/Etcd
codis-proxy 是客户端连接的 Redis 代理服务, codis-proxy 本身实现了 Redis 协议, 表现得和一个原生的 Redis 没什么区别 (就像 Twemproxy), 对于一个业务来说, 可以部署多个 codis-proxy, codis-proxy 本身是无状态的.

codis-config 是 Codis 的管理工具, 支持包括, 添加/删除 Redis 节点, 添加/删除 Proxy 节点, 发起数据迁移等操作. codis-config 本身还自带了一个 http server, 会启动一个 dashboard, 用户可以直接在浏览器上观察 Codis 集群的运行状态.

codis-server 是 Codis 项目维护的一个 Redis 分支, 基于 2.8.21 开发, 加入了 slot 的支持和原子的数据迁移指令. Codis 上层的 codis-proxy 和 codis-config 只能和这个版本的 Redis 交互才能正常运行.

Codis 依赖 ZooKeeper 来存放数据路由表和 codis-proxy 节点的元信息, codis-config 发起的命令都会通过 ZooKeeper 同步到各个存活的 codis-proxy.

Codis 支持按照 Namespace 区分不同的产品, 拥有不同的 product name 的产品, 各项配置都不会冲突.

————————————————————————————
(摘自:官方Github,https://github.com/CodisLabs/codis/blob/master/doc/tutorial_zh.md)

本文涉及到六台服务器,它们的IP规划与架构初览如下:

 

零、所有的服务器

关闭防火墙:
chkconfig iptables off

关闭SELinux:
sed -i “/SELINUX/enforcing/disabled/” /etc/selinux/config

开启YUM缓存:
sed -i “/keepcache/s/0/1/” /etc/yum.conf

网卡添加外网DNS:
echo “DNS1=114.114.114.114” >> /etc/sysconfig/network-scripts/ifcfg-eth0
service network restart
ping baidu.com -c 3

YUM生成库缓存:

 

Java支持:

 

一、部署:Zookeeper。

官方项目主页:
http://zookeeper.apache.org/

官方介质下载页:
http://zookeeper.apache.org/releases.html

这里我下载最新版本:3.5.2 alpha。
Download Link:
https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.5.2-alpha/zookeeper-3.5.2-alpha.tar.gz

在98 / 99,两个IP上部署ZOOKEEPER。

(这里,仅演示在其中一台上搭建ZK的过程,第二台的方式类似)
上传软件介质到服务器:

 

解压:

 

移动到zookeeper的安装目录【/opt/zookeeper】:

 

配置zookeeper配置文件:

节点二【zookeeper2】的这个配置文件是:

 

创建上面配置文件中需要的目录结构:
mkdir -p /data/zookeeper/zk1/{data,log}

创建myid文件:
【zookeeper1】

【zookeeper2】

 

启动zookeeper:

可以看到,启动成功。

测试zookeeper的客户端程序:

【zookeeper1】

【zookeeper2】

 

这样,ZOOKEEPER,就部署好了。

二、部署:Codis。
(和上面一样,这里仅演示在一台节点上的操作详情,另一台也是类似的。在我的环境中,一共有两台Codis Server。)

1. Go语言支持。

官方网站:https://golang.org/

当前最新版本:1.7。

官方下载链接:
Linux:https://storage.googleapis.com/golang/go1.7.linux-amd64.tar.gz
源码包:https://storage.googleapis.com/golang/go1.7.src.tar.gz
MS Windows:https://storage.googleapis.com/golang/go1.7.windows-amd64.msi

上传介质到服务器:

 

将go安装到/opt/golang。

创建目录:

将安装介质解压到安装目录:

 

配置GO的环境变量:

其中:
GOROOT,Go语言的软件根目录
GOPATH,Go语言的项目根目录

创建Go语言的项目目录:

 

测试Go的可用性:

 

2. 安装:Codis。
Codis项目主页:
https://github.com/CodisLabs/codis

开源中国的介绍:
http://www.oschina.net/p/codis/?fromerr=PIDoyfcY

GIT支持:

 

获得Codis代码(需要服务器有git软件包的支持):

官方建议通过“go get”来获取codis,该命令会下载master分支的最新版,而master分支则由codis作者维护。

这一步的执行过程可能会比较久,而命令行挂起,看不到进程。
你可以开启另一个会话,监控GOPATH目录的容量变化,如下:
watch -n .1 -d “du -sh /data/go_me”

这样会比较显而易见:
技术分享
大概25M左右。

如果这一步没有git支持,则你会遇到如下错误:

 

最终下载成功后:

 

编译前,需要安装的软件包
yum install -y gcc
yum groupinstall “Development Tools” # 很重要!

安装:jemalloc支持

下载jemalloc:
http://www.canonware.com/download/jemalloc/jemalloc-4.2.1.tar.bz2

上传服务器,并安装:

 

如果没有jemalloc,则编译的时候会出错:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    CC adlist.o
    CC ae.o
    CC anet.o
    CC dict.o
In file included from adlist.c:34:
zmalloc.h:50:31: error: jemalloc/jemalloc.h: No such file or directory
zmalloc.h:55:2: error: #error "Newer version of jemalloc required"
make[2]: *** [adlist.o] Error 1
make[2]: *** Waiting for unfinished jobs....
In file included from ae.c:44:
zmalloc.h:50:31: error: jemalloc/jemalloc.h: No such file or directory
zmalloc.h:55:2: error: #error "Newer version of jemalloc required"
In file included from dict.c:47:
zmalloc.h:50:31: error: jemalloc/jemalloc.h: No such file or directory
zmalloc.h:55:2: error: #error "Newer version of jemalloc required"
make[2]: *** [ae.o] Error 1
make[2]: *** [dict.o] Error 1

注意:如果依旧报错,编译时采用:
make MALLOC=libc

Codis,编译:make MALLOC=libc。

执行成功后,会在当前路径下的bin目录中生成可执行文件。
如下:

生成的可执行文件:
codis-config
codis-proxy
codis-server

assents,存放了codis-config的Dashboard Http需要的资源,需要与codis-config放在同一个目录下。

二、部署:Codis集群。
(这里应该是对Codis Proxy的配置。)

确认zookeeper状态是否运行:
【98】

 

【99】

 

配置Codis Dashboard的配置文件:
【94】

【95】的配置:

 

启动Codis dashboard:

 

开另一个会话,你可以查看:

 

访问Dashboard:
http://10.158.1.94:18087/admin/
技术分享

初始化slots:

 

通过管理WEB页面,查看SLOT信息:
http://10.158.1.94:18087/slots
技术分享
可以看到,当前,状态都是:OFF。

启动Codis Server。

配置redis配置文件:

(以上配置为默认配置,并没有做出什么改动。)

启动Redis:

 

检查状态:

 

添加Redis Server Group。

编辑配置文件:

 

启动多个服务:
/data/go_me/src/github.com/CodisLabs/codis/bin/codis-server /config/codis/redis_server_group_1.conf
/data/go_me/src/github.com/CodisLabs/codis/bin/codis-server /config/codis/redis_server_group_2.conf
/data/go_me/src/github.com/CodisLabs/codis/bin/codis-server /config/codis/redis_server_group_3.conf

运行后,服务状态:

【codis-server1】与【codis-server2】都需要如上配置。

添加到server group:

组一:
主 – codis-server1:6379
辅 – codis-server2:6381

组二:
主 – codis-server2:6379
辅 – codis-server2:6382 / codis-server1:6382

组三:
主 – codis-server1:6383
辅 – codis-server2:6383 / codis-server1:6381

开始配置:
配置前:

 

组一:

 

组二:

 

组三:

 

配置好后,查看状态:
【codis-server1】

【codis-server2】

 

在zookeeper端,也会有关于server group的配置信息:

 

通过Codis Dashboard查看:
技术分享

技术分享

设置Server Group的slot范围。

可以先初始化slot信息,如果以前做过初始化,则需要强制初始化:

 

初始化完成后,就可以访问dashboard查看了:
http://10.158.1.94:18087/slots
技术分享

技术分享
注意上图中,红框高亮部分的编号信息。

slot默认初始化1024个,即:0~1023。(有时候也会有所不同。)

开始划分范围:

 

范围划分好后,dashboard的呈现有所变化:
技术分享

如果选中其中某个范围,会在该页顶端显示其对应server group的详细信息:
技术分享

启动:Codis Proxy。
命令:
bin/codis-proxy -c config.ini -L /var/log/codis-proxy.log –cpu=2 –addr=0.0.0.0:19000 –http-addr=0.0.0.0:11000 &

 

查看Proxy的状态:

 

这时候,通过dashboard也能够看到Proxy的状态:
http://10.158.1.94:18087/admin/
技术分享

Proxy Debug:
http://10.158.1.94:11000/debug/vars
技术分享

这样,Codis集群,就搭建完成了。

三、测试。

可以看到,数据自动同步。

——————————
Done。

codis+redis 集群搭建管理

标签:otto   ase   content   nod   star   startup   chkconfig   width   遇到   

原文地址:http://www.cnblogs.com/leochenliang/p/7809883.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!