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

[经验分享] Haproxy+keepalived高可用、负载均衡安装部署方案

[复制链接]

尚未签到

发表于 2018-12-31 12:33:05 | 显示全部楼层 |阅读模式
  
1     
环境说明


前端两台haproxy+keepalived互为主从,提供高可用;另外基于不同域名访问不同的虚拟ip实现负载均衡
1.1     环境描述
服务器A(主、从):eth0:10.241.51.245   eth1:192.168.1.9
服务器B(从、主):eth2:10.241.51.246   eth1:192.168.1.10
服务器C(web01):eth0:10.241.51.247
服务器D(web02):eth0:10.241.51.248
VIP1:10.241.51.240 (www.a.com)
VIP2:10.241.51.250 (www.b.com)

System  OS:CentOS   5.8     2.6.32-431.el6.x86_64
1.2     系统软件
haproxy-1.4.24.tar.gz
ipvsadm-1.24.tar.gz
keepalived-1.2.12.tar.gz
pcre-8.33.tar.gz

2     安装配置部署
2.1     安装前准备
yum  install   gcc   gcc-c++  gcc*   openssl*   popt-devel  -y


[   -d   /root/soft  ]   ||   [   mkdir   /root/soft  ]
wget  http://haproxy.1wt.eu/download/1.4/src/haproxy-1.4.24.tar.gz   -P   /root/soft
wget  ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.33.tar.gz   -P   /root/soft
wget  http://keepalived.org/software/keepalived-1.2.12.tar.gz   -P   /root/soft

2.2     安装配置haproxy
2.2.1      安装haproxy
两台haproxy服务器安装配置完全相同,分别在两台上面安装配置

cd   /root/soft
tar   zxvf   haproxy-1.4.24.tar.gz
   cd   haproxy-1.4.24
   make   TARGET=linux26   ARCH=x86_64
   make   install
   mkdir   /etc/haproxy
   cp   examples/haproxy.cfg   /etc/haproxy
   cp   examples/haproxy.init   /etc/init.d/haproxy
   chmod   +x   /etc/init.d/haproxy
   ln   -s   /usr/local/sbin/haproxy   /usr/sbin/
   mkdir   /usr/share/haproxy
   chkconfig   haproxy  on

2.2.2      配置haproxy
两台haproxy服务器安装配置完全相同,分别在两台上面安装配置

#vim  /etc/haproxy/haproxy.cfg
global
           log   127.0.0.1         local0      #日志输出配置,所有日志都记录在本机,通过local0输出
           log   127.0.0.1         local1   notice

           maxconn   4096                                               #最大连接数
           chroot   /usr/share/haproxy         #改变当前工作目录。
           uid   99                                                     #所属用户的uid
           gid   99                                                     #所属用户的gid
           daemon                                                   #以后台形式运行haproxy
           #debug
           #quiet
  
defaults
           log   global
           mode            http
           #默认的模式mode   {   tcp|http|health   },tcp是4层,http是7层,health只会返回OK
           option      httplog
           option      dontlognull
           option         redispatch
           #当serverId对应的服务器挂掉后,强制定向到其他健康的服务器
           option      abortonclose
           #当服务器负载很高的时候,自动结束掉当前队列处理比较久的链接
           retries   3                                    #两次连接失败就认为是服务器不可用
           maxconn   2000                                    #默认的最大连接数
           #timeout   http-keep-alive   10s
           #   timeout   queue  1m
           contimeout      5000                        #连接超时
           clitimeout      50000                     #客户端超时
           srvtimeout      50000                     #服务器超时
           timeout   check   5s                                    #心跳检测超时
           stats   refresh   30s                                 #统计页面自动刷新时间
           stats   uri      /stats                                 #统计页面url
           stats   realm   baison-test-Haproxy                    #统计页面密码框上提示文本
           stats   auth   admin:admin123                          #统计页面用户名和密码设置
           stats   hide-version                            #隐藏统计页面上HAProxy的版本信息
frontend  www
           bind   *:80
           #这里建议使用bind   *:80的方式,要不然做集群高可用的时候有问题,vip切换到其他机器就不能访问了。
           acl   web   hdr(host)  -i   www.a.com
           #acl后面是规则名称,-i是要访问的域名,如果访问www.zhirs.com这个域名就分发到下面的webserver   的作用域。
           acl   img   hdr(host)  -i   www.b.com
           #如果访问img.baison.com.cn就分发到imgserver这个作用域。
           use_backend   webserver   if   web
           use_backend   imgserver  if   img
  
backend  webserver                                       #webserver作用域
           mode   http
           balance         roundrobin                 
           #banlance   roundrobin   轮询,balance   source   保存session值,支持static-rr,leastconn,first,uri等参数
           option      httpchk   /index.html
           #检测文件,如果分发到后台index.html访问不到就不再分发给它
           server   web01  10.241.51.247:80   check   inter  2000   fall   3   weight   30
           server   web02  10.241.51.248:80   check   inter  2000   fall   3   weight   30

backend  imgserver
           mode   http
           option      httpchk   /index.php
           balance               roundrobin                                                                              
          server   img01  10.241.51.247:81   check   inter  2000   fall   3   weight   100
          server   img02  10.241.51.248:81   check   inter  2000   fall   3   weight   10

#设置基于权值的轮叫调度,访问服务器A10次,访问B1次
启动服务:service   haproxy  start

2.2.3      测试haproxy监控界面
10.241.51.245监控:
10.241.51.246监控:
DSC0000.jpg


