Too young, too simple. Sometimes, naive & stupid

系统拓扑

现代计算机技术,一个“中央”处理单元的观念是误导性的。因为大部分现代化的系统都有多个处理器。这些处理器是如何相互连接的,并且如何连接至其他系统资源——“系统拓扑“会对系统和应用的性能以及系统调节选项产生影响。

现代计算机技术主要运用两种主要拓扑类型

SMP拓扑

​ SMP(对称多处理器)拓扑允许所有的处理器同时访问内存。然而,由于内存访问权限的共享性和平等性,固然会迫使所有CPU及SMP系统序列化的内存访问权限的局限性增加,目前这种情况不被接受,几乎所有服务器系统都是NUMA(非一致性内存访问)。

NUMA拓扑

​ 相比SMP,NUMA(非一致性内存访问)拓扑是近来开发的。在NUMA系统中,多个处理器分组至一个socket。每个socket都有一个专用内存区,对该内存进行本地访问的服务器统称为一个节点。

同一个节点上的服务器能告诉访问该节点的存储体,但访问其他节点上的存储体就比较慢,因此,访问非本地存储体会造成性能的损失。

考虑性能损失,服务器执行应用程序时,NMUA拓扑结构系统中对性能明爱的应用程序应访问同一个节点的内存,并且尽可能地避免访问任何远程内存。

因此,调节NUMA拓扑结构系统中的应用程序性能时,重要的是要考虑这一应用程序的执行点以及最靠近此执行点的存储体。

在NUMA拓扑结构系统中,/sys文件系统包含处理器、内存及外围设备连接信息。/sys/devices/system/cpu目录包含处理器在系统中相互连接的详情。/sys/devices/system/node目录包含系统中NUMA的节点信息以及节点间的相对距离。

阅读全文 »

关于性能调优可能你需要使用到的性能监控工具(也可以说是监控性能的手段)。这里不详细说明工具的具体使用方法和参数,这些最后会单独整理一份。

proc

/proc文件系统是包含代表Linux内核当前状态文件的层次结构的目录,它允许用户和应用程序查看内核的系统试图。

/proc目录还包含有关系统硬件和任何当前正在运行的进程信息。/proc文件系统中的大多数文件都是只读的,但是/proc/sys/中的文件,可以由用户和应用程序操纵,以便将配置更改传递给内核。

阅读全文 »

什么是RPM?

RPM包只是一个包含系统所需的其他文件和信息的文件。具体来说,RPM包由包含文件的cpio存档和包含有关包的元数据的RPM标头组成。rpm软件包管理器使用这种元数据来确定的依赖。在那安装文件和其他信息。

有两种类型的RPM包:

  • 源RPM(SRPM)
  • 二进制RPM

SRPM和二进制RPM弓箭文件格式和工具,但具有不同的内容并用于不同的目的。SRPM包含源代码,可选的补丁和SPEC文件,它描述了如何将源代码构建为二进制文件。

阅读全文 »

什么是源代码?

源代码是计算机的人类可读指令,描述了如何执行计算。源代码使用编程语言表示。

下面,使用三种不同编程语言编写Hello World,用着三种不同语言编写的程序以不同的方式打包。

阅读全文 »

RPM Package Manager(RPM)是在RedHat,CentOS和Fedora上运行的包管理系统。RPM使您可以轻松分发、管理和更新为RedHat、CentOS和Fedora创建的软件。许多软件供应商通过传统的归档文件(例如tarball)来分发他们的软件。但,将软件打包到RPM有以下优点:

安装,重新安装,删除,升级和验证包

​ 用户可以使用标准软件包管理工具(例如YumPackageKit)来安装,重新安装,删除,升级和验证RPM软件包。

使用已安装的软件包的数据库来查询和验证软件包

​ 由于RPM维护已安装软件包及其文件的数据库,因此用户可以轻松查询和验证系统上的软件包。

使用元数据来描述包,安装说明等

​ 每个RPM软件包都包含描述软件包的组件,版本,发行版,大小,项目URL,安装说明等元数据。

将原始软件源打包为源包和二进制包

​ RPM

将原始软件源打包为源包和二进制包

RPM允许您获取原始软件源并将其打包为用户的源和二进制包。在源包中,您拥有原始源以及所使用的任何修补程序以及完整的构建说明。随着软件的新版本发布,此设计可以简化软件包的维护。

