Redis分布式集群实战(六)——codis集群的搭建

本文详细介绍了Codis分布式Redis解决方案,包括Codis的原理、组成、架构、优缺点和Zookeeper的角色。重点讲述了如何搭建 Codis 集群,涉及安装Go、配置环境变量、编译安装 Codis、部署Zookeeper等步骤,最后提供了测试和验证集群正常运行的方法。
摘要由CSDN通过智能技术生成

一、Codis原理

1、什么是Codis?

Codis 是一个 分布式 Redis 解决方案, 对于上层的应用来说, 连接到 Codis Proxy 和连接原生的 Redis Server 没有明显的区别(不支持的命令列表), 上层应用可以像使用单机的 Redis 一样使用, Codis 底层会处理请求的转发, 不停机的数据迁移等工作,所有后边的一切事情, 对于前面的客户端来说是透明的, 可以简单的认为后边连接的是一个内存无限大的 Redis 服务。
Codis是一套用go语言编写的,为了应对高并发环境下的redis集群软件,原理是对一个redis key操作前,先把这个key通过crc32算法,分配到不同redis的某一个slot上,实现并发读写功能.而且能通过zookeeper调用redis-sentinel来实现故障切换功能.现在最新版本是3.2.1,依托于redis3.2.9开发出来。

2、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的架构

codis采用一层无状态的proxy层,将分布式逻辑写在proxy上,底层的存储引擎还是Redis,数据的分布状态存储于zookeeper(etcd)中

在这里插入图片描述

4、Codis的优缺点

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

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

5、zookeeper

zookeeper依赖jdk语言包,描述:用于存放数据配置路由表。zookeeper简称zk。在生产环境中,zk部署越多,其可靠性越高。由于zk集群是以宕机个数过半才会让整个集群宕机,因此,奇数个zk更佳。

逻辑架构如下:

  • 访问层:

访问方式可以是类似keepalived集群的vip方式,或者是通过java代码调用jodis控件再连接上zookeeper集群,然后查找到可用的proxy端,进而连接调用不同的codis-proxy地址来实现高可用的LVS和HA功能。

  • 代理层:

中间层由codis-proxy和zookeeper处理数据走向和分配,通过crc32算法,把key平均分配在不同redis的某一个slot中。实现类似raid0的条带化,在旧版本的codis中,slot需要手工分配,在codis3.2之后,只要点一个按钮slot会自动分配,相当方便,但是也可以手动分配,需要另外调用codis-admin命令。

  • 数据层:

最后codis-proxy把数据存进真实的redis-server主服务器上,由于codis的作者黄东旭相当注重数据一致性,不允许有数据延时造成的数据不一致,所以架构从一开始就没考虑主从读写分离。从服务器仅仅是作为故障切换的冗余架构,由codis-dashboard监控各服务的状态,然后通过改写zookeeper数据和调用redis-sentinel实现故障切换功能。

二、codis集群的搭建部署

主机 服务
server1 zk,codis-dashboard,codis-proxy,codis-fe,codis-server
server2 codis-server
server3 codis-server

实验过程如下所示:
如果之前做过redis的服务,将redis服务停掉,因为会占用6379端口。

1、安装go,这里选用的版本为go1.9.1——因为codis3.2要求至少是1.7或1.8以上版本。

[root@server1 ~]# tar zxf go1.9.1.linux-amd64.tar.gz -C /usr/local/    #-C:指定解压目录
[root@server1 ~]# cd /usr/local 

在这里插入图片描述

在这里插入图片描述
2、配置环境变量

[root@server1 ~]# vim /etc/profile     #编辑环境变量的配置文件
 78 export GOROOT=/usr/local/go
 79 export GOPATH=/usr/local/codis
 80 export PATH=$PATH:/usr/local/go/bin
 [root@server1 ~]# source /etc/profile    #重新加载环境变量,使得刚刚配置的环境变量生效

在这里插入图片描述

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

3、对codi进行源码编译,编译codis时依赖go,所以在安装codis先装好go。

[root@server1 ~]# mkdir -p $GOPATH/src/github.com/CodisLabs       #设置编译环境
[root@server1 ~]# yum install unzip -y    #安装unzip软件,以支持unzip命令
[root@server1 ~]# unzip 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值