,不可用权重值就减2 interval 3 //每隔三秒执行一次chack-apiserver.sh脚本 weight -2 //权重减2 } vrrp_instance 51 //让master 和backup在同一个虚拟路由里,id 号必须相同; priority 250 //优先级,谁的优先级高谁就是master dont_track_primary track_script { check_apiserver } } 下面是chack-apiserver.sh,主要用于检测虚拟ip是否可用 使用浏览器访问30001端口,使用token登录, 记得要用火狐浏览器,微软和谷歌不支持 ,我这里是 https://192.168.200.128:30001,把自己的token 粘贴上去即可 harbor高可用安装 :v1.2.0 docker push master128:8082/k8s/nginx-ingress-controller:0.32.0 docker push master128:8082/k8s
可以看到多出了一个日志文件 /var/log/haproxy.log ,同时也打开了 UDP 的 514 端口
kubeadm安装高可用k8s集群 ---- 高可用集群规划图 ---- 主机规划 角色 IP地址 操作系统 配置 主机名称 Master1 192.168.18.100 CentOS7.x,基础设施服务器 ,如果不是高可用集群,该IP可以是k8s-master01的IP EOF ---- 时间同步 kubernetes要求集群中的节点时间必须精确一致,所以在每个节点上添加时间同步: yum install systemd" KUBE_PROXY_MODE="ipvs" 所有的节点设置为开机自启动即可,由于没有生成配置文件,集群初始化后会自动启动: systemctl enable kubelet ---- 高可用组件安装 注意:如果不是高可用集群,haproxy和keepalived无需安装。 v1.20.2 \ --service-cidr=10.96.0.0/12 \ --pod-network-cidr=10.244.0.0/16 \ --upload-certs ---- 高可用
前面我们在讲解各种资源的时候部署过很多集群,但是都是单机版形式的,正在生产集群是需要高可用的,所以以下就来演示一个生产高可用集群当前最新版本Kubernetes v1.32.2,为了后续部分演示所以这里启用了 3个Node节点,如果只验证高可用实际上不用Node也可以。 2.环境初始化 包括,修改主机名,hosts,关闭selinux,防火墙,时间同步,等基础配置参考我前面的部署文档Kubernetes(k8s)-安装k8s(docker版)。 6.配置VIP 这里我们选择100和101这2台服务器来承担vip的责任,因为3节点的集群只允许挂1台,挂2台集群是不可用的。本小节操作只在100和101服务器执行。 node节点链接使用vip cat /etc/kubernetes/kubelet.conf |grep server server: https://192.168.31.105:6443 11.检查高可用
为保障应用高可用性,我们计划实施双保险策略:一方面,设计Apollo的离线配置方案,确保断网时仍能获取必要配置;另一方面,支持应用在物理机上的直接启动,作为备用方案。 为了实现高可用性,我们改进了配置加载机制。当应用重启时,组件会优先尝试从总部 Apollo 配置中心加载最新配置。 一旦发生网络异常,系统将立即降级读取本地缓存文件,从而有效隔离网络波动对应用启动的影响,保障应用始终具备高可用性。4.2 K8S 集群异常兜底,实现物理机应急启动。 五、价值总结5.1 实现系统高可用与应急能力提升尽管极端天气(如台风)或地区专线电缆意外中断不是日常事件,但它们在业务中是不可避免的风险。 这不仅提升了系统在网络完全隔离时的自愈能力,更保障了核心应用的高可用性,真正做到有备无患。
cluster_formation.peer_discovery_backend = rabbit_peer_discovery_k8s cluster_formation.k8s.host = hostname K8S里, 倾向于使用 hostname 集群配置 - StatefulSet 和 Service 因为集群是有状态的, 所以需要通过K8S的Statefulset来实现集群实例部署配置 $(K8S_SERVICE_NAME). $(K8S_SERVICE_NAME). (K8S_SERVICE_NAME). K8S_HOSTNAME_SUFFIX为: .(K8S_SERVICE_NAME).
/.kube/completion.bash.inc' " >> $HOME/.bash_profile [root@m1 ~]# source $HOME/.bash_profile ---- 高可用集群部署 部署keepalived - apiserver高可用(任选两个master节点) 1、在两个主节点上执行如下命令安装keepalived(一主一备),我这里选择在m1和m2节点上进行安装: $ yum # 耐心等待一会,可以观察下日志 $ journalctl -f 成功将所有的worker节点加入集群后,至此我们就完成了k8s高可用集群的搭建。 root@nginx:/# ping nginx-ds PING nginx-ds.default.svc.cluster.local (10.105.139.228): 48 data bytes 高可用测试 192.168.243.100/32 scope global ens32 [root@m2 ~]# 接着测试能否在m2或m3节点上使用kubectl与集群进行交互,能正常交互则代表集群具备了一定程度的高可用性
被规划为基础层,主要提供了一个高可用的7层负载均衡器。 HAProxy反代了K8S Master服务器,提供了K8S Master API的高可用和负载均衡能力。 可以使用Nginx代替HAProxy吗? Master节点的高可用拓补官方给出了两种方案。 那么master高可用至少需要2个节点,失败容忍度是(n/0)+1,也就是只要有一个是健康的k8s master集群就属于可用状态。 高可用验证 至此生产可用的k8s集群已“搭建完成”。
后续就不多说了,总之一言难尽 本文采用Kubeadm的方式,进行高可用K8s集群。 192.168.239.12 k8s-master02 192.168.239.13 k8s-master03 192.168.239.226 k8s-master-lb # 如果不是高可用集群,该IP k8s-master02 k8s-master03 k8s-node01 k8s-node02;do ssh-copy-id -i .ssh/id_rsa.pub $i;done 下载安装所有的源码文件 containerd/containerd.sock" EOF 设置Kubelet开机自启动: systemctl daemon-reload systemctl enable --now kubelet 高可用实现 : icmp_seq=4 ttl=64 time=0.063 ms 集群初始化 Master01初始化 Master01节点创建kubeadm-config.yaml配置文件如下: 温馨提示:如果不是高可用集群
,但不能减少) 按功能组划分 SLB LVS HAProxy etcd K8S Node (Master / Worker) SLB LVS 、HAProxy 被规划为基础层,主要提供了一个高可用的7层负载均衡器 HAProxy反代了K8S Master服务器,提供了K8S Master API的高可用和负载均衡能力。 可以使用Nginx代替HAProxy吗? Master节点的高可用拓补官方给出了两种方案。 那么master高可用至少需要2个节点,失败容忍度是(n/0)+1,也就是只要有一个是健康的k8s master集群就属于可用状态。 高可用验证 至此生产可用的k8s集群已“搭建完成”。
RabbitMQ 高可用集群搭建 1 集群简介 1.1 集群架构 当单台 RabbitMQ 服务器的处理消息的能力达到瓶颈时,此时可以通过 RabbitMQ 集群来进行扩展,从而达到提升吞吐量的目的 一个高可用,负载均衡的 RabbitMQ 集群架构应类似下图: 这里对上面的集群架构做一下解释说明: 首先一个基本的 RabbitMQ 集群不是高可用的,虽然集群共享队列,但在默认情况下,消息只会被路由到某一个节点的符合条件的队列上 HAProxy 同时支持四层和七层负载均衡,并基于单一进程的事件驱动模型,因此它可以支持非常高的井发连接数。 此时对外服务的 VIP 依然可用,代表已经成功地进行了故障转移。 juejin.im/post/6844904071183220749 RabbitMQ 官方文档 —— 集群指南:www.rabbitmq.com/clustering.… RabbitMQ 官方文档 —— 高可用镜像队列
redis 高可用,如果是做主从架构部署,那么加上哨兵就可以了,就可以实现,任何一个实例宕机,可以进行主备切换。 所以就有了几个问题? 什么是主从架构,主从如何备份? 什么时候整个集群不可用(cluster_state:fail)? 哨兵用于实现 redis 集群的高可用,本身也是分布式的,作为一个哨兵集群去运行,互相协同工作。 哨兵 + redis 主从的部署架构,是不保证数据零丢失的,只能保证 redis 集群的高可用性。 ==怎么保证redis是高并发以及高可用的==? sdown 和 odown 转换机制 sdown 是主观宕机,就一个哨兵如果自己觉得一个 master 宕机了,那么就是主观宕机。
name: ingress-nginx app.kubernetes.io/part-of: ingress-nginx --- apiVersion: rbac.authorization.k8s.io ingress-nginx app.kubernetes.io/part-of: ingress-nginx roleRef: apiGroup: rbac.authorization.k8s.io name: nginx-ingress-serviceaccount namespace: ingress-nginx --- apiVersion: rbac.authorization.k8s.io ingress-nginx app.kubernetes.io/part-of: ingress-nginx roleRef: apiGroup: rbac.authorization.k8s.io kube-proxy转发到Ingress Controller的pod上,多走一趟路 4、不创建svc,效率最高,也能四层负载的时候不修改pod的template,唯一要注意的是`hostNetwork: true 高可用选择第四种
生产环境中,后端应用需要支持高吞吐量并且支持高可用来保证服务的稳定,因此需要高可用集群管理。 高可用需要: 至少一个 Nacos(可以是nacos集群) 至少一个 ElasticSearch / mysql(可以是es/msql集群) 至少2个skywalking oap服务; 至少1个UI(UI
背景 本文记录一些高可用的内容,和数据库在高可用方面的演进过程。 1. 概念 可用性: 即软件系统在一段时间内提供 有用资源 的能力。 高可用性 描述了一个周期内的功能连续可用的绝对程度,可表示为正常运行时间和停机时间之间的关系,如下公式: A = 100 – (100*D/U) 备注:A 表示可用性;D 表示 非计划停机时间;U 表示正常运行时间 如何设计来做到高可用 保证系统高可用,架构设计的核心准则是:冗余 和 故障转移。 单点系统的问题是,挂了就完全不可用了,服务会受影响。如果有冗余备份,其他后备的系统能够顶上,保证服务继续可用。 所以,又往往是通过“自动故障转移”来使得快速切换到备份系统来实现高可用。 常见的互联网分布式架构是: 前端 ---> 反向代理 --> WEB应用 --> 服务 --> 数据库(及缓存) 其中,高可用可涉及到上面每个节点的高可用保障,我们看下数据的高可用架构的演变过程。
本篇文章是之前一篇《大话高可用》的高可用心法的案例篇。 说实践之前先说概念。 具体实践如下: 架构高可用 交易这边进行在进行重构。将原有的核心交易从职责上划分为交易收单、交易保障和数据中心三个大块。 从高可用上,交易收单要保证实时交易现场的可用。 所以它才是对高可用需要考虑最多的,对MTBF和MTTR都要考虑和权衡。但是在对高可用要求上交易收单和交易保障是基本职责,指标就是稳定、稳定和稳定。 数据中心关乎的用户体验,是可以持续优化的,但是对高可用是有一定容忍度的:比如页面会加载慢,或者第一次加载不了刷新就成功了。 强依赖高可用 比如数据库的密码,不仅是加密的,而且是在中央集群秘钥管理中心统一管理的。中央集群的就会有秘钥获取不到的风险。按照API,如果获取不到则会抛出指定异常。 这是强依赖,需要容灾。
今天老大跟我讨论说,没有看到过一篇够全面体系的高可用的文章。谈到高可用,基本都是以偏概全的文章。今晚抽空想了一下这个问题。 高可用我另一个更资深老大其实总结的很全面了:别人死我们不死,自己不作死,不被队友搞死。 然后就是怎么别人死我们不死:最好就是别人的东西和我们没关系,就是去依赖。如果实在有依赖呢,那就尽量弱依赖。
name: ingress-nginx app.kubernetes.io/part-of: ingress-nginx --- apiVersion: rbac.authorization.k8s.io ingress-nginx app.kubernetes.io/part-of: ingress-nginx roleRef: apiGroup: rbac.authorization.k8s.io ingress-nginx app.kubernetes.io/part-of: ingress-nginx roleRef: apiGroup: rbac.authorization.k8s.io app.kubernetes.io/name: ingress-nginx app.kubernetes.io/part-of: ingress-nginx --- Ingress Contronler 高可用 也就是使用了主机的dns,会导致svc的请求直接走宿主机的上到公网的dns服务器而非集群里的dns server,需要设置pod的dnsPolicy: ClusterFirstWithHostNet即可解决 高可用选择第四种
因为Redis拥有诸多优秀的特性,使用范围越来越广,系统对其可用性的依赖也越来越重,当前绝大部分系统使用的Redis都实现了高可用。 这里主要介绍Redis官方推荐的两种高可用方案Sentinel和Redis Cluster。 (如有不明白可以参考《Redis设计与实现》) 高可用 Redis实现高可用主要有两种方式,一种是Sentinel(3.0之前),一种是3.0正式支持的Redis Cluster(推荐)。 注意事项 因为Sentinel与Redis Cluster都没有实现强一致性(也没有实现最终一致性),所以在使用时,要牢记这一点,不能用在一致性要求特别高的场景,比如全局唯一ID,交易数据等。 如果master没有设置持久化,存在风险,如果不小心重启,则会丢失所有数据,而且从机也会因为同步,丢失所有数据(所以一定要高可用)。
我们之前了解了复制、扩展性,接下来就让我们来了解可用性。归根到底,高可用性就意味着 "更少的宕机时间"。 老规矩,讨论一个名词,首先要给它下个定义,那么什么是可用性? 1 什么是可用性 我们常见的可用性通常以百分比表示,这本身就有其隐藏的意味:高可用性不是绝对的。换句话说,100% 的可用性是不可能达到的。没错,这里可以这么肯定的说。 因此,对于可用性,我们可以遵循这样一个原则: 能够承担多少宕机成本,就保证相应的可用时间。 这也说明了一个普遍的情况: 许多高可用策略可能会产生反作用 了解了可用性的定义及其降低可用性的因素,我们就要来考虑如何提高系统的可用性了。 3 如何实现高可用性 通过上面的分析,也许你已经发现了,我们可用性取决于两个时间: 应用的平均失效时间 应用的平均恢复时间 因此,提高可用性也可以从这两个方面入手。