将包添加到Yum存储库

您可以将软件包添加到Yum存储库,使客户端可以轻松查找和部署软件。

对您的包裹进行数字签名

使用GPG签名密钥,您可以对软件包进行数字签名,以便用户能够验证软件包的真实性。

NAT路由

下图说明了利用NAT路由在Internet和专用网络之间移动请求的负载均衡。

活动的LVS路由器有连个NIC。Internet的NIC在eth0上具有真实IP地址和浮动IP地址。专用网络接口的NIC在eth1上具有真实IP地址和浮动IP地址。专用网络接口的NIC在eth1上具有真实IP地址和浮动IP地址。在故障转移的情况下,面向Internet的虚拟接口和面向私有的虚拟接口同时由备用LVS路由器接管。位于专用网络上的所有真实服务器都是用NAT路由的浮动IP作为与活动LVS路由器通信的默认路由,以便他们响应来自Internet的请求的能力不受损害。

LVS路由器的公共浮动IP地址和专用NAT浮动IP地址被分配给物理NIC。虽然可以将每个浮动IP地址与LVS路由器节点上的自己的物理设备相关联,不要求具有两个以上NIC。

活动LVS路由器接收请求并将其路由到适当的服务器。然后,真是服务器处理该请求并将数据包返回到LVS路由器,该路由器使用网络地址转换来用LVS路由器的公共VIP地址替换数据包中的真实服务器的地址。此过程称为IP伪装,因为真实服务器的实际IP地址对请求客户端是隐藏的。

使用此NAT路由,真实服务器可以是运行各种操作系统的任何类型的机器。主要缺点是LVS路由器可能成为大型集群的瓶颈,因为它必须处理传入和传出请求。

这些ipvs模块使用自己的内部NAT例程,这些例程独立于iptablesip6tablesNAT。当真实服务器配置为NAT而不是/etc/keepalived/keepalived.conf文件中的DR时。浙江有助于IPv4和IPv6NAT。

阅读全文 »

直接路由允许真实的服务器直接处理和路由数据包到请求用户,而不是通过LVS路由器传递传出数据包。直接路由器要求真实服务器通过LVS路由器物理连接到网段,并且能够处理和定向传输数据包。

网络布局

​ 在直接路由器负载均衡配置中,LVS路由器需要接收传入请求并将它们路由到适当的真实服务器以进行处理。然后真正的服务器需要直接将相应路由到客户端。因此,例如,如果客户端在Internet上,并通过LVS路由将数据包发送到真实服务器,则真实服务器必须能够通过Internet直接连接到客户端。这可以通过为真实服务器配置网关以将数据包传递到Internet来完成。服务器池中的每个真实服务器都可以拥有自己独立的网关(并且每个网关都是有自己的Internet),对与典型的LoadBalancer设置,真实服务器可以通过一个网关进行通信。

阅读全文 »

使用Keepalived为在真实服务器之间分配流量提供了灵活性,原因在于支持的各种调度算法。负载平衡优于不太灵活的方法,例如Round-Round DNS,其中DNS的分层特性和客户端机器高速缓存可能导致负载不平衡。另外LVS路由器采用的地基过滤具有优于应用级请求转发的优点,因为在网络分组级平衡负载导致最小的计算开销并且允许更大的可拓展性。

使用分配的权重为各个机器提供任意优先级。使用这种形式的调度,可以使用各种硬件和软件组合创建一组真实服务器,并且活动路由器可以均匀地分配的每个真实服务器。

Keepalived的调度机制由IPVS内核模块和一些补丁集合提供,这些模块支持L4传输层交换,旨在与单一IP地址上的多个服务器配合使用。

为了有效的跟踪和路由数据包到真实服务器,IPVS在内核汇总构建了一个IPVS表。主LVS路由使用此表将请求从虚拟服务器地址重定向到真实服务器并返回。

阅读全文 »

Keepalived的直接路由配置与NAT配置类似。在以下示例中,Keepalived配置为在80端口上为一组运行HTTP的真实服务器提供负载均衡。要配置直接路由,将lb_kind参数更改为DR

以下示例显示使用直接路由的Keepalived配置活动服务器的keepalived.conf配置文件。

阅读全文 »