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

开发笔记:HAProxy基于KeepAlived实现Web高可用及动静分离

篇首语:本文由编程笔记#小编为大家整理,主要介绍了HAProxy基于KeepAlived实现Web高可用及动静分离相关的知识,希望对你有一定的参考价值。

篇首语:本文由编程笔记#小编为大家整理,主要介绍了HAProxy基于KeepAlived实现Web高可用及动静分离相关的知识,希望对你有一定的参考价值。



编辑



  • 马哥Linux运维(原创)


  • 徐凯强(文章整理)



作者介绍



马哥Linux运维
马哥linux运维专注于linux运维培训近八年,基础课程之外,还涉及hadoop、openstack、python、docker、ELK等众多领域,直接或间接受益学员已逾百万人次。



前言

软件负载均衡一般通过两种方式来实现:



  • 基于操作系统的软负载实现


  • 基于第三方应用的软负载实现


LVS是基于Linux操作系统实现的一种软负载,而HAProxy则是基于第三方应用实现的软负载。

HAProxy相比LVS的使用要简单很多,但跟LVS一样,HAProxy自己并不能实现高可用,一旦HAProxy节点故障,将会影响整个站点。

本文带来的是HAProxy基于KeepAlived实现Web高可用及动静分离。


相关介绍


HAProxy

HAProxy是一款提供高可用性、负载均衡以及基于TCP和HTTP应用的代理软件,HAProxy是完全免费的、借助HAProxy可以快速并且可靠的提供基于TCP和HTTP应用的代理解决方案。

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

HAProxy可以支持数以万计的并发连接,并且HAProxy的运行模式使得它可以很简单安全的整合进架构中,同时可以保护web服务器不被暴露到网络上。


KeepAlived

Keepalived采用VRRP(virtual router redundancy protocol,虚拟路由冗余协议)热备份协议,以软件的方式实现linux服务器的多机热备功能。

VRRP是针对路由器的一种备份解决方案——由多台路由器组成一个热备组。


高可用解决方案

实验拓扑
HAProxy基于KeepAlived实现Web高可用及动静分离

#系统环境:CentOS6.6
#Static Server:httpd
#Dynamic Servicer:LAMP

配置过程

HA集群配置前提



  • 时间同步


  • 基于主机名互相通信


  • SSH互信


时间同步,可用ntpdate向时间服务器同步

[root@node1 ~]# ntpdate cn.pool.ntp.org

基于主机名互相通信

[root@node1 ~]# vim /etc/hosts
172.16.10.123 node1.scholar.com node1
172.16.10.124 node2.scholar.com node2
[root@node1 ~]# vim /etc/sysconfig/network
HOSTNAME=node1.scholar.com
[root@node1 ~]# uname -n
node1.scholar.com
#两个节点都需如上操作

SSH互信

[root@node1 ~]# ssh-keygen -t rsa -P ''
[root@node1 ~]# ssh-copy-id -i .ssh/id_rsa.pub root@node2
[root@node2 ~]# ssh-keygen -t rsa -P ''
[root@node2 ~]# ssh-copy-id -i .ssh/id_rsa.pub root@node1
[root@node1 ~]# date; ssh node2 'date' #测试
Wed Jun 24 15:58:46 CST 2015
Wed Jun 24 15:58:46 CST 2015

安装所需程序

[root@node1 ~]# yum install keepalived haproxy -y
#两个节点都安装

配置KeepAlived

[root@node1 ~]# vim /etc/keepalived/keepalived.conf
vrrp_instance VI_1 { #定义VRRP实例,实例名自定义
state MASTER #指定Keepalived的角色,MASTER为主服务器,BACKUP为备用服务器
interface eth0 #指定HA监测的接口
virtual_router_id 51 #虚拟路由标识(1-255),在一个VRRP实例中主备服务器ID必须一样
priority 100 #优先级,数字越大越优先,主服务器优先级必须高于备服务器
advert_int 1 #设置主备之间同步检查时间间隔,单位秒
authentication { #设置验证类型和密码
auth_type PASS #验证类型
auth_pass ab007 #设置验证密码,同一实例中主备密码要保持一致
}
virtual_ipaddress { #定义虚拟IP地址
192.168.12.21
}
}
vrrp_instance VI_2 {
state BACKUP
interface eth0
virtual_router_id 61
priority 99
advert_int 1
authentication {
auth_type PASS
auth_pass sr200
}
virtual_ipaddress {
192.168.12.22
}
}

将配置文件同步给另一个节点

[root@node1 ~]# scp /etc/keepalived/keepalived.conf node2:/etc/keepalived/
keepalived.conf 100% 787 0.8KB/s 00:00

修改另一个节点配置文件

