用keepalived来实现haproxy的高可用性能

一、haproxy和keepalived的解释:

1、haproxy:haproxy是免费、极速且可靠的用于为TCP和基于HTTP应用程序提供负载均衡和代理服务的解决方案,尤其适用于高负载且需要持久连接或7层处理机制的web站点。

2、haproxy的特性:客户端侧的长连接(client-side keep-alive);TCP加速(TCP speedups); 响应池(response buffering);RDP协议;基于源的粘性(source-based stickiness);更好的统计数据接口(a much better stats interfaces);更详细的健康状态检测机制(more verbose health checks);基于流量的健康评估机制(traffic-based health);支持HTTP认证;服务器管理命令行接口(server management from the CLI);基于ACL的持久性(ACL-based persistence);日志分析器;内容交换(content switching):基于任何请求标准挑选服务器池;ACL:编写内容交换规则;负载均衡算法(load-balancing algorithms):更多的算法支持;内容探测(content inspection):阻止非授权协议;透明代理(transparent proxy):在Linux系统上允许使用客户端IP直接连入服务器;内核TCP拼接(kernel TCP splicing):无copy方式在客户端和服务端之间转发数据以实现数G级别的数据速率;分层设计(layered design):分别实现套接字、TCP、HTTP处理以提供更好的健壮性、更快的处理机制及便捷的演进能力;快速、公平调度器(fast and fair scheduler):为某些任务指定优先级可实现理好的QoS;会话速率限制(session rate limiting):适用于托管环境。

3、keepalived:Keepalived的作用是检测服务器的状态,如果有一台服务器死机,或工作出现故障,Keepalived将检测到,并将有故障的服务器从系统中剔除,当服务器工作正常后Keepalived自动将服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的服务器。haproxy主要用作RealServer的健康状态检查以及LoadBalance主机和BackUP主机之间failover的实现。

二、配置haproxy实现网站的负载均衡:

1、node1和node2都安装httpd,php,php-mysql:


1

[[email protected] ~]# yum -y install httpd php php-mysql


1

[[email protected] ~]# yum -y install httpd php php-mysql

2、为node1和node2提供静态和动态网页:


1

2

3

4

[[email protected] ~]# ls /var/www/html/

index.html  index.php

[[email protected] ~]# ls /var/www/html/

index.html  index.php

3、node1和node2启动httpd服务:


1

2

3

4

[[email protected] ~]# service httpd start

Starting httpd:                                            [  OK  ]

[[email protected] ~]# service httpd start

Starting httpd:                                            [  OK  ]

4、验证node1和node2的静态和动态网站:

5、在haproxy1和haproxy2主机上分别安装haproxy程序包:


1

yum -y installhaproxy

6、在haproxy1编辑haproxy的主配置文件:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

[[email protected] ~]# vim /etc/haproxy/haproxy.cfg

global

log         127.0.0.1 local2

chroot      /var/lib/haproxy

pidfile     /var/run/haproxy.pid

maxconn     30000

user        haproxy

group       haproxy

daemon

stats socket /var/lib/haproxy/stats

defaults

mode                    http

log                     global

option                  httplog

option                  dontlognull

option http-server-close

option forwardfor       except 127.0.0.0/8

option                  redispatch

retries                 3

timeout http-request    10s

timeout queue           1m

timeout connect         10s

timeout client          1m

timeout server          1m

timeout http-keep-alive 10s

timeout check           10s

maxconn                 3000

listen stats

mode http

bind *:8009

stats enable

stats hide-version

stats uri     /hpadmin?stats

stats realm   “Haproxy  Statistics"

stats auth    admin:admin

stats admin ifTRUE

frontend  http-in

bind *:80

mode http

log global

option httpclose

option logasap

option dontlognull

capture request  header Host len 20

capture request  header Referer len 60

acl url_static       path_beg       -i /static/images/javascript/stylesheets

acl url_static       path_end       -i .jpg .jpeg .gif .png .css .js .html

acl url_php          path_end       -i  .php

use_backend static_servers          ifurl_static

use_backend  dynamic_servers        ifurl_php

default_backend dynamic_servers

backend static_servers

balance roundrobin

server node1 172.16.70.1:80 check maxconn 6000

backend dynamic_servers

cookie  node   insert  nocache

balance roundrobin

server node2 172.16.70.2:80 check maxconn 1000   cookie node2

