zoukankan      html  css  js  c++  java
  • 配置HAProxy负载平衡集群 Keepalived高可用服务器 Keepalived+LVS服务器

    ###################################################

    cluster  集群与存储

    day 03

    F5硬件--10万几十万

    价格-低,服务要求访问量-中,负载均衡、高可用,技术,LVS nginx    

     HAproxy高可用代理

    一、HAProxy概述  调度器

    它是免费、快速并且可靠的一种解决方案

    适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理

    提供高可用性、负载均衡以及基于TCPHTTP应用的代理

    衡量负责均衡器性能的因素

    Session  rate会话率 -- 每秒钟产生的会话数

    Session concurrency  并发会话数 -- 服务器处理会话的时间越长,并发会话数越多

    Date rate数据速率 --MB/sMbps衡量;大的对象导致并发会话数增加;高会话数、高数据速率要求更多的内存

    HAProxy工作模式

    Mode  http  --客户端请求被深度分析后再发往服务器

    Mode tcp  --客户端与服务器之间建立会话,不检查第七层信息

    Mode health --仅做健康状态检查,已经不建议使用

    HTTP解析

    HAProxy运行在HTTP模式下,HTTP请求(request)和响应(response)均被完全分析和索引,这样便于创建和恰当的匹配规则;理解http请求和响应,对于更好的创建匹配规则至关重要

    HTTP事物模型

    HTTP协议是事物驱动的

    每个请求request仅能对应一个响应response

    常见模型:HTTP  close 客户端向服务器建立一个TCP连接,客 发送请求给 服 ,服响应请求后立即断开,如果客请求不只一个,那就要不断去建立连接;TCP三次握手消耗相对较大的系统资源,同时延迟较大;

     Keep-alive  一次连接可以传输多个请求;客户端需要知道传输内容的长度,以避免无限期的等待传输结束;降低两个HTTP事务间的延迟;需要相对较少的服务器资源;

    Pipelining(流水线) 仍然使用keep-alive;在发送后续请求前,不用等前面的请求已经得到回应;适用于有大量图片的页面;降低的多次请求之间的网络延迟;

    HTTP头部信息:请求头部信息-方法:GET -URI/serv/login.php?lang=en&profile=2版本:HTTP/1.1

    请求头部信息包含许多有关的客户端环境和请求正文的有用信息,如浏览器所使用的语言、请求正文的长度等

    响应头部信息:版本:HTTP/1.1  状态码:200  原因:OK

    http协议的状态码

    200OK

    3xx:重定向  z.cn-->亚马逊  301302临时重定向

    4xx:错误    用户的访问路径有问题,目录权限问题

    5xx 服务器内部错误,代码问题

    二、配置HAProxy高可用代理负载平衡集群

    配置文件说明

    HAProxy配置参数来源

    命令行:总是具有最高优先级     global部分:全局设置进程级别参数

    代理声明部分 :来自于 default 为后续的其他部分设置缺省参数,缺省参数可被后续部分重置

    Listen frontendbackend结合到一起的完整声明

    Frontend 描述接受客户端侦听套接字socket

    Backend描述转发链接的服务集

    准备三台Linux服务器,两台做Web服务器,一台安装HAProxy,实现如下功能:

        客户端访问HAProxyHAProxy分发请求到后端Real Server

        要求HAProxy可以根据Cookie为客户端分配固定后端服务器

        开启HAProxy监控页面,及时查看调度器状态

        设置HAProxy为开机启动

    步骤一:配置后端Web服务器  httpd

    步骤二:部署HAProxy服务器

    1、安装、配置

    [root@vh02/3]# yum install -y httpd;systemctl start httpd

    [root@vh04 bin]# yum install -y haproxy

    [root@vh04 bin]# vim /etc/haproxy/haproxy.cfg

    frontendbackend删除,添加以下内容:

    listen stats

           bind 0.0.0.0:1080   #监听端口

           stats refresh 30s   #统计页面自动刷新时间

         stats uri /stats   #统计页面url

         stats realm Haproxy Manager #统计页面密码框上提示文本

        stats auth admin:admin  #统计页面用户名和密码设置

      #stats hide-version   #隐藏统计页面上HAProxy的版本信息

    listen websrv 0.0.0.0:80    //配置调度

        cookie SERVERID rewrite    //

        balance roundrobin

        server web1 192.168.4.2:80 cookie a1i1 check inter 2000 rise 2 fall

    5            //健康检查2000次,连续2-健康

        server web2 192.168.4.3:80 cookie a1i1 check inter 2000 rise 2 fall 5

    2、起服务并验证

    [root@vh04 bin]# systemctl start haproxy.service   

    [root@vh04 bin]# netstat -antpu | grep haproxy

    [root@room8pc205 桌面]# firefox http://192.168.4.1

    [root@room8pc205 桌面]# firefox http://192.168.4.1:1080/stats

    Queue队列 越小越好  ; 会话率  会话数

    3配置vh04接收网络日志

    3.1haproxy的日志记录到/var/log/haproxy

     修改日志服务,接收网络日志,将local2记录到/var/log/haproxy

    [root@vh04 bin]# vim /etc/rsyslog.conf

    # Provides UDP syslog reception

    $ModLoad imudp

    $UDPServerRun 514

    # Provides TCP syslog reception

    $ModLoad imtcp

    $InputTCPServerRun 514

    local2.*    /var/log/haproxy     //生成对应服务日志      

    3.2验证,跟踪日志,访问haproxy查看效果

    [root@vh04 bin]# systemctl restart rsyslog

    [root@room8pc205 桌面]# curl  http://192.168.4.1

    [root@vh04 bin]# tail -f /var/log/messages

    [root@vh04 bin]# tail -f /var/log/haproxy

    附:将vh02的日志发送到日志服务器vh04

    [root@vh02 ~]# vim /etc/rsyslog.conf

    *.info         @192.168.4.4

    [root@vh02 ~]# systemctl restart rsyslog.service

    [root@vh04 bin]# tail -f /var/log/messages

    [root@vh02 ~]# logger 'this is a test'

    三、keepalived热备

    VRRP:虚拟冗余路由协议     IETF标准协议

    HSRP:热备份路由协议     思科私有协议

    vrrp_instance   vrrp示例

    Heart-beat 间隔 --hello时间

    Keepalived概述

    调度器出现单点故障,如何解决?

    Keepalived实现了高可用集群;Keepalived最初是为LVS设计的,专门监控各服务器节点的状态;Keepalived后来加入了VRRP功能,防止单点故障。

    Keepalived运行原理

    Keepalived检测每个服务器节点状态;服务器节点异常或工作出现故障,keepalived将故障节点从集群系统中剔除;故障节点恢复后,keepalived再将其加入到集群系统中;所有工作自动完成,无需人工干预。

    Keepalived高可用服务器    高可用的web集群

    (在4.2 4.3上)

    1、安装修改配置文件起动服务 验证

    [root@vh02 ~]# yum install -y keepalived

    [root@vh02 ~]# vim /etc/keepalived/keepalived.conf

    vip改为192.168.4.200,后续配置全部删除,其他不变

    [root@vh02 ~]# scp /etc/keepalived/keepalived.conf 192.168.4.3:/etc/keepalived/

    vh03的配置文件,角色改为SLAVE,优先级改为90

    [root@vh02 ~]# systemctl start keepalived.service

    [root@vh02 ~]# ip address show eth0  出现192.168.4.200(活跃)

    [root@vh03 ~]# ip a  s  eth0  不会出现192.168.4.200

    [root@room8pc205 桌面]# curl http://192.168.4.200

     251cto.com Keepalived双主配置

    #!/bin/bash

    port=$(netstat -antpu | grep :80)

    while :

    do

    if [ -z "$port" ];then

            systemctl stop keepalived

    fi

    sleep 5

    done

    四、Keepalived+LVS

    配置高可用、负载均衡的web集群

    使用keepalived高可用解决调度器单点失败问题

    主、备调度器上配置LVS

    主调度器异常时,keepalived启用备用调度器

    清除vh04 eth0:0端口的vip

    [root@vh04 bin]# ifdown eth0:0

    [root@vh04 bin]# rm -f /etc/sysconfig/network-scripts/ifcfg-eth0:0

    vh02vh03上的keepalived停止

    步骤一:配置网络环境

    1、自定义Web页面,启动Web服务器软件

    2、设置Web服务器网络参数,web服务器配置的lo端口上配置vip

    [root@vh02 ~]# cp /etc/sysconfig/network-scripts/ifcfg-lo{,:0}

    [root@vh02 ~]# vim /etc/sysconfig/network-scripts/ifcfg-lo:0

    DEVICE=lo:0

    IPADDR=192.168.4.100

    NETMASK=255.255.255.255         //只有自己

    NETWORK=192.168.4.100

    BROADCAST=192.168.4.100   //广播

    ONBOOT=yes

    NAME=lo:0

    [root@vh02 ~]# ifup lo:0   //忽略提示

    [root@vh02 ~]# scp /etc/sysconfig/network-scripts/ifcfg-lo:0 192.168.4.3:/etc/sysconfig/network-scripts/

    [root@vh03 ~]# ifup lo:0

    3、修改web服务器的内核参数

    [root@vh02 ~]# sysctl -a | grep arp_ig

    [root@vh02 ~]# echo 'net.ipv4.conf.all.arp_ignore = 1' >> /etc/sysctl.conf

    [root@vh02 ~]# echo 'net.ipv4.conf.lo.arp_ignore = 1' >> /etc/sysctl.conf

    [root@vh02 ~]# sysctl -a | grep arp_an

    [root@vh02 ~]# echo "net.ipv4.conf.all.arp_announce = 2" >> /etc/sysctl.conf

    [root@vh02 ~]# echo "net.ipv4.conf.lo.arp_announce = 2" >> /etc/sysctl.conf

    [root@vh02 ~]# sysctl -p

    步骤二:调度器安装Keepalivedipvsadm软件

    4、准备vh05作为第二台调度器

    vh05.tedu.cn 192.168.4.5/24    yum/selinux/firewalld

    vh04上安装keepalived,在vh05上安装lvskeepalived

    # yum install -y  keepalived    ipvsadm

    步骤三:部署Keepalived实现LVS-DR模式调度器的高可用

    5只需要配置keepalived,因为lvs规则可以通过keepalived配置文件进行配置

    [root@vh04 bin]# vim /etc/keepalived/keepalived.conf

    global_defs {

      notification_email {

    root@localhost                //设置报警收件人邮箱

    }

      notification_email_from chen@tedu.cn    //设置发件人

      smtp_server 127.0.0.1                //定义邮件服务器

      smtp_connect_timeout 30

      router_id  lvs1                        //设置路由ID

    }

        vrrp_instance VI_1 {

          state MASTER/SLAVE                             //主服务器为MASTER

          interface eth0                        //定义网络接口

          virtual_router_id 50                    //主辅VRID号必须一致

          priority 100/90                         //服务器优先级

          advert_int 1

          authentication {

            auth_type pass

            auth_pass forlvs                       //主辅服务器密码必须一致

          }

          virtual_ipaddress {  192.168.4.100  }    

        }

        virtual_server 192.168.4.100 80 {       //设置VIP192.168.0.253

          delay_loop 6

          lb_algo wrr                          //设置LVS调度算法为RR

          lb_kind DR                               //设置LVS的模式为DR

          persistence_timeout 50            //持久性,50秒内相同客户端访问相同服务器

          protocol TCP

          real_server 192.168.4.2 80 {

            weight 1                          //设置权重为1

            TCP_CHECK {

            connect_timeout 3

            nb_get_retry 3

            delay_before_retry 3

            }

          }

         real_server 192.168.4.3 80 {

            weight 2                          //设置权重为2

            TCP_CHECK {

            connect_timeout 3

            nb_get_retry 3

            delay_before_retry 3

            }

          }

    [root@vh04 ~]#  systemctl start keepalived

    [root@vh04 ~]#  ipvsadm -Ln

    [root@vh04 ~]#  ip a s eth0

    步骤四:验证

    [root@vh03 ~]# systemctl stop httpd

    [root@vh04/5 ~]#mail

    [root@vh04 ~]#  ipvsadm -Ln

    [root@vh04 ~]#  ip a s eth0

    客户端使用curl命令反复连接http://192.168.4.100,查看访问的页面是否会轮询到不同的后端真实服务器。

    五、配置高可用、互为主从同步的mysql集群

    Keepalived

    1. 配置vip  4.10 ---4.64.7

    设置网络参数,在mysql服务器配置的lo端口上配置vip

    [root@vh06 ~]# cp /etc/sysconfig/network-scripts/ifcfg-lo{,:0}

    [root@vh06 ~]# vim /etc/sysconfig/network-scripts/ifcfg-lo:0

    DEVICE=lo:0

    IPADDR=192.168.4.100

    NETMASK=255.255.255.255         //只有自己

    NETWORK=192.168.4.100

    BROADCAST=192.168.4.100   //广播

    ONBOOT=yes

    NAME=lo:0

    [root@vh06 ~]# ifup lo:0   //忽略提示

    [root@vh02 ~]# scp /etc/sysconfig/network-scripts/ifcfg-lo:0 192.168.4.7:/etc/sysconfig/network-scripts/

    [root@vh07 ~]# ifup lo:0

    1. keepalive高可用

     [root@vh06 ~]# yum -y install mariadb-server

     [root@vh06 ~]# systemctl restart mariadb

    MariaDB [(none)]> grant all on *.* to chen@"192.168.4.%"  identified by '123456';

    安装修改配置文件起动服务 验证

     [root@vh06 ~]# yum install -y keepalived

     [root@vh06 ~]# vim /etc/keepalived/keepalived.conf

    vip改为192.168.4.200,后续配置全部删除,其他不变

    [root@vh02 ~]# scp /etc/keepalived/keepalived.conf 192.168.4.3:/etc/keepalived/

    vh03的配置文件,角色改为SLAVE,优先级改为90

     [root@vh06 ~]# systemctl start keepalived.service

     [root@vh06 ~]# ip address show eth0  出现192.168.4.200(活跃)

     [root@vh06 ~]# ip a  s  eth0  不会出现192.168.4.200

    [root@vh05 ~]# mysql -h'192.168.4.10' -uchen -p123456

    3.  mysql互为主从同步

    用户授权(同步数据的权限)

    mysql> grant  replication  slave  on  *.*  to  admin@"192.168.4.7"  identified  by "123456";

    mysql> select user,host  from  mysql.user;

    #vim /etc/my.cnf

    server_id=06/07  

    log_bin=master06/07

    binlog_format="mixed"

    log_slave_updates

    #systemctl restart mysqld

    mysql> show  master  status;     

    从数据库服务器的配置

    mysql> change master  to  

    master_host="192.168.4.6/7",    master_user="chen",          

    master_password="123456",    master_log_file="master55.000001",

    master_log_pos=154;

    mysql> start slave;

    mysql>show slave statusG;

     验证

    [root@vh05 ~]# mysql -h'192.168.4.10' -uchen -p123456

    六、集群调度软件对比

    Nginx分析

    优点:工作在7层,可以针对http做分流策略;正则表达式比haproxy强大;安装、配置、测试简单,通过日志可以解决多数问题;并发量可以达到几万次;nginx还可以作为web服务器使用

    缺点:仅支持httphttpsmail协议,应用面小;监控检查仅通过端口,无法使用url检查

    LVS分析

    优点:负载能力强,工作在4层,对内存、CPU消耗低;配置性低,没有太多可配置性,减少认为错误;应用面广,几乎可以为所有应用提供负载均衡

    缺点:不支持正则表达式,不能实现动静分离;如果网站架构庞大,LVS-DR配置比较繁琐

    HAProxy分析

    优点:支持sessioncookie功能;可以通过url进行健康检查;效率、负载均衡速度,高于nginx,低于LVSHAProxy支持TCP,可以对mysql进行负载均衡;调度算法丰富

    缺点:正则弱于nginx;日志依赖于syslogd,不支持apache日志

    Top 

    NSD CLUSTER DAY03

    配置HAProxy负载平衡集群 

    Keepalived高可用服务器 

    Keepalived+LVS服务器 

    1 配置HAProxy负载平衡集群

    1.1 问题

    准备三台Linux服务器,两台做Web服务器,一台安装HAProxy,实现如下功能:

    客户端访问HAProxyHAProxy分发请求到后端Real Server

    要求HAProxy可以根据Cookie为客户端分配固定后端服务器

    开启HAProxy监控页面,及时查看调度器状态

    设置HAProxy为开机启动

    1.2 方案

    使用3台虚拟机,1台作为HAProxy调度器、2台作为Real Server、物理机作为客户端,拓扑结构如图-1所示。

    -1

    1.3 步骤

    实现此案例需要按照如下步骤进行。

    步骤一:配置后端Web服务器

    1)配置两台Web服务器网络参数

    [root@web1 ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0

    DEVICE=eth0

    ONBOOT=yes

    BOOTPROTO=static

    IPADDR=192.168.0.1

    NETMASK=255.255.255.0

    GATEWAY=192.168.0.254

    DNS1=202.106.0.10

    [root@web1 ~]# service network restart

    [root@web1 ~]# iptables -F

    [root@web1 ~]# service iptables save

    [root@web2 ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0

    DEVICE=eth0

    ONBOOT=yes

    BOOTPROTO=static

    IPADDR=192.168.0.2

    NETMASK=255.255.255.0

    GATEWAY=192.168.0.254

    DNS1=202.106.0.10

    [root@web2 ~]# systemctl restart NetworkManager

    2)设置后端Web服务

    [root@web1 ~]# yum -y install httpd

    [root@web1 ~]# systemctl start httpd

    [root@web1 ~]# echo “192.168.0.1” > /var/www/html/index.html

    [root@web2 ~]# yum -y install httpd

    [root@web2 ~]# systemctl start httpd

    [root@web2 ~]# echo “192.168.0.2” > /var/www/html/index.html

    步骤二:部署HAProxy服务器

    1)配置网络,安装软件

    [root@haproxy ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0

    DEVICE=eth0

    ONBOOT=yes

    BOOTPROTO=static

    IPADDR=202.114.106.20

    [root@haproxy ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth1

    DEVICE=eth0

    ONBOOT=yes

    BOOTPROTO=static

    IPADDR=192.168.0.254

    NETMASK=255.255.255.0

    DNS1=202.106.0.20

    [root@haproxy ~]# systemctl restart NetworkManager

    [root@haproxy ~]# sed -i '/ip_forward/s/0/1/'  sysctl.conf  //开启路由转发

    [root@haproxy ~]# sysctl -p

    [root@haproxy ~]# yum -y install haproxy

    2)修改配置文件

    [root@haproxy ~]# vim /etc/haproxy/haproxy.cfg

    global

     log 127.0.0.1 local2   ###[err warning info debug]

     chroot /usr/local/haproxy

     pidfile /var/run/haproxy.pid ###haproxypid存放路径

     maxconn 4000     ###最大连接数,默认4000

     user haproxy

     group haproxy

     daemon       ###创建1个进程进入deamon模式运行

    defaults

     mode http    ###默认的模式mode { tcp|http|health } log global   ###采用全局定义的日志

     option dontlognull  ###不记录健康检查的日志信息

     option httpclose  ###每次请求完毕后主动关闭http通道

     option httplog   ###日志类别http日志格式

     option forwardfor  ###后端服务器可以从Http Header中获得客户端ip

     option redispatch  ###serverid服务器挂掉后强制定向到其他健康服务器

     timeout connect 10000 #如果backend没有指定,默认为10s

     timeout client 300000 ###客户端连接超时

     timeout server 300000 ###服务器连接超时

     maxconn  60000  ###最大连接数

     retries  3   ###3次连接失败就认为服务不可用,也可以通过后面设置

    listen stats

        bind 0.0.0.0:1080   #监听端口

      stats refresh 30s   #统计页面自动刷新时间

      stats uri /stats   #统计页面url

        stats realm Haproxy Manager #统计页面密码框上提示文本

      stats auth admin:admin  #统计页面用户名和密码设置

      #stats hide-version   #隐藏统计页面上HAProxy的版本信息

    listen  websrv-rewrite 0.0.0.0:80

            cookie  SERVERID rewrite

            balance roundrobin

            server  web1 192.168.20.101:80 cookie

            app1inst1 check inter 2000 rise 2 fall 5

            server  web2 192.168.20.102:80 cookie

            app1inst2 check inter 2000 rise 2 fall 5

    3)启动服务器并设置开机启动

    [root@haproxy ~]# systemctl start haproxy

    [root@haproxy ~]# systemctl enable haproxy

    步骤三:客户端验证

    客户端配置与HAProxy相同网络的IP地址,并使用火狐浏览器访问http://202.114.106.20,测试调度器是否正常工作,客户端访问http://202.114.106.20/haproxy-admin测试状态监控页面是否正常。

    2 Keepalived高可用服务器

    2.1 问题

    准备三台Linux服务器,两台做Web服务器,并部署Keepalived高可用软件,一台作为客户端主机,实现如下功能:

    使用Keepalived实现web服务器的高可用

    Web服务器IP地址分别为172.16.0.10172.16.0.20

    Web服务器的漂移VIP地址为172.16.0.1

    客户端通过访问VIP地址访问Web页面

    2.2 方案

    使用3台虚拟机,2台作为Web服务器,并部署Keepalived、1台作为客户端,拓扑结构如图-2所示。

    -2

    2.3 步骤

    实现此案例需要按照如下步骤进行。

    步骤一:配置网络环境

    1)设置Web服务器网络参数

    [root@web1 ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0

    DEVICE=eth0

    ONBOOT=yes

    BOOTPROTO=static

    IPADDR=172.16.0.10

    NETMASK=255.255.255.0

    GATEWAY=192.168.0.254

    DNS1=202.106.0.20

    [root@web1 ~]# systemctl restart NetworkManager

     [root@web2 ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0

    DEVICE=eth0

    ONBOOT=yes

    BOOTPROTO=static

    IPADDR=172.16.0.20

    NETMASK=255.255.255.0

    GATEWAY=192.168.0.254

    DNS1=202.106.0.20

    [root@web2 ~]# systemctl restart NetworkManager

    2)自定义Web页面

    [root@web1 ~]# echo “172.16.0.10” > /var/www/html/index.html

    [root@web2 ~]# echo “172.16.0.20” > /var/www/html/index.html

    3)启动Web服务器软件

    [root@web1 ~]# systemctl start httpd

    [root@web2 ~]# systemctl start httpd

    步骤二:安装Keepalived软件

    注意:两台Web服务器做相同的操作。

    [root@web1 ~]# yum install -y keepalived

    [root@web2 ~]# yum install -y keepalived

    步骤三:部署Keepalived服务

    1)修改web1服务器Keepalived配置文件

    [root@web1 ~]# vim /etc/keepalived/keepalived.conf

    global_defs {

      notification_email {

        admin@tarena.com.cn                //设置报警收件人邮箱

      }

      notification_email_from ka@localhost    //设置发件人

      smtp_server 127.0.0.1                //定义邮件服务器

      smtp_connect_timeout 30

      router_id  web1                        //设置路由ID

    }

    vrrp_instance VI_1 {

      state MASTER                             //主服务器为MASTER

      interface eth0                        //定义网络接口

      virtual_router_id 50                    //主辅VRID号必须一致

      priority 100                         //服务器优先级

      advert_int 1

      authentication {

        auth_type pass

        auth_pass forlvs                       //主辅服务器密码必须一致

      }

      virtual_ipaddress {  172.16.0.1  }

    }

    2)修改web2服务器Keepalived配置文件

    [root@web1 ~]# vim /etc/keepalived/keepalived.conf

    global_defs {

      notification_email {

        admin@tarena.com.cn                //设置报警收件人邮箱

      }

      notification_email_from ka@localhost    //设置发件人

      smtp_server 127.0.0.1                //定义邮件服务器

      smtp_connect_timeout 30

      router_id  web2                        //设置路由ID

    }

    vrrp_instance VI_1 {

      state SLAVE                             //从服务器为SLAVE

      interface eth0                        //定义网络接口

      virtual_router_id 50                    //主辅VRID号必须一致

      priority 50                             //服务器优先级

      advert_int 1

      authentication {

        auth_type pass

        auth_pass forlvs                       //主辅服务器密码必须一致

      }

      virtual_ipaddress {  172.16.0.1  }

    }

    3)启动服务

    [root@web1 ~]# systemctl start keepalived

    [root@web2 ~]# systemctl start keepalived

    步骤四:测试

    1)登录两台Web服务器查看VIP信息

    [root@web1 ~]# ip addr show

    [root@web2 ~]# ip addr show

    2) 客户端访问

    客户端使用curl命令连接http://172.16.0.1,查看Web页面;关闭Web1服务器的网卡,客户端再次访问http://172.16.0.1,验证是否可以正常访问服务。

    3 Keepalived+LVS服务器

    3.1 问题

    使用Keepalived为LVS调度器提供高可用功能,防止调度器单点故障,为用户提供Web服务:

    路由器对外公网IP地址为202.114.106.20

    路由器内网IP地址为192.168.0.254

    路由器需要设置SNATDNAT功能

    LVS1调度器真实IP地址为192.168.0.10

    LVS2调度器真实IP地址为192.168.0.20

    服务器VIP地址设置为192.168.0.253

    真实Web服务器地址分别为192.168.0.1192.168.0.2

    使用加权轮询调度算法,真实服务器权重与其IP地址末尾数一致

    3.2 方案

    使用5台虚拟机,1台作为Linux路由器、2台作为LVS调度器、2台作为Real Server、物理机作为客户端,拓扑结构如图-3所示。

    -3

    3.3 步骤

    实现此案例需要按照如下步骤进行。

    步骤一:配置网络环境

    1)设置Web服务器网络参数

    [root@web1 ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0

    DEVICE=eth0

    ONBOOT=yes

    BOOTPROTO=static

    IPADDR=192.168.0.1

    NETMASK=255.255.255.0

    GATEWAY=192.168.0.254

    DNS1=202.106.0.20

    [root@web1 ~]# vim /etc/sysconfig/network-scripts/ifcfg-lo:0

    DEVICE=lo:0

    ONBOOT=yes

    BOOTPROTO=static

    IPADDR=192.168.0.253

    NETMASK=255.255.255.255

    [root@web1 ~]# vim /etc/sysctl.conf

    .. ..

    net.ipv4.conf.all.arp_ignore = 1

    net.ipv4.conf.lo.arp_ignore = 1

    net.ipv4.conf.lo.arp_announce = 2

    net.ipv4.conf.all.arp_announce = 2

    [root@web1 ~]# sysctl -p

    [root@web1 ~]# systemctl restart NetworkManager

    [root@web2 ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0

    DEVICE=eth0

    ONBOOT=yes

    BOOTPROTO=static

    IPADDR=192.168.0.2

    NETMASK=255.255.255.0

    GATEWAY=192.168.0.254

    DNS1=202.106.0.20

    [root@web2 ~]# vim /etc/sysconfig/network-scripts/ifcfg-lo:0

    DEVICE=lo:0

    ONBOOT=yes

    BOOTPROTO=static

    IPADDR=192.168.0.253

    NETMASK=255.255.255.255

    [root@web2 ~]# vim /etc/sysctl.conf

    .. ..

    net.ipv4.conf.all.arp_ignore = 1

    net.ipv4.conf.lo.arp_ignore = 1

    net.ipv4.conf.lo.arp_announce = 2

    net.ipv4.conf.all.arp_announce = 2

    [root@web2 ~]# sysctl -p

    [root@web2 ~]# systemctl restart NetworkManager

    2)自定义Web页面

    [root@web1 ~]# echo “192.168.0.1” > /var/www/html/index.html

    [root@web2 ~]# echo “192.168.0.2” > /var/www/html/index.html

    3)启动Web服务器软件

    [root@web1 ~]# systemctl start httpd;systemctl enable httpd

    [root@web2 ~]# systemctl start httpd;systemctl enable httpd

    4)设置LVS调度器网络参数

    [root@lvs1 ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0

    DEVICE=eth0

    ONBOOT=yes

    BOOTPROTO=static

    IPADDR=192.168.0.10

    NETMASK=255.255.255.0

    GATEWAY=192.168.0.254

    DNS1=202.106.0.20

    [root@lvs1 ~]# systemctl restart NetworkManager

    [root@lvs2 ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0

    DEVICE=eth0

    ONBOOT=yes

    BOOTPROTO=static

    IPADDR=192.168.0.20

    NETMASK=255.255.255.0

    GATEWAY=192.168.0.254

    DNS1=202.106.0.20

    [root@lvs2 ~]# systemctl restart NetworkManager

    5)设置Linux路由器网络参数

    [root@router ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0

    DEVICE=eth0

    ONBOOT=yes

    BOOTPROTO=static

    IPADDR=202.114.106.20

    DNS1=202.106.0.20

    [root@router ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth1

    DEVICE=eth0

    ONBOOT=yes

    BOOTPROTO=static

    IPADDR=192.168.0.254

    NETMASK=255.255.255.0

    DNS1=202.106.0.20

    [root@router ~]# systemctl restart NetworkManager

    6)设置Linux路由器

    [root@router ~]# sed -i '/ip_forward/s/0/1/'  sysctl.conf  //开启路由转发

    [root@router ~]# sysctl -p

    步骤二:调度器安装Keepalived与ipvsadm软件

    注意:两台LVS调度器执行相同的操作。

    安装软件

    [root@lvs1 ~]# yum install -y keepalived

    [root@lvs1 ~]# systemctl enable keepalived

    [root@lvs1 ~]# yum install -y ipvsadm

    [root@lvs2 ~]# yum install -y keepalived

    [root@lvs2 ~]# systemctl enable keepalived

    [root@lvs2 ~]# yum install -y ipvsadm

    步骤三:部署Keepalived实现LVS-DR模式调度器的高可用

    1)LVS1调度器设置Keepalived,并启动服务

    [root@lvs1 ~]# vim /etc/keepalived/keepalived.conf

    global_defs {

      notification_email {

        admin@tarena.com.cn                //设置报警收件人邮箱

      }

      notification_email_from ka@localhost    //设置发件人

      smtp_server 127.0.0.1                //定义邮件服务器

      smtp_connect_timeout 30

      router_id  lvs1                        //设置路由ID

    }

    vrrp_instance VI_1 {

      state MASTER                             //主服务器为MASTER

      interface eth0                        //定义网络接口

      virtual_router_id 50                    //主辅VRID号必须一致

      priority 100                         //服务器优先级

      advert_int 1

      authentication {

        auth_type pass

        auth_pass forlvs                       //主辅服务器密码必须一致

      }

      virtual_ipaddress {  192.168.0.253  }

    }

    virtual_server 192.168.0.253 80 {       //设置VIP192.168.0.253

      delay_loop 6

      lb_algo wrr                          //设置LVS调度算法为RR

      lb_kind DR                               //设置LVS的模式为DR

      persistence_timeout 1

      protocol TCP

      real_server 192.168.0.1 80 {

        weight 1                          //设置权重为1

        TCP_CHECK {

        connect_timeout 3

        nb_get_retry 3

        delay_before_retry 3

        }

      }

     real_server 192.168.0.2 80 {

        weight 2                          //设置权重为2

        TCP_CHECK {

        connect_timeout 3

        nb_get_retry 3

        delay_before_retry 3

        }

      }

    [root@lvs1 ~]# systemctl start keepalived

    [root@lvs1 ~]# ipvsadm -Ln

    2)LVS2调度器设置Keepalived

    [root@lvs1 ~]# vim /etc/keepalived/keepalived.conf

    global_defs {

      notification_email {

        admin@tarena.com.cn                //设置报警收件人邮箱

      }

      notification_email_from ka@localhost    //设置发件人

      smtp_server 127.0.0.1                //定义邮件服务器

      smtp_connect_timeout 30

      router_id  lvs2                        //设置路由ID

    }

    vrrp_instance VI_1 {

      state SLAVE                             //从服务器为SLAVE

      interface eth0                        //定义网络接口

      virtual_router_id 50                    //主辅VRID号必须一致

      priority 50                         //服务器优先级

      advert_int 1

      authentication {

        auth_type pass

        auth_pass forlvs                       //主辅服务器密码必须一致

      }

      virtual_ipaddress {  192.168.0.253  }

    }

    virtual_server 192.168.0.253 80 {       //设置VIP192.168.0.253

      delay_loop 6

      lb_algo wrr                          //设置LVS调度算法为RR

      lb_kind DR                               //设置LVS的模式为DR

      persistence_timeout 1

      protocol TCP

      real_server 192.168.0.1 80 {

        weight 1                          //设置权重为1

        TCP_CHECK {

        connect_timeout 3

        nb_get_retry 3

        delay_before_retry 3

        }

      }

     real_server 192.168.0.2 80 {

        weight 2                          //设置权重为2

        TCP_CHECK {

        connect_timeout 3

        nb_get_retry 3

        delay_before_retry 3

        }

      }

    [root@lvs2 ~]# systemctl start keepalived

    [root@lvs2 ~]# ipvsadm -Ln

    步骤四:客户端测试

    客户端使用curl命令反复连接http://202.114.106.20,查看访问的页面是否会轮询到不同的后端真实服务器。

  • 相关阅读:
    剑指Offer-11.二进制中1的个数(C++/Java)
    剑指Offer-10.矩形覆盖(C++/Java)
    剑指Offer-9.变态跳台阶(C++/Java)
    UVA 1608 Non-boring sequence 不无聊的序列(分治,中途相遇)
    UVA1607 Gates 与非门电路 (二分)
    UVA 1451 Average平均值 (数形结合,斜率优化)
    UVA 1471 Defense Lines 防线 (LIS变形)
    UVA 1606 Amphiphilic Carbon Molecules 两亲性分子 (极角排序或叉积,扫描法)
    UVA 11134 FabledRooks 传说中的车 (问题分解)
    UVA 1152 4 Values Whose Sum is Zero 和为0的4个值 (中途相遇)
  • 原文地址:https://www.cnblogs.com/fuzhongfaya/p/8953251.html
Copyright © 2011-2022 走看看