[root@node2 ~]# vim /etc/keepalived/keepalived.conf
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 99
advert_int 1
authentication {
auth_type PASS
auth_pass ab007
}
virtual_ipaddress {
192.168.12.21
}
}
vrrp_instance VI_2 {
state MASTER
interface eth0
virtual_router_id 61
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass sr200
}
virtual_ipaddress {
192.168.12.22
}
}

配置HAProxy

[root@node1 ~]# vim /etc/haproxy/haproxy.cfg
global
# to have these messages end up in /var/log/haproxy.log you will
# need to:
# by adding the '-r' option to the SYSLOGD_OPTIONS in
# /etc/sysconfig/syslog
#
# 2) configure local2 events to go to the /var/log/haproxy.log
# file. A line like the following can be added to
# /etc/sysconfig/syslog
#
# local2.* /var/log/haproxy.log
log 127.0.0.1 local2 #日志将通过rsyslog进行归档记录
chroot /var/lib/haproxy #运行的安装路径
pidfile /var/run/haproxy.pid #pid文件存放的位置
maxconn 4000 #最大连接
user haproxy #运行haproxy的用户
group haproxy #运行haprixy的组
daemon #以后台模式运行haproxy
# turn on stats unix socket
stats socket /var/lib/haproxy/stats
#---------------------------------------------------------------------
# common defaults that all the 'listen' and 'backend' sections will
# use if not designated in their block
#---------------------------------------------------------------------
defaults
mode http #工作模式
log global #记录日志
option httplog #详细记录http日志
option dontlognull #不记录健康检查的日志信息
option http-server-close #启用服务器端主动关闭
option forwardfor except 127.0.0.0/8 #传递客户端IP
retries 3 #请求重试次数
timeout http-request 10s #http请求超时时间
timeout queue 1m #一个请求在队列里的超时时间
timeout connect 10s #连接服务器超时时间
timeout client 1m #客户端超时时间
timeout server 1m #客户端超时时间
timeout http-keep-alive 10s #持久连接超时时间
timeout check 10s #心跳检测超时时间
maxconn 3000 #最大连接数
#---------------------------------------------------------------------
# main frontend which proxys to the backends
#---------------------------------------------------------------------
frontend proxy *:80
#定义ACL
acl url_static path_beg -i /static /images /Javascript /stylesheets
acl url_static path_end -i .jpg .gif .png .css .js
acl url_dynamic path_end _i .php .jsp
use_backend dynamic if url_dynamic #调用后端服务器并检查ACL规则是否被匹配
default_backend static
#---------------------------------------------------------------------
# static backend for serving up images, stylesheets and such
#---------------------------------------------------------------------
backend static #后端调度
balance source #调度算法
server s1 172.16.10.125:80 inter 1500 rise 2 fall 3 check
#----------------------------------------
listen statistics
mode http #http 7 层模式
bind *:8080 #监听地址
stats enable #启用状态监控
stats auth admin:admin #验证的用户与密码
stats uri /admin?status #访问路径
stats hide-version #隐藏状态页面版本号
stats admin if TRUE #如果验证通过了就允许登录
stats refresh 3s #每3秒刷新一次
acl allow src 192.168.12.0/24 #允许的访问的IP地址
tcp-request content accept if allow #允许的地址段就允许访问
tcp-request content reject #拒绝非法连接
#---------------------------------------------------------------------
# round robin balancing between the various backends
#---------------------------------------------------------------------
backend dynamic
balance source
server s2 172.16.10.12:80 check inter 1500 rise 2 fall 3
#check inter 1500是检测心跳频率
#rise2 2次正确认为服务器可用
#fall3 3次失败认为服务器不可用

将配置文件同步至另一节点

[root@node1 ~]# scp /etc/haproxy/haproxy.cfg node2:/etc/haproxy/
haproxy.cfg 100% 4471 4.4KB/s 00:00

WEB端配置

准备测试页面

#static server
[root@scholar ~]# vim /var/www/html/index.html

172.16.10.125


[root@scholar ~]# service httpd start
Starting httpd: [ OK ]
#dynamic server
[root@scholar ~]# vim /var/www/html/index.php

172.16.10.20
$link = mysql_connect('127.0.0.1','root','');
if ($link)
echo "Success...";
else
echo "Failure...";
mysql_close();
phpinfo();
?>
[root@scholar ~]# service httpd start
Starting httpd: [ OK ]
[root@scholar ~]# service mysqld start
Starting mysqld: [ OK ]

启动服务

[root@node1 ~]# service haproxy start; ssh node2 'service haproxy start'
Starting haproxy: [ OK ]
Starting haproxy: [ OK ]
[root@node1 ~]# service keepalived start; ssh node2 'service keepalived start'
Starting keepalived: [ OK ]
Starting keepalived: [ OK ]

