热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Haproxy+Keepalived配置WEB负载均衡及动静分离

一、简介二、环境介绍三、安装配置后端服务器四、安装配置Haproxy五、安装配置Keepalived六、验证服务一、简介HAProxy简介:HAProxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy运行在时下的硬件上,完全可以

一、简介

二、环境介绍

三、安装配置后端服务器

四、安装配置Haproxy

五、安装配置Keepalived

六、验证服务

一、简介

HAProxy简介:

HAProxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy运行在时下的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的web服务器不被暴露到网络上

HAProxy实现了一种事件驱动、单一进程模型,此模型支持非常大的并发连接数。多进程或多线程模型受内存限制 、系统调度器限制以及无处不在的锁限制,很少能处理数千并发连接。事件驱动模型因为在有更好的资源和时间管理的用户端(User-Space) 实现所有这些任务,所以没有这些问题。此模型的弊端是,在多核系统上,这些程序通常扩展性较差。这就是为什么他们必须进行优化以 使每个CPU时间片(Cycle)做更多的工作

Keepalived简介:

KeepAlived 是一个类似于layer3, 4 & 5交换机制的软件, 是一个高可用解决方案,通过虚拟IP地址和心跳检测对方状态来实现高可用功能。Keepalived是由两台服务器分别指定Master与Backup两个角色,而指定Master的优先级比Backup的高;所以默认情况下虚拟IP会绑定到Master服务器上,对外提供服务。而Master、Backup服务器会在一定的时间间隔向对方发送心跳信息来检测对方的存活状态,时间间隔一般为2秒钟可以修改,如果Backup发现Master宕机,那么Backup会发送ARP包到网关,然后把虚拟IP绑定到自己的网卡上,此时Backup对外提供服务,实现了自动化的故障转移,当Master恢复的时会重新接管所有资源

二、环境介绍

[root@lamp ~]# yum -y install httpd php mysql-server
######创建测试页
[root@lamp ~]# vim /var/www/html/index.php
<h1>LAMP: 172.16.14.5h1>

2、安装WEB1服务器的HTTPD服务并访问测试

[root@WEB1 ~]# yum -y install httpd
[root@WEB1 ~]# service httpd start
[root@WEB1 ~]# chkconfig httpd on
[root@WEB1 ~]# echo "

WEB1:172.16.14.3

" > /var/www/html/index.html

3、安装WEB2服务器的HTTPD服务并访问测试

[root@WEB2 ~]# yum -y install httpd
[root@WEB2 ~]# service httpd start
[root@WEB2 ~]# chkconfig httpd on
[root@WEB2 ~]# echo "

WEB2:172.16.14.4

" > /var/www/html/index.html

######安装开发环境
[root@HA1 ~]# yum -y install gcc gcc-c++
[root@HA1 ~]# tar xf haproxy-1.4.24.tar.gz
[root@HA1 ~]# cd haproxy-1.4.24
[root@HA1 haproxy-1.4.24]# uname -r2.6.32-358.el6.x86_64
[root@HA1 haproxy-1.4.24]# make TARGET=linux26 ARCH=x86_64
[root@HA1 haproxy-1.4.24]# make install######注释:TARGET指定内核版本,而uname -r是查看内核版本;ARCH指定CPU架构
----------------------------------------------------------------------
######为Haproxy提供主配置文件与服务脚本,并将其添加到系统服务
[root@HA1 haproxy-1.4.24]# mkdir /etc/haproxy
[root@HA1 haproxy-1.4.24]# cp examples/haproxy.cfg /etc/haproxy
[root@HA1 haproxy-1.4.24]# cp examples/haproxy.init /etc/init.d/haproxy
[root@HA1 haproxy-1.4.24]# ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy
[root@HA1 haproxy-1.4.24]# chmod +x /etc/init.d/haproxy
[root@HA1 haproxy-1.4.24]# chkconfig --add haproxy

2、修改主配置文件

######创建Haproxy的工作目录
[root@HA1 ~]# mkdir /usr/share/haproxy
[root@HA1 ~]# vim /etc/haproxy/haproxy.cfg# this config needs haproxy-1.1.28 or haproxy-1.2.1
globallog127.0.0.1local0#日志配置,所有日志都记录在本地,通过local0输出log127.0.0.1   local1 notice
    maxconn 25600#最大连接数chroot /usr/share/haproxy     #改变Haproxy的工作目录uid 99#用户的UIDgid 99#用户的GIDnbproc 1#进程数据(可以设置多个)daemon                        #以后台守护进程方式运行Haproxy#debug                        #是否开启调试
