欢迎您, 来到 宁时修博客.^_^

Codis 3.x集群搭建与使用_01

2018/07/04 林木立 Codis 915
Codis 3.x集群 基础环境安装

一、Redis集群方案与Codis简介

        Redis集群方案有twemproxy,codis、redis cluster解决方案。

        这篇文章使用豌豆荚的Codis 3.x来部署。

        Codis 是一个分布式 Redis 解决方案, 对于上层的应用来说, 连接到 Codis Proxy 和连

原生的 Redis Server 没有显著区别 (不支持的命令列表), 上层应用可以像使用单机的 Redis

一样使用, Codis 底层会处理请求的转发, 不停机的数据迁移等工作, 所有后边的一切事情, 对

于前面的客户端来说是透明的, 可以简单的认为后边连接的是一个内存无限大的 Redis 服务。

        截至文章编写,最新 release 版本为 codis-3.2,codis-server 基于 redis-3.2.8。


        Codis架构设计:

architecture.png


        Codis体系结构

        Codis引入了Group的概念,每个Group包括1个Redis Master及至少1个Redis Slave,这是和Twemproxy的区别之一。这样做的好处是,如果当前Master有问题,则可通过Dashboard“自助式”切换到Slave,而不需要修改程序配置文件。


        为支持数据热迁移(Auto Rebalance),出品方修改了Redis Server源码,并称之为Codis Server。


        Codis采用预先分片(Pre-Sharding)机制,事先规定1024个slots(也就是说,最多能支持后端1024个Codis Server),这些路由信息保存在ZooKeeper中。


        ZooKeeper还维护Codis Server Group信息,并提供分布式锁等服务。





二、Codis组件介绍

        Codis 3.x 由以下组件组成:

--------------------------------------------------------------------------------------------------------------------------------------

        Codis Server:基于 redis-3.2.8 分支开发。增加了额外的数据结构,以支持 slot 有关

                                的操作以及数据迁移指令。具体的修改可以参考文档 redis 的修改。

--------------------------------------------------------------------------------------------------------------------------------------

        Codis Proxy:客户端连接的 Redis 代理服务, 实现了 Redis 协议。 除部分命令不支持

                                以外(不支持的命令列表),表现的和原生的 Redis 没有区别(就像

                                Twemproxy)。

                对于同一个业务集群而言,可以同时部署多个 codis-proxy 实例;

                不同 codis-proxy 之间由 codis-dashboard 保证状态同步。

--------------------------------------------------------------------------------------------------------------------------------------

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

                对于同一个业务集群而言,同一个时刻 codis-dashboard 只能有 0个或者1个;

                所有对集群的修改都必须通过 codis-dashboard 完成。

--------------------------------------------------------------------------------------------------------------------------------------

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

                可用于控制 codis-proxy、codis-dashboard 状态以及访问外部存储。

---------------------------------------------------------------------------------------------------------------------------------------    

        Codis FE:集群管理界面。

                多个集群实例共享可以共享同一个前端展示页面;

                通过配置文件管理后端 codis-dashboard 列表,配置文件可自动更新。

---------------------------------------------------------------------------------------------------------------------------------------

        Storage:为集群状态提供外部存储。

                提供 Namespace 概念,不同集群的会按照不同 product name 进行组织;

                目前仅提供了 Zookeeper、Etcd、Fs 三种实现,但是提供了抽象的 interface 可自行扩展。



三、部署Codis 3.x需要的基础环境

    (1)测试服务器架构

------------------------------------------------------------------------------------------------------------------------------------

192.168.2.24                               192.168.2.25                               192.168.2.26

zookeeper                                   zookeeper                                  zookeeper

codis-proxy                                 codis-proxy                                codis-proxy

codis-dashboard                         codis-dashboard(备)                  codis-dashboard(备)

redis(slave)                                  redis(master)                              redis(slave)

codis-fe                                       codis-fe(备)                                 codis-fe(备)

