HAProxy+Keepalived高可用负载均衡系统
环境准备
192.168.37.37 主haproxy配置
192.168.37.40 备haproxy配置
192.168.37.38 后端真实服务器1
192.168.37.39 后端真实服务器2
后端真实服务器配置
[root@rs1 ~]# yum install httpd -y
[root@rs1 ~]# echo "welcome www.zb.com" >>/var/www/html/index.html
[root@rs1 ~]# systemctl start httpd
[root@rs2 ~]# yum install httpd -y
[root@rs2 ~]# echo "welcome static.zb.com" >>/var/www/html/index.html
[root@rs2 ~]# systemctl start httpd
安装haproxy
[root@haprox1 ~]yum install haproxy -y
备份haproxy配置文件
[root@haprox1 ~]# cp /etc/haproxy/haproxy.cfg{,.bak}
修改配置文件
[root@haprox1 ~]# vim /etc/haproxy/haproxy.cfg
global
# to have these messages end up in /var/log/haproxy.log you will
# need to:
#
# 1) configure syslog to accept network log events. This is done
# 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.log
#
log 127.0.0.1 local2
chroot /var/lib/haproxy
pidfile /var/run/haproxy.pid
maxconn 4000
user haproxy
group haproxy
daemon
# turn on stats unix socket
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
frontend main *:80
acl host_www hdr_dom(host) -i www.zb.com
acl host_static hdr_dom(host) -i static.zb.com
use_backend server_www if host_www
use_backend server_static if host_static
backend static
balance roundrobin
server static 127.0.0.1:4331 check
backend server_www
balance roundrobin
server app1 192.168.37.38:80 check
backend server_static
balance roundrobin
server app2 192.168.37.39:80 check
访问www.zb.com,跳转到192.168.37.38
访问static.zb.com,跳转到192.168.37.39
Haproxy2 与haproxy1配置相同
配置主、备用keepalived服务器
安装keepalived
[root@haprox1 keepalived]# yum install keepalived
备份配置文件
[root@haprox1 ~]# cp /etc/keepalived/keepalived.conf{,.bak}
配置keepalived文件
[root@haprox1 keepalived]# vim keepalived.conf
! Configuration File for keepalived
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 HAPROXY_DEVEL_1 负载均衡器标识,唯一
}
vrrp_instance HAProxy_HA {
state MASTER master为工作状态,backup为备用状态
interface ens33 外提供服务的网络接口
virtual_router_id 51 虚拟路由标志,master和backup的标志相同
priority 100 优先级,master的优先级大于backup的优先级
advert_int 1 同步间隔通知,master和backup之间同步检查的时间间隔
authentication { 验证包括验证方式和密码,验证方式分为PASS和AH
auth_type PASS
auth_pass 1111
}
virtual_ipaddress { 虚拟IP地址,与VIP相同
192.168.37.30
}
}
[root@haproxy2 ~]# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
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 HAPROXY_DEVEL_2
}
vrrp_instance HAProxy_HA {
state BACKUP
interface ens33
virtual_router_id 51
priority 50
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.37.30
}
}
启动keepalived服务
[root@haprox1 keepalived]# systemctl start keepalived
[root@haprox2 keepalived]# systemctl start keepalived
验证
[root@haprox1 ~]# ip a |grep ens33
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
inet 192.168.37.37/24 brd 192.168.37.255 scope global ens33
inet 192.168.37.30/32 scope global ens33
[root@haproxy2 ~]# ip a|grep ens33
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
inet 192.168.37.40/24 brd 192.168.37.255 scope global ens33
停止主haproxy的keepalived
[root@haprox1 ~]# systemctl stop keepalived
[root@haprox1 ~]# ip a |grep ens33
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
inet 192.168.37.37/24 brd 192.168.37.255 scope global ens33
[root@haproxy2 ~]# ip a|grep ens33
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
inet 192.168.37.40/24 brd 192.168.37.255 scope global ens33
inet 192.168.37.30/32 scope global ens33
查看访问情况
[root@localhost ~]# echo "192.168.37.30 www.zb.com static.zb.com" >>/etc/hosts
[root@localhost ~]# curl -dump http://www.zb.com
welcome www.zb.com
[root@localhost ~]# curl -dump http://static.zb.com
welcome static.zb.com
浙公网安备 33010602011771号