defaultslog global         
    mode    http                  #默认使用协议,可以为{http|tcp|health} http:是七层协议 tcp:是四层 health:只返回OKoption  httplog               #详细记录http日志option  dontlognull           #不记录健康检查的日志信息retries 3#3次连接失败则认为服务不可用option  redispatch            #ServerID对应的服务器宕机后,强制定向到其他运行正常的服务器maxconn 30000#默认的最大连接数contimeout  5000#连接超时clitimeout  50000#客户端超时srvtimeout  50000#服务器超时timeout check   1s#心跳检测超时timeout http-request    10s#默认http请求超时时间timeout queue           1m#默认队列超时时间timeout connect10s#默认连接超时时间timeout client          1m#默认客户端超时时间timeout server          1m#默认服务器超时时间timeout http-keep-alive 10s#默认持久连接超时时间listen  stats
    mode httpbind0.0.0.0:8090#指定IP地址与Portstats enable                  #开启Haproxy统计状态stats refresh 3s#统计页面自动刷新时间间隔stats hide-version            #状态页面不显示版本号stats uri   /allen            #统计页面的uri为"/allen"stats realm Haproxy\ allen    #统计页面认证时提示内容信息stats auth  admin:admin       #统计页面的用户名与密码stats admin if TRUE           #启用或禁用状态页面
frontend allen                    #定义前端服务器bind*:80mode http
    option httpclose              #每次请求完成主动关闭http连接option forwardfor             #后端服务器获取客户端的IP地址,可以从http header中获取acl url_static path_end -i .html .jpg .gif #定义ACL规则以如".html"结尾的文件;-i:忽略大小写acl url_dynamic path_end -i .php
    default_backend webservers    #客户端访问时默认调用后端服务器地址池use_backend lamp if url_dynamic #调用后端服务器并检查ACL规则是否被匹配
backend webservers                #定义后端服务器balance roundrobin            #定义算法;基于权重进行轮询server web1 172.16.14.3:80 check rise 2 fall 1 weight 2server web2 172.16.14.4:80 check rise 2 fall 1 weight 2
backend lamp
    balance source            #定义算法;源地址hash运算;类似于Nginx的ip_hashserver lamp 172.16.14.5:80 check rise 2 fall 1
----------------------------------------------------------------------
#####注释:check:启动对后端server的健康状态检测;rise:离线的server转换到正常状态成功检查的次数;fall:确认server从正常状态转换为不可用状态需要检查的次数;weight:权重,数量越大,超重越高

3、启动Haproxy服务并做访问测试

[root@HA1 ~]# service haproxy start

1、在HA1与HA2服务器上安装Keepalived

[root@HA1 ~]# yum -y install keepalived
[root@HA2 ~]# yum -y install keepalived

2、修改HA1服务器的主配置文件

[root@HA1 ~]# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
   notification_email {
    root@localhost
   }
   notification_email_from admin@allen.com
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_ALLEN
}
vrrp_script chk_proess {
    script "killall -0 haproxy"interval 1weight -2
}
vrrp_instance ha_1 {
    state MASTERinterfaceeth0virtual_router_id 56    priority 100    advert_int 1    authentication {auth_type PASS
        auth_pass 1056}
    virtual_ipaddress {172.16.14.10}
    track_script {
        chk_proess
    }
}
vrrp_instance ha_2 {
    state BACKUPinterfaceeth0virtual_router_id 58    priority 92    advert_int 1    authentication {auth_type PASS
        auth_pass 1058}
    virtual_ipaddress {172.16.14.11}
}

3、修改HA2服务器的主配置文件

[root@HA2 ~]# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
   notification_email {
    root@localhost
   }
   notification_email_from admin@allen.com
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_ALLEN
}
vrrp_script chk_proess {
    script "killall -0 haproxy"interval 1weight -2
}
vrrp_instance ha_1 {
    state BACKUPinterfaceeth0virtual_router_id 56    priority 99    advert_int 1    authentication {auth_type PASS
        auth_pass 1056}
    virtual_ipaddress {172.16.14.10}
}
vrrp_instance ha_2 {
    state MASTERinterfaceeth0virtual_router_id 58    priority 93    advert_int 1    authentication {auth_type PASS
        auth_pass 1058}
    virtual_ipaddress {172.16.14.11}
    track_script {
        chk_proess
    }
}

4、启动Keepalived服务并查看HA1与HA2服务器上的虚拟IP地址

[root@HA1 ~]# service keepalived start
[root@HA1 ~]# ip addr show eth02: eth0:  mtu 1500 qdisc pfifo_fast state UP qlen 1000link/ether 00:0c:29:2c:1a:24 brd ff:ff:ff:ff:ff:ff
    inet 172.16.14.1/16 brd 172.16.255.255 scope global eth0inet 172.16.14.10/32 scope global eth0inet6 fe80::20c:29ff:fe2c:1a24/64 scope link   valid_lft forever preferred_lft forever
