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

[经验分享] Haproxy+keepalied实现web负载均衡

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2014-5-3 16:11:13 | 显示全部楼层 |阅读模式
一、实验拓扑图;
wKiom1Nka3-BA8XBAAMTgwCjLwc071.jpg

keepalived;
keepalived的主要目的是为ipvs提供高可用性,因此keepalived除了能够实现资源转移之外,自身能够调用ipvsadm命令来生成规则,而且还能够检测后端Rserver服务的健康状态检测。keepalived自身就是一个服务 ,启动之后工作在两个节点上(可以是多个节点),一个为当前活动节点,一个为备用节点简称为一主(master)一备(backup)。master会不时的向backup传递通告信息(这种通告信息机制是基于vrrp协议),备用节点会一值处于存活状态,backup节点一但接收不到master的通告信息,就会把资源转移到自身节点上,生成规则,继续工作,这一转移的过程,对于用户来是说透明的.


HAProxy;
haproxy是高效,可靠的高可用及负载均衡解决方案,非常适用于处理高负载站点的七层数据请求。haproxy的工作模式使其可以非常容易且安全地集成到现有的站点架构当中。并且使用类似代理软件还可以对外屏蔽内部的真实web服务,防止内部服务器受到外部攻击,用户通过访问haproxy代理服务器获得站点页面,而代理服务器在收到客户端请求后会根据自身规则将数据请求转发后端真实服务器。
二、后端服务的安装与配置;


[iyunv@web1 ~]# yum install httpd
[iyunv@web1 ~]# echo "<h1>web1.yang.com</h1>" > /var/www/html/index.html
[iyunv@web1 ~]# service httpd start
[iyunv@web1 ~]# cat /var/www/html/index.html
<h1>web1.yang.com</h1>






wKioL1NkbY7xNuUOAACQl0HxpC8161.jpg
[iyunv@web2 ~]#  yum install httpd
[iyunv@web2 ~]# echo "<h1>web2.yang.com</h1>" > /var/www/html/index.html
[iyunv@web2 ~]# service httpd start
[iyunv@web2 ~]# cat /var/www/html/index.html
<h1>web2.yang.com</h1>




wKiom1NkbdCwmOZ3AACRDzJz9N8288.jpg
[iyunv@lamp ~]# yum install php php-mysql mysql mysql-server mysql-devel
[iyunv@lamp html]# cat index.php
<?php
    $link = mysql_connect('172.16.34.1','ouyang','redhat');
    if ($link)
        echo "<h1>数据库连接成功...</h1>";
    else
        echo "<h1>数据库连接失败...</h1>";
    mysql_close();
    phpinfo();
?>




wKioL1Nkbb3B817TAALXvLCGeo4322.jpg

三、 haproxy的安装配置;
HA服务器上编译安装Haproxy;两台都需要安装,配置是一样的,这里只做一台服务器的配置,而后将其配置文件复制另一台HA即可;
#cd haproxy-1.4.24
[iyunv@ha2 haproxy-1.4.24]# uname -n
[iyunv@ha2 haproxy-1.4.24]# make TARGET=linux26 ARCH=x86_64
[iyunv@ha2 haproxy-1.4.24]# make install
[iyunv@ha2 haproxy-1.4.24]# mkdir /etc/haproxy
[iyunv@ha2 haproxy-1.4.24]# cp examples/haproxy.cfg /etc/haproxy/
[iyunv@ha2 haproxy-1.4.24]# cp examples/haproxy.init /etc/init.d/haproxy
[iyunv@ha2 haproxy-1.4.24]# chmod +x /etc/init.d/haproxy
[iyunv@ha2 haproxy-1.4.24]# chmod +x /etc/init.d/haproxy
[iyunv@ha2 haproxy-1.4.24]# chkconfig --add haproxy
[iyunv@ha2 haproxy-1.4.24]# mkdir /usr/share/haproxy
[iyunv@ha2 haproxy-1.4.24]# ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy

修改主配置文件;


[iyunv@ha2 haproxy-1.4.24]# vim /etc/haproxy/haproxy.cfg
global
        log 127.0.0.1   local0
        log 127.0.0.1   local1 notice
        #log loghost    local0 info
        maxconn 4096
        chroot /usr/share/haproxy
        uid 99
        gid 99
        daemon
        #debug
        #quiet
defaults
        log     global
        mode    http
        option  httplog        使用http日志
        option  dontlognull     不记录空连接日志,主要用于不记录健康检查日志
        retries 3         服务器连接失败后的重试次数
        option  redispatch    在http模式,如果使用cookie的服务器宕机,客户端还会坚持连接它,该选项在后端服务器宕机时强制将请求转发给其它的健康主机
        maxconn 2000
        contimeout      5000
        clitimeout      50000
        srvtimeout      50000
        timeout check   1s   设置检查超时时间
        timeout http-request    10s   连接超时时间
        timeout queue   1m
        timeout connect 10s   连接最大超时时间
        timeout client  1m   客户端最大超时时间
        timeout server  1m  服务器端最大超时时间
        timeout http-keep-alive 10s
listen  stats
        mode http
        bind 0.0.0.0:8080             #指定的IP地址与Port
        stats enable                  #开启Haproxy统计状态
        stats refresh 5s              #统计页面自动刷新的时间间隔
        stats hide-version            #状态页面不显示版本号
        stats uri   /admin           #统计页面的uri为"/admin"
        stats realm Haproxy\ admin    #统计页面认证时提示内容信息
        stats auth  admin:admin       #统计页面的用户名与密码
        stats admin if TRUE
