首页 文章 精选 留言 我的

精选列表

搜索[高可用物联网卡],共10010篇文章
优秀的个人博客,低调大师

教你在 Kubernetes 上部署 Redis 高可用集群

Redis 介绍 Redis 代表REmote DIctionary Server是一种开源的内存中数据存储,通常用作数据库,缓存或消息代理。它可以存储和操作高级数据类型,例如列表,地图,集合和排序集合。由于Redis接受多种格式的密钥,因此可以在服务器上执行操作,从而减少了客户端的工作量。它仅将磁盘用于持久性,而将数据库完全保存在内存中。Redis是一种流行的数据存储解决方案,并被GitHub,Pinterest,Snapchat,Twitter,StackOverflow,Flickr等技术巨头所使用。 为什么使用 Redis 它的速度非常快。它是用 ANSI C 编写的,并且可以在 POSIX 系统上运行,例如 Linux,Mac OS X 和 Solaris。 Redis 通常被排名为最流行的键/值数据库和最流行的与容器一起使用的 NoSQL 数据库。 其缓存解决方案减少了对云数据库后端的调用次数。 应用程序可以通过其客户端 API 库对其进行访问。 所有流行的编程语言都支持 Redis。 它是开源且稳定的。 什么是 Redis 集群 Redis Cluster 是一组 Redis 实例,旨在通过对数据库进行分区来扩展数据库,从而使其更具弹性。群集中的每个成员(无论是主副本还是辅助副本)都管理哈希槽的子集。如果主机无法访问,则其从机将升级为主机。在由三个主节点组成的最小 Redis 群集中,每个主节点都有一个从节点(以实现最小的故障转移),每个主节点都分配有一个介于 0 到 16,383 之间的哈希槽范围。节点 A 包含从 0 到 5000 的哈希槽,节点 B 从 5001 到 10000,节点 C 从 10001 到 16383。群集内部的通信是通过内部总线进行的,使用协议传播有关群集的信息或发现新节点。 在 Kubernetes 中部署 Redis 集群 在Kubernetes中部署Redis集群面临挑战,因为每个 Redis 实例都依赖于一个配置文件,该文件可以跟踪其他集群实例及其角色。为此,我们需要结合使用Kubernetes StatefulSets和PersistentVolumes。 克隆部署文件 gitclonehttps://github.com/llmgo/redis-sts.git 创建 statefulset 类型资源 [root@node01redis-sts]#catredis-sts.yml --- apiVersion:v1 kind:ConfigMap metadata: name:redis-cluster data: update-node.sh:| #!/bin/sh REDIS_NODES="/data/nodes.conf" sed-i-e"/myself/s/[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}/${POD_IP}/"${REDIS_NODES} exec"$@" redis.conf:|+ cluster-enabledyes cluster-require-full-coverageno cluster-node-timeout15000 cluster-config-file/data/nodes.conf cluster-migration-barrier1 appendonlyyes protected-modeno --- apiVersion:apps/v1 kind:StatefulSet metadata: name:redis-cluster spec: serviceName:redis-cluster replicas:6 selector: matchLabels: app:redis-cluster template: metadata: labels: app:redis-cluster spec: containers: -name:redis image:redis:5.0.5-alpine ports: -containerPort:6379 name:client -containerPort:16379 name:gossip command:["/conf/update-node.sh","redis-server","/conf/redis.conf"] env: -name:POD_IP valueFrom: fieldRef: fieldPath:status.podIP volumeMounts: -name:conf mountPath:/conf readOnly:false -name:data mountPath:/data readOnly:false volumes: -name:conf configMap: name:redis-cluster defaultMode:0755 volumeClaimTemplates: -metadata: name:data spec: accessModes:["ReadWriteOnce"] resources: requests: storage:5Gi storageClassName:standard $kubectlapply-fredis-sts.yml configmap/redis-clustercreated statefulset.apps/redis-clustercreated $kubectlgetpods-lapp=redis-cluster NAMEREADYSTATUSRESTARTSAGE redis-cluster-01/1Running053s redis-cluster-11/1Running049s redis-cluster-21/1Running046s redis-cluster-31/1Running042s redis-cluster-41/1Running038s redis-cluster-51/1Running034s 创建 service [root@node01redis-sts]#catredis-svc.yml --- apiVersion:v1 kind:Service metadata: name:redis-cluster spec: type:ClusterIP clusterIP:10.96.0.100 ports: -port:6379 targetPort:6379 name:client -port:16379 targetPort:16379 name:gossip selector: app:redis-cluster $kubectlapply-fredis-svc.yml service/redis-clustercreated $kubectlgetsvcredis-cluster NAMETYPECLUSTER-IPEXTERNAL-IPPORT(S)AGE redis-clusterClusterIP10.96.0.100 初始化 redis cluster “ 下一步是形成Redis集群。为此,我们运行以下命令并键入yes以接受配置。前三个节点成为主节点,后三个节点成为从节点。 $kubectlexec-itredis-cluster-0--redis-cli--clustercreate--cluster-replicas1$(kubectlgetpods-lapp=redis-cluster-ojsonpath='{range.items[*]}{.status.podIP}:6379') >>>Performinghashslotsallocationon6nodes... Master[0]->Slots0-5460 Master[1]->Slots5461-10922 Master[2]->Slots10923-16383 Addingreplica10.244.2.11:6379to10.244.9.19:6379 Addingreplica10.244.9.20:6379to10.244.6.10:6379 Addingreplica10.244.8.15:6379to10.244.7.8:6379 M:00721c43db194c8f2cacbafd01fd2be6a2fede2810.244.9.19:6379 slots:[0-5460](5461slots)master M:9c36053912dec8cb20a599bda202a654f241484f10.244.6.10:6379 slots:[5461-10922](5462slots)master M:2850f24ea6367de58fb50e632fc56fe4ba5ef01610.244.7.8:6379 slots:[10923-16383](5461slots)master S:554a58762e3dce23ca5a75886d0ccebd2d58250210.244.8.15:6379 replicates2850f24ea6367de58fb50e632fc56fe4ba5ef016 S:20028fd0b79045489824eda71fac9898f17af89610.244.2.11:6379 replicates00721c43db194c8f2cacbafd01fd2be6a2fede28 S:87e8987e314e4e5d4736e5818651abc1ed6ddcd910.244.9.20:6379 replicates9c36053912dec8cb20a599bda202a654f241484f CanIsettheaboveconfiguration?(type'yes'toaccept):yes >>>Nodesconfigurationupdated >>>Assignadifferentconfigepochtoeachnode >>>SendingCLUSTERMEETmessagestojointhecluster Waitingfortheclustertojoin ... >>>PerformingClusterCheck(usingnode10.244.9.19:6379) M:00721c43db194c8f2cacbafd01fd2be6a2fede2810.244.9.19:6379 slots:[0-5460](5461slots)master 1additionalreplica(s) M:9c36053912dec8cb20a599bda202a654f241484f10.244.6.10:6379 slots:[5461-10922](5462slots)master 1additionalreplica(s) S:87e8987e314e4e5d4736e5818651abc1ed6ddcd910.244.9.20:6379 slots:(0slots)slave replicates9c36053912dec8cb20a599bda202a654f241484f S:554a58762e3dce23ca5a75886d0ccebd2d58250210.244.8.15:6379 slots:(0slots)slave replicates2850f24ea6367de58fb50e632fc56fe4ba5ef016 S:20028fd0b79045489824eda71fac9898f17af89610.244.2.11:6379 slots:(0slots)slave replicates00721c43db194c8f2cacbafd01fd2be6a2fede28 M:2850f24ea6367de58fb50e632fc56fe4ba5ef01610.244.7.8:6379 slots:[10923-16383](5461slots)master 1additionalreplica(s) [OK]Allnodesagreeaboutslotsconfiguration. >>>Checkforopenslots... >>>Checkslotscoverage... [OK]All16384slotscovered. 验证集群 [root@node01redis-sts]#kubectlexec-itredis-cluster-0--redis-cliclusterinfo cluster_state:ok cluster_slots_assigned:16384 cluster_slots_ok:16384 cluster_slots_pfail:0 cluster_slots_fail:0 cluster_known_nodes:6 cluster_size:3 cluster_current_epoch:6 cluster_my_epoch:1 cluster_stats_messages_ping_sent:16 cluster_stats_messages_pong_sent:22 cluster_stats_messages_sent:38 cluster_stats_messages_ping_received:17 cluster_stats_messages_pong_received:16 cluster_stats_messages_meet_received:5 cluster_stats_messages_received:38 [root@node01redis-sts]#forxin$(seq05);doecho"redis-cluster-$x";kubectlexecredis-cluster-$x--redis-clirole;echo;done redis-cluster-0 master 14 10.244.2.11 6379 14 redis-cluster-1 master 28 10.244.9.20 6379 28 redis-cluster-2 master 28 10.244.8.15 6379 28 redis-cluster-3 slave 10.244.7.8 6379 connected 28 redis-cluster-4 slave 10.244.9.19 6379 connected 14 redis-cluster-5 slave 10.244.6.10 6379 connected 28 测试集群 我们想使用集群,然后模拟节点的故障。对于前一项任务,我们将部署一个简单的 Python 应用程序,而对于后者,我们将删除一个节点并观察集群行为。 部署点击计数器应用 我们将一个简单的应用程序部署到集群中,并在其前面放置一个负载平衡器。此应用程序的目的是在将计数器值作为 HTTP 响应返回之前,增加计数器并将其存储在 Redis 集群中。 $kubectlapply-fapp-deployment-service.yml service/hit-counter-lbcreated deployment.apps/hit-counter-appcreated 在此过程中,如果我们继续加载页面,计数器将继续增加,并且在删除Pod之后,我们看到没有数据丢失。 $curl`kubectlgetsvchit-counter-lb-ojson|jq-r.spec.clusterIP` Ihavebeenhit20timessincedeployment. $curl`kubectlgetsvchit-counter-lb-ojson|jq-r.spec.clusterIP` Ihavebeenhit21timessincedeployment. $curl`kubectlgetsvchit-counter-lb-ojson|jq-r.spec.clusterIP` Ihavebeenhit22timessincedeployment. $kubectldeletepodsredis-cluster-0 pod"redis-cluster-0"deleted $kubectldeletepodsredis-cluster-1 pod"redis-cluster-1"deleted $curl`kubectlgetsvchit-counter-lb-ojson|jq-r.spec.clusterIP` Ihavebeenhit23timessincedeployment. 参考文档 [redis-cluster集群配置1] http://llmgo.cn/post/redis-003/ [redis-cluster集群配置2] http://www.yunweipai.com/36338.html [Redis集群 cluster-slot操作指令] https://blog.csdn.net/shuyun123456789/article/details/60868718 原文链接:http://tinyurl.com/vpihglin文章转自:奇妙的Linux世界 关注「开源Linux」加星标,提升IT技能

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册