Linux运维:搭建HAProxy+Keepalived高可用负载均衡系统
Posted 计算机与网络安全
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux运维:搭建HAProxy+Keepalived高可用负载均衡系统相关的知识,希望对你有一定的参考价值。
一次性付费进群,长期免费索取教程,没有付费教程。
ID:Computer-network
1、搭建环境描述
整个高可用HAProxy集群系统的拓扑结构如图1所示。
图1 高可用HAProxy集群系统拓扑结构
此结构要实现的功能是:通过HAProxy实现三个站点的,即当用户通过域名www.zb.com访问网站时,HAProxy要将请求发送到webapp1;当用户通过域名static.zb.com访问网站时,HAProxy要将请求发送到webapp2;当用户通过域名video.zb.com访问网站时,HAProxy要将请求发送到webapp3;当主HAproxyServer发送故障后,能立刻将服务切换到备用HAProxy Server上。
为了实现HAProxy的高可用功能,这里采用Keepalived作为高可用监控软件,下面依次介绍高可用HAProxy的搭建过程。
2、配置HAProxy负载均衡服务器
首先在主、备HAProxy上安装HAProxy,并且配置日志支持,然后进入HAProxy的配置阶段,这里仅仅给出HAProxy的配置文件,主、备两个节点的haproxy.conf文件内容完全相同,这里假定HAProxy的安装路径为/usr/local/haproxy。/usr/local/haproxy/conf/haproxy.conf文件内容如下:
global
log 127.0.0.1 local0 info
maxconn 4096
user nobody
group nobody
daemon
nbproc 1
pidfile /usr/local/haproxy/logs/haproxy.pid
defaults
mode http
retries 3
timeout connect 5s
timeout client 30s
timeout server 30s
timeout check 2s
listen admin_stats
bind 0.0.0.0:19088
mode http
log 127.0.0.1 local0 err
stats refresh 30s
stats uri /haproxy-status
stats realm welcome login\ Haproxy
stats auth admin:xxxxxx
stats hide-version
stats admin if TRUE
frontend www
bind 192.168.66.10:80
mode http
option httplog
option forwardfor
log global
acl host_www hdr_dom(host) -i www.zb.com
acl host_static hdr_dom(host) -i static.zb.com
acl host_video hdr_dom(host) -i video.zb.com
use_backend server_www if host_www
use_backend server_static if host_static
use_backend server_video if host_video
backend server_www
mode http
option redispatch
option abortonclose
balance roundrobin
option httpchk GET /index.html
server webapp1 192.168.66.20:80 weight 6 check inter 2000 rise 2 fall 3
backend server_static
mode http
option redispatch
option abortonclose
balance roundrobin
option httpchk GET /index.html
server webapp2 192.168.66.21:80 weight 6 check inter 2000 rise 2 fall 3
backend server_video
mode http
option redispatch
option abortonclose
balance roundrobin
option httpchk GET /index.html
server webapp3 192.168.66.22:80 weight 6 check inter 2000 rise 2 fall 3
在这个HAProxy配置中,通过ACL规则将三个站点分别转向webapp1、webapp2和webapp3三个服务节点上,这样变相地实现了。三个后端实例server_www、server_static和server_video虽然只有一台,但是如果站点访问量增加,可以很容易地增加后端,实现真正的。
将haproxy.conf文件复制到备用的backup-haproxy上,然后在主、备HAProxy上依次启动HAProxy服务。为了方便以后维护,最后将HAProxy的服务管理通过一个脚本来实现。
3、配置主、备Keepalived服务器
依次在主、备两个节点上安装Keepalived。在haproxy-server上,keepalived.conf的内容如下:
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_script check_haproxy {
script "killall -0 haproxy"
interval 2
weight 21
}
vrrp_instance HAProxy_HA {
state BACKUP
interface eth0
virtual_router_id 80
priority 100
advert_int 2
nopreempt
authentication {
auth_type PASS
auth_pass 1111
}
notify_master "/etc/keepalived/mail_notify.sh master"
notify_backup "/etc/keepalived/mail_notify.sh backup"
notify_fault "/etc/keepalived/mail_notify.sh fault"
track_script {
check_haproxy
}
virtual_ipaddress {
192.168.66.10/24 dev eth0
}
}
其中,/etc/keepalived/mail_notify.py文件是一个邮件通知程序,当Keepalived进行Master、Backup、Fault状态切换时,将会发送通知邮件给人员,这样可以及时了解高可用集群的运行状态,以便在适当的时候人为介入处理故障。mail_notify.py文件的内容如下:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys
reload(sys)
from email.MIMEText import MIMEText
import smtplib
import mysqldb
sys.setdefaultencoding('utf-8')
import socket,fcntl,struct
def send_mail(to_list,sub,content):
mail_host="smtp.163.com"
mail_user="username"
mail_pass="xxxxxx"
mail_postfix="163.com"
me=mail_user+"<"+mail_user+"@"+mail_postfix+">"
msg = MIMEText(content)
msg['Subject'] = sub
msg['From'] = me
msg['To'] = to_list
try:
s = smtplib.SMTP()
s.connect(mail_host)
s.login(mail_user,mail_pass)
s.sendmail(me, to_list, msg.as_string())
s.close()
return True
except Exception, e:
print str(e)
return False
def get_local_ip(ifname='eth0'):
s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
inet=fcntl.ioctl(s.fileno(),0x8915,struct.pack('256s',ifname[:15]))
ret=socket.inet_ntoa(inet[20:24])
return ret
if sys.argv[1]!="master" and sys.argv[1]!="backup" and sys.argv[1]!="fault":
sys.exit()
else:
notify_type=sys.argv[1]
if __name__=='__main__':
strcontent=get_local_ip()+ "" + notify_type+ "状态被激活,请确认HAProxy服务运行状态"
mailto_list=['xxxxxx@163.com','xxxxxx@qq.com']
for mailto in mailto_list:
send_mail(mailto,"HAProxy状态切换报警",strcontent.encode('utf-8'))
最后,将keepalived.conf文件和mail_notify.py文件复制到backup-haproxy上对应的位置,然后将keepalived.conf文件中priority值修改为90,由于配置的是不抢占模式,因此,还需要在backup-haproxy上去掉nopreempt选项。
ID:Computer-network
【推荐书籍】
以上是关于Linux运维:搭建HAProxy+Keepalived高可用负载均衡系统的主要内容,如果未能解决你的问题,请参考以下文章
Linux运维:测试HAProxy+Keepalived高可用负载均衡集群