开源基础架构与集群实战:keepalived, lvs, nginx等

需积分: 9 2 下载量 130 浏览量 更新于2024-07-17 收藏 910KB DOCX 举报
"开源基础架构和集群最佳实践涵盖了多种开源技术在构建高可用性和负载均衡系统中的应用,包括keepalived、lvs、nginx、MYSQLHA、HAProxy、缓存服务器如squid和varnish等。本文档详细介绍了各种方案的配置、用法和注意事项,旨在提供实际操作指导和最佳实践建议。" 一、测试环境准备 测试环境基于两台CentOS 6.5虚拟机,配置了公网访问和yum源,确保了系统更新和软件安装的便捷性。同时,通过禁用iptables服务来避免防火墙对测试的影响。 二、keepalived+lvs方案 keepalived与lvs结合使用,能实现高可用的负载均衡解决方案。keepalived用于健康检查和主备切换,而lvs负责调度网络流量。通过配置,可以实现session共享,保证用户会话一致性。 三、MYSQLHA方案 针对MySQL数据库的高可用性,文档介绍了监控mysqld进程的方法,通过在两台主机上分别安装配置keepalived,并进行不同场景下的切换测试,确保在故障时能平滑过渡。 四、Keepalived+HAProxy方案 结合keepalived和HAProxy可以提供更高级别的负载均衡和故障转移功能。HAProxy提供了多种负载均衡算法,如轮询、最少连接等,以及会话保持、日志配置等功能。 五、nginx nginx作为一款高性能的HTTP和反向代理服务器,具有丰富的配置选项,如proxy_pass和alias用于处理URL转发,location规则定义请求匹配,rewrite用于URL重写,支持TCP反向代理,限制连接速度和数量,以及SSL配置和优化。 六、缓存服务器 文档还提到了两种缓存服务器——squid和varnish,它们可以提高网站性能,减少服务器压力。缓存策略的配置和优化对于提升整体架构的响应速度至关重要。 附录部分包含了web性能测试方法、CGI、FastCGI和php-fpm的工作原理,为读者提供了更全面的技术理解。 总结来说,这份开源基础架构和集群最佳实践文档是IT专业人员构建高可用、高性能系统的重要参考,涵盖了从网络负载均衡到数据库高可用、再到Web服务优化的多个关键领域,有助于提升系统稳定性和效率。
2019-07-19 上传
1. 前言    Kubernetes作为Docker生态圈中重要一员,是Google多年大规模容器管理技术的开源版本,是产线实践经验的最佳表现 。如Urs Hölzle所说,无论是公有云还是私有云甚至混合云,Kubernetes将作为一个为任何应用,任何环境的容器管理框架无处不在。正因为如此, 目前受到各大巨头及初创公司的青睐,如Microsoft、VMWare、Red Hat、CoreOS、Mesos等,纷纷加入给Kubernetes贡献代码。随着Kubernetes社区及各大厂商的不断改进、发展,Kuberentes将成为容器管理领域的领导者。    接下来我们会用一系列文章逐一探索Kubernetes是什么、能做什么以及怎么做。2. 什么是Kubernetes    Kubernetes是Google开源的容器集群管理系统,其提供应用部署、维护、 扩展机制等功能,利用Kubernetes能方便地管理跨机器运行容器化的应用,其主要功能如下:1) 使用Docker对应用程序包装(package)、实例化(instantiate)、运行(run)。2) 以集群的方式运行、管理跨机器的容器。3) 解决Docker跨机器容器之间的通讯问题。4) Kubernetes的自我修复机制使得容器集群总是运行在用户期望的状态。当前Kubernetes支持GCE、vShpere、CoreOS、OpenShift、Azure等平台,除此之外,也可以直接运行在物理机上。接下来本文主要从以下几方面阐述Kubernetes:1) Kubernetes的主要概念。2) Kubernetes的构件,包括Master组件、Kubelet、Proxy的详细介绍。3. Kubernetes主要概念3.1. Pods    Pod是Kubernetes的基本操作单元,把相关的一个或多个容器构成一个Pod,通常Pod里的容器运行相同的应用。Pod包含的容器运行在同一个Minion(Host)上,看作一个统一管理单元,共享相同的volumes和network namespace/IP和Port空间。3.2. Services    Services也是Kubernetes的基本操作单元,是真实应用服务的抽象,每一个服务后面都有很多对应的容器来支持,通过Proxy的port和服务selector决定服务请求传递给后端提供服务的容器,对外表现为一个单一访问接口,外部不需要了解后端如何运行,这给扩展或维护后端带来很大的好处。3.3. Replication Controllers    Replication Controller确保任何时候Kubernetes集群中有指定数量的pod副本(replicas)在运行, 如果少于指定数量的pod副本(replicas),Replication Controller会启动新的Container,反之会杀死多余的以保证数量不变。Replication Controller使用预先定义的pod模板创建pods,一旦创建成功,pod 模板和创建的pods没有任何关联,可以修改pod 模板而不会对已创建pods有任何影响,也可以直接更新通过Replication Controller创建的pods。对于利用pod 模板创建的pods,Replication Controller根据label selector来关联,通过修改pods的label可以删除对应的pods。Replication Controller主要有如下用法:1) Rescheduling如上所述,Replication Controller会确保Kubernetes集群中指定的pod副本(replicas)在运行, 即使在节点出错时。2) Scaling通过修改Replication Controller的副本(replicas)数量来水平扩展或者缩小运行的pods。3) Rolling updatesReplication Controller的设计原则使得可以一个一个地替换pods来rolling updates服务。4) Multiple release tracks如果需要在系统中运行multiple release的服务,Replication Controller使用labels来区分multiple release tracks。3.4. Labels    Labels是用于区分Pod、Service、Replication Controller的key/value键值对,Pod、Service、 Replication Controller可以有多个label,但是每个label的key只能对应一个value。Labe