您的位置:新葡亰496net > 服务器网络 > 新葡亰496net:ONIE用户指南,负载均衡器

新葡亰496net:ONIE用户指南,负载均衡器

发布时间:2019-07-15 21:02编辑:服务器网络浏览(112)

    这篇实用文章介绍如何将pfSense 2.0配置成你那些Web服务器的负载均衡器。这篇实用文章假设你已经安装了一个pfSense设备和至少两台Apache服务器,并且运行在你的网络上;还假设你具备了pfSense方面的一些知识。

    使用 HAProxy 配置 HTTP 负载均衡器

    随着基于 Web 的应用和服务的增多,IT 系统管理员肩上的责任也越来越重。当遇到不可预期的事件如流量达到高峰,流量增大或者内部的挑战比如硬件的损坏或紧急维修,无论如何,你的 Web 应用都必须要保持可用性。甚至现在流行的 devops 和持续交付(CD)也可能威胁到你的 Web 服务的可靠性和性能的一致性。

    不可预测,不一致的性能表现是你无法接受的。但是我们怎样消除这些缺点呢?大多数情况下一个合适的负载均衡解决方案可以解决这个问题。今天我会给你们介绍如何使用 HAProxy 配置 HTTP 负载均衡器。

    新葡亰496net 1

    随着基于 Web 的应用和服务的增多,IT 系统管理员肩上的责任也越来越重。当遇到不可预期的事件如流量达到高峰,流量增大或者内部的挑战比如硬件的损坏或紧急维修,无论如何,你的 Web 应用都必须要保持可用性。甚至现在流行的 devops 和持续交付(CD)也可能威胁到你的 Web 服务的可靠性和性能的一致性。

    Apache 是一种功能强大的Web服务器。如今,Internet上无数运行在Linux上的Apache服务器正为Web世界的日益繁荣提供着有力的支撑。本文将向读者介绍如何在Ubuntu Linux系统迅速搭建Apache Web服务器。

    ONIE支持多种查找网络操作系统(NOS)镜像的方法,从简单到相对复杂。
    简单的方法适合在少量交换机上安装NOS,作为概念验证或演示。这些方法虽然易于设置,但是对复杂网络可能需要的配置支持有限。
    相对复杂的方法适用复杂网络和大规模交换机部署的场景。这些方法提供了广泛的灵选项,缺点是你需要了解和配置这些选项。
    本节中的示例引用了一个假想的,基于PowerPC的交换机,成为MACHINE,由假定的制造商商VENDOR提供。

    要求

    什么是 HTTP 负载均衡?

    HTTP 负载均衡是一个网络解决方案,它将进入的 HTTP 或 HTTPs 请求分配至一组提供相同的 Web 应用内容的服务器用于响应。通过将请求在这样的多个服务器间进行均衡,负载均衡器可以防止服务器出现单点故障,可以提升整体的可用性和响应速度。它还可以让你能够简单的通过添加或者移除服务器来进行横向扩展或收缩,对工作负载进行调整。

    不可预测,不一致的性能表现是你无法接受的。但是我们怎样消除这些缺点呢?大多数情况下一个合适的负载均衡解决方案可以解决这个问题。今天我会给你们介绍如何使用 HAProxy 配置 HTTP 负载均衡器。

      尽管Ubuntu 是一种新兴的Linux分支,但Ubuntu 组织却为Apache提供了丰富的支持软件,这些软件都可以从发行版的光盘获取,也可以从官方站点轻松下载。所以,Ubuntu非常适合作为Web服务器的平台。

    1. 使用USB驱动进行安装

    要通过USB进行安装,只需要使用文件名称onie-installer将安装程序镜像复制到USB驱动设备的根目录上即可。
    假设NOS安装程序镜像名称为ACME_XYZ1234_PowerPC_Installer.bin。假设USB驱动设备显示在Linux下的/dev/sdd1上(可能与您的操作系统有所不同)。
    将安装程序文件复制到USB驱动设备的根目录下,如下所示:

    linux:~$ sudo mkdir /mnt/usb
    linux:~$ sudo mount /dev/sdd1 /mnt/usb
    linux:~$ sudo cp ACME_XYZ1234_PowerPC_Installer.bin /mnt/usb/onie-installer
    linux:~$ sudo umount /mnt/usb
    

    现在可以从计算机中取出USB设备并将其插入启用ONIE的设备的前(后)面板上的USB插槽。打开设备电源,ONIE将发现USB设备根目录上的onie-installer并执行。

    一台设备用于安装pfSense 2.0如果这是你的边缘防火墙,我会建议物理机器)。

    什么时候,什么情况下需要使用负载均衡?

    负载均衡可以提升服务器的使用性能和最大可用性,当你的服务器开始出现高负载时就可以使用负载均衡。或者你在为一个大型项目设计架构时,在前端使用负载均衡是一个很好的习惯。当你的环境需要扩展的时候它会很有用。

    新葡亰496net 2

     

    2. 使用网络进行安装

    对于所有网络安装场景,ONIE可以通过HTTP从网络上获取NOS安装镜像。本文档假设Web服务器的主机名和IPv4地址如下:

    hostname:  image-server
    IP addr :  203.0.113.10
    

    在继续之前,必须先进行如下操作:

    • 安装并配置HTTP服务器
    • 拷贝NOS安装镜像到HTTP服务器

    至少两台Apache2服务器这些可以是虚拟服务器)。

    什么是 HAProxy?

    HAProxy 是一个流行的开源的 GNU/Linux 平台下的 TCP/HTTP 服务器的负载均衡和代理软件。HAProxy 是单线程,事件驱动架构,可以轻松的处理 10 Gbps 速率 的流量,在生产环境中被广泛的使用。它的功能包括自动健康状态检查,自定义负载均衡算法,HTTPS/SSL 支持,会话速率限制等等。

    什么是 HTTP 负载均衡?

    HTTP 负载均衡是一个网络解决方案,它将进入的 HTTP 或 HTTPs 请求分配至一组提供相同的 Web 应用内容的服务器用于响应。通过将请求在这样的多个服务器间进行均衡,负载均衡器可以防止服务器出现单点故障,可以提升整体的可用性和响应速度。它还可以让你能够简单的通过添加或者移除服务器来进行横向扩展或收缩,对工作负载进行调整。

      一、 安装Apache

    2.1. 安装并配置HTTP服务器ss

    下载并安装HTTP服务器。Apache httpd 及NGINX HTTP server。
    本文中的示例假定Apache httpd安装在具有默认配置选项的Linux计算机上。Web服务器文档的根目录为/var/www。

    对Apache服务器进行了配置,以便以某种方式同步Web文件rsync/corosync或通过Web服务器维持文件版本最新的另一个选项)。

    这个教程要实现怎样的负载均衡

    在这个教程中,我们会为 HTTP Web 服务器配置一个基于 HAProxy 的负载均衡。

    什么时候,什么情况下需要使用负载均衡?

    负载均衡可以提升服务器的使用性能和最大可用性,当你的服务器开始出现高负载时就可以使用负载均衡。或者你在为一个大型项目设计架构时,在前端使用负载均衡是一个很好的习惯。当你的环境需要扩展的时候它会很有用。

      下面,我们首先介绍如何安装Apache。具体安装命令如下所示:

    2.2. 拷贝NOS安装镜像到HTTP服务器s

    从NOS安装镜像供应商处购买安装镜像之后,将安装镜像复制到Web服务器的根目录中。在Linux Apache环境下,文档根目录是/var/www,您可能需要root权限才能执行操作。
    假定NOS安装镜像的名称为ACME_XYZ1234_PowerPC_Installer.bin,将该文件复制到Web服务器文档根目录之后,/var/www显示的内容如下:

    image-server:~$ sudo cp ACME_XYZ1234_PowerPC_Installer.bin /var/www
    image-server:~$ ls -l /var/www
    -rw-r--r-- 1 root root  17755 Jun 27 16:18 ACME_XYZ1234_PowerPC_Installer.bin
    

    配置pfSense

    准备条件

    你至少要有一台,或者最好是两台 Web 服务器来验证你的负载均衡的功能。我们假设后端的 HTTP Web 服务器已经配置好并可以运行  。

    Haproxy Keepalived搭建Weblogic高可用负载均衡集群

    Keepalived HAProxy配置高可用负载均衡

    CentOS 6.3下Haproxy Keepalived Apache配置笔记

    Haproxy KeepAlived 实现WEB群集 on CentOS 6

    Haproxy Keepalived构建高可用负载均衡

    Linux系统负载均衡软件之Haproxy Apache 

    什么是 HAProxy?

    HAProxy 是一个流行的开源的 GNU/Linux 平台下的 TCP/HTTP 服务器的负载均衡和代理软件。HAProxy 是单线程,事件驱动架构,可以轻松的处理 10 Gbps 速率 的流量,在生产环境中被广泛的使用。它的功能包括自动健康状态检查,自定义负载均衡算法,HTTPS/SSL 支持,会话速率限制等等。

      $ sudo apt-get install apache2

    2.3. 测试从HTTP服务器下载NOS安装镜像

    在下一步操作之前,最好仔细检查Web服务器的配置和NOS安装镜像的位置。可以尝试从另一台机器上下载NOS安装镜像。您可以使用Web浏览器或者CLI命令如wget或者curl来下载。
    需要仔细检查的URL是:

    http://203.0.113.10/ACME_XYZ1234_PowerPC_Installer.bin
    http://image-server/ACME_XYZ1234_PowerPC_Installer.bin
    

    pfSense使用负载均衡器,将某些类型的流量带来的负载分摊到多台服务器上;如果你有多台服务器用于托管运行应用程序,这很好;你可以将负载分摊到所有服务器上,而不是把负载全扔给一台服务器、导致不堪重负。

    在 Linux 中安装 HAProxy

    对于大多数的发行版,我们可以使用发行版的包管理器来安装 HAProxy。

    这个教程要实现怎样的负载均衡

    在这个教程中,我们会为 HTTP Web 服务器配置一个基于 HAProxy 的负载均衡。

      然后运行Apache,命令如下所示:

    3.直连场景

    最简单的拓扑结构是Web服务器直接连接到交换机上的以太网管理端口,如下图所示。

    新葡亰496net 3

    交换机和Web服务器直连

    这种简单的方式适用于少量的交换机场景。在生产环境中,需要连接到交换机并执行快速的一次性安装时,就是这种情况。
    在这种场景中,没有任何额外的配置,ONIE将发现链路本地Web服务器的IP地址 (IPv6或IPv4)。有关ONIE如何发现链路本地邻居信息,请参阅HTTP IPv4及IPv6邻居章节。
    当邻居发现之后,ONIE按照“默认文件名搜索顺序”中的描述,为一系列默认安装镜像文件名发出HTTP请求。
    接下来,ONIE应用默认的文件名约定,使用下列的HTTP请求来查找安装镜像:

    http://203.0.113.10/onie-installer-powerpc-VENDOR_MACHINE-r0
    http://203.0.113.10/onie-installer-powerpc-VENDOR_MACHINE
    http://203.0.113.10/onie-installer-VENDOR_MACHINE
    http://203.0.113.10/onie-installer-powerpc
    http://203.0.113.10/onie-installer
    

    有关用于特定硬件平台的确切文件名称,请联系您的NOS供应商或您的硬件供应商。
    配置Web服务器的简单方法是将NOS供应商的镜像名称符号链接(或重命名)为默认的ONIE安装镜像名之一。

    image-server:~$ cd /var/www
    image-server:/var/www$ sudo ln -s ACME_XYZ1234_PowerPC_Installer.bin ./onie-installer
    image-server:/var/www$ ls -l
    lrwxrwxrwx 1 root root  104 Jul 22 14:01 onie-installer -> ACME_XYZ1234_PowerPC_Installer.bin
    

    使用符号链接之后,Web服务器会回复完整的安装镜像,以响应onie-installer的请求。现在,ONIE可以下载并执行安装镜像了。ss

    可以入手了,先点击“Services”服务),然后点击“Load Balancers”负载均衡器),然后点击“Monitor”监视器)选项卡。

    在 Debian 中安装 HAProxy

    在 Debian Wheezy 中我们需要添加源,在 /etc/apt/sources.list.d 下创建一个文件 "backports.list" ,写入下面的内容

    1. deb wheezy­backports main

    刷新仓库的数据,并安装 HAProxy

    1. # apt­ get update
    2. # apt ­get install haproxy

    准备条件

    你至少要有一台,或者最好是两台 Web 服务器来验证你的负载均衡的功能。我们假设后端的 HTTP Web 服务器已经配置好并可以运行 http://www.linuxidc.com/Linux/2013-07/86755.htm 。

    Haproxy Keepalived搭建Weblogic高可用负载均衡集群 http://www.linuxidc.com/Linux/2013-09/89732.htm

    Keepalived HAProxy配置高可用负载均衡 http://www.linuxidc.com/Linux/2012-03/56748.htm

    CentOS 6.3下Haproxy Keepalived Apache配置笔记 http://www.linuxidc.com/Linux/2013-06/85598.htm

    Haproxy KeepAlived 实现WEB群集 on CentOS 6 http://www.linuxidc.com/Linux/2012-03/55672.htm

    Haproxy Keepalived构建高可用负载均衡 http://www.linuxidc.com/Linux/2012-03/55880.htm

    Linux系统负载均衡软件之Haproxy Apache  http://www.linuxidc.com/Linux/2015-01/111341.htm

      $ sudo /etc/init.d/apache2 restart

    4.二层连接场景

    在此拓扑中,目标交换机和Web服务器在同一个L2网络中。例如,他们可能都被插入到同一个非托管的交换机中。如下图所示。

    新葡亰496net 4

    交换机和Web服务器处于同一L2网络

    这种情况就像前面介绍的直连情况一样。ONIE发现Web服务器的IP地址。并尝试从服务器下载一系列默认文件名的文件。

    要添加一个新条目,点击“Plus”添加)按钮,指定“Name”名称)和“Description”描述,在这个示例中,我会使用ApacheClusterMon作为名称和描述),将类型设成“HTTP”,然后为“Host”主机)设置一个未使用的IP地址我们随后会创建虚拟服务器的IP,以便分配给故障切换服务器组),任由“HTTP Code”HTTP代码)设成“200 OK”。需要的话,然后点击“Save”保存),使更改生效。

    在 Ubuntu 中安装 HAProxy

    1. # apt ­get install haproxy

    在 Linux 中安装 HAProxy

    对于大多数的发行版,我们可以使用发行版的包管理器来安装 HAProxy。

      Apache在安装期间将会新建一个目录:/var/www,该目录是该服务器中存放文档的根目录。只要在浏览器的地址栏输入  或机器的IP地址就能访问放置在此目录中的所有文档。

    5.基本DHCP场景1 (指定安装镜像URL)

    在这种场景中,我们跳过复杂的情况,使用DHCP服务器提供有关安装镜像位置信息。DHCP服务器,目标交换机和Web服务器都位于同一个L2网络上。如下图所示。

    新葡亰496net 5

    交换机和Web服务器及DHCP服务器上位于同一L2网络上

    DHCP服务器负责提供如下信息:

    • 从IP地址池中为目标交换机分配IP地址
    • Web服务器中安装镜像的URL
      下面是ISC DHCP服务器的dhcpd.conf文件示例。更多有关ONIE如何使用DHCP选项的信息,请参阅DHCP请求和响应章节描述。
    subnet 203.0.113.0 netmask 255.255.255.0 {
      range 203.0.113.20 203.0.113.200;
      option default-url = "http://203.0.113.10/customer-abc-onie-installer";
    }
    

    使用此配置,ONIE从由range参数定义的地址池中提取IP地址。接下来尝试下载由default-url参数指定的镜像。
    使用这个技术,你可以:

    • 分配任何对您的网络有意义的IP地址
    • 根据需要命名您的安装镜像,包括子目录名称
      在此示例中,Web服务器和目标交换机必须位于同一个L2网络上。

    新葡亰496net 6 
    新葡亰496net 7

    在 CentOS 和 RHEL 中安装 HAProxy

    1. # yum install haproxy

    在 Debian 中安装 HAProxy

    在 Debian Wheezy 中我们需要添加源,在 /etc/apt/sources.list.d 下创建一个文件 "backports.list" ,写入下面的内容

    1. deb wheezy­backports main

    刷新仓库的数据,并安装 HAProxy

    1. # apt­ get update
    2. # apt ­get install haproxy

      二、 安装PHP

    6.基本DHCP场景2 (域名服务器)

    这种情况类似于场景1 (指定安装镜像URL),但是添加了域名服务器的DNS。通过引入域名服务我,您可以使用Web服务器的逻辑名称,而不使用硬编码的IP地址。
    要添加对DNS的支持,请在dhcpd.conf文件中指定域名服务我的DHCP选项:

    subnet 203.0.113.0 netmask 255.255.255.0 {
      range 203.0.113.20 203.0.113.200;
      option domain-name-servers 203.0.113.2;
      option default-url = "http://image-server/customer-abc-onie-installer";
    }
    

    域名服务器是203.0.113.2,ONIE使用此服务器来解析主机镜像服务器的IP地址。

    2.0配置成你那些Web服务器的负载均衡器。这篇实用文章假设你已经安装了一个pfSense设备和至少两台Apache服务...

    配置 HAProxy

    本教程假设有两台运行的 HTTP Web 服务器,它们的 IP 地址是 192.168.100.2 和 192.168.100.3。我们将负载均衡配置在 192.168.100.4 的这台服务器上。

    为了让 HAProxy 工作正常,你需要修改 /etc/haproxy/haproxy.cfg 中的一些选项。我们会在这一节中解释这些修改。一些配置可能因 GNU/Linux 发行版的不同而变化,这些会被标注出来。

    在 Ubuntu 中安装 HAProxy

    1. # apt ­get install haproxy

      PHP是一种流行的服务器端脚本语言,一般与MySQL或 Postgres结合起来用于管理Web内容、blog和论坛。下面介绍其安装方法,其实它的安装也很简单,命令如下所示:

    7.L3网络场景

    这种场景中不再使用DHCP场景2,而是添加路由信息的DHCP配置。目标交换机通过网关遍历三层网络到达Web服务器。网络拓扑如下图所示。

    新葡亰496net 8

    交换机和Web服务器及DHCP服务器位于不同的L3网络

    通过此设置,Web服务器和目标交换机可以驻留在不同的子网上。目标交换机需要通过路由器发送数据包到达Web服务器。
    要为目标交换机指定路由,请在DHCP配置中将路由器选项设置为路由器的IP地址:

    subnet 203.0.113.0 netmask 255.255.255.0 {
      range 203.0.113.20 203.0.113.200;
      option domain-name-servers 203.0.113.2;
      option routers 203.0.113.3;
      option default-url = "http://image-server/customer-abc-onie-installer";
    }
    

    当请求安装镜像时,目标交换机将数据发送到203.0.113.3,然后路由器将数据发送到下一跳,最终数据包到达Web服务器,并用安装镜像数据回复。
    对于这种场景,DHCP服务器必须与目标交换机位于同一个L2网络,Web服务器可以自由地驻留在路由器可访问的任何子网中。
    您可以使用BOOTP代理在不同的L2网络中找到DHCP服务器。配置BOOTP代理的相关操作在本文档中不做描述。ss

    1. 配置日志功能

    你要做的第一件事是为 HAProxy 配置日志功能,在排错时日志将很有用。日志配置可以在 /etc/haproxy/haproxy.cfg 的 global 段中找到他们。下面是针对不同的 Linux 发型版的 HAProxy 日志配置。

    在 CentOS 和 RHEL 中安装 HAProxy

    1. # yum install haproxy

      $ sudo apt-get install libapache2-mod-php5

    8.高级DHCP (匹配供应商类标识符)

    当ONIE发出DHCP请求时,它将DHCP供应商 (选项60)设置为特定的字符串。有关如何设置DHCP vendor class,请参阅DHCP相关设置文档。本文中使用PowerPC机器,字符串将是:

    onie_vendor:powerpc-VENDOR_MACHINE-r0
    

    对用于特定平台的DHCP Vendor Class Identifier,请联系您的NOS供应商或您的硬件供应商。
    ISC DHCP服务器配置文件语法包含基本字符串匹配功能,可以用于识别ONIE DHCP请求。通过解析thedefault-url选项字符串,将返回一个合适的镜像URL。
    下面的DHCP配置用于展示在PowerPC交换机中使用不同厂商X和Y的安装镜像:

    class "onie-vendor-X-class" {
      match if substring(option vendor-class-identifier, 0, 27) = "onie_vendor:powerpc-VendorX";
      option default-url = "http://image-server/VendorX-onie-installer";
    }
    
    class "onie-vendor-Y-class" {
      match if substring(option vendor-class-identifier, 0, 27) = "onie_vendor:powerpc-VendorY";
      option default-url = "http://image-server/VendorY-onie-installer";
    }
    

    在这种场景中,DHCP服务器根据vendor-class-identifier选项传回不同的URL。
    调试这样的结构时,可能会发现有些DHCP日志记录有用。例如,放在class stanza外的log()指令可以帮您理解正在发生的事情:

    log(error, concat("vendor-class: ", substring(option vendor-class-identifier, 0, 11)));
    log(error, concat("platform    : ", substring(option vendor-class-identifier, 12, 999)));
    

    第一个log()显示了vendor-class-identifier的前11个字符,它应该是字符串onie_vendor。第二个log()显示剩余的字符。
    一切正常之后,您可以删除日志。

    CentOS 或 RHEL:

    在 CentOS/RHEL中启用日志,将下面的:

    1. log 127.0.0.1 local2

    替换为:

    1. log 127.0.0.1 local0

    然后配置 HAProxy 在 /var/log 中的日志分割,我们需要修改当前的 rsyslog 配置。为了简洁和明了,我们在 /etc/rsyslog.d 下创建一个叫 haproxy.conf 的文件,添加下面的内容:

    1. $ModLoad imudp
    2. $UDPServerRun 514
    3. $template Haproxy,"%msg%n"
    4. local0.=info ­/var/log/haproxy.log;Haproxy
    5. local0.notice ­/var/log/haproxy­status.log;Haproxy
    6. local0.*~

    这个配置会基于 $template 在 /var/log 中分割 HAProxy 日志。现在重启 rsyslog 应用这些更改。

    1. # service rsyslog restart

    配置 HAProxy

    本教程假设有两台运行的 HTTP Web 服务器,它们的 IP 地址是 192.168.100.2 和 192.168.100.3。我们将负载均衡配置在 192.168.100.4 的这台服务器上。

    为了让 HAProxy 工作正常,你需要修改 /etc/haproxy/haproxy.cfg 中的一些选项。我们会在这一节中解释这些修改。一些配置可能因 GNU/Linux 发行版的不同而变化,这些会被标注出来。

      重新启动 Apache 以加载上面安装的模块:

    9.高级DHCP 2 (VIVSO)

    作为供应商类标识符字符串匹配的替代方案,ONIE也发送Vendor-Identifying Vendor-Specific Information Option (VIVSO – DHCP配置选项125)。
    VIVSO方法是识别目标交换机更精确的方法,但是这种方法在DHCP服务器上也需要更多的配置。
    有关ONIE如何使用VIVSO的更多信息,请参阅Vendor-Identifying Vendor-Specific Information (VIVSO)。
    VIVSO选项是双向的,ONIE DHCP客户端发送设置了identifyin字段,DHCP服务器响应URL字段。
    VIVSO只不过是在标准的DHCP选项中封装特定的供应商选项。
    为了ISC DHCP服务器解析选项125,我们必须定义要使用的字段和数据类型。以下是ISC DHCP服务器配置的片段,定义了ONIE使用的字段:

    # Create an option namespace called ONIE
    option space onie code width 1 length width 1;
    
    # Define the code names and data types within the ONIE namespace
    option onie.installer_url code 1 = text;
    option onie.updater_url   code 2 = text;
    option onie.machine       code 3 = text;
    option onie.arch          code 4 = text;
    option onie.machine_rev   code 5 = text;
    
    # Package the ONIE namespace into option 125
    option space vivso code width 4 length width 1;
    option vivso.onie code 42623 = encapsulate onie;
    option vivso.iana code 0 = string;
    option op125 code 125 = encapsulate vivso;
    I told you this method required more configuration...
    

    其中数字42623是一个32-bit IANA企业码,用于识别其名称空间。由于VIVSO允许多套的供应商选项,每套都必须由IANA作为标识指定。
    这些空间配置必须放在全局的dhcpd.conf文件中,而不是任何类定义之外。
    现在,在定义选项空间的情况下,我们可以在收到VIVSO选项时使用这些定义。以下是使用选项空间定义来检查目标交换机体系结构和机器类型的代码片段:

    class "onie-vendor-classes" {
      # Limit the matching to a request we know originated from ONIE
      match if substring(option vendor-class-identifier, 0, 11) = "onie_vendor";
    
      # Required to use VIVSO
      option vivso.iana 01:01:01;
    
      # generic CPU architecture matching
      if option onie.arch = "powerpc" {
        option onie.installer_url = "http://image-server/generic-powerpc-onie-installer";
      }
    
      # matching on CPU architecture and machine type
      if option onie.arch = "powerpc" and option onie.machine = "XYZ1234" {
        option onie.installer_url = "http://image-server/powerpc-xyz1234-onie-installer";
      }
    
      # The contents of an option can also be used to create the response text
      if exists onie.arch and exists onie.machine and exists onie.machine_rev {
        option onie.installer_url = concat("http://image-server/image-installer-",
                                         option onie.arch, "-", option onie.machine,
                                         "-r", option onie.machine_rev);
      }
    
      # When operating in ONIE 'update' mode ONIE will check the
      # onie.updater_url response option
      if option onie.arch = "powerpc" and option onie.machine = "XYZ1234" {
        option onie.updater_url = "http://image-server/onie-updater-VENDOR_XYZ1234-powerpc.bin";
      }
    
    }
    

    我们来看看这个配置,并讨论其含义:

    class "onie-vendor-classes" {
      # Limit the matching to a request we know originated from ONIE
      match if substring(option vendor-class-identifier, 0, 11) = "onie_vendor";
    

    此处的想法是将后续的匹配限制为我们所知道的来自支持ONIE的机器请求。
    接下来是IANA选项:

    # Required to use VIVSO
    option vivso.iana 01:01:01;
    

    这与上面定义的选项空间一起解决了ISC DHCP服务器中的一个已知问题。如果没有这个解决方法,服务器将不会发送一个125选项响应。
    接下来是通用CPU架构匹配语句:

    # generic CPU architecture matching
    if option onie.arch = "powerpc" {
      option onie.installer_url = "http://image-server/generic-powerpc-onie-installer";
    }
    

    这是比较选项字段和字符串的一个例子。如果字符串匹配,则响应中的installer_url被设置为指定的字符串。
    接着,在相应字段中使用请求字段的值:

    # The contents of an option can also be used to create the response text
    if exists onie.arch and exists onie.machine and exists onie.machine_rev {
      option onie.installer_url = concat("http://image-server/image-installer-",
                                       option onie.arch, "-", option onie.machine,
                                       "-r", option onie.machine_rev);
    }
    

    使用函数concat您可以拼凑几个字符串来组成响应字段。使用option指令从请求中提取字符串并使用结构创建响应。
    例如,在上面的代码片段中,我们假设onie.arch = "powerpc",onie.machine = "XYZ1234"且 and onie.machine_rev = "2"。在这种情况下,onie.installer_url将被设置为:

    onie.installer_url = "http://image-server/image-installer-powerpc-XYZ1234-r2"
    

    最终,让我们看看updater_url字段:

    # When operating in ONIE 'update' mode ONIE will check the
    # onie.updater_url response option
    if option onie.arch = "powerpc" and option onie.machine = "XYZ1234" {
      option onie.updater_url = "http://image-server/onie-updater-VENDOR_XYZ1234-powerpc.bin";
    }
    

    ONIE可以在自我更新模式下运行,查找ONIE更新URL。更新URL用于下载ONIE更新二进制文件。
    当ONIE以更新模式运行时,我们所讨论的有关安装镜像URL的所有内容都适用于ONIE更新镜像。
    有关更多ONIE更新模式的信息,请参考ONIE自更新模式。

    Debian 或 Ubuntu:

    在 Debian 或 Ubuntu 中启用日志,将下面的内容

    1. log /dev/log local0
    2. log /dev/log local1 notice

    替换为:

    1. log 127.0.0.1 local0

    然后为 HAProxy 配置日志分割,编辑 /etc/rsyslog.d/ 下的 haproxy.conf (在 Debian 中可能叫 49-haproxy.conf),写入下面你的内容

    1. $ModLoad imudp
    2. $UDPServerRun 514
    3. $template Haproxy,"%msg%n"
    4. local0.=info ­/var/log/haproxy.log;Haproxy
    5. local0.notice ­/var/log/haproxy­status.log;Haproxy
    6. local0.*~

    这个配置会基于 $template 在 /var/log 中分割 HAProxy 日志。现在重启 rsyslog 应用这些更改。

    1. # service rsyslog restart

    1. 配置日志功能

    你要做的第一件事是为 HAProxy 配置日志功能,在排错时日志将很有用。日志配置可以在 /etc/haproxy/haproxy.cfg 的 global 段中找到他们。下面是针对不同的 Linux 发型版的 HAProxy 日志配置。

      $ sudo /etc/init.d/apache2 restart

    10.HTTP头部和脚本

    当ONIE发出HTTP请求镜像时,会发送一些ONIE特定的HTTP头部。这些头部可以在高级部署中使用,以支持配置。这些头部包括但不限于:

    ONIE-SERIAL-NUMBER:
    ONIE-ETH-ADDR:
    ONIE-VENDOR-ID:
    ONIE-MACHINE:
    ONIE-MACHINE-REV:
    ONIE-ARCH:
    ONIE-OPERATION:
    

    有关HTTP头部的更多信息,请参阅HTTP请求和HTTP头部描述。
    例如,由DHCP服务器发出的镜像URL可以是HTTP服务器上的CGI脚本。CGI脚本可以使用头部如ONIE-SERIAL-NUMBER 和ONIE-ETH-ADDR,将部署与库存控制数据库联系起来。

    2. 设置默认选项

    下一步是设置 HAProxy 的默认选项。在 /etc/haproxy/haproxy.cfg 的 default 段中,替换为下面的配置:

    1. defaults
    2. log global
    3. mode http
    4. option httplog
    5. option dontlognull
    6. retries 3
    7. option redispatch
    8. maxconn 20000
    9. contimeout 5000
    10. clitimeout 50000
    11. srvtimeout 50000

    上面的配置是当 HAProxy 为 HTTP 负载均衡时建议使用的,但是并不一定是你的环境的最优方案。你可以自己研究 HAProxy 的手册并配置它。

    CentOS 或 RHEL:

    在 CentOS/RHEL中启用日志,将下面的:

    1. log 127.0.0.1 local2

    替换为:

    1. 新葡亰496net:ONIE用户指南,负载均衡器。log 127.0.0.1 local0

    然后配置 HAProxy 在 /var/log 中的日志分割,我们需要修改当前的 rsyslog 配置。为了简洁和明了,我们在 /etc/rsyslog.d 下创建一个叫 haproxy.conf 的文件,添加下面的内容:

    1. $ModLoad imudp
    2. $UDPServerRun 514
    3. $template Haproxy,"%msg%n"
    4. local0.=info ­/var/log/haproxy.log;Haproxy
    5. local0.notice ­/var/log/haproxy­status.log;Haproxy
    6. local0.*~

    这个配置会基于 $template 在 /var/log 中分割 HAProxy 日志。现在重启 rsyslog 应用这些更改。

    1. # service rsyslog restart

      为了验证PHP模块是否正确加载,我们可以建立一个PHP文件,然后尝试通过Web服务器访问该文件。此外,我们知道PHP内建了一个phpinfo函数,该函数能够给出它的环境的详细信息。所以我们还可以利用下面的命令来检查PHP的工作情况:

    11.调试安装过程

    加入您在基于ONIE的安装过程中出现问题,请参考以下几条建议。

    3. Web 集群配置

    Web 集群配置定义了一组可用的 HTTP 服务器。我们的负载均衡中的大多数设置都在这里。现在我们会创建一些基本配置,定义我们的节点。将配置文件中从 frontend 段开始的内容全部替换为下面的:

    1. listen webfarm *:80
    2. mode http
    3. stats enable
    4. stats uri /haproxy?stats
    5. stats realm Haproxy Statistics
    6. stats auth haproxy:stats
    7. balance roundrobin
    8. cookie LBN insert indirect nocache
    9. option httpclose
    10. option forwardfor
    11. server web01 192.168.100.2:80 cookie node1 check
    12. server web02 192.168.100.3:80 cookie node2 check

    "listen webfarm *:80" 定义了负载均衡器监听的地址和端口。为了教程的需要,我设置为 "*" 表示监听在所有接口上。在真实的场景汇总,这样设置可能不太合适,应该替换为可以从 internet 访问的那个网卡接口。

    1. stats enable
    2. stats uri /haproxy?stats
    3. stats realm Haproxy Statistics
    4. stats auth haproxy:stats

    上面的设置定义了,负载均衡器的状态统计信息可以通过 访问。访问需要简单的 HTTP 认证,用户名为 "haproxy" 密码为 "stats"。这些设置可以替换为你自己的认证方式。如果你不需要状态统计信息,可以完全禁用掉。

    下面是一个 HAProxy 统计信息的例子

    新葡亰496net 9

    "balance roundrobin" 这一行表明我们使用的负载均衡类型。这个教程中,我们使用简单的轮询算法,可以完全满足 HTTP 负载均衡的需要。HAProxy 还提供其他的负载均衡类型:

    • leastconn:将请求调度至连接数最少的服务器­
    • source:对请求的客户端 IP 地址进行哈希计算,根据哈希值和服务器的权重将请求调度至后端服务器。
    • uri:对 URI 的左半部分(问号之前的部分)进行哈希,根据哈希结果和服务器的权重对请求进行调度
    • url_param:根据每个 HTTP GET 请求的 URL 查询参数进行调度,使用固定的请求参数将会被调度至指定的服务器上
    • hdr(name):根据 HTTP 首部中的 <name> 字段来进行调度

    "cookie LBN insert indirect nocache" 这一行表示我们的负载均衡器会存储 cookie 信息,可以将后端服务器池中的节点与某个特定会话绑定。节点的 cookie 存储为一个自定义的名字。这里,我们使用的是 "LBN",你可以指定其他的名称。后端节点会保存这个 cookie 的会话。

    1. server web01 192.168.100.2:80 cookie node1 check
    2. server web02 192.168.100.3:80 cookie node2 check

    上面是我们的 Web 服务器节点的定义。服务器有由内部名称(如web01,web02),IP 地址和唯一的 cookie 字符串表示。cookie 字符串可以自定义,我这里使用的是简单的 node1,node2 ... node(n)

    更多详情见请继续阅读下一页的精彩内容:

    • 1
    • 2
    • 下一页

    HAProxy 配置 HTTP 负载均衡器 随着基于 Web 的应用和服务的增多,IT 系统管理员肩上的责任也越来越重。当遇到不可预期的事件如流量达...

    Debian 或 Ubuntu:

    在 Debian 或 Ubuntu 中启用日志,将下面的内容

    1. log /dev/log local0
    2. log /dev/log local1 notice

    替换为:

    1. log 127.0.0.1 local0

    然后为 HAProxy 配置日志分割,编辑 /etc/rsyslog.d/ 下的 haproxy.conf (在 Debian 中可能叫 49-haproxy.conf),写入下面你的内容

    1. $ModLoad imudp
    2. $UDPServerRun 514
    3. $template Haproxy,"%msg%n"
    4. local0.=info ­/var/log/haproxy.log;Haproxy
    5. local0.notice ­/var/log/haproxy­status.log;Haproxy
    6. local0.*~

    这个配置会基于 $template 在 /var/log 中分割 HAProxy 日志。现在重启 rsyslog 应用这些更改。

    1. # service rsyslog restart

      sudo sh -c "echo '' > /var/www/info.php"

    11.1.确认Web服务器配置

    您是否可以使用Web浏览器从Web服务器下载镜像?请参阅“测试从HTTP服务器下载NOS安装镜像”。

    2. 设置默认选项

    下一步是设置 HAProxy 的默认选项。在 /etc/haproxy/haproxy.cfg 的 default 段中,替换为下面的配置:

    1. defaults
    2. log global
    3. mode http
    4. option httplog
    5. option dontlognull
    6. retries 3
    7. option redispatch
    8. maxconn 20000
    9. contimeout 5000
    10. clitimeout 50000
    11. srvtimeout 50000

    上面的配置是当 HAProxy 为 HTTP 负载均衡时建议使用的,但是并不一定是你的环境的最优方案。你可以自己研究 HAProxy 的手册并配置它。

      之后,在浏览器地址栏键入 Apache没有正确加载PHP模块。解决问题的办法是,在/etc/apache2/apache2.conf 或 /etc/apache2/mods-enabled/php5.conf文件中加入下面一行命令:

    11.2.试试使用直连模式

    尝试按照直连场景所描述方式,将交换机直连到Web服务器。

    3. Web 集群配置

    Web 集群配置定义了一组可用的 HTTP 服务器。我们的负载均衡中的大多数设置都在这里。现在我们���创建一些基本配置,定义我们的节点。将配置文件中从 frontend 段开始的内容全部替换为下面的:

    1. listen webfarm *:80
    2. mode http
    3. stats enable
    4. stats uri /haproxy?stats
    5. stats realm Haproxy Statistics
    6. stats auth haproxy:stats
    7. balance roundrobin
    8. cookie LBN insert indirect nocache
    9. option httpclose
    10. option forwardfor
    11. server web01 192.168.100.2:80 cookie node1 check
    12. server web02 192.168.100.3:80 cookie node2 check

    "listen webfarm *:80" 定义了负载均衡器监听的地址和端口。为了教程的需要,我设置为 "*" 表示监听在所有接口上。在真实的场景汇总,这样设置可能不太合适,应该替换为可以从 internet 访问的那个网卡接口。

    1. stats enable
    2. stats uri /haproxy?stats
    3. stats realm Haproxy Statistics
    4. stats auth haproxy:stats

    上面的设置定义了,负载均衡器的状态统计信息可以通过 访问。访问需要简单的 HTTP 认证,用户名为 "haproxy" 密码为 "stats"。这些设置可以替换为你自己的认证方式。如果你不需要状态统计信息,可以完全禁用掉。

    下面是一个 HAProxy 统计信息的例子

    新葡亰496net 10

    "balance roundrobin" 这一行表明我们使用的负载均衡类型。这个教程中,我们使用简单的轮询算法,可以完全满足 HTTP 负载均衡的需要。HAProxy 还提供其他的负载均衡类型:

    • leastconn:将请求调度至连接数最少的服务器­
    • source:对请求的客户端 IP 地址进行哈希计算,根据哈希值和服务器的权重将请求调度至后端服务器。
    • uri:对 URI 的左半部分(问号之前的部分)进行哈希,根据哈希结果和服务器的权重对请求进行调度
    • url_param:根据每个 HTTP GET 请求的 URL 查询参数进行调度,使用固定的请求参数将会被调度至指定的服务器上
    • hdr(name):根据 HTTP 首部中的 <name> 字段来进行调度

    "cookie LBN insert indirect nocache" 这一行表示我们的负载均衡器会存储 cookie 信息,可以将后端服务器池中的节点与某个特定会话绑定。节点的 cookie 存储为一个自定义的名字。这里,我们使用的是 "LBN",你可以指定其他的名称。后端节点会保存这个 cookie 的会话。

    1. server web01 192.168.100.2:80 cookie node1 check
    2. server web02 192.168.100.3:80 cookie node2 check

    上面是我们的 Web 服务器节点的定义。服务器有由内部名称(如web01,web02),IP 地址和唯一的 cookie 字符串表示。cookie 字符串可以自定义,我这里使用的是简单的 node1,node2 ... node(n)

    更多详情见请继续阅读下一页的精彩内容: http://www.linuxidc.com/Linux/2015-01/112487p2.htm

    新葡亰496net 11

      AddType application/x-httpd-php .php .phtml .php3

    11.3.检查DHCP服务器日志

    尝试添加一些日志到您的DHCP服务器配置中,如高级DHCP (匹配供应商类标识)中所描述的那样。

      加入上面的命令行后,为了保证Apache重新读取配置文件关闭,我们可以通过下面的命令将其关闭,然后再加以启动:

    11.4.使用TCPDUMP

    如果可能,使用tcpdump来检测DHCP服务器上的网络流量。如果您可以获取对DHCP服务器的root访问权限,运行以下命令来检查网络流量:

    dhcp-server:~ # tcpdump -v -e -i <intf> ether host <MAC address>
    

    将<intf>替换为面向目标交换机的DHCP服务器的网络接口。例如,它可能是'eth0'或'eth1'。
    将<MAC address>替换为目标交换机以太网管理口的MAC地址。您可以在交换机外部所贴的标签上找到这个描述。

      $ sudo /etc/init.d/apache2 stop

    11.5.简化DHCP配置

    尝试将您的DHCP配置降到最简程度。

      $ sudo /etc/init.d/apache2 start

    11.6.添加远程日志服务器

    ONIE可以远程登录到系统日志服务器。如果DHCP响应包含日志服务器选项,则ONIE将远程登录到该服务器。以下是指定该远程系统日志服务器的ISC DHCP服务器语法:

    option log-servers 203.0.113.2;
    

    三、配置动态虚拟主机

    11.7.登录目标交换机查询日志

    如果你可以确定ONIE从DHCP服务器获取了IP地址,则可以使用ssh或telnet远程登录到目标交换机:

    linux:$ ssh root@203.0.113.22
    The authenticity of host '203.0.113.22 (203.0.113.22)' can't be established.
    RSA key fingerprint is 15:05:64:8a:c6:f3:5f:65:41:a6:10:f6:9d:43:9c:49.
    Are you sure you want to continue connecting (yes/no)? yes
    Warning: Permanently added '203.0.113.22' (RSA) to the list of known hosts.
    ONIE:~ #
    

    ONIE不需要ssh或telnet的密码。登录之后,您可以检查ONIE的日志文件/var/log/onie.log :

    ONIE:~ # cat /var/log/onie.log
    

      一般情况下,我们会在Web服务器上寄放多个Web站点,并且每个站点都有它自己的虚拟服务器。对于Apache来说,它同时支持基于名称的虚拟服务器和基于IP的服务器。

    11.8.连接到串口控制台

    如果一切都失败了,您可以连接到目标交换机的串口控制台。ONIE使用115200波特率。

      对于基于IP的虚拟服务器,每个站点都具有一个单独的IP地址,这样的缺点是使用太多的IP地址,但如今IPv4的地址已有枯竭的迹象,所以不提倡使用,通常在要求使用SSL 时才使用。

     

      对于基于名称的虚拟服务器,多个Web站点共享一个IP地址。在这种情况下,通常根据HTTP请求头部来决定将其发给哪一个站点。为此,我们需要为每个虚拟服务器分别建立一个配置,给作为Web站点的根的目录以及主机命名。但是,如果这样的话我们每当添加一个新的虚拟服务器时,就要修改 Apache的配置并重新启动,这的确很烦人呢!

      值得高兴的是,如果使用动态虚拟主机技术的话,可以随时加入虚拟主机时而不必重新配置或启动Apache。该技术要用到一个模块,称为vhost_alias。我们可以通过在Apache2已启用的模块目录中建立一个符号链接来启用该模块,命令如下所示:

      $ sudo ln -s /etc/apache2/mods-available/vhost_alias.load

      /etc/apache2/mods-enabled/vhost_alias.load

      要想使vhost_alias正常工作,我们还需要修改/etc/apache2/apache2.conf 来关闭常规名称(canonical names),修改日志文件的配置,并为我们的虚拟主机规定存放位置。下面是一个实例:

      #从"Host:"头中取得主机名

      UseCanonicalName Off

      # 这种日志格式可以从第一个字段中提取出主机名

      LogFormat "%V %h %l %u %t "%r" %s %b" vcommon

      CustomLog /var/log/apache2/access_log vcommon

      # 在返回请求的文件名路径中包含主机名

      VirtualDocumentRoot /var/www/vhosts/%0/web

      VirtualScriptAlias /var/www/vhosts/%0/cgi-bin

      接下来,创建存放虚拟主机的目录,命令如下:

      $ sudo mkdir /var/www/vhosts

      新建一个基干虚拟服务器,命令如下所示:

      $ sudo mkdir -p /var/www/vhosts/skeleton/cgi-bin

      $ sudo cp -a /var/www/apache2-default /var/www/vhosts/skeleton/web

      重新启动apache2,使得上面的配置生效,方法如下所示:

      $ sudo /etc/init.d/apache2 restart

      好了,现在我们可以建立基于名称的虚拟主机了。方法是将基干拷贝到要响应的主机名。举例来说,要想为www.Linuxidc.com新建一个虚拟服务器的话,只要运行下面的命令就行了:

      $ sudo cp -a /var/www/vhosts/skeleton /var/www/vhosts/

      www. Linuxidc.com

      现在,所有到达你的Apache服务器的HTTP连接中,只要其“Host:”头部被设成 www. Linuxidc.com,那么将由对应的虚拟服务器来响应。

      为了早些看到我们的劳动成果,可以在本地进行测试。为此编辑/etc/hosts,加入下面一项:

      127.0.0.1 www. Linuxidc.com

      这样,在本机上就能访问该站点了。但是,为了让所有用户都能访问虚拟主机,还需申请域名,并且我们还需要在公共DNS服务器上进行设置。

    版权声明:本文为博主原创文章,未经博主允许不得转载。


    本文由新葡亰496net发布于服务器网络,转载请注明出处:新葡亰496net:ONIE用户指南,负载均衡器

    关键词: