运维笔记33 (haproxy的配置,pacemaker高可用+haproxy)

概述:之前的博客中提到的一种负载均衡方式是lvs,lvs的配置简单,减少了认为出错的概率,而且软件处在tcp/ip协议栈的第四层,可以对各种web应用服务,但是因为本身不支持正则表达式处理,不能做动静分离。那么今天的haproxy的优势就体现出来了,能够支持虚拟机主机,并且实现了动静分离,url重定向等等大型网站需要的功能。

系统环境:Red Hat Enterprise Linux Server release 6.5 (Santiago)
内核版本:2.6.32-431.el6.x86_64

一.haproxy对http服务的负载均衡

拓扑图:
集群拓扑

1 直接通过yum安装haproxy
[root@ha1 ~]# yum install haproxy -y
2 配置文件修改/etc/haproxy/haproxy.cfg

listen mo *:80 #定义haproxy的端口
    balance     roundrobin   #调度算法
    server      static 172.25.3.102 check #定义real server1
    server      static 172.25.3.103 check #定义real server2

3 启动haproxy,和realserver的服务

[root@ha1 ~]# /etc/init.d/haproxy start
Starting haproxy:                                          [  OK  ]

4 观察现象
为了使现象明显,最好将两个real server上/var/www/html下的index.html文件修改成不同的,这样才能看出在两台机器上调度。

[root@foundation3 ~]# curl 172.25.3.100
rserver1
[root@foundation3 ~]# curl 172.25.3.100
rserver2
[root@foundation3 ~]# curl 172.25.3.100
rserver1
[root@foundation3 ~]# curl 172.25.3.100
rserver2

二 添加haproxy的监控界面

配置文件修改如下:

listen stats_auth *:8000
        stats enable
        stats uri /status
        stats auth admin:momo  #定义登陆的账号和密码
        stats refresh 5s       #定义监控数据每次刷新的时间

效果:
这里写图片描述

三 定义haproxy日志

首先看一下刚才省略的全局配置:

global
    log         127.0.0.1 local2 #日志发送的ip和日志的级别

    chroot      /var/lib/haproxy #haproxy运行时的根目录
    pidfile     /var/run/haproxy.pid 
    maxconn     4000             #最大连接数  
    user        haproxy
    group       haproxy
    daemon                       #后台运行

这里定义的日志local2
根据这一点我们去修改rsyslg服务的配置文件,将这个级别的日志定义到一个日志文件中。
/etc/rsyslog.conf添加如下一行

local2.*                            /var/log/haproxy.log

由于日志发送使用的udp所以还要将下面两个选项打开

$ModLoad imudp
$UDPServerRun 514

重启日志服务,然后重启haproxy,观察/var/log/haproxy是否有内容,如果有内容就代表日志定向成功了。

[root@ha1 ~]# cat /var/log/haproxy.log 
Mar 18 22:08:15 localhost haproxy[1394]: Proxy mo started.
Mar 18 22:08:15 localhost haproxy[1394]: Proxy stats_auth started.

四 访问限制

访问限制就是对某一个ip的访问定向到一个错误界面,让该ip不能访问正常服务。

frontend  mo *:80
        acl invalid_src src 172.25.3.250/24
        block if invalid_src
        default_backend             app

backend app
    balance     roundrobin
    server      static 172.25.3.102:80 check

#listen mo *:80
#   balance     roundrobin
#  server      static 172.25.3.102 check
#    server      static 172.25.3.103 check

以上配置最重要的就是acl,通过acl我们定义了一个非法的源ip,这个源可以是一个主机地址,也可是网络地址,当这个ip访问的时候我们就block。
我们日常情况下当拒绝客户访问时候肯定会给一个别的界面好看一点的界面,这一点就是通过错误重定向功能做到的,增加如下配置

errorloc 403 http://172.25.3.100:8000/error/reject.html

五.根据资源不同将请求分配到不同服务器

我们现在有两台http服务器,准备一台用来静态页面,另一台放置图片,改如何呢?
我们知道图片数据,和静态页面是两种资源,所以请求他们的url也不相同,根据这一特点我们进行请求的分离。
配置文件如下:

frontend  mo *:80
        acl url_image path_beg -i /images
        acl url_image path_end -i .jpg .png .css
        acl invalid_src src 172.25.3.250