-----------------------------------------------------------------------------------------------------------------------------------


    (2)软件版本

    OS:CentOS 7.4

    JDK:java-1.8.0-openjdk-1.8.0.171

    zookeeper:zookeeper-3.4.9 (http://zookeeper.apache.org/releases.html)

    Go:go1.10.3.linux-amd64.tar.gz(https://golang.google.cn/dl/)

    Codis:3.2(https://github.com/CodisLabs/codis/archive/release3.2.zip)

    官方部署文档:https://github.com/CodisLabs/codis/blob/release3.2/doc/tutorial_zh.md


    


    (3)部署zookeeper

       Zookeeper分布式服务框架,是Apache Hadoop的一个子项目,它主要是用来解决分布

式应用中经常遇到的一些数据管理问题,如:统一命名服务、状态同步服务、集群管理、分布

式应用配置项的管理等。Codis依赖zookeeper才能协同工作。

      zookeeper是由Java语言开发的,所以需要jdk环境。

[root@codis-redis codis]# yum install java-1.8.0-openjdk -y
[root@codis-redis codis]# java -version
openjdk version "1.8.0_171"
OpenJDK Runtime Environment (build 1.8.0_171-b10)
OpenJDK 64-Bit Server VM (build 25.171-b10, mixed mode)

[root@codis-redis codis]# cd /usr/local/src/
[root@codis-redis src]# wget https://archive.apache.org/dist/zookeeper/zookeeper-3.4.9/zookeeper-3.4.9.tar.gz
[root@codis-redis src]# tar -zxvf zookeeper-3.4.9.tar.gz -C /usr/local/
[root@codis-redis src]# cd /usr/local/
[root@codis-redis local]# ln -s /usr/local/zookeeper-3.4.9/ /usr/local/zookeeper


        配置zookeeper

[root@codis-redis local]# cd zookeeper/conf/
[root@codis-redis conf]# cp zoo_sample.cfg zoo.cfg
[root@codis-redis conf]# vim zoo.cfg 
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/data/zookeeper/data
clientPort=2181
autopurge.snapRetainCount=500
autopurge.purgeInterval=24
server.1=192.168.2.24:2888:3888
server.2=192.168.2.25:2888:3888
server.3=192.168.2.26:2888:3888
# 2888表示zookeeper程序监听端口,3888表示zookeeper选举通信端口

[root@codis-redis conf]# mkdir -p /data/zookeeper/data
[root@codis-redis conf]# echo "1" > /data/zookeeper/data/myid

        设置myid在我们配置的dataDir指定的目录下面,创建一个myid文件,里面内容为一个数字,用来标识当前主机,conf/zoo.cfg文件配置的server.ID中的ID是什么数字,则myid文件就输入这个数字,每台zk都要有myid文件。


        启动zookeeper,每台zk都要启动,无所谓先后。

[root@codis-redis conf]# /usr/local/zookeeper/bin/zkServer.sh start
~       
#查看zk状态
[root@codis-redis conf]# /usr/local/zookeeper/bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Mode: follower

[root@codis-redis01 conf]# /usr/local/zookeeper/bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Mode: leader

[root@codis-redis02 conf]# /usr/local/zookeeper/bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Mode: follower

如果报错,查看启动日志。在哪个路径下启动zk,就会有个zookeeper.out日志


        通过连接客户端,查看相关信息

[root@codis-redis ~]# /usr/local/zookeeper/bin/zkCli.sh -server 127.0.0.1:2181


    (4) 安装Go环境

        Codis是Go语言写的,所以部署codis的机器都要安装Go环境。

        Go下载地址:

                https://golang.google.cn/dl/

                https://www.golangtc.com/download

[root@codis-redis ~]# wget https://dl.google.com/go/go1.10.3.linux-amd64.tar.gz
[root@codis-redis ~]# tar -zxvf go1.10.3.linux-amd64.tar.gz -C /usr/local/
[root@codis-redis ~]# vim /etc/profile
export PATH=$PATH:/usr/local/go/bin   #命令搜索路径
export GOROOT=/usr/local/go           #go安装路径
export GOPATH=/usr/local/codis        #go工作路径
[root@codis-redis ~]# source /etc/profile

# 检查go
[root@codis-redis ~]# go version
go version go1.10.3 linux/amd64


        Go环境已经部署好了,接下来就是编译安装Codis了。

        请看下篇文章。



点赞
说说你的看法

所有评论: (0)