frontend allen                    #定义前端服务器
        bind *:80
        mode http
        option httpclose              #每次请求完成主动关闭http连接
        option forwardfor             #后端服务器获取客户端的IP地址,可以从http header中获取
        acl url_static path_end -i .html .jpg .gif #定义ACL规则以如".html"结尾的文件;-i:忽略大小写
        acl url_dynamic path_end -i .php
        default_backend webservers    #客户端访问时默认调用后端服务器地址池
        use_backend lamp if url_dynamic #调用后端服务器并检查ACL规则是否被匹配
backend webservers                #定义后端服务器
        balance roundrobin            #定义算法;基于权重进行轮询
        server web1 172.16.34.2:80 check rise 2 fall 1 weight 3
        server web2 172.16.34.3:80 check rise 2 fall 1 weight 1
backend lamp
        balance source            #定义算法;源地址hash运算;类似于Nginx的ip_hash
        server lamp 172.16.34.1:80 check rise 2 fall 1
把ha-1定义好的配置文件传送至ha-2/etc/keepalived/目录下;
#scp keepalived.conf 172.16.34.20:/etc/keepalived/
#service haproxy start


启动haproxy服务,查看其状态检测页面;

wKiom1Nknb2CgksbAADC5ZQkJC8842.jpg

wKioL1NknaWghG5IAAnnB5FXoY0220.jpg


四、keepalived的安装配置;两个ha互为主从;
ha-1 vip 172.16.34.100  ha1为主,ha2为从    当主服务ha-1设备宕机了会自动切换去从服务ha-2服务
ha-2 vip 172.16.34.200  ha2为从,ha1为主    当主服务ha-2设备宕机了会自动切换去从服务ha-1服务

ha-1安装配置keepalived;


[iyunv@ha1 ~]#yum -y install keepalived
[iyunv@ha1 ~]# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
   notification_email {
   admin@163.com        定义邮件列表,当主服务器出现故障时进行主从切换时会发送邮件给邮件列表当中的所有人;
}
! Configuration File for keepalived
   notification_email_from Alexandre.Cassen@firewall.loc     定义邮件的发送者
   smtp_server 127.0.0.1          邮件服务器的IP
}
vrrp_script chk_proess {
        script "killall -0 haproxy"
        interval 1
        weight -2
}
vrrp_instance ha_1 {           定义第一个主设备ha-1
    state MASTER           ha-1主服务器
    interface eth0
    virtual_router_id 60       设置虚拟路由IP,相同的vrid为一个组,要求主从需不一致,为0-255;
    priority 100    虚拟路由组中设备的优代级,优化级高被推荐为主设备;
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.16.34.100       虚拟路由IP(VIP)
    }
        track_script {    调用上面所定义的脚本
            chk_proess
        }
}
vrrp_instance ha_2 {     定义第二个主设备ha-2
    state BACKUP    ha-2为从服务器
    interface eth0
    virtual_router_id 57        设置虚拟路由IP,相同的vrid为一个组,要求主从需不一致,为0-255;
    priority 87      虚拟路由组中设备的优代级,优化级高被推荐为主设备;
    advert_int 1
    authentication {
        auth_type PASS
         auth_pass 1111
    }
    virtual_ipaddress {
        172.16.34.200   从服务器的虚拟IP (VIP)
    }
}

ha-2安装配置keepalived;


[iyunv@ha2 ~]# #yum install -y keepalived
[iyunv@ha2 ~]# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
   notification_email {
   admin@163.com
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 127.0.0.1
}
vrrp_script chk_proess {
        script "killall -0 haproxy"
        interval 1
        weight -2
}
vrrp_instance ha_1 {
    state BACKUP       ha-1为从服务
    interface eth0
    virtual_router_id 60
    priority 99
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
virtual_ipaddress {
        172.16.34.100
    }
        track_script {
            chk_proess
        }
}
vrrp_instance ha_2 {
    state MASTER    ha-2为主服务器
    interface eth0
    virtual_router_id 57
    priority 88
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.16.34.200
    }
        track_script {
           chk_proess
        }
}

启动keepalived;
[iyunv@ha1 ~]#service keepalived start
[iyunv@ha2 ~]#service keepalived start

ha-1查看VIP是否启动;
[iyunv@ha1 ~]#ip addr show


wKioL1NkeYnwhHU-AAIYUQD7Xps300.jpg
[iyunv@ha2 ~]#ip addr show
wKiom1NkecmyWLYYAAINPJj2-rc144.jpg

五、测试静态web;分别使用两个VIP进行测试;
wKioL1NkeeTBew6oAAGRZVhYphI218.jpg

测试php;
wKiom1Nkem7zJQmgAAMq4zjUvxY838.jpg

六、故障测试;对ha-1宕机操作;
wKioL1Nkeq7DHNgrAAIo8uGLP5E163.jpg
ha-1的VIP地址已没有;而后到ha-2上查看;如下图;
wKiom1NkevziVJPaAAGdO7xptEE616.jpg
当再次启动ha-1的时候,ha-1的VIP还会自动回来;
wKioL1NkewzCMJiQAAKR7LrLCNU501.jpg

如有错误,请各位大神指出........ j_0011.jpg




运维网声明 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-18510-1-1.html 上篇帖子: linux服务器之LVS、Nginx和HAProxy负载均衡器对比 下篇帖子: HAproxy配置文件详解
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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