2.3     安装配置keepalived
2.3.1      安装keepalived
两台服务器安装相同

uname  -r
ln   -s   /usr/src/kernels/2.6.32-431.el6.x86_64/   /usr/src/linux

tar  zxvf   ipvsadm-1.24.tar.gz
cd   ipvsadm-1.24
make  &&   make   install

tar  zxvf   keepalived-1.1.19.tar.gz
cd   keepalived-1.1.19
./configure   --prefix=/usr/local/keepalived
make && make install

cp /usr/local/keepalived/sbin/keepalived   /usr/sbin/
cp /usr/local/keepalived/etc/sysconfig/keepalived/etc/sysconfig/
cp /usr/local/keepalived/etc/rc.d/init.d/keepalived/etc/init.d/
mkdir /etc/keepalived
cp /usr/local/etc/keepalived/keepalived.conf/etc/keepalived/
chkconfig --add keepalived

2.3.2      配置keepalived
Keepalived  第一台配置:

#vim  /etc/keepalived/keepalived.conf
global_defs   {
        notification_email   {
               xxxxxxxxx@qq.com
        }
        notification_email_from   keepalived@y.to
         smtp_server   127.0.0.1
        smtp_connect_timeout   30
        router_id   LVS_DEVEL
}
vrrp_script   chk_http_port   {
        #script   "/bin/nginx_pid.sh"
        script   "/bin/check_haproxy.sh"
        interval   2
        weight   2
}
vrrp_instance   VI_1  {
           state   MASTER      #辅机为   BACKUP
           interface   eth0
           virtual_router_id   51
           mcast_src_ip   10.241.51.254
           priority   100      #权值要比backup高
           advert_int   1
           authentication   {
                        auth_type   PASS
                        auth_pass   1111
           }
track_script   {  
           chk_http_port   ###   执行监控的服务  
            }
           virtual_ipaddress   {
                     10.241.51.250
           }
}
vrrp_instance   VI_2  {
           state   BACKUP
           interface   eth0
           virtual_router_id   52
           priority   99
           advert_int   1
           authentication   {
                           auth_type   PASS
                           auth_pass   1111
           }
           virtual_ipaddress   {
                        10.241.51.240     
                           }
}

Keepalived  第二台配置:

#vim  /etc/keepalived/keepalived.conf
global_defs   {
        notification_email   {
               xxxxxxx`@qq.com
        }
        notification_email_from   keepalived@y.to
         smtp_server   127.0.0.1
        smtp_connect_timeout   30
        router_id   LVS_DEVEL
}
vrrp_script   chk_http_port   {
        #script   "/bin/nginx_pid.sh"
        script   "/bin/check_haproxy.sh"
        interval   2
        weight   2
}
vrrp_instance   VI_1  {
           state   BACKUP     
           interface   eth2        #注意此处网卡序号
           virtual_router_id   51
           mcast_src_ip   10.241.51.254
           priority   90   
           advert_int   1
           authentication   {
                        auth_type   PASS
                        auth_pass   1111
           }
track_script   {  
           chk_http_port   ###   执行监控的服务  
            }
           virtual_ipaddress   {
                     10.241.51.250
           }
}
vrrp_instance   VI_2  {
           state   MASTER
           interface   eth2  #注意此处网卡序号
           virtual_router_id   52
           priority   100
           advert_int   1
           authentication   {
                           auth_type   PASS
                           auth_pass   1111
           }
           virtual_ipaddress   {
                        10.241.51.240     
                           }
}

2.3.3      监控haproxy进程脚本
两台keepalived脚本相同

[root@node01 soft]# cat  /bin/check_haproxy.sh
#!/bin/bash
if [ $(ps -C haproxy --no-header | wc -l)-eq 0 ]; then
    /etc/init.d/haproxy  start
fi
sleep 5
if [ $(ps -C haproxy --no-header | wc -l)-eq 0 ]; then
      /etc/init.d/keepalived stop
fi



两台keepalived服务器均启动keepalived服务: service keepalived start
添加到开机启动项目:chkconfig--add keepalived && chkconfig keepalived on

2.4     管理haproxy\keepalived
2.4.1      查看虚拟ip信息
# ip addr

Keepalived01:10.241.51.245
DSC0001.jpg
Keepalived02:10.241.51.246
DSC0002.jpg

2.4.2      测试网站高可用和负载均衡


正常访问网站:www.a.com www.b.com,前提是绑定本地hosts或者设置dns域名解析
测试基于权值的轮叫调度访问:访问A10次才能访问B1次
关闭一台haproxy,访问两个网站:均可以访问(观察虚拟ip的变化,虚拟ip均迁移到第二台)

恢复第一台的haproxy,观察虚拟ip变化:虚拟ip恢复为默认

建议:
a.最好是将虚拟两个ip均绑定到两个网站域名,从而实现真正的负载均衡和高可用;或者两个upstream对应后端相同的物理应用服务器
10.241.51.240 www.a.com
10.241.51.240 www.b.com
10.241.51.250 www.a.com
10.241.51.250 www.b.com
b.脚本中可以增加网络层面的监控,保证网络和服务任何一个不可用,均切换
c.对于特殊的url访问规则,haproxy无法实现的情况,可以考虑采用nginx+keepalived+脚本监控服务实现
  





运维网声明 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-657960-1-1.html 上篇帖子: 高可用集群keepalived之安装配置 下篇帖子: 实战 LVS+Keepalived 实现负载均衡和高可用
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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