说明:

global                                              --全局配置

log         127.0.0.1 local2                        --定义日志服务器为本机(127.0.0.1),日志级别为local2

chroot      /var/lib/haproxy                        --禁锢haproxy用户的目录

pidfile     /var/run/haproxy.pid                    --定义haproxy服务的pid文件

maxconn     30000                                   --单进程的并发连接数

user        haproxy                                 --以haproxy用户的身份运行服务

group       haproxy                                 --以haproxy组的身份运行服务

daemon                                             --让haproxy以守护进程的方式工作于后台

stats socket /var/lib/haproxy/stats                 --启用统计页面输出

defaults                                           --默认配置

mode                    http                    --工作模式为http

log                     global                  --使用全局配置中定义的日志服务器

option                  httplog                 --启用记录HTTP请求、会话状态和计时器的功能

option                  dontlognull             --日志不能为空

option http-server-close                       --启用httpd的服务器端关闭的功能

option forwardfor       except 127.0.0.0/8      --允许在发往服务器的请求首部中插入“X-Forwarded-For”首部,除了本机

option                  redispatch              --某一上游服务器宕机时,能够将客户端的会话请求重新派发给其它upstreat  server

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                   --每个server的最大并发连接数

listen stats                                        --监听的名称为stats,用于统计页面输出

mode http                                       -- stats的工作模式为http

bind *:8009                                     --绑定在所有地址的8009端口

stats enable                                    --启用stats,可以在浏览器中显示后端服务器信息和整个haproxy的信息

stats hide-version                              --隐藏haproxy的版本

stats uri     /hpadmin?stats                    --stats的网页访问路径

stats realm   “Haproxy  Statistics"            --认证时显示的账号密码的提示信息

stats auth    admin:admin                       --stats认证的账号和密码

stats admin if TRUE                             --如果认证通过就启用stats的管理接口

frontend  http-in                                   --前端服务器名称为http-in

bind *:80                                       --绑定在所有地址的80端口上

mode http                                       --工作模式为http

log global                                     --使用全局配置中定义的日志服务器

option httpclose                                --启用被动httpd连接关闭功能

option logasap

option dontlognull                             --日志不能为空

capture request  header Host len 20             --捕获请求首部为host,首部长度为20

capture request  header Referer len 60          --记录请求报文中的跳转,长度为60

acl url_static       path_beg       -i /static /images /javascript /stylesheets          --定义的访问控制列表为静态服务器

acl url_static       path_end       -i .jpg .jpeg .gif .png .css .js .html               --定义的访问控制列表为静态服务器

acl url_php          path_end       -i  .php                                             --定义的访问控制列表为动态服务器

use_backend static_servers          if url_static                                        --在静态页面中使用的后端服务器组(指定使用的条件式后端)

use_backend  dynamic_servers        if  url_php                                         --在动态页面中使用的后端服务器组(指定使用的条件式后端)

default_backend dynamic_servers                                                          --默认后端服务器为动态服务器组

backend static_servers                                                                       --定义的静态后端服务器

balance roundrobin                                                                       --算法为轮询

server node1 172.16.70.1:80 check maxconn 6000                                           --具体的静态后端服务器,检测服务器健康状态,服务器接收的最大并发连接6000

backend dynamic_servers                                                                     --定义的动态后端服务器

cookie  node   insert  nocache                                                           --node为cookie名称,insert为直接插入cookie信息,nocache指后端是缓存服务器时,不用保持cookie信息

balance roundrobin                                                                       --算法为轮询

server node2 172.16.70.2:80 check maxconn 1000   cookie node2                            --具体的动态后端服务器,检测服务器健康状态,服务器接收的最大并发连接1000

7、把haproxy1主机上haproxy主配置文件复制一份到haproxy2主机上:


1

2

[[email protected] ~]# scp /etc/haproxy/haproxy.cfg haproxy2:/etc/haproxy/

haproxy.cfg                                         100% 4190     4.1KB/s00:00

8、在haproxy1主机上启动haproxy服务:


1

2

[[email protected] ~]# service haproxy start

Starting haproxy:                                          [  OK  ]

9、访问haproxy的统计页面:

10、访问静态服务器:

11、访问动态服务器:

12、关闭haproxy1主机上的haproxy服务:


1

2

[[email protected] ~]# service haproxy stop

Stopping haproxy:                                          [  OK  ]

