安徽省建设干部学校网站关停,网站背景设计,自学seo大概需要多久,注册网站域名的作用文章目录 1. 简介2. Codis的安装与配置下载编译源码安装1. 安装 Go 运行环境2. 设置编译环境3. 下载 Codis 源代码4. 编译 Codis 源代码 Docker 部署 3. Codis的架构Codis的架构图和组件Codis的工作流程 4. Codis的核心特性自动数据分片数据迁移高可用性全面支持Redis命令分布式… 文章目录 1. 简介2. Codis的安装与配置下载编译源码安装1. 安装 Go 运行环境2. 设置编译环境3. 下载 Codis 源代码4. 编译 Codis 源代码 Docker 部署 3. Codis的架构Codis的架构图和组件Codis的工作流程 4. Codis的核心特性自动数据分片数据迁移高可用性全面支持Redis命令分布式锁和发布订阅 5. Codis的高可用与故障恢复Codis的高可用机制恢复Codis集群的故障节点 6. Codis的使用场景和限制Codis适合的使用场景Codis的一些限制 6. Codis 与Redis Cluster对比参考文档 1. 简介
Codis是由Wandou Labs豌豆荚团队开发的开源工具用于解决在大数据环境下使用Redis所面临的挑战。Codis将多个Redis实例组织起来形成一个统一的数据访问层从而提供了高可用和分布式的特性使得Redis能够更好地处理大数据和高并发的场景。
Codis的功能是基于Redis构建的。Redis是一种内存数据库用于存储键值对数据。然而当数据量或并发请求数量增长时单个Redis实例可能会遇到性能瓶颈。Codis通过在多个Redis实例之间进行数据分片解决了这个问题。另外Codis还提供了一些其他的高级功能如数据迁移、故障恢复等。 codis server基于redis进行了二次开发的组件负责数据的读写 codis proxy面向客户端代理客户端访问codis server zookeeper 集群保存元数据如数据路由表信息codis proxy信息 codis dashboard,codis fecodis dashboard提供维护codis servercodis proxy等功能codis fe提供web界面方便管理人员使用。 通俗的理解Codis可以被视为一个强大的Redis集群解决方案它提供了更多的功能并且允许开发者以相似的方式操作Redis实例。在大规模数据处理和高并发环境下Codis相对于单个Redis实例可以提供更好的性能和扩展性。 2. Codis的安装与配置
下载
release binary文件安装
如果是重要的生产环境使用尽量不要选择alpha、rc版本。 根据自己的部署平台选择相应的文件下载即可。
编译源码安装
1. 安装 Go 运行环境
参考这里 安装完成后可以运行下列命令进行检测
$ go version
go version go1.7.3 linux/amd642. 设置编译环境
注意 $GOPATH 是本机所有第三方库 go 项目所在目录Codis 仅是其中之一。
添加 $GOPATH/bin 到 $PATH例如PATH$PATH:$GOPATH/bin。
$ go env GOPATH
/home/codis/gopath3. 下载 Codis 源代码
Codis 源代码需要下载到 $GOPATH/src/github.com/CodisLabs/codis
$ mkdir -p $GOPATH/src/github.com/CodisLabs
$ cd $_ git clone https://github.com/CodisLabs/codis.git -b release3.24. 编译 Codis 源代码
直接通过 make 进行编译会看到如下输出
$ cd $GOPATH/src/github.com/CodisLabs/codis
$ make
make -j -C extern/redis-3.2.8/
... ...
go build -i -o bin/codis-dashboard ./cmd/dashboard
go build -i -o bin/codis-proxy ./cmd/proxy
go build -i -o bin/codis-admin ./cmd/admin
go build -i -o bin/codis-fe ./cmd/fe$ ls bin/
total 69124
drwxr-xr-x 4 codis codis 4096 Jan 4 14:55 assets
-rwxr-xr-x 1 codis codis 17600752 Jan 4 14:55 codis-admin
-rwxr-xr-x 1 codis codis 18416320 Jan 4 14:55 codis-dashboard
-rwxr-xr-x 1 codis codis 9498040 Jan 4 14:55 codis-fe
-rwxr-xr-x 1 codis codis 11057280 Jan 4 14:55 codis-proxy
-rwxr-xr-x 1 codis codis 4234432 Jan 4 14:55 codis-server
-rw-r--r-- 1 codis codis 148 Jan 4 14:55 version
... ...$ cat bin/version
version 2016-01-03 14:53:22 0800 51f06ae3b58a256a58f857f590430977638846a3
compile 2016-01-04 15:00:17 0800 by go version go1.5.2 linux/amd64详细参考 https://github.com/CodisLabs/codis/blob/master/doc/tutorial_zh.md
通过web浏览器访问集群管理页面(fe地址:127.0.0.1:9090) 选择我们刚搭建的集群 codis-demo在 Proxy 栏可看到我们已经启动的 Proxy 但是 Group 栏为空因为我们启动的 codis-server 并未加入到集群 添加 NEW GROUPNEW GROUP 行输入 1再点击 NEW GROUP 即可 添加 Codis ServerAdd Server 行输入我们刚刚启动的 codis-server 地址添加到我们刚新建的 Group然后再点击 Add Server 按钮即可如下图所示 通过fe初始化slot 新增的集群 slot 状态是 offline因此我们需要对它进行初始化将 1024 个 slot 分配到各个 group而初始化最快的方法可通过 fe 提供的 rebalance all slots 按钮来做如下图所示点击此按钮我们即快速完成了一个集群的搭建。 Docker 部署
Codis 3.x 起开始正式支持 Docker 部署。这就需要 codis-dashboard 以及 codis-proxy 能够外部的 listen 地址暴露出来并保存在外部存储中。
codis-proxy 增加了 --host-admin 以及 --host-proxy 参数 codis-dashboard 增加了 --host-admin 参数 以 codis-proxy 的 Docker 为例
$ docker run --name Codis-Proxy -d -p 29000:19000 -p 21080:11080 codis-image \codis-proxy -c proxy.toml --host-admin 100.0.1.100:29000 --host-proxy 100.0.1.100:21080codis-proxy 在启动后会使用 --host-admin 和 --host-proxy 参数所指定的实际地址替换 Docker 内监听的地址向 codis-dashboard 注册。这样例如使用 Jodis 的过程中客户端就能够通过 100.0.1.100:29000 来访问 proxy 实例。
codis-dashboard 也是相同的道理会使用 --host-admin 地址向外部存储注册这样 codis-fe 也能通过该地址正确的对 codis-dashboard 进行操作。
具体样例可以参考 scripts/docker.sh。
3. Codis的架构 Codis的架构图和组件
Codis的架构主要包含以下四个部分 ProxyProxy是Codis的核心组件它负责请求的路由和负载均衡。用户的请求首先发送到Proxy然后Proxy将请求转发到相应的Redis实例。 GroupGroup是一组Redis实例它们中的数据是一致的。每个Group含有一个Master节点和多个Slave节点Master节点负责处理写请求Slave节点用于处理读请求和故障恢复。 DashboardDashboard是Codis的管理界面它提供了一系列的管理和监控功能如数据迁移、节点管理等。 ZooKeeperZookeeper是一个开源的分布式协调服务Codis使用它来存储和同步集群的状态信息。
Codis的工作流程 当一个请求发送到Codis时以下是其大致的处理流程 Proxy接收到用户的请求。 Proxy查询Zookeeper获取到请求应该路由到哪个Group。 Proxy将请求转发到对应Group的Master节点。 Master节点处理请求并将结果返回给Proxy。 Proxy将结果返回给用户。
4. Codis的核心特性
自动数据分片
Codis支持自动的数据分片能够将数据在多个Redis实例之间进行均匀分布这样就可以有效地解决单个Redis实例的性能瓶颈。Codis的分片是基于Redis的Key进行的每个Key会被哈希到一个Slot中每个Slot对应一个Redis实例。
数据迁移
在某些场景下可能需要增加或减少Redis实例数量以应对变化的负载。在这种情况下Codis提供了数据迁移的功能。可以在Dashboard中方便地管理数据迁移的过程Codis会自动进行数据的迁移和重分布而这个过程对应用是透明的。
高可用性
Codis集群中的每个Redis实例都有一个或多个备份实例当主实例发生故障时备份实例可以立即接管请求保证了服务的持续可用。Codis使用Zookeeper来检测和管理实例的状态以实现快速的故障恢复。
全面支持Redis命令
Codis全面支持Redis的各种命令包括键值操作、列表操作、集合操作等。可以像使用单个Redis实例一样使用Codis这极大地降低了使用Codis的学习成本。
分布式锁和发布订阅
Codis支持Redis的分布式锁和发布订阅功能可以使用这些功能来实现各种复杂的并发控制和事件通知需求。
5. Codis的高可用与故障恢复
Codis的高可用机制
Codis的高可用性是通过其内部的故障恢复机制实现的。在Codis中每个Redis实例Master节点都会有一个或多个备份实例Slave节点。在正常情况下所有的写请求都会发送到Master节点而读请求则可以由任何节点来处理。
当Master节点发生故障时Codis会自动从其备份节点中选举出一个新的Master节点接管服务。这个过程是自动进行的对于用户来说除了可能会有短暂的服务中断外其他的都是透明的。
Codis使用Zookeeper来检测和管理节点的状态当检测到节点发生故障时Zookeeper会自动触发故障恢复流程。
恢复Codis集群的故障节点
当一个节点发生故障后可以使用Codis提供的工具来恢复它。以下是一个例子
# 停止故障节点
codis-admin --proxyproxy_addr --offline# 修复故障节点
codis-admin --proxyproxy_addr --online在这个例子中proxy_addr是故障节点的地址。首先需要将故障节点设置为离线状态然后修复节点后再将其设置为在线状态。
此外还可以使用Codis的Dashboard来可视化地管理和监控Codis集群的状态包括故障恢复等操作。
需要注意的是Codis的高可用机制并不能保证数据的一致性。如果在Master节点故障期间有写请求则这些请求可能会丢失。因此需要根据的应用的需求选择合适的数据持久化和备份策略。
6. Codis的使用场景和限制
Codis适合的使用场景
大规模数据存储Codis通过数据分片和负载均衡可以支持大规模的数据存储。如果的应用需要存储TB级别的数据并且需要高性能的读写操作Codis是一个不错的选择。高可用服务Codis内置了故障恢复机制可以在节点发生故障时自动进行故障转移保证服务的高可用性。实时数据缓存Codis可以作为一个高性能的分布式缓存用于存储和查询实时数据。例如可以使用Codis来实现一个实时的内容推荐系统。会话存储Codis可以用于存储用户的会话信息。比如可以使用Codis来实现一个分布式的会话管理系统。
Codis的一些限制
事务支持Codis不支持Redis的事务操作。如果的应用需要使用事务可能需要考虑其他的解决方案或者使用其他的并发控制机制替代事务。强一致性Codis的数据分布是基于最终一致性模型的它不能保证强一致性。如果的应用需要强一致性可能需要考虑其他的数据存储方案。复杂查询Codis不支持Redis的复杂查询操作如排序和聚合等。如果的应用需要进行复杂的数据处理和查询可能需要考虑其他的数据处理框架。持久化虽然Codis支持Redis的持久化功能但由于Codis是分布式的所以持久化的过程可能会比较复杂。
6. Codis 与Redis Cluster对比
对比项CodisRedis Cluster可靠性可靠可靠扩容支持支持数据迁移同步迁移异步迁移同步迁移客户端兼容性兼容不兼容需要支持Cluster的客户端组件数量多不需要额外组件只需要Redis实例成本组件多成本高不需要额外组件成本低成熟度高低于Codis
Codis的优势在于可靠性、支持扩容、数据迁移方式的灵活性以及客户端兼容性。而Redis Cluster的优势在于组件少、成本低。 在实际应用中你可以根据以下几点来选择
可靠性如果你需要一个高可靠性的数据存储方案Codis和Redis Cluster都是不错的选择。扩容能力如果你预计你的数据将会快速增长需要一个可以方便扩容的方案那么Codis和Redis Cluster都可以满足你的需求。数据迁移如果你需要频繁地进行数据迁移Codis可能是更好的选择因为它支持异步数据迁移。客户端兼容性如果你的应用已经使用了Redis而你不希望修改客户端代码Codis可能是更好的选择因为它完全兼容Redis的客户端。成本如果你希望尽量降低成本Redis Cluster可能是更好的选择因为它不需要额外的组件。成熟度如果你希望使用一款经过实践检验的成熟产品Codis可能是更好的选择因为它相比Redis Cluster有更长的使用历史和更高的成熟度。
参考文档
https://blog.csdn.net/wang0907/article/details/128341489