• keepalived+Haproxy搭建高可用Web群集


    Haproxy是目前比较流行的一种群集调度工具,同类群集调度工具有很多,如LVS和Nginx。相比较而言,LVS性能最好,但是搭建相对复杂,搭建LVS群集可以参考博文:搭建:LVS+Keepalived高可用Web服务群集环境;Nginx的upstream模块支持群集功能,但是相对群集节点健康检查功能不强,性能没有Haproxy好,更多的是应用在企业内网环境中。Nginx群集可以参考博文:centos 7部署Tomcat及其负载均衡配置详解

    上述几个web群集调度器属于软件类型的,还有很多硬件群集调度器,硬件一般使用比较多的是F5,也有很多公司使用国产的一些产品,如梭子鱼、绿盟等。硬件群集调度器有一些比较显而易见的缺点,如果说出问题了,还要需要厂家的技术支持,厂家维护时还需要我们的错误日志,在出现问题到问题解决这段时间,可能一个月的时间都过去了。若是使用软件型的群集调度器,那么只要我们运维人员技术过硬,发现问题到解决问题,很快的。

    关于Haproxy常用的调度算法、配置文件及参数优化可以参考博文:centos 7 之haproxy的配置文件详解及haproxy参数调优

    现在以下面的环境,进行搭建一个keepalived的高可用web群集(关于高可用存储服务器,这里就省略了,将在以后的文章写出如何搭建高可用的存储服务器),环境如下:

    keepalived+Haproxy搭建高可用Web群集

    一、准备工作:

    1、调通网络,防火墙放行相关流量(我这里直接将防火墙关闭了);

    2、准备系统映像,配置本地yum(自行配置)。

    3、下载haproxy源码包,可以从我提供的网盘链接下载使用:haproxy下载链接
    提取码:54iv 。

    4、web网站使用apache、Nginx、Tomcat搭建都可,只要可以访问就行,这里自行搭建吧,我为了测试方便,直接使用系统映像自带的httpd服务,web网站搭建可以参考:基于Linux搭建Apache网站服务配置详解基于centos 7搭建Nginx网站服务器

    5、我这里使用的全部是centos 7系统,注意,该环境不是生产环境,若是在生产环境中,肯定还有后端存储来存放网页文件,web服务器读取存储服务器上的网页返回给客户端。这样才可保证网页内容的一致性。

    二、开始搭建:

    1、配置keepalived+haproxy主服务器:

    [root@haproxy1 ~]# yum -y install keepalived pcre-devel bzip2-devel           
    #挂载系统映像,安装相关软件包
    [root@haproxy1 media]# tar zxf haproxy-1.5.19.tar.gz -C /usr/src/     #解包
    [root@haproxy1 media]# cd /usr/src/haproxy-1.5.19/       #切换至源码包目录
    [root@haproxy1 haproxy-1.5.19]# make TARGET=linux26 && make install      
    #编译安装,TARGET配置项表示64位系统。haproxy无须./configure配置。
    [root@haproxy1 haproxy-1.5.19]# mkdir /etc/haproxy             #创建配置文件目录
    [root@haproxy1 haproxy-1.5.19]# cp examples/haproxy.cfg /etc/haproxy/      
    #将源码包自带的配置文件目录复制过来。
    [root@haproxy1 haproxy-1.5.19]# cd
    [root@haproxy1 ~]# vim /etc/haproxy/haproxy.cfg         
    #编辑主配置文件,根据当前环境,将主配置文件修改如下:
    # this config needs haproxy-1.1.28 or haproxy-1.2.1
    
    global
            log /dev/log    local0 info
            log /dev/log    local0 notice
            #log loghost    local0 info
            maxconn 4096
            #chroot /usr/share/haproxy             #将该行注释掉
            uid 99
            gid 99
            daemon
            #debug
            #quiet
    
    defaults
            log     global
            mode    http
            option  httplog
            option  dontlognull
         retries 3
            redispatch
            maxconn 2000
            contimeout      5000
            clitimeout      50000
            srvtimeout      50000
    
    listen  webcluster 0.0.0.0:80    #webcluster为群集名称,可自定义,修改后面的端口号。
            option  httpchk /index.html
            balance roundrobin        #表示采用轮询算法。
            server  inst1 192.168.1.3:80 check inter 2000 fall 3             #web节点1
             server  inst2 192.168.1.4:80 check inter 2000 fall 3  #web节点2,注意相关端口号
    #注意,在配置文件下,有很多listen配置项,找到和我们需要的差不多的listen项复制到
    #defaults配置项下,然后将后面所有的配置项删除,若不删除,可能服务启动时会报错。
    [root@haproxy1 ~]# cd /usr/src/haproxy-1.5.19/examples/           #切换至指定目录
    [root@haproxy1 examples]# cp haproxy.init /etc/init.d/haproxy    #复制服务控制脚本
    [root@haproxy1 examples]# ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy
    #创建软连接
    [root@haproxy1 examples]# chmod +x /etc/init.d/haproxy          #赋予文件执行权限
    [root@haproxy1 examples]# chkconfig --add /etc/init.d/haproxy       #添加为系统服务
    [root@haproxy1 examples]# systemctl restart haproxy              #启动haproxy服务
    [root@haproxy1 examples]# netstat -anpt | grep 80                #查看是否在监听
    #haproxy服务默认监听80端口
    tcp        0      0 0.0.0.0:80    0.0.0.0:*      LISTEN  12640/haproxy   
    [root@haproxy1 ~]# vim /etc/rsyslog.d/haproxy.conf              #配置haproxy日志,写入下面内容
    
    if ($programname == 'haproxy' and $syslogseverity-text == 'info') then -/var/log/haproxy/haproxy-info.log
    & ~ 
    if ($programname == 'haproxy' and $syslogseverity-text == 'notice') then -/var/log/haproxy/haproxy-notice.log
    & ~ 
    #写入后,保存退出即可。
    [root@haproxy1 ~]# systemctl restart rsyslog                  #重启日志服务
    #以下部分开始配置keepalived,haproxy已经配置完成了。
    #现在client可以访问该服务器IP地址,看看是否可以刷到两个web服务器提供的网页。
    #需要多刷新几次,web服务器准备不一样的网页才可看到效果。
    [root@haproxy1 ~]# vim /etc/keepalived/keepalived.conf    #编辑keepalived配置文件
    #只改动以下标注的配置项即可
    ! Configuration File for keepalived
    
    global_defs {
       notification_email {
         acassen@firewall.loc
         failover@firewall.loc
         sysadmin@firewall.loc
       }
       notification_email_from Alexandre.Cassen@firewall.loc
       smtp_server 192.168.200.1
       smtp_connect_timeout 30
       router_id LVS_DEVEL1             #定义服务器名称,不可与其他服务器名称冲突
    }
    
    vrrp_instance VI_1 {
        state MASTER
        interface ens33            #修改承载漂移IP地址的物理网卡
        virtual_router_id 51
        priority 100
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 1111
        }   
        virtual_ipaddress {
        192.168.1.100              #指定漂移IP地址
        }
    }   
    #配置项至此保存退出就可以了,将后面的所有配置项删除,以免影响服务启动。
    [root@haproxy1 ~]# systemctl restart keepalived               #重启keepalived服务。

    2、配置keepalived+haproxy备份服务器:

    [root@haproxy2 ~]# systemctl stop firewalld          #关闭防火墙
    [root@haproxy2 ~]# yum -y install keepalived pcre-devel bzip2-devel
    #挂载系统映像,安装相关软件包
    [root@haproxy2 media]# tar zxf haproxy-1.5.19.tar.gz -C /usr/src            #解包
    [root@haproxy2 media]# cd /usr/src/haproxy-1.5.19/
    [root@haproxy2 haproxy-1.5.19]# make TARGET=linux26 && make install    #安装
    [root@haproxy2 haproxy-1.5.19]# cd
    [root@haproxy2 ~]# mkdir /etc/haproxy            #创建配置文件目录
    [root@haproxy2 ~]# scp root@192.168.1.1:/etc/haproxy/haproxy.cfg /etc/haproxy/
    #直接将主服务器的haproxy配置文件复制过来
    root@192.168.1.1 s password:          #输入主服务器的用户密码
    haproxy.cfg                                 100%  566   460.5KB/s   00:00    
    [root@haproxy2 ~]# scp root@192.168.1.1:/etc/init.d/haproxy /etc/init.d/haproxy
    root@192.168.1.1s password: 
    haproxy                                     100% 2553     2.1MB/s   00:00    
    [root@haproxy2 ~]# ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy        #创建链接文件
    [root@haproxy2 ~]# chkconfig --add /etc/init.d/haproxy            #添加为系统服务
    [root@haproxy2 ~]# systemctl start haproxy              #启动服务
    [root@haproxy1 examples]# netstat -anpt | grep 80                #查看是否在监听
    #haproxy服务默认监听80端口
    tcp        0      0 0.0.0.0:80    0.0.0.0:*      LISTEN  12640/haproxy   
    [root@haproxy1 ~]# vim /etc/rsyslog.d/haproxy.conf              #配置haproxy日志,写入下面内容
    
    if ($programname == 'haproxy' and $syslogseverity-text == 'info') then -/var/log/haproxy/haproxy-info.log
    & ~ 
    if ($programname == 'haproxy' and $syslogseverity-text == 'notice') then -/var/log/haproxy/haproxy-notice.log
    & ~ 
    #写完保存退出即可。
    [root@haproxy2 ~]# systemctl restart rsyslog                  #重启日志服务
    [root@haproxy2 ~]# scp root@192.168.1.1:/etc/keepalived/keepalived.conf /etc/keepalived/
    #将主服务器的keepalived配置文件复制过来
    root@192.168.1.1s password:                  #输入主服务器的用户密码
    keepalived.conf                             100%  630   622.3KB/s   00:00    
    [root@haproxy2 ~]# vim /etc/keepalived/keepalived.conf 
    #修改下面三个配置项:
                         ................
    router_id LVS_DEVEL2       #将服务器名称改一下,别和主服务器冲突
                         ..............
    state BACKUP            #将状态改为BACKUP
                         ...............
    priority 90            #修改一下优先级,要比主服务器优先级低
    
    #改完以上三行,保存退出即可。
    [root@haproxy2 ~]# systemctl start keepalived           #启动keepalived服务
    

    至此,keepalived+haproxy就配置完成了,可以使用client进行访问测试,模拟主服务器宕机等问题,测试高可用。

    [root@haproxy1 ~]# tail -f /var/log/haproxy/haproxy-info.log        #查看haproxy访问日志
  • 相关阅读:
    IndexDB
    实现es6中的set和map
    视口viewport
    nginx入门
    http协议
    图像格式
    promise
    js中this指向
    CSS 7阶层叠水平
    C# 一个方法如何返回多个值
  • 原文地址:https://www.cnblogs.com/ExMan/p/12190110.html
Copyright © 2020-2023  润新知