三、配置keepalived为实现haproxy高可用的双主模型:

1、在haproxy1主机和haproxy2主机上都安装keepalived程序包:


1

2

[[email protected] ~]# yum -y install keepalived

[[email protected] ~]# yum -y install keepalived

2、在haproxy1和haproxy2上写一个脚本,定义主haproxy的启动、辅haproxy的停止即给管理员的邮件通知机制:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

[[email protected] keepalived]# pwd

/etc/keepalived

[[email protected] keepalived]# vim notify.sh

#!/bin/bash

# Author: MageEdu <[email protected]>

# description: An example of notify script

#

vip=172.16.70.35

contact=‘[email protected]‘

notify() {

mailsubject="`hostname` to be $1: $vip floating"

mailbody="`date ‘+%F %H:%M:%S‘`: vrrp transition, `hostname` changed to be $1"

echo$mailbody | mail -s "$mailsubject"$contact

}

case"$1"in

master)

notify master

/etc/rc.d/init.d/haproxystart

exit0

;;

backup)

notify backup

/etc/rc.d/init.d/haproxystop

exit0

;;

fault)

notify fault

/etc/rc.d/init.d/haproxystop

exit0

;;

*)

echo‘Usage: `basename $0` {master|backup|fault}‘

exit1

;;

esac

3、在haproxy1主机上编辑keepalived的主配置文件:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

[[email protected] keepalived]# pwd

/etc/keepalived

[[email protected] keepalived]# vim keepalived.conf

global_defs {

notification_email {

[email protected]

}

notification_email_from [email protected]

smtp_server 127.0.0.1

smtp_connect_timeout 30

router_id LVS_DEVEL

}

vrrp_script chk_haproxy {

script "killall -0 haproxy"

interval 1

weight -2

}

vrrp_instance VI_1 {

state MASTER

interface eth0

virtual_router_id 66

priority 100

advert_int 1

authentication {

auth_type PASS

auth_pass 12168

}

virtual_ipaddress {

172.16.35.35

}

track_script {

chk_haproxy

}

notify_master "/etc/keepalived/notify.sh master"

notify_backup "/etc/keepalived/notify.sh backup"

notify_fault "/etc/keepalived/notify.sh fault"

}

vrrp_instance VI_2 {

state BACKUP

interface eth0

virtual_router_id 69

priority 99

advert_int 1

authentication {

auth_type PASS

auth_pass 22168

}

virtual_ipaddress {

172.16.70.135

}

track_script {

chk_haproxy

}

notify_master "/etc/keepalived/notify.sh master"

notify_backup "/etc/keepalived/notify.sh backup"

notify_fault "/etc/keepalived/notify.sh fault"

}

说明:

global_defs {                                                 --全局定义
  notification_email {                                       --通知邮件
       [email protected]                                        --通知的收件人为本机的管理员

}

notification_email_from [email protected]                  --通知的发件人
  smtp_server 127.0.0.1                                      --发件服务器为本机的邮件服务器
  smtp_connect_timeout 30                                    --连接邮件服务器的超时时间

router_id LVS_DEVEL                                        --路由器的标识

}

vrrp_script chk_haproxy {                                     --定义haproxy服务的追踪脚本为chk_haproxy
       script "killall -0 haproxy"                           --探测haproxy服务是否在线
       interval 1                                            --每隔1S探测一次
       weight -2                                             --如果haproxy服务不在线该节点权重就减二
}

vrrp_instance VI_1 {                                         --定义虚拟路由的实例名称为VI_1

state MASTER                                              --在VI_1实例中haproxy1主机这个节点为主节点
   interface eth0                                            --所有的通告通过eth0接口进行

virtual_router_id 66                                      --虚拟路由ID为66

priority 100                                              --节点优先级为100(优先级范围0-255,数字越大,优先级越大)

advert_int 1                                              -- 初始化通告的个数

authentication {                                          -- 认证机制

auth_type PASS                                        --认证的类型为明文密码认证

auth_pass 12168                                       --认证的密码为12168

}
   virtual_ipaddress {                                       --定义虚拟地址,即VIP地址

172.16.70.35                                          --VIP地址为172.16.70.35  
   }
       track_script {
               chk_haproxy                                   --在实例中定义追踪的脚本时chk_haproxy
}
       notify_master "/etc/keepalived/notify.sh master"      --当本节点为主节点时的邮件通知脚本
       notify_backup "/etc/keepalived/notify.sh backup"      --当本节点为backup节点时的邮件通知脚本

notify_fault "/etc/keepalived/notify.sh fault"        --当本节点为fault时的邮件通知脚本

}

