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

来源:互联网 发布:人知我好,示我周行 编辑:程序博客网 时间:2024/06/05 23:43

概述:之前的博客中提到的一种负载均衡方式是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 startStarting haproxy:                                          [  OK  ]

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

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

二 添加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             appbackend 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.250block if invalid_src        default_backend             static        use_backend image if url_imagebackend static    balance     roundrobin    server      static 172.25.3.103:80 checkbackend 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.html1 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 startStarting Corosync Cluster Engine (corosync):               [  OK  ] #ha2也要打开[root@ha1 ~]# crmcrm(live)# 

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

crm(live)configure# shownode ha1.mo.comnode ha2.mo.comnode localhost.localdomainproperty $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=30scrm(live)resource# primitive proxy lsb:haproxy op monitor interval=30scrm(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/nullif [ $? -ne 0 ];then/etc/init.d/keepalived stop &> /dev/nullfi
1 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 华为手环不计步怎么办 小米手环不计步怎么办 小米手环骑自行车不计步数怎么办 放逐之城着火了怎么办 城市天际线地价过低怎么办 放逐之城铁采完怎么办 车钥匙反锁车内怎么办 眼镜用热水洗了怎么办 眼镜放平后眼镜腿不平怎么办 瞄准镜十字歪了怎么办 瞄准镜调到底了怎么办 墨镜镜片刮花了怎么办 usb小风扇不转怎么办 金属眼镜压歪了怎么办 眼镜被电焊打了怎么办 电焊闪的眼睛疼怎么办 烧了电焊眼睛疼怎么办 用了电焊眼睛痛怎么办 烧电焊脸上红痛怎么办 眼睛让电焊晃了怎么办 眼被电焊打了怎么办 眼镜弹簧腿坏了怎么办 眼镜框铰链坏了怎么办 金属眼镜框歪了怎么办 眼镜框螺丝断了怎么办 眼镜被压变形了怎么办 金属眼镜腿断了怎么办 眼镜弹簧腿断了怎么办 眼镜腿螺丝太紧怎么办 眼镜金属柄断了怎么办 金属眼镜腿折了怎么办 眼镜腿中间断了怎么办 塑料眼镜腿断了怎么办 眼镜上的螺丝拧不紧怎么办 眼镜的把坏了怎么办 把眼镜坐坏了怎么办 梦见眼镜腿掉了怎么办 眼镜的腿掉了怎么办 眼镜腿的螺丝掉了怎么办 爱大爱眼镜掉腿了怎么办 合金眼镜腿断了怎么办