用到了3个特点:watch机制;节点不允许重复写入;临时节点。 这样实现是比较简单,但也会存在一定弊端。 HW(Hign Watermark 高水位):ISR中最小的LEO。Leader会管理所有ISR中最小的LEO为HW。 consumer最多只能消费到HW之前的位置。 leader更新HW(ISR最小的LEO) kafka设计了独特的ISR复制,可以在保障数据一致性情况下又可以提供高吞吐量。
</value></property><property><name>ha_zookeeper_quorum</name><value>ZKHOST1:2181,ZKHOST2:2181,ZKHOST3: 2181,z.z.z.z:2181oushu_master 在 zookeeper 服务能正常访问时(半数以上zookeeper节点存活),Oushu Database 的备用主节点能在主节点故障后 2~3
RabbitMQ 高可用集群搭建 1 集群简介 1.1 集群架构 当单台 RabbitMQ 服务器的处理消息的能力达到瓶颈时,此时可以通过 RabbitMQ 集群来进行扩展,从而达到提升吞吐量的目的 一个高可用,负载均衡的 RabbitMQ 集群架构应类似下图: 这里对上面的集群架构做一下解释说明: 首先一个基本的 RabbitMQ 集群不是高可用的,虽然集群共享队列,但在默认情况下,消息只会被路由到某一个节点的符合条件的队列上 retries 3 # 每个进程可用的最大连接数 maxconn 2000 # 连接超时 timeout connect 5s # 客户端超时 ;如果连续 3 次的检查结果都不正常,则认为该节点不可用。 juejin.im/post/6844904071183220749 RabbitMQ 官方文档 —— 集群指南:www.rabbitmq.com/clustering.… RabbitMQ 官方文档 —— 高可用镜像队列
并修改 1 failover='automatic' #如果侦测到失败,则进行自动切换,默认为手动 2 connection_check_type=ping #检测的方式为PING 的方式 3 尝试6次 6 reconnect_interval=10 #间隔 10秒每次 然后在每台服务器上执行 repmgrd -f /etc/repmgr.conf 就可以完成postgresql 高可用 具体的过程如下 1 repmgrd (主,从 )监听主库的服务是否在工作状态 2 关闭 主 ,主库 从库的 PQping() returned "PQPING_REJECT" 3 开始启动计时器,6次尝试后 那么后续还有一些问题需要继续 1 是否配置见证服务器,什么情况配置,怎么配置 2 失败 主节点想重新加入,怎么办 3 IP 切换怎么办 剩下的这些问题还是讲不完,今天将最简单的 问题2 继续下去 2 如果原主本身数据受损,或者无法启动那这个命令也是没有办法帮助你的, 这个命令的大致的使用点,1 主库意外关机后的从新加入集群(主库能用但和从库有一定的数据不一致了) 所以PG 的集群高可用还是挺有意思的
redis 高可用,如果是做主从架构部署,那么加上哨兵就可以了,就可以实现,任何一个实例宕机,可以进行主备切换。 所以就有了几个问题? 什么是主从架构,主从如何备份? 协议同步节点信息 6、自动故障转移、Slot迁移中数据可用 缺点: 1、架构比较新,最佳实践较少 2、为了性能提升,客户端需要缓存路由表信息 3、节点发现、reshard操作不够自动化 加减节点: 每台主机优化下每一个增加几个槽 哨兵用于实现 redis 集群的高可用,本身也是分布式的,作为一个哨兵集群去运行,互相协同工作。 哨兵的核心知识 哨兵至少需要 3 个实例,来保证自己的健壮性。 哨兵 + redis 主从的部署架构,是不保证数据零丢失的,只能保证 redis 集群的高可用性。 ==怎么保证redis是高并发以及高可用的==? sdown 和 odown 转换机制 sdown 是主观宕机,就一个哨兵如果自己觉得一个 master 宕机了,那么就是主观宕机。
name: https containerPort: 443 livenessProbe: failureThreshold: 3 selector: app.kubernetes.io/name: ingress-nginx app.kubernetes.io/part-of: ingress-nginx --- 3. hostport,效率等同于`hostNetwork`,如果不代理四层端口还好,代理了的话每增加一个四成端口都需要修改pod的template来滚动更新来让nginx bind的四层端口能映射到宿主机上 3、 kube-proxy转发到Ingress Controller的pod上,多走一趟路 4、不创建svc,效率最高,也能四层负载的时候不修改pod的template,唯一要注意的是`hostNetwork: true 高可用选择第四种 name: https containerPort: 443 livenessProbe: failureThreshold: 3
生产环境中,后端应用需要支持高吞吐量并且支持高可用来保证服务的稳定,因此需要高可用集群管理。 高可用需要: 至少一个 Nacos(可以是nacos集群) 至少一个 ElasticSearch / mysql(可以是es/msql集群) 至少2个skywalking oap服务; 至少1个UI(UI
背景 本文记录一些高可用的内容,和数据库在高可用方面的演进过程。 1. 概念 可用性: 即软件系统在一段时间内提供 有用资源 的能力。 如何设计来做到高可用 保证系统高可用,架构设计的核心准则是:冗余 和 故障转移。 单点系统的问题是,挂了就完全不可用了,服务会受影响。如果有冗余备份,其他后备的系统能够顶上,保证服务继续可用。 所以,又往往是通过“自动故障转移”来使得快速切换到备份系统来实现高可用。 常见的互联网分布式架构是: 前端 ---> 反向代理 --> WEB应用 --> 服务 --> 数据库(及缓存) 其中,高可用可涉及到上面每个节点的高可用保障,我们看下数据的高可用架构的演变过程。 3. 数据库的高可用简史 3.1 主从备份(Active-Passive) 最开始,数据库运行在单台机器上,只有一个节点负责处理所有的读取和写入操作。数据库要么在运行,要么被关闭。
Init in -lcrypto... yes checking for SSL_CTX_new in -lssl... yes checking for nl_socket_alloc in -lnl-3. drwxr-xr-x 5 root root 4096 Mar 2 15:58 etc drwxr-xr-x 2 root root 4096 Mar 2 15:58 sbin drwxr-xr-x 3
本篇文章是之前一篇《大话高可用》的高可用心法的案例篇。 说实践之前先说概念。 具体实践如下: 架构高可用 交易这边进行在进行重构。将原有的核心交易从职责上划分为交易收单、交易保障和数据中心三个大块。 从高可用上,交易收单要保证实时交易现场的可用。 所以它才是对高可用需要考虑最多的,对MTBF和MTTR都要考虑和权衡。但是在对高可用要求上交易收单和交易保障是基本职责,指标就是稳定、稳定和稳定。 数据中心关乎的用户体验,是可以持续优化的,但是对高可用是有一定容忍度的:比如页面会加载慢,或者第一次加载不了刷新就成功了。 发版的并行执行机器数不超过3台。3台服务启动不起来对系统没有影响。实现了无损容灾的目的。 有损降级 我理解的降级: 从整体负荷考虑,人工的或者自动的对部分服务进行低优先级的处理。
今天老大跟我讨论说,没有看到过一篇够全面体系的高可用的文章。谈到高可用,基本都是以偏概全的文章。今晚抽空想了一下这个问题。 高可用我另一个更资深老大其实总结的很全面了:别人死我们不死,自己不作死,不被队友搞死。 然后就是怎么别人死我们不死:最好就是别人的东西和我们没关系,就是去依赖。如果实在有依赖呢,那就尽量弱依赖。 拿阿里巴巴来说,他们的异地多活经历了3个阶段。 ? 最后考虑怎么不被队友搞死。
name: https containerPort: 443 livenessProbe: failureThreshold: 3 app.kubernetes.io/name: ingress-nginx app.kubernetes.io/part-of: ingress-nginx --- Ingress Contronler 高可用 hostport,效率等同于hostNetwork,如果不代理四层端口还好,代理了的话每增加一个四成端口都需要修改pod的template来滚动更新来让nginx bind的四层端口能映射到宿主机上 3、 也就是使用了主机的dns,会导致svc的请求直接走宿主机的上到公网的dns服务器而非集群里的dns server,需要设置pod的dnsPolicy: ClusterFirstWithHostNet即可解决 高可用选择第四种 name: https containerPort: 443 livenessProbe: failureThreshold: 3
因为Redis拥有诸多优秀的特性,使用范围越来越广,系统对其可用性的依赖也越来越重,当前绝大部分系统使用的Redis都实现了高可用。 这里主要介绍Redis官方推荐的两种高可用方案Sentinel和Redis Cluster。 (如有不明白可以参考《Redis设计与实现》) 高可用 Redis实现高可用主要有两种方式,一种是Sentinel(3.0之前),一种是3.0正式支持的Redis Cluster(推荐)。 Sentinel(哨兵) 在Redis Server之外,运行数个Sentinel(一般是3个),负责监控Redis Server健康状况以及实现故障转移。 如果master没有设置持久化,存在风险,如果不小心重启,则会丢失所有数据,而且从机也会因为同步,丢失所有数据(所以一定要高可用)。
我们之前了解了复制、扩展性,接下来就让我们来了解可用性。归根到底,高可用性就意味着 "更少的宕机时间"。 老规矩,讨论一个名词,首先要给它下个定义,那么什么是可用性? 1 什么是可用性 我们常见的可用性通常以百分比表示,这本身就有其隐藏的意味:高可用性不是绝对的。换句话说,100% 的可用性是不可能达到的。没错,这里可以这么肯定的说。 同样的计算,我们可以得出 3 个 9 每年宕机时间为 8.76 小时,4 个 9 的是 52.6 分钟。 服务器 BUG;3. 3 如何实现高可用性 通过上面的分析,也许你已经发现了,我们可用性取决于两个时间: 应用的平均失效时间 应用的平均恢复时间 因此,提高可用性也可以从这两个方面入手。
高可用 高可用:相对于高并发来说,高可用并不是一个比较有规律的参数,7*24 是每个网站的梦想,但是你并不知道,在某一刻,他就没理由的宕机了。 高并发设计原则 系统设计不仅需要考虑实现业务功能,还要保证系统高并发、高可用、高可靠等。 高可用设计原则 通过负载均衡和反向代理实现分流。 通过限流保护服务免受雪崩之灾。 通过降级实现部分可用、有损服务。 通过隔离实现故障隔离。 降级 对于高可用服务,很重要的一个设计就是降级开关,在设计降级开关时,主要依据如下思路: 1.开关集中化管理:通过推送机制把开关推送到各个应用。 这样就可以把一些同步调用改成异步调用,优先处理高优先级数据或特殊特征的数据,合理分配进入系统的流量,以保障系统可用。
redis 高可用,如果是做主从架构部署,那么加上哨兵就可以了,就可以实现,任何一个实例宕机,可以进行主备切换。 所以就有了几个问题? 什么是主从架构,主从如何备份? 协议同步节点信息 6、自动故障转移、Slot迁移中数据可用 缺点: 1、架构比较新,最佳实践较少 2、为了性能提升,客户端需要缓存路由表信息 3、节点发现、reshard操作不够自动化 redis 哨兵 哨兵用于实现 redis 集群的高可用,本身也是分布式的,作为一个哨兵集群去运行,互相协同工作。 哨兵的核心知识 哨兵至少需要 3 个实例,来保证自己的健壮性。 哨兵 + redis 主从的部署架构,是不保证数据零丢失的,只能保证 redis 集群的高可用性。 怎么保证redis是高并发以及高可用的? sdown 和 odown 转换机制 sdown 是主观宕机,就一个哨兵如果自己觉得一个 master 宕机了,那么就是主观宕机。
为了提升k3s的使用体验,我们将推出由k3s开发人员撰写的“k3s黑魔法”系列文章来详细介绍k3s功能、原理等方面的内容。本篇文章是该系列的第二篇,文章详细介绍k3s的HA部署实践并探讨其原理。 而在面向生产环境的实践中,高可用HA是我们无法避免的问题,k3s本身也历经多个版本的迭代,HA方案也进行了不断优化,形成了目前的比较稳定的HA方案。 rows in set (0.00 sec) DQLite(https://github.com/canonical/dqlite)的方案更佳轻量级,可以理解为高可用版本的SQLite。 后 记 高可用是软件投产的基本标准,k3s目前已经GA,并提供了HA的方案。无论是在边缘场景中,还是开发测试中,都可以根据自身的需求选择合适的datastore以及对应的HA方式。 DQLite的方案目前还是实验性质的,相信随着整个边缘计算生态的发展,这部分也会很快稳定可用。
现在来实现它的高可用! 搞2个eureka,让它们互相注册! 如何互相注册? 在eureka项目中,多启动一个eureka,第一个端口8761,第二个端口8762。 1)在eureka1配置8762 2)在eureka2配置8761 eureka的其中一台挂了,其它也会挂,要避免这个情况,需要在client项目中配置2个地址: 3) 在client项目配置8761 1)在eureka1配置8762、8763 2)在eureka2配置8761、8763 3)在eureka3配置8761、8762 4) 在client项目配置8761、8762、8763
如果你是条船,漂泊就是你的命运,可别靠岸 北岛 K3S简述: K3s (轻量级 Kubernetes): 和 RKE 类似,也是经过认证的 Kubernetes 发行版。 192.168.111.50 k3s节点1 4C8G ubuntu-18.04.3-live-server k3s-node2 192.168.111.51 k3s节点2 4C8G CentOS 7 请确保这些工具已经安装并在$PATH中可用 CLI工具的安装在k3s节点上进行 kubectl - Kubernetes 命令行工具. helm - Kubernetes 的软件包管理工具。 注意,所有k3s节点上都要运行此命令 curl -sfL https://docs.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn sh -s get nodes # 在每个 Rancher Server 节点上安装 K3s 时,会在节点上/etc/rancher/k3s/k3s.yaml位置创建一个kubeconfig文件。
worker节点被定义为运行k3s agent命令的主机。 常见的K3S高可用架构如下: 两个或更多server节点; 一个外部数据存储。 ? 2.2 节点规划 高可用架构一:etcd与Master节点组件混布在一起。 ? [root@master01 ~]# kubectl taint node master01 node-role.kubernetes.io/master="":NoSchedule 七 高可用优化 7.2 创建配置文件 1 [root@master01 ~]# wget http://down.linuxsb.com:8888/k3s_ha.sh #下载高可用自动配置脚本 2 [root@ 7.5 启用高可用 1 [root@master01 ~]# vi /etc/rancher/k3s/k3s.yaml 2 …… 3 server: https://172.24.12.254