前言

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

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

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

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是针对路由器的一种备份解决方案——由多台路由器组成一个热备组。

通过共用的虚拟IP地址对外提供服务;每个热备组内同一时刻只有一台主服务器提供服务,其他服务器处于冗余状态,若当前在线的服务器失败,其他服务器会自动接替(优先级决定接替顺序)虚拟IP地址,以继续提供服务。

高可用解决方案

实验拓扑

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

配置过程

HA集群配置前提

  • 时间同步

  • 基于主机名互相通信

  • SSH互信

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

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

基于主机名互相通信

[root@node1 ~]# vim /etc/hosts172.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.confvrrp_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 BACKUPinterface eth0virtual_router_id 61priority 99advert_int 1authentication {auth_type PASSauth_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.confvrrp_instance VI_1 {state BACKUPinterface eth0virtual_router_id 51priority 99advert_int 1authentication {auth_type PASSauth_pass ab007}virtual_ipaddress {192.168.12.21}
}vrrp_instance VI_2 {state MASTERinterface eth0virtual_router_id 61priority 100advert_int 1authentication {auth_type PASSauth_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.loglog         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 socketstats socket /var/lib/haproxy/stats
#---------------------------------------------------------------------
# common defaults that all the 'listen' and 'backend' ps will
# use if not designated in their block
#---------------------------------------------------------------------
defaultsmode                    http                #工作模式log                     global              #记录日志option                  httplog             #详细记录http日志option                  dontlognull         #不记录健康检查的日志信息option http-server-close                    #启用服务器端主动关闭option forwardfor       except 127.0.0.0/8  #传递客户端IPretries                 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#定义ACLacl url_static       path_beg       -i /static /images /javascript /stylesheetsacl url_static       path_end       -i .jpg .gif .png .css .jsacl url_dynamic      path_end       _i .php .jspuse_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 statisticsmode 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 dynamicbalance     sourceserver      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 <h1>172.16.10.125</h1>[root@scholar ~]# service httpd start
Starting httpd:                                            [  OK  ]#dynamic server
[root@scholar ~]# vim /var/www/html/index.php<h1>172.16.10.20</h>
<?php$link = mysql_connect('127.0.0.1','root','');if ($link)echo "Success...";elseecho "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情况

静态页面

动态页面

静态页面

动态页面

查看状态页面

模拟一个节点故障

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

查看各节点IP信息

VIP转移了,继续访问测试

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

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

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

HAProxy基于KeepAlived实现Web高可用及动静分离相关推荐

  1. 高并发负载均衡(四):基于keepalived的LVS高可用搭建

    LVS四层 & Nginx七层 对比 你要分清哪些程序是应用层的,哪些程序是内核的. LVS四层负载均衡服务器,是不会碰握手这一个步骤的. Nginx是基于反向代理(七层)的负载均衡服务器,要 ...

  2. 基于keepalived搭建MySQL高可用集群

    MySQL的高可用方案一般有如下几种: keepalived+双主,MHA,MMM,Heartbeat+DRBD,PXC,Galera Cluster 比较常用的是keepalived+双主,MHA和 ...

  3. MHA+keepalived实现Mysql高可用及读写分离

    1.准备工作 1.准备机器(5台) keepalived+mha(2台): 10.11.13.11 keepalived master及mha管理机公用 10.11.13.12 keepalived ...

  4. haproxy keepalived_Haproxy+KeepAlived+Mycat实现高可用集群

    1.什么是Haproxy HAProxy是一个使用C语言编写的自由及开放源代码软件[1],其提供高可用性.负载均衡,以及基于TCP和HTTP的应用程序代理. HAProxy特别适用于那些负载特大的we ...

  5. saltstack实现haproxy+keepalived负载均衡+高可用(二)

    一键部署haproxy+keepalived实现负载均衡+高可用 实验环境: !!!!    特别注意: www.westos.org为test1的minion名字 test1: 172.25.1.1 ...

  6. keepalived架设简单高可用的nginx的web服务器   ----那些你不知道的秘密

    keepalived架设简单高可用的nginx的web服务器----那些你不知道的秘密 如果負載均衡軟件不使用LVS的話,那麼keepalived的配置是相當的簡單的,只需要配置好MASTER和SLA ...

  7. RedHat 7配置keepalived+LVS实现高可用的Web负载均衡

    上一篇博文中我们使用keepalived实现了haproxy的高可用,但keepalived问世之初却是为LVS而设计,与LVS高度整合,LVS与haproxy一样也是实现负载均衡,结合keepali ...

  8. 项目 - 基于Docker Swarm的高可用Web集群

    目录 项目名称:基于Docker Swarm的高可用Web集群 项目环境:Docker 20.10.3,CentOS 8.2 (8台 1核1G),Ansible 2.9.17,Keepalived,N ...

  9. 03_项目-基于Docker Swarm的高可用Web集群

    文章目录 项目名称:基于Docker Swarm的高可用Web集群 网络拓扑图 数据流程图 项目环境:Docker 20.10.3,CentOS 8.2(8台 1核1G),Ansible 2.9.17 ...

最新文章

  1. Community Server系列之九:CS2中的用户管理1(MemberRole)
  2. python对应位置相乘
  3. MariaDB Window Functions窗口函数分组取TOP N记录
  4. pl0源码(可在delphi7中运行)
  5. Clojure Web 开发 -- Ring 使用指南
  6. 实战:Windows Server 2008 使用WSUS实现内网计算机系统更新
  7. oracle 约束 Oracle 10g学习系列(5)
  8. jQuery实现数据映入form表单
  9. commons-fileupload的ServletFileUpload类
  10. 工作报告模板下载_免费工作报告图片设计素材_第2页_包图网
  11. OpenCV安装使用
  12. 微信翻译生日快乐的代码_微信表情翻译表白代码彩蛋怎么设置! 表情emm加符号翻译文字暗语大全...
  13. Linux空白行:行号显示、空白行数统计、删除空白行
  14. 安装elasticsearch遇到的几个问题
  15. OA是什么意思?什么是OA? OA系统是什么?
  16. 演讲者模式投影到幕布也看到备注_在PPT中插入备注时,如何在放映时只让演讲者看到,而观众看不到...
  17. 在excel中如何进行快速筛选
  18. 未定义标识符“L“,sprintfw/swprintf用法,TEXT宏
  19. 爱点击ICLK.US增持畅移,深度协同催生更多增长机会
  20. sv中program和module区别

热门文章

  1. oracle 10035 err 942,love wife love life —Roger的Oracle/MySQL数据恢复博客
  2. JAVA GUI 计算器制作
  3. python中切片是指什么_Python *中的默认切片索引是什么*?
  4. 极限内卷丨让我们偷偷的卷起来
  5. python自动化脚本--自动重启android手机
  6. java基于ssm的健身房会员管理系统
  7. html两个视口怎么控制,[译] 关于两种视口(viewport)的故事:其一
  8. 【庖丁解牛】Navicat for MySQL连接时候报错1251无法连接MySQL
  9. form layui 同时提交多个对象_layui 表单 请求参数对象和数组同时传递向后台
  10. 兼容big sur的达芬奇后期调色软件