Codis的原理以及部署—— CODIS (分布式 Redis 解决方案)

1.什么是Codis?

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

2.codis介绍

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

Codis由四部分组成

Codis-proxy 实现redis协议,由于本身是无状态的,因此可以部署很多个节点
Codis-config 是codis的管理工具,包括添加/删除redis节点添加/删除proxy节点,发起数据迁移等操作,自带httpserver,支持管理后台方式管理配置
Codis-server 是codis维护的redis分支,基于2.8.21分支,加入了slot的支持和原子的数据迁移指令; codis-proxy和codis-config只能和这个版本的redis交互才能正常运行
Zookeeper 用于codis集群元数据的存储,维护codis集群节点

3.Codis的架构

在这里插入图片描述

4.Codis的优缺点

(1)优点
对客户端透明,与codis交互方式和redis本身交互一样
支持在线数据迁移,迁移过程对客户端透明有简单的管理和监控界面
支持高可用,无论是redis数据存储还是代理节点
自动进行数据的均衡分配
最大支持1024个redis实例,存储容量海量
高性能

(2)缺点
采用自有的redis分支,不能与原版的redis保持同步
如果codis的proxy只有一个的情况下, redis的性能会下降20%左右
某些命令不支持,比如事务命令muti
国内开源产品,活跃度相对弱一些

5.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 可自行扩展。

6.codis集群的搭建

基本实验环境
主机server1:172.25.2.1和物理机:172.25.2.250

(1)在真机中创建一个全新的快照用来做实验,保证实验环境干净
在这里插入图片描述
在这里插入图片描述
(2)用真机连接虚拟机server1
在这里插入图片描述
在这里插入图片描述

(3)在真机上搭建共享yum源,让server1使用
并且关闭真机的防火墙,开启真机的apache服务
在这里插入图片描述

(4)确保server1的yum仓库可以使用
在这里插入图片描述
codis集群的搭建过程如下:

(1)安装go环境
从网上下载go的压缩包并且解压到指定目录下
在这里插入图片描述
在环境变量文件中最后添加以下三行
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
安装完成后可以运行下列命令进行检测
在这里插入图片描述

测试一个go程序
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
(2)设置编译环境
$GOPATH 是本机所有第三方库 go 项目所在目录,Codis 仅是其中之一
下载 Codis 源代码
在这里插入图片描述
解压
在这里插入图片描述
在这里插入图片描述
安装编译需要的依赖性工具
在这里插入图片描述
在这里插入图片描述
(3)编译 Codis 源代码
直接通过 make 进行编译,会看到如下输出
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
(4)快速启动
2分钟快速构建一个单机版测试 codis 集群,无任何外部组件依赖.
源码中 admin 文件夹提供了一系列脚本以便快速启动、停止各个组件,提高运维效率。
1)启动codis-dashboard
使用 codis-dashboard-admin.sh 脚本启动 dashboard,
并查看 dashboard 日志确认启动是否有异常。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2)启动codis-proxy
使用 codis-proxy-admin.sh 脚本启动 codis-proxy,
并查看 proxy 日志确认启动是否有异常。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3)启动codis-server
使用 codis-server-admin.sh 脚本启动 codis-server,
并查看 redis 日志确认启动是否有异常。
在这里插入图片描述

4)启动codis-fe
使用 codis-fe-admin.sh 脚本启动 codis-fe,并查看 fe 日志确认启动是否有异常。
在这里插入图片描述

(5)开启完毕之后查看一下端口
在这里插入图片描述

访问测试

(1)在浏览器输入172.25.2.1:9090,查看图形界面

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(2)通过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 按钮即可,如下图所示:

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

到这里codis集群的搭建已经完毕,只需要图形化管理集群即可
不过这个只是其中一种方式之一,也可以使用:Ansible或者docker

发布了458 篇原创文章 · 获赞 61 · 访问量 8万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 终极编程指南 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览