动静分离及高可用测试

查看各节点IP情况

HAProxy基于KeepAlived实现Web高可用及动静分离

HAProxy基于KeepAlived实现Web高可用及动静分离

静态页面

HAProxy基于KeepAlived实现Web高可用及动静分离

动态页面

HAProxy基于KeepAlived实现Web高可用及动静分离

静态页面

HAProxy基于KeepAlived实现Web高可用及动静分离

动态页面

HAProxy基于KeepAlived实现Web高可用及动静分离

查看状态页面

HAProxy基于KeepAlived实现Web高可用及动静分离

模拟一个节点故障

[root@node1 ~]# service haproxy stop
Stopping haproxy: [ OK ]
[root@node1 ~]# service keepalived stop
Stopping keepalived: [ OK ]

查看各节点IP信息

HAProxy基于KeepAlived实现Web高可用及动静分离

HAProxy基于KeepAlived实现Web高可用及动静分离

VIP转移了,继续访问测试

HAProxy基于KeepAlived实现Web高可用及动静分离

访问不受任何影响,至此高可用及动静分离目的实现。

HAProxy基于KeepAlived实现Web高可用及动静分离实验就先说到这里了。

本次实验因资源有限只提供了两台web服务器,如有多台可设置轮询实现负载均衡,这里就不做多介绍了。

部署过程遇到问题可留言交流。也可以通过扫描如下二维码,以了解更多精彩文章。


好消息:欢迎加入开放运维联盟

开放运维联盟(OOPSA)成立于2015年10月31日,是运维行业第一个全国性、非盈利的正式组织,由资深运维从业人员联合发起,指导单位为工信部电信研究院数据中心联盟(DCA)。

开放运维联盟旨在融合运维行业最佳实践、推动行业进步,减少公司运维重复投入,建设运维人员共有的家园,让运维不再“苦逼”。


如何一起愉快地发展


推荐阅读
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • 本文介绍了在使用Python中的aiohttp模块模拟服务器时出现的连接失败问题,并提供了相应的解决方法。文章中详细说明了出错的代码以及相关的软件版本和环境信息,同时也提到了相关的警告信息和函数的替代方案。通过阅读本文,读者可以了解到如何解决Python连接服务器失败的问题,并对aiohttp模块有更深入的了解。 ... [详细]
  • Python项目实战10.2:MySQL读写分离性能优化
    本文介绍了在Python项目实战中进行MySQL读写分离的性能优化,包括主从同步的配置和Django实现,以及在两台centos 7系统上安装和配置MySQL的步骤。同时还介绍了创建从数据库的用户和权限的方法。摘要长度为176字。 ... [详细]
  • 如何使用PLEX播放组播、抓取信号源以及设置路由器
    本文介绍了如何使用PLEX播放组播、抓取信号源以及设置路由器。通过使用xTeve软件和M3U源,用户可以在PLEX上实现直播功能,并且可以自动匹配EPG信息和定时录制节目。同时,本文还提供了从华为itv盒子提取组播地址的方法以及如何在ASUS固件路由器上设置IPTV。在使用PLEX之前,建议先使用VLC测试是否可以正常播放UDPXY转发的iptv流。最后,本文还介绍了docker版xTeve的设置方法。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • 本文介绍了RPC框架Thrift的安装环境变量配置与第一个实例,讲解了RPC的概念以及如何解决跨语言、c++客户端、web服务端、远程调用等需求。Thrift开发方便上手快,性能和稳定性也不错,适合初学者学习和使用。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • 配置IPv4静态路由实现企业网内不同网段用户互访
    本文介绍了通过配置IPv4静态路由实现企业网内不同网段用户互访的方法。首先需要配置接口的链路层协议参数和IP地址,使相邻节点网络层可达。然后按照静态路由组网图的操作步骤,配置静态路由。这样任意两台主机之间都能够互通。 ... [详细]
  • RouterOS 5.16软路由安装图解教程
    本文介绍了如何安装RouterOS 5.16软路由系统,包括系统要求、安装步骤和登录方式。同时提供了详细的图解教程,方便读者进行操作。 ... [详细]
  • 本文详细介绍了cisco路由器IOS损坏时的恢复方法,包括进入ROMMON模式、设置IP地址、子网掩码、默认网关以及使用TFTP服务器传输IOS文件的步骤。 ... [详细]
  • LVS实现负载均衡的原理LVS负载均衡负载均衡集群是LoadBalance集群。是一种将网络上的访问流量分布于各个节点,以降低服务器压力,更好的向客户端 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
author-avatar
wonderoil
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有