设为首页 收藏本站
查看: 1864|回复: 0

[经验分享] 基于keepalived的Haproxy高可用配置

[复制链接]

尚未签到

发表于 2018-12-28 11:04:21 | 显示全部楼层 |阅读模式
  一、概述:
  HAProxy是一个用于4层或7层的高性能负载均衡软件,在大型网站的大型Web服务器群集中,HAProxy可用来替代专业的硬件负载均衡设备,节省大量的开支。
  通常情况下,为了避免整个体系中出现单点故障,在至关重要的架构中,都需要部署备份设备,同样,负载均衡设备也不能部署单台,一旦主设备出现问题之后,备份设备可对主设备进行接管。实现不间断的服务,这便是Keepalived的作用。
  于是,HAProxy和Keepalived的组合便成了省钱高效的Web服务器负载均衡架构。
  拓扑图:

  二、前端负载均衡层配置:
  1.ha_1配置:
配置keepalived
[root@ha_1 ~]# yum install -y keepalived
[root@ha_1 ~]# cd /etc/keepalived/
[root@ha_1 keepalived]# cp keepalived.conf keepalived.conf.bak
[root@ha_1 keepalived]# vim keepalived.conf
! Configuration File forkeepalived
global_defs {
notification_email {  #邮件通知机制
root@localhost
maoqiuguo@localhost
}
notification_email_from kaadmin@localhost
smtp_server 127.0.0.1  #使用本机邮件服务
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_script chk_haproxy {  #检测haprox服务状态
script "killall -0 haproxy"
interval 1
weight 2   #权重
}
###########VRRP_INSTANCE VI_1###########实例1的配置
vrrp_instance VI_1 {
state MASTER   #在ha_1上面是主,对端ha_2上面是备
interface eth0
virtual_router_id 100  #路由ID
priority 100  #优先级
advert_int 1
authentication {  #路由之间认证
auth_type PASS
auth_pass 123.com
}
virtual_ipaddress {   #VIP配置
172.16.41.100/16dev eth0  label eth0:0
}
track_script {   #追踪脚本
chk_haproxy
}
track_interface {  #追踪端口
eth0
}
#通知脚本
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############实例2的配置
vrrp_instance VI_2 {
state BACKUP  #在ha_1上面是被,对端ha_2上面是主
interface eth0
virtual_router_id 200  #路由ID
priority 199  #优先级
advert_int 1
authentication {  #路由间认证
auth_type PASS
auth_pass 123.com
}
virtual_ipaddress {  #VIP配置
172.16.41.101/16dev eth0  label eth0:1
}
track_interface {  #追踪端口
eth0
}
track_script {  #追踪脚本
chk_haproxy
}
}
######################################
为ha_1的keepalived提供脚本文件:
[root@ha_1 ~]# vim /etc/keepalived/notify.sh
#!/bin/bash
# Author: MageEdu    脚本使用请注明出处
# description: An example of notify script
#
vip=172.16.41.100
contact='root@localhost'
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
#赋予执行权限:
[root@ha_1 ~]# chmod +x /etc/keepalived/notify.sh  

  

  配置haproxy.
[root@ha_1 haproxy]# yum install haproxy -y
[root@ha_1 ~]# cd /etc/haproxy/
[root@ha_1 haproxy]# cp haproxy.cfg haproxy.cfg.bak
[root@ha_1 haproxy]# vim haproxy.cfg
global  #全局配置
log         127.0.0.1 local2  #日志功能
chroot      /var/lib/haproxy#修改haproxy的工作目录至指定的目录并在放弃权限之前执行chroo
t()操作,可以提升haproxy的安全级别,不过需要注意的是要确保指定的目录为空
目录且任何用户均不能有写权限;
pidfile     /var/run/haproxy.pid
maxconn     4000
user        haproxy
group       haproxy
daemon  #让haproxy以守护进程的方式工作于后台
defaults
mode                    http #指定haproxy的工作模式
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 0.0.0.0:1080 #绑定1080端口
stats enable#开启stats功能
stats hide-version #隐藏haproxy版本信息
stats uri  /myadmin?stats  #在浏览器中通过什么样的URI访问stats页面
stats realm Haproxy\ Statistics #认证注释信息
stats auth  maoqiu:123.com  #认证机制(User:Password)
stats admin ifTRUE  #如果认证成功,则赋予管理权限
acl allow src 172.16.0.0/16#访问控制,只允许是这个网段的客户端访问
tcp-request content accept ifallow
tcp-request content reject
frontend proxy  #前端代理
bind *:80  #监听80port
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 .gif .png .css .js .html
use_backend static_servers ifurl_static
default_backend dynamic_servers
backend static_servers  #后端静态server
balance source#基于source算法调度
server imgsrv1 192.168.100.2:80 check maxconn 6000
backend dynamic_servers   #后端动态server
balance source#基于source算法调度
server websrv1 192.168.100.1:80 check maxconn 6000  

  

  

  2.ha_2配置:
  
  配置keepalived:
! Configuration File forkeepalived
global_defs {
notification_email {
root@localhost
maoqiuguo@localhost
}
notification_email_from kaadmin@localhost
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###########
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 100
priority 99
advert_int 1
authentication {
auth_type PASS
auth_pass 123.com
}
virtual_ipaddress {
172.16.41.100/16dev eth0 label eth0:0
}
track_script {
chk_haproxy
}
track_interface {
eth0
}
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############
vrrp_instance VI_2 {
state MASTER
interface eth0
virtual_router_id 200
priority 200
advert_int 1
authentication {
auth_type PASS
auth_pass 123.com
}
virtual_ipaddress {
172.16.41.101/16dev eth0 label eth0:1
}
track_interface {
eth0
}
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"
}
#####ha_2上面的脚本文件同ha_1,须将VIP修改为172.16.41.101,再赋予权限即可!
  

  配置kehaproxy:
      因为在前端的haproxy功能都是将服务代理至至后端的Real Server,每项配置都是一样的,所以在ha_2上安装好haproxy之后将ha_1上面的配置文件copy过来即可!
[root@ha_2 keepalived]# scp root@172.16.41.1:/etc/haproxy/haproxy.cfg /etc/haproxy/
  3.启动keepalived测试:
当两个前端节点的服务正常状态时:


  

当把某个前端节点的haproxy服务停止后的状态:


  

  目前keepalived为haporxy提供高可用已经达到目的,下面继续关于haproxy的动静分离机制和haproxy 统计信息输出机制的实现.

  

  三、后端Web Server(RS1/RS2,意为Real Server)配置
在拓扑图中规划RS1为客户端请求的动态内容提供服务,RS2为客户端请求静态内容提供服务
1.为RS1提供动态内容页面(我这里使用直接使用一个php的测试页)
[root@RealServer1 ~]# yum install -y php php-mysql
[root@RealServer1 ~]# vim /var/www/html/index.php
Real Server1

[root@RealServer1 ~]# service httpd start
Starting httpd:                                           [  OK  ]
[root@RealServer1 ~]#  2.RS2提供图片或者html网页文档
#放个html网页文档
[root@RealServer2 ~]# vim /var/www/html/index.html
Real Server2
#放张图片
[root@RealServer2 ~]# cd /var/www/html/
[root@RealServer2 html]# ls
index.html  tux_windows.jpg
[root@RealServer2 html]#四、测试:
1.静态内容测试:



2.动态内容测试:

  

3.haproxy统计页面输出机制:

  

      haproxy的动静分离以及统计信息的输出机制在两个代理节点上都正常的情况下没有问题,最后再次将某一代理服务关闭后还是一样访问正常;基于keepalived的haproxy高可用实验成功!
  

  





运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-656807-1-1.html 上篇帖子: 基于keepalived实现LVS的高可用 下篇帖子: keepalived基本应用解析
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表