------------------------------------------------------------------------
[root@HA2 ~]# service keepalived start
[root@HA2 ~]# ip addr show eth02: eth0:  mtu 1500 qdisc pfifo_fast state UP qlen 1000link/ether 00:0c:29:ec:f6:3f brd ff:ff:ff:ff:ff:ff
    inet 172.16.14.2/16 brd 172.16.255.255 scope global eth0inet 172.16.14.11/32 scope global eth0inet6 fe80::20c:29ff:feec:f63f/64 scope link   valid_lft forever preferred_lft forever

六、验证服务

1、访问验证服务器的负载均衡功能

3、假设前端服务器其中一台出现了故障,验证IP地址能否自动切换到备份服务器上

######停止HA1服务器的haproxy服务
[root@HA1 ~]# service haproxy stop
------------------------------------------------------------------------
######查看HA2服务器的IP地址
[root@HA2 ~]# ip addr show eth02: eth0:  mtu 1500 qdisc pfifo_fast state UP qlen 1000link/ether 00:0c:29:ec:f6:3f brd ff:ff:ff:ff:ff:ff
    inet 172.16.14.2/16 brd 172.16.255.255 scope global eth0inet 172.16.14.11/32 scope global eth0inet 172.16.14.10/32 scope global eth0inet6 fe80::20c:29ff:feec:f63f/64 scope link   valid_lft forever preferred_lft forever
注释:由上可见,虚拟IP地址已成功切换到HA2服务器

4、假如这里将服务器修复好重新上线,IP地址会切换回到原来的服务器,这里就不在验证;将HA2服务器上的haproxy或keepalived服务关闭亦是如此



推荐阅读
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 本文介绍了在SpringBoot中集成thymeleaf前端模版的配置步骤,包括在application.properties配置文件中添加thymeleaf的配置信息,引入thymeleaf的jar包,以及创建PageController并添加index方法。 ... [详细]
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
  • yum安装_Redis —yum安装全过程
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Redis—yum安装全过程相关的知识,希望对你有一定的参考价值。访问https://redi ... [详细]
  • 解决VS写C#项目导入MySQL数据源报错“You have a usable connection already”问题的正确方法
    本文介绍了在VS写C#项目导入MySQL数据源时出现报错“You have a usable connection already”的问题,并给出了正确的解决方法。详细描述了问题的出现情况和报错信息,并提供了解决该问题的步骤和注意事项。 ... [详细]
  • CentOS 7部署KVM虚拟化环境之一架构介绍
    本文介绍了CentOS 7部署KVM虚拟化环境的架构,详细解释了虚拟化技术的概念和原理,包括全虚拟化和半虚拟化。同时介绍了虚拟机的概念和虚拟化软件的作用。 ... [详细]
  • 众筹商城与传统商城的区别及php众筹网站的程序源码
    本文介绍了众筹商城与传统商城的区别,包括所售产品和玩法不同以及运营方式不同。同时还提到了php众筹网站的程序源码和方维众筹的安装和环境问题。 ... [详细]
  • Redis底层数据结构之压缩列表的介绍及实现原理
    本文介绍了Redis底层数据结构之压缩列表的概念、实现原理以及使用场景。压缩列表是Redis为了节约内存而开发的一种顺序数据结构,由特殊编码的连续内存块组成。文章详细解释了压缩列表的构成和各个属性的含义,以及如何通过指针来计算表尾节点的地址。压缩列表适用于列表键和哈希键中只包含少量小整数值和短字符串的情况。通过使用压缩列表,可以有效减少内存占用,提升Redis的性能。 ... [详细]
  • LVS实现负载均衡的原理LVS负载均衡负载均衡集群是LoadBalance集群。是一种将网络上的访问流量分布于各个节点,以降低服务器压力,更好的向客户端 ... [详细]
  • 2021最新总结网易/腾讯/CVTE/字节面经分享(附答案解析)
    本文分享作者在2021年面试网易、腾讯、CVTE和字节等大型互联网企业的经历和问题,包括稳定性设计、数据库优化、分布式锁的设计等内容。同时提供了大厂最新面试真题笔记,并附带答案解析。 ... [详细]
  • 本文介绍了在无法联网的情况下,通过下载rpm包离线安装zip和unzip的方法。详细介绍了如何搜索并下载合适的rpm包,以及如何使用rpm命令进行安装。 ... [详细]
  • Redis的默认端口、数据库使用和多端口配置
    本文介绍了Redis的默认端口、数据库使用和多端口配置的方法。通过选择不同的数据库和使用flushdb命令可以实现对不同数据库的访问和清除数据。同时,本文还介绍了在同一台机器上启用多个Redis实例的方法,并讨论了配置认证密码的步骤和注意事项。 ... [详细]
author-avatar
a171759015_753
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有