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

[经验分享] Redhat5下haproxy+keepalived+nginx配置笔记

[复制链接]

尚未签到

发表于 2018-12-31 14:39:24 | 显示全部楼层 |阅读模式
Redhat5下haproxy+keepalived+nginx配置笔记

----by knight

  HA:高可用性

keepalived个人简单理解就是实现一个虚IP在keepalived主从服务器之间切换的功能,当主的keeplived挂掉,从机会无缝接管该虚IP。

keepalived它作为一个辅助实现高可用性工具,一般都会配合某个具体服务工作,例如mysql,drbd,haproxy等,本篇介绍的就是haproxy,在前期做好keepalived配置后,做一个切换脚本,当haproxy挂掉后,脚本会立即执行keepalived关闭操作,从而让从机接管,该虚IP其实会和本机的物理IP做绑定,访问虚IP其实就可以理解为访问本机物理IP,该虚IP会在脚本被触发后切换到从机,而后访问虚IP也就是在访问从机物理IP,从而实现haproxy的高可用性。

这个实验模拟的功能其实就是利用haproxy实现apache服务器间的负载均衡,缓解并发压力,并保证haproxy-master若挂掉,haproxy-backup能无缝接管,实现WEB站点负载均衡+高可用性。保证客户端无缝获取网站资源。

解决方案:

系统环境:centos5

nginx: nginx-1.2.8

haproxy: haproxy-1.4.8

keepalived:keepalived-1.2.7

haproxy VIP(虚拟ip):                 192.168.1.120

haproxy-master(haproxy1):    192.168.1.108    www1.example.com

haproxy-backup(haproxy2):     192.168.1.109   www2.example.com

nginx1:                     192.168.1.108   www1.example.com

nginx2:                     192.168.1.109   www2.example.com

由于我只开了两个虚拟机,所以loadbalancer(负载均衡器)也做web。

192.168.1.108 ==192.168.7.71

192.168.1.109 ==192.168.7.72

192.168.1.108 == 192.168.7.73 web1

192.168.1.109 == 192.168.7.74


(haproxy1)为仅haproxy1配置

(haproxy2)为仅haproxy2配置

(haproxy1,haproxy2)为haproxy1和haproxy2都得配置

部署环境:

1.关闭iptables和SELINUX

# service iptables stop

# setenforce 0

# vi /etc/sysconfig/selinux

---------------

SELINUX=disabled

---------------

2.nginx安装

这里不做介绍。

安装完毕只需配置客户端浏览器访问根页面显示本机IP地址。

一.haproxy安装配置:(haproxy1,haproxy2)

# wget http://haproxy.1wt.eu/download/1.4/src/haproxy-1.4.8.tar.gz

# tar zxvf haproxy-1.4.8.tar.gz

# cd haproxy-1.4.8

# uname -a          //查看linux内核版本

# make TARGET=linux26 PREFIX=/usr/local/haproxy

# make install PREFIX=/usr/local/haproxy

# useradd -s /sbin/nologin haproxy

# passwd haproxy

# chown -R haproxy.haproxy /usr/local/haproxy

配置:

# vi /usr/local/haproxy/haproxy.cfg

-----------------

global

log 127.0.0.1 local0

maxconn 5120   

chroot /usr/local/haproxy   

user haproxy   

group haproxy   

daemon   

quiet   

nbproc  1   

pidfile /usr/local/haproxy/haproxy.pid

#启动服务后后会滚动日志,生产环境建议注释掉

debug   

defaults

log 127.0.0.1 local3   

mode http   

option httplog

option httpclose

option  dontlognull

#option  forwardfor   

option  redispatch

retries 2

maxconn 2000

balance source   

contimeout      5000  

clitimeout      50000  

srvtimeout      50000  

listen 192.168.1.120 :81//由于负载均衡器和web是同一台所以不能用80,会端口冲突。

     server www1 192.168.1.108:80  weight 5 check inter 2000 rise 2 fall 5

     server www2 192.168.1.109:80  weight 5 check inter 2000 rise 2 fall 5

listen stats :8888   //监控页面端口

mode http   

#transparent   

stats uri / haproxy-stats   

stats realm Haproxy \ statistic

#认证

stats auth haproxy:password   //haproxy监控页面的帐密

-----------------

启动haproxy

# /usr/local/haproxy/sbin/haproxy -f/usr/local/haproxy/haproxy.cfg &

注:这里加上“&”是为了让haproxy服务后台运行,去掉“&”可实时查看其滚动日志

日志:

------------------------

Available polling systems :

    sepoll : pref=400, test result OK

     epoll : pref=300, test result OK

      poll : pref=200, test result OK

    select : pref=150, test result OK

Total: 4 (4 usable), will use sepoll.

Using sepoll() as the polling mechanism.

00000000:web_proxy.accept(0004)=0007from [192.168.7.129:5752]

00000000:web_proxy.clireq[0007:ffff]:GET / HTTP/1.1

