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

[经验分享] HAProxy双机高可用之HAProxy+Keepalived

[复制链接]

尚未签到

发表于 2018-12-30 10:22:35 | 显示全部楼层 |阅读模式
Haproxy

  HAProxy 提供高可用性、负载均衡以及基于 TCP 和 HTTP 应用的代理,支持虚拟主机,
  它是免费、快速并且可靠的一种解决方案。HAProxy 特别适用于那些负载特大的 web 站
  点, 这些站点通常又需要会话保持或七层处理。HAProxy 运行在当前的硬件上,完全可
  以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前
  的架构中, 同时可以保护你的 web 服务器不被暴露到网络上。

  
实验环境:rhel6.5 selinux and iptables disabled
  实验主机: 192.168.2.36  haproxy
  192.168.2.38  web1
  192.168.2.39  web2
  软件下载:http://haproxy.1wt.eu/
  rpm 包方式:
  rpmbuild -tb haproxy-1.4.24.tar.gz
  rpm -ivh /root/rpmbuild/RPMS/x86_64/haproxy-1.4.24x86_64.rpm
  源码方式:
  tar zxf haproxy-1.4.24.tar.gz
  cd haproxy-1.4.24
  make TARGET=linux26 ARCH=x86_64 USE_PCRE=1 PREFIX=/usr/local/haproxy install
  在安装过程中可能需要一些依赖包
  yum install pcre-devel  make gcc -y
  #mkdir -p /usr/share/haproxy
  配置:
  vi /etc/haproxy/haproxy.cfg
  global
  log 127.0.0.1 local0 #指定日志设备
  log 127.0.0.1 local1 notice
  #log loghost local0 info #指定日志类型,还有 err warning debug
  maxconn 65535 #并发最大连接数量
  chroot /usr/share/haproxy #jail 目录
  uid 99 #用户
  gid 99 #组
  daemon #后台运行
  #debug
  #quiet
  defaults
  log
  global
  mode http #默认使用 http 的 7 层模式 tcp: 4 层
  option httplog #http 日志格式
  option dontlognull #禁用空链接日志
  retries 3 #重试 3 次失败认为服务器不可用
  option redispatch #当 client 连接到挂掉的机器时,重新分配到健康的主机
  maxconn 65535
  contimeout 5000  
  #连接超时
  clitimeout 50000 #客户端超时
  srvtimeout 50000 #服务器端超时
  stats uri /status #haproxy 监控页面  
  listen www.example.com *:80 #监听的实例名称,地址和端口
  balance roundrobin #负载均衡算法
   server web1 192.168.2.38:80 cookie app1inst1 check inter 2000 rise 2 fall 5
  server web2 192.168.2.39:80 cookie app1inst2 check inter 2000 rise 2 fall 5
  #cookie app1inst1:表示 serverid 为 app1inst1
  #check inter 2000:检测心跳频率
  #rise 2:表示 2 次正确认为服务器可用
  #fall 5:表示 5 次失败认为服务器不可用
  # /etc/init.d/haproxy start
  访问 http://www.example.com 测试负载 网页在两个web上切换表示成功
  访问 haproxy 监控页面:http://192.168.2.136/status


  Keepalived+lvs
系统负载均衡架构:

  
主机环境:RHEL6 系列 selinux and iptables disabled
实验主机:
LVS‐ACTIVE: 192.168.2.136
LVS‐BACKUP:192.168.2.146
LVS‐VIP:192.168.2.111
Realsever:192.168.2.38 192.168.2.39
主备机上的软件包安装与配置
yum install ipvsadm kernel-devel openssl-devel popt-devel libnl-devel gcc make -y
wget http://www.keepalived.org/software/keepalived-1.2.12.tar.gz
tar zxf keepalived-1.2.5.tar.gz
cd keepalived-1.2.5
./configure --prefix=/usr/local/keepalived
...
Keepalived configuration
------------------------
Keepalived version: 1.2.5
Compiler: gcc
Compiler flags: -g -O2
Extra Lib: -lpopt -lssl -lcrypto -lnl
Use IPVS Framework: Yes
IPVS sync daemon support : Yes
IPVS use libnl: Yes
Use VRRP Framework: Yes
Use VRRP VMAC: Yes
SNMP support: No
Use Debug flags: No
#make
#make install
ln -s /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
ln -s /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
ln -s /usr/local/keepalived/etc/keepalived /etc/
ln -s /usr/local/keepalived/sbin/keepalived /usr/sbin
#vi /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
root@localhost #接收警报的 email 地址,可以添加多个
}
notification_email_from keepalived@desktop36.example.com #设置邮件的发送地址
smtp_server 127.0.0.1 #设置 smtp server 地址
smtp_connect_timeout 30 #设置连接 smtp 服务器超时时间
router_id LVS_DEVEL #load balancer 的标识 ID,用于 email 警报
}
vrrp_instance VI_1 {
state MASTER #备机改为 BACKUP,此状态是由 priority 的值来决定的,当前
priority 的值小于备机的值,那么将会失去 MASTER 状态
interface eth0 #HA 监测网络接口
virtual_router_id 51 #主、备机的 virtual_router_id 必须相同,取值 0-255
priority 100 #主机的优先级,备份机改为 50,主机优先级一定要大于备机
advert_int 1 #主备之间的通告间隔秒数
authentication {            #主备切换时的验证
auth_type PASS           #设置验证类型,主要有 PASS 和 AH 两种
auth_pass 1111             #设置验证密码,在一个 vrrp_instance 下,MASTER 与 BACKUP 必
                                        须使用相同的密码才能正常通信
}
virtual_ipaddress {
192.168.2.111 #设置虚拟 IP 地址,可以设置多个虚拟 IP 地址,每行一个
}  
}
virtual_server 192.168.2.111 80 {  #定义虚拟服务器
delay_loop 6                                 #每隔 6 秒查询 realserver 状态
lb_algo rr                                      #lvs 调度算法,这里使用轮叫
lb_kind DR  #LVS 是用 DR 模式
#persistence_timeout 50           #会话保持时间,单位是秒,这个选项对于动态网页是非常有
用的,为集群系统中 session 共享提供了一个很好的解决方案。有了这个会话保持功能,用户的
请求会被一直分发到某个服务节点,直到超过这个会话保持时间。需要注意的是,这个会话保
持时间,是最大无响应超时时间,也就是说用户在操作动态页面时,如果在 50 秒内没有执行任
何操作,那么接下来的操作会被分发到另外节点,但是如果一直在操作动态页面,则不受 50 秒
的时间限制。
protocol TCP #指定转发协议类型,有 tcp 和 udp 两种
real_server 192.168.2.38 80 { #配置服务节点
weight 1 #配置服务节点的权值,权值大小用数字表示,数字越大,权
值越高,设置权值的大小可以为不同性能的服务器分配不同的负载,可以对性能高的服务器设
置较高的权值,而对性能较低的服务器设置相对较低的权值,这样就合理的利用和分配了系统
资源
TCP_CHECK {  #realserve 的状态检测设置部分,单位是秒
connect_timeout 10 #10 秒无响应超时
nb_get_retry 3 #重试次数
delay_before_retry 3 #重试间隔
}
}
real_server 192.168.2.39 80 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
virtual_server 192.168.2.111 21{   
delay_loop 6                                 
lb_algo rr                                      
lb_kind DR  
persistence_timeout 50            
protocol TCP
real_server 192.168.2.38 21 {  
TCP_CHECK {  
connect_timeout 10  
nb_get_retry 3  
delay_before_retry 3  
}
}
real_server 192.168.2.39 21 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
注:备机的 keepalived 配置文件只改动红色字体部分!
分别在 realserver 上执行以下命令
#ifconfig eth0:1 192.168.0.163 netmask 255.255.255.255  up
#vim /etc/sysconfig/arptables  
# Generated by arptables-save v0.0.8 on Fri Aug  8 06:12:56 2014
*filter
:IN ACCEPT [497:13916]
:OUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
[0:0] -A IN -d 192.168.2.111 -j DROP
[0:0] -A OUT -s 192.168.2.111 -j mangle --mangle-ip-s 192.168.2.38
COMMIT
# Completed on Fri Aug  8 06:12:56 2014
#/etc/init.d/arptables_jf restart
#/etc/init.d/httpd stop
#/etc/init.d/httpd start
然后启动keepalived
#/etc/init.d/keepalived start
用ipvsadm -l查看连接状况

  
测试
:
1. 高可用测试:停止 master 上的 keepalived 服务,看 backup 是否接管。
2. 负载均衡测试:访问 http://192.168.2.111,看到页面在两个 realserver 上切换表示成功!
你也可以通过 ipvsadm -l 查看详细连接情况!
3. 故障切换测试:任意关闭 realserver 上的 httpd 服务,Keepalived 监控模块是否能及时发现,
然后屏蔽故障节点,同时将服务转移到正常节点来执行。
haproxy+keepalived (解决haproxy的单点故障)
MASTER:
# vim keepalived.conf
! Configuration File for keepalived
  
vrrp_script check_haproxy {
script "/etc/keepalived/check_haproxy"
}
  
global_defs {
   notification_email {
        root@localhost
   }
   notification_email_from keepalived@desktop36.example.com
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}
  
vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.2.111
    }
        track_script {
        check_haproxy
   }
}
BACKUP:
# vim keepalived.conf
! Configuration File for keepalived
  
global_defs {
   notification_email {
        root@localhost
   }
   notification_email_from keepalived@desktop46.example.com
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}
  
vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 51
    priority 50
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
      192.168.2.111
    }
track_script {
        check_haproxy
   }
}
检测脚本:
# vim /etc/keepalived/check_haproxy.sh
#!/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
假如说haproxy挂掉了,那keepalived就会停掉,而把haproxy转接到备机上,这样就解决了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-657501-1-1.html 上篇帖子: KeepAlived实现HAProxy双主并实现资源的动静分离 下篇帖子: CentOS 7 上配置LVS + keepalived + ipvsadm
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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