block if invalid_src
        default_backend             static
        use_backend image if url_image

backend static

    balance     roundrobin
    server      static 172.25.3.103:80 check
backend image
    balance     roundrobin
    server      static 172.25.3.102:80 check

172.25.3.102 上的资源目录

[root@localhost html]# tree /var/www/html/
/var/www/html/
├── image
│   └── timg.jpg
└── index.html

1 directory, 2 files

172.25.3.103上的资源目录

[root@localhost html]# tree /var/www/html/
/var/www/html/
└── index.html

测试:
这里写图片描述
(192.168.0.181真机的一块网卡,我将目的地址为192.168.0.181的包全改成了给172.25.3.100,所以不用在意这个地址)
发现静态界面到了reserver2,也就是172.25.3.103

这里写图片描述
由于3上根本没有图片文件,所以这次定位到了172.25.3.102上。

六.根据状态码定向页面

五.pacemaker+haproxy

这里写图片描述
1 配置集群服务我们首先要停掉haproxy,而且一定要停干净。
2.安装pacemaker集群需要的配件运维笔记31 (pacemaker高可用集群搭建的总结)这里有pacemaker的详细配置。
3.测试

[root@ha1 ~]# yum install pacemaker corosync -y

安装corosycn心跳组件,pacemaker集群资源管理器

```
[root@ha1 ~]# rpm -ivh crmsh-1.2.6-0.rc2.2.1.x86_64.rpm pssh-2.3.1-2.1.x86_64.rpm 

安装crm shell管理,可以方便我们对集群的配置和配置的分发。

bindnetaddr: 172.25.3.0     #第10行
service {                   #第34行
        name:pacemaker
        ver:0
}

corosync的配置文件有一个example,我们将example去掉后重命名,只要修改如上三个部分即可。

[root@ha1 ~]# scp /etc/corosync/corosync.conf ha2.mo.com:/etc/corosync/

[root@ha1 ~]# /etc/init.d/corosync start
Starting Corosync Cluster Engine (corosync):               [  OK  ] #ha2也要打开

[root@ha1 ~]# crm
crm(live)# 

将该文件拷贝给另一个节点。开启corsync服务。
进入crm配置集群。

crm(live)configure# show
node ha1.mo.com
node ha2.mo.com
node localhost.localdomain
property $id="cib-bootstrap-options" \
    dc-version="1.1.10-14.el6-368c726" \
    cluster-infrastructure="classic openais (with plugin)" \
    expected-quorum-votes="2" \
    stonith-enabled="false"

集群的配置初始情况如上。

crm(live)resource# primitive vip ocf:heartbeat:IPaddr2 params ip=172.25.3.200 cidr_netmask=24 op monitor interval=30s
crm(live)resource# primitive proxy lsb:haproxy op monitor interval=30s
crm(live)configure# group LB vip proxy 

首先添加vip资源,之后是proxy资源,最后是将两个资源合成一个组,开启服务组,观察服务状态。

Online: [ ha1.mo.com ha2.mo.com ]
OFFLINE: [ localhost.localdomain ]

 Resource Group: LB
     vip        (ocf::heartbeat:IPaddr2):   Started ha1.mo.com
     proxy  (lsb:haproxy):  Started ha1.mo.com

服务正常。

六 keepalived+haproxy

现在停掉corosync,并将与其相关的进程都杀干净。使用keepalived为haproxy做高可用集群。由于keepalived不像heartbeat,corosync具有丰富的服务脚本,所以先要考虑keepalived如何将服务启动,关闭。keepalived是一个类似于layer3, 4 & 5交换机制的软件,也就是我们平时说的第3层、第4层和第5层交换。Keepalived的作用是检测web服务器的状态,如果有一台web服务器死机,或工作出现故障,Keepalived将检测到,并将有故障的web服务器从系统中剔除,当web服务器工作正常后Keepalived自动将web服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的web服务器。

综上我们需要解决的就是弄一个可以检测健康并且关闭服务的脚本。
脚本如下:

#!/bin/bash
/etc/init.d/haproxy status &> /dev/null || /etc/init.d/haproxy restart &> /dev/null
if [ $? -ne 0 ];then
/etc/init.d/keepalived stop &> /dev/null
fi
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值