vrrp_instance VI_2 {                                          --定义虚拟路由的实例名称为VI_2

state BACKUP                                              --在VI_2实例中haproxy1主机这个节点为从节点

interface eth0                                            --所有的通告通过eth0接口进行

virtual_router_id 69                                      --虚拟路由ID为69

priority 99                                               --节点优先级为99(优先级范围0-255,数字越大,优先级越大)

advert_int 1                                              --初始化通告的个数

authentication {                                          --认证机制

auth_type PASS                                       --认证的类型为明文密码认证

auth_pass 22168                                       --认证的密码为22168

}
   virtual_ipaddress {                                       --定义虚拟地址,即VIP地址

172.16.70.135                                         --VIP地址为172.16.70.135
   }
       track_script {                                        
               chk_haproxy                                   --在实例中定义追踪的脚本时chk_haproxy

}
       notify_master "/etc/keepalived/notify.sh master"      --当本节点为主节点时的邮件通知脚本

notify_backup "/etc/keepalived/notify.sh backup"      --当本节点为backup节点时的邮件通知脚本

notify_fault "/etc/keepalived/notify.sh fault"        --当本节点为fault时的邮件通知脚本

}

4、在haproxy2主机上编辑keepalived的主配置文件:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

[[email protected] keepalived]# pwd

/etc/keepalived

[[email protected] keepalived]# vim keepalived.conf

global_defs {

notification_email {

[email protected]

}

notification_email_from [email protected]

smtp_server 127.0.0.1

smtp_connect_timeout 30

router_id LVS_DEVEL

}

vrrp_script chk_haproxy {

script "killall -0 haproxy"

interval 1

weight -2

}

vrrp_instance VI_1 {

state BACKUP

interface eth0

virtual_router_id 66

priority 99

advert_int 1

authentication {

auth_type PASS

auth_pass 12168

}

virtual_ipaddress {

172.16.70.35

}

track_script {

chk_haproxy

}

notify_master "/etc/keepalived/notify.sh master"

notify_backup "/etc/keepalived/notify.sh backup"

notify_fault "/etc/keepalived/notify.sh fault"

}

vrrp_instance VI_2 {

state MASTER

interface eth0

virtual_router_id 69

priority 100

advert_int 1

authentication {

auth_type PASS

auth_pass 22168

}

virtual_ipaddress {

172.16.70.135

}

track_script {

chk_haproxy

}

notify_master "/etc/keepalived/notify.sh master"

notify_backup "/etc/keepalived/notify.sh backup"

notify_fault "/etc/keepalived/notify.sh fault"

}

5、在haproxy1主机和haproxy2主机上同时启动keepalived服务和haproxy服务:


1

2

3

[[email protected] ~]# ssh haproxy2 ‘service keepalived start‘;service keepalived start

Starting keepalived: [  OK  ]

Starting keepalived:                                       [  OK  ]


1

2

3

[[email protected] ~]# ssh haproxy2 ‘service haproxy start‘;service haproxy start

Starting haproxy: [  OK  ]

Starting haproxy:                                          [  OK  ]

6、在haproxy1主机上查看获得的VIP地址为172.16.70.35,haproxy2主机上获得的VIP地址是172.16.70.135:

7、使用2个VIP都能访问后端静态和动态网站:

8、在haproxy1主机上关闭haproxy服务,发现VIP:172.16.70.35转移到haproxy2主机上去了,但仍然能够反向代理到后端服务器而提供web服务:


1

2

[[email protected] ~]# service haproxy stop

Stopping haproxy:                                          [  OK  ]

四、总结:

本次实验结合keepalived实现了haproxy反向代理的高可用,让两个haproxy都能同时为客户端提供反向代理服务,同时也实现了web站点的负载均衡,实现了网站访问的动静分离机制。。。

用keepalived来实现haproxy的高可用性能,布布扣,bubuko.com

时间: 2024-10-28 14:20:10

用keepalived来实现haproxy的高可用性能的相关文章

haproxy实现的web反向代理,动静分离,以及基于keepalived实现的haproxy的高可用

   haproxy于Nginx一样都是做反向代理,但是与其相比,haproxy更专注于web代理.HAProxy是单进程多请求,也支持多进程,HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接.       haproxy功能的实现全部基于配置文件,所以我们需要了解很多的配置指令,玩转指令,再结合实际情况,我们就玩转了haproxy,其实haproxy的配置也很简单,下面我们一起简单认识和了解一些haproxy的基本功能和相关知识.         CentOS6.5自带的rpm

keepalived+haproxy实现高可用

实验环境: 2台centos 6.5作为keepalived+haproxy的高可用,3台centos6.5配置httpd作为后端server,haproxy的轮询采用rr调度算法.vip:192.168.8.199 ha1:eth1:192.168.8.41,keepalived+haproxy ha3:eth1:192.168.8.43,keepalived+haproxy  rs1:192.168.8.21.httpd rs2:192.168.8.22.httpd rs3:192.168.

基于keepalived对HAproxy做高可用集群

一.Keepalived简介 Keepalived的作用是检测web服务器的状态,如果有一台web服务器死机,或工作出现故障,Keepalived将检测到,并将有故障的web服务器从系统中剔除,当web服务器工作正常后Keepalived自动将web服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的web服务器. Layer3,4&7工作在IP/TCP协议栈的IP层,TCP层,及应用层,原理分别如下: Layer3:Keepalived使用Layer3的方式

使用keepalived实现haproxy的高可用

一.haproxy和keepalived的解释及本次实验的拓扑图: 1.haproxy:haproxy是免费.极速且可靠的用于为TCP和基于HTTP应用程序提供负载均衡和代理服务的解决方案,尤其适用于高负载且需要持久连接或7层处理机制的web站点. 2.haproxy的特性:客户端侧的长连接(client-side keep-alive):TCP加速(TCP speedups): 响应池(response buffering):RDP协议:基于源的粘性(source-based stickine

HAProxy双机高可用之HAProxy+Keepalived

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

HAProxy+Keepalived+PXC负载均衡和高可用的PXC环境

HAProxy介绍 反向代理服务器,支持双机热备支持虚拟主机,但其配置简单,拥有非常不错的服务器健康检查功能,当其代理的后端服务器出现故障, HAProxy会自动将该服务器摘除,故障恢复后再自动将该服务器加入?引入了frontend,backend:frontend根据任意 HTTP请求头内容做规则匹配,然后把请求定向到相关的backend. Keepalived介绍Keepalived是一个基于VRRP协议来实现的WEB 服务高可用方案,可以利用其来避免单点故障.一个WEB服务至少会有2台服务

haproxy的高可用

一.简介 软件负载均衡一般通过两种方式来实现:基于操作系统的软负载实现和基于第三方应用的软负载实现. LVS 就是基于 Linux 操作系统实现的一种软负载,HAProxy就是开源的并且基于第三应用实现的软负载.HAProxy 相比 LVS 的使用要简单很多,功能方面也很丰富.当前,HAProxy 支持两种主要的代理模式:"tcp"即 4 层(大多用于邮件服务器.内部协议通信服务器等)和 7 层(HTTP)在 4 层模式下, HAproxy仅在客户端和服务器之间转发双向流量. 7 层模

Centos7+Nginx+Keepalived实现Apache服务的高可用&负载均衡

Centos7+Nginx+Keepalived实现Apache服务的高可用&负载均衡 今天是2017年的第一天,昨天也就是2016年的最后一天,我尝试部署了Centos7+Nginx+Keepalived实现WEB服务的高可用负载均衡服务,终于在2017年的第一天前完成了,所以在此分享给有需要的朋友:说到负载均衡,其实在linux下有很多服务可以实现,比如nginx.haproxy.lvs等服务,当前我们在前面的文章有介绍过了,但是对于高可用服务,我们在linux下最常见也是应用最多的是Kee

Mysql5.7.22+Keepalived双主互备高可用集群

DB1:192.168.254.128DB2:192.168.254.129配置前进行校时操作#安装ntpdate工具yum install ntpdate -y#使用ntpdate校时(后面的是ntp服务器)ntpdate pool.ntp.org 配置mysql双主备 安装数据库链接(在主页数据库里面可以看到)http://blog.51cto.com/10158955/1926574 DB1修改配置文件(需重启)vi /etc/my.cnf#在[mysqld]添加server-id=166