00000000:web_proxy.clihdr[0007:ffff]:Accept: text/html, application/xhtml+xml, */*

00000000:web_proxy.clihdr[0007:ffff]:Accept-Language: zh-CN

00000000:web_proxy.clihdr[0007:ffff]:User-Agent: Mozilla/5.0 (compatible; MSIE

9.0; Windows NT 6.1; WOW64; Trident/5.0)

00000000:web_proxy.clihdr[0007:ffff]:Accept-Encoding: gzip, deflate

00000000:web_proxy.clihdr[0007:ffff]:Host: 192.168.7.71

00000000:web_proxy.clihdr[0007:ffff]:If-Modified-Since: Tue, 28 May 2013 18:22:10

GMT

00000000:web_proxy.clihdr[0007:ffff]:If-None-Match: "10-4ddcb57ecf1ee"

00000000:web_proxy.clihdr[0007:ffff]: Connection:Keep-Alive

00000000:web_proxy.srvrep[0007:0008]:HTTP/1.1 304 Not Modified

00000000:web_proxy.srvhdr[0007:0008]:Date: Tue, 28 May 2013 19:48:35 GMT

00000000:web_proxy.srvhdr[0007:0008]:Server: Apache/2.4.4 (Unix)

00000000:web_proxy.srvhdr[0007:0008]:Connection: close

00000000:web_proxy.srvhdr[0007:0008]:ETag: "10-4ddcb57ecf1ee"

00000000:web_proxy.srvcls[0007:0008]

00000000:web_proxy.clicls[0007:0008]

00000000:web_proxy.closed[0007:0008]

------------------------

查看是否启动

# ps -ef|grep haproxy




重启haproxy

# pkill haproxy

# /usr/local/haproxy/sbin/haproxy -f/usr/local/haproxy/haproxy.cfg




其中:

haproxy代理:192.168.1.120:81

nginx1:    192.168.1.108:80

nginx2:    192.168.1.109:80

统计页面监听的端口:8888

访问页面:

http://192.168.1.108:8888

认证账号/密码:haproxy/password






总结:

通过日志可以看出,客户端192.168.1.103连接haproxy192.168.7.71的80端口,且客户端无论如何刷新页面,haproxy都只会把访问请求跳转到nginx的192.168.1.109地址,这是因为balance source这个参数会保持会话ID,如果改成balance roundrobin模式,那么客户端会轮流连接两台web服务器,线上还是建议使用balance source,这样会保持某一客户端在长时间内保持他的会话,不会来回跳转。

这里其实已经利用haproxy完成了对两台nginx服务器的负载均衡功能,但如何保证负载均衡的高可用性,这里就得利用keepalived的热备功能,保证haproxy1如果挂掉,haproxy2能实时接管,实现网站前端负载均衡高可用,这也是我们目前比较流行的组合haproxy+keepalived。

二.keepalived安装配置:(haproxy1,haproxy2)

# wget http://www.keepalived.org/software/keepalived-1.2.7.tar.gz

# tar zxvf keepalived-1.2.7.tar.gz

# cd keepalived-1.2.7

# ./configure--prefix=/usr/local/keepalived --with-kernel-

dir=/usr/src/kernels/2.6.32-279.el6.x86_64

# make && make install

设置keepalived启动脚本

# cp/usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/

# cp/usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/

# mkdir /etc/keepalived

# cp/usr/local/keepalived/sbin/keepalived /usr/sbin/

# chkconfig keepalived on

(haproxy1)

# vi /etc/keepalived/keepalived.conf

----------------------

! Configuration File for keepalived

global_defs {

router_id LVS_DEVEL

}

vrrp_instance VI_1 {

state MASTER

interface eth0

virtual_router_id 51

priority 150

advert_int 1

authentication {

auth_type PASS

auth_pass 1111

}

virtual_ipaddress {

192.168.1.120

}

}

----------------------

(haproxy2)

# vi /etc/keepalived/keepalived.conf

----------------------

! Configuration File for keepalived

global_defs {

router_id LVS_DEVEL

}

vrrp_instance VI_1 {

state BACKUP

interface eth0

virtual_router_id 51

priority 120

advert_int 1

authentication {

auth_type PASS

auth_pass 1111

}

virtual_ipaddress {

192.168.1.120

}

}

----------------------

启动keepalived

# service keepalived start

# ps -ef |grep keepalived

----------------------




注:在没有做haproxy+keepalived的脚本(check_haproxy.sh)是没有红色框那一行



-----------------------

创建haproxy+keepalived脚本:

实现当haproxy挂掉后,能再次启动haproxy,若无法再次启动则彻底关闭keepalived将VIP交给

从机处理。

(haproxy1,haproxy2)

# vi /etc/keepalived/check_haproxy.sh

---------------------

#!/bin/bash

while :

do

hapid=`ps -C haproxy --no-header |wc -l`

  if [ $hapid -eq 0 ];then

  /usr/local/haproxy/sbin/haproxy-f /usr/local/haproxy/haproxy.cfg

  sleep 5

    if [ $hapid -eq 0 ];then

    /etc/init.d/keepalivedstop

    fi

  fi

  sleep 5

done

--------------------

改执行权限

# chmod 755 /etc/keepalived/check_haproxy.sh

强制后台执行(关闭客户端连接也会继续运行)

# nohup sh /etc/keepalived/check_haproxy.sh


三.测试:

1.在两台机器上分别执行ip add,目前显示VIP在haproxy1上与本机网卡绑定

(haproxy1)

# ip add

-----------------------






-----------------------

(haproxy2)

# ip add

-----------------------




-----------------------

在浏览器访问该虚IP:

http://192.168.1.120

返回如图:




证明,keepalived让haproxy1接管负载均衡,将页面跳转到nginx1上

2.停掉haproxy1上的haproxy服务,5秒后keepalived会自动将其再次启动

(haproxy1)

# pkill haproxy

等5秒

# ps -ef |grep haproxy

--------------




--------------

3.停掉主的keepalived,备机马上接管服务

(haproxy1)

# service keepalived stop

# uname -a

---------------




---------------

(haproxy2)

# ip add




现已跳转到haproxy2,在浏览器再次访问该虚IP:

http://192.168.7.70

返回如图:




OK

  

  





运维网声明 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-658034-1-1.html 上篇帖子: LVS与KEEPALIVED实现高性能高可用负载均衡服务器 下篇帖子: keepalived整合lvs实现nginx高可用负载均衡
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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