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

[经验分享] rhel6

[复制链接]

尚未签到

发表于 2018-12-29 07:24:14 | 显示全部楼层 |阅读模式
rhel6-HAproxy+keepalived

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

HAProxy实现了一种事件驱动、单一进程模型,此模型支持非常大的并发连接数。多进程或多线程模型受内存限制、系统调度器限制以及无处不在的锁限制,很少能处理数千并发连接。事件驱动模型因为在有更好的资源和时间管理的用户端(User-Space)实现所有这些任务,所以没有这些问题。此模型的弊端是,在多核系统上,这些程序通常扩展性较差。


1.环境设置:

HA节点:

haproxy+keepalived:192.168.122.34 desk34

haproxy+keepalived:192.168.122.33 desk33

WEB节点:

动态节点:192.168.122.3  desk3

  192.168.122.82 desk82

静态节点:192.168.122.160 server60



二.服务器的安装配置

1.haproxy的安装

(1)rpm方式安装

[root@desk34 ~]# yum -yinstall rpm-build

[root@desk34 ~]# rpmbuild-tb haproxy-1.4.23.tar.gz

error:Failed build dependencies:

pcre-develis needed by haproxy-1.4.23-1.x86_64

[root@desk34 ~]# yum -yinstall pcre-devel

[root@desk34 ~]# cd/root/rpmbuild/RPMS/x86_64/

[root@desk34 x86_64]# rpm-ivh haproxy-1.4.23-1.x86_64.rpm

两个节点上均安装

(2)源码方式:

tar zxfhaproxy-1.4.23.tar.gz

cd haproxy-1.4.23

make TARGET=linux26ARCH=x86_64 USE_PCRE=1 PREFIX=/usr/local/haproxy

make install

2.配置文件修改





    • haproxy的配置文件详解

      配置文件的位置:/etc/haproxy/haproxy.cfg

      配置文件内容如下:


# thisconfig needs haproxy-1.1.28 or haproxy-1.2.1

global             //全局配置

  log 127.0.0.1 local0     //日志服务器

log127.0.0.1 local1 notice  //指定日志类型,还有err,warning,debug

  #log loghost local0 info

maxconn 4096       //单个进程的最大并发数

  chroot /usr/share/haproxy   //chroot路径,用于安全配置

  uid 99           //所属运行的用户UId

  gid 99

  daemon          //以服务(后台)形式运行haproxy

  #debug          //debug日志调试

  #quiet

  nbproc  1        //  工作的进程数,增加进程数可以提高性能

pidfile/var/run/haproxy.pid //haproxy的pid存放路径,启动进程的用户必须有权限访问此文件

  ulinit -n 65535       //ulimit的数量限制



defaults

  log  global     //表示读取global中对于日志文件的定义

  mode http      //工作模式(默认使用http七层,tcp:为4层)

  option httplog    //日志模式,http日志模式

  option dontlognull  //不记录空键链接

option httpclose   //每次请求完毕后主动关闭http通道

option forwardfor  //如果后端服务器需要得到客户端的实际ip需要配置的参数,

可以从httphearder中获得客户端的ip

option redispatch   //当 client连接到挂掉的设备时,强制分配到健康的主机

  option abortonclose  //当服务器负载较高时,自动结束掉已经处理比较比较久的连接

stats refresh     //统计页面刷新的间隔

retries 3       //重试3次失败,确定服务器不可用

  maxconn 2000    //当前所开启的最大链接数,如果不设置,则会以global中的最大链接数为限

  contimeout  5000  // 链接超时,单位为ms

  clitimeout  50000  //客户端链接超时时间

  srvtimeout  50000  //服务器链接超时时间

timeout check 2000  //心跳检测超时时间

timeouthttp-request 10s //http的请求超时时间

timeouthttp-keep-alive 10s //持久链接超时时间

timeoutqueue 1m //排队超时时间

listenstats       //定义监控页面

modehttp   //四层工作模式

bind0.0.0.0:8080 //指定IP地址及端口

statsenable //开启haproxy统计状态

statsrefresh 3s //统计页面刷新时间3s

statshide-version //状态页面不显示版本号

statsuri /status     //统计页面的uri为“/status”即访问:192.168.122.34:8080/status

statsrealm Haproxy\ status //访问提示信息

statsauth admin:admin  //访问的认证用户及密码

statsadmin if TRUE   //启用或禁止状态页面



frontendweb //定义前端服务器

  bind *:80 //监听端口建议使用bind*:80的方式,要不然做集群高可用的时候有问题,vip切换到其他机器就不能访问了。

  acl url_static path_end -i .html .jpg .jpf //定义acl访问规则“.html/.jsp/.jpf”结尾的页面将会定义到url_static -i忽略大小写

  acl url_dynamic path_end -i .php .jsp  //.php .jsp结尾的定义到url_dynamic

  use_backend dynamic if url_dynamic //调用后端服务器检查acl属性如果是url_dynamic则调用到dynamic后端服务器  

  default_backend webserviers    //如果没有符合的acl属性则会访问到默认服务器



backendwebserviers       //定义默认的后端服务器

  balance roundrobin     //定义负载均衡算法;简单轮循

  server web1 192.168.122.3:80 check rise 2 fall 1 weight 2

  server web2 192.168.122.82:80 check rise 2 fall 1 weight 2

//check:启动对后端server的健康状态检测;rise:离线的server转换到正常状态成功检查的次数;fall:确认server从正常状态转换为不可用状态需要检查的次数;weight:权重,数量越大,权重越高

backend dynamic

  balance source       //调度算法,源地址hash运算

  server lamp 192.168.122.160:80 check rise 2 fall 1

3.启动haproxy服务并测试:

[root@desk34haproxy]# /etc/init.d/haproxy start

并启动以上所有的后端服务器的httpd服务

访问http://192.168.122.34



默认访问到webserviers



当访问动态页面时:


http://192.168.122.34/index.php





可见动态的页面调度到了server60上

4.监控页面访问测试

http://192.168.122.34:8080/status







三.keepalived的安装配置



1.keepalived原理

keepalived是基于vrrp协议的HA辅助工具,提供故障切换(failover)和健康检查(healthchecking)功能,判段集群节点服务器的可用性,及时隔离并替换为新的服务器,当故障主机恢复后将其重新加入群集,防止单点故障(单点故障是指一旦某一点出现故障就会导致整个系统架构的不可用)的发生。

keepalived双机会定时想对方发送心跳,以确保对方的可用性。挡在一定的时间方位内收不到对方的心跳,slaves主机就会发送ARP请求将VIP绑定到自己的主机上,向外界提供服务。当Master主机的keepalived启动后将会再将VIP绑定到主机上。



2.vrrp协议原理

VRRP(VirtualRouterRedundancyProtocol,虚拟路由冗余协议)是一种容错协议。通常,一个网络内的所有主机都设置一条缺省路由,这样,主机发出的目的地址不在本网段的报文将被通过缺省路由发往路由器RouterA,从而实现了主机与外部网络的通信。当路由器RouterA坏掉时,本网段内所有以RouterA为缺省路由下一跳的主机将断掉与外部的通信产生单点故障。VRRP就是为解决上述问题而提出的,它为具有多播组播或广播能力的局域网(如:以太网)设计。



关于详细的vrrp的讲解请参见:http://wangziyin.blog.运维网.com/6948950/1302369



3.keepalived的安装

[root@desk34~]#yum install openssl-devel popt-devel libnl-devel -y

[root@desk34~]#rpmbuild -tb keepalived-1.1.20.tar.gz



不过建议采用源码安装,易于迁移



[root@desk34~]#tar zxf keepalived-1.1.20.tar.gz

[root@desk34~]#cd keepalived-1.1.20

[root@desk34keepalived-1.1.20]#./configure

[root@desk34keepalived-1.1.20]#./configure --prefix=/usr/local/keepalived

[root@desk34keepalived-1.1.20]#make && make i

[root@desk34~]#ln -s /usr/local/keepalived/etc/keepalived/ /etc/

[root@desk34~]#ln -s /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/

[root@desk34~]#ln -s /usr/local/keepalived/sbin/keepalived /sbin/

[root@desk34~]#ln -s /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/



4.keepalived的配置



HA1desk34的配置:

[root@desk34~]#vim /etc/keepalived/keepalived.conf

global_defs{

notification_email {

root@localhost

}

notification_email_fromkeepalived@desk34.example.com

smtp_server 127.0.0.1

smtp_connect_timeout 30

router_id LVS_DEVEL

}



vrrp_scriptcheck_process {

script "killall -0 haproxy"

interval 1

weight -2

}



/////以上的配置为主主模式。采用的为两个VIP地址,互为主辅,在两个节点均正常运行的时候,两个主机上均汇出现不同的设置的vip地址。但是如果一个主机宕机后两个vip将会出现同一台主机上,提供不停的服务。主要用到将两个vip定义到不同的域名上如www.westos.com image.westos.com以提供不同服务。



以下的配置建议使用主辅的模式,只用将对应的vrrp_instanceha_2 { 删掉。采用主主的haproxy的acl属性最好使用域名的acl控制。

vrrp_instanceha_1 {

state MASTER  //ha_1为主节点对应的desk33上的为slaves节点

interface eth0

virtual_router_id 51 //与desk33上的配置id相同

priority 100    //优先级

advert_int 1

authentication {

auth_type PASS

auth_pass 1111  

}

virtual_ipaddress {

192.168.122.200

}

track_script{

check_process

}

}



vrrp_instanceha_2 {

state BACKUP

interface eth0

virtual_router_id 52     //同样不能与ha_1的冲突

priority 50

advert_int 1

authentication {

auth_type PASS

auth_pass 1112     //认证端口与ha_1的配置不同要与desk33上的配置相同

}

virtual_ipaddress {

192.168.122.201

}

}







主主的域名的haproxy的acl控制:



aclweb hdr(host) -i www.westos.com
#acl后面是规则名称,-i是要访问的域名,如果访问www.westos.com这个域名就分发到下面的webserver的作用域。
acl imghdr(host) -i image.westos.com
#如果访问img.linuxidc.com就分发到imgserver这个作用域。

use_backendwebserver if web
use_backend dynamic if img





在desk33上做相同的安装:

scp/etc/keepalived/keepalived.conf desk33:/etc/keepalived/



HA2desk33的配置:

global_defs{

notification_email {

root@localhost

}

notification_email_fromkeepalived@desk34.example.com

smtp_server 127.0.0.1

smtp_connect_timeout 30

router_id LVS_DEVEL

}



vrrp_scriptcheck_process {

script "killall -0 haproxy"

interval 1

weight -2

}



vrrp_instanceha_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.122.200

}



track_script

check_process

}

}



vrrp_instanceha_2 {

state MASTER

interface eth0

virtual_router_id 52

priority 100

advert_int 1

authentication {

auth_type PASS

auth_pass 1112

}

virtual_ipaddress {

192.168.122.201

}



track_script

check_process

}

}



5.启动keepalived并测试



[root@desk34haproxy]# /etc/init.d/keepalived start

[root@desk33keepalived]# /etc/init.d/keepalived start

启动后的网卡信息如下:

[root@desk34haproxy]# ip addr show eth0

2:eth0:  mtu 1500 qdiscpfifo_fast state UP qlen 1000

link/ether52:54:00:4e:c6:2f brd ff:ff:ff:ff:ff:ff

inet192.168.122.34/24 brd 192.168.122.255 scope global eth0

inet192.168.122.200/32 scope global eth0

inet192.168.122.201/32 scope global eth0

inet6fe80::5054:ff:fe4e:c62f/64 scope link

valid_lftforever preferred_lft forever



#####在启动的时候主机的上边正常情况应该只有inet192.168.122.200/32 scope global eth0 而不会出现201的VIP,但是不明白为什么启动的时候会出现192.168.122.201/32的VIP,但是不影响正常的服务访问#########如果有人测试请指教@@@@@@@@@@



[root@desk33keepalived]# ip addr show eth0

2:eth0:  mtu 1500 qdiscpfifo_fast state UP qlen 1000

link/ether52:54:00:d0:fe:21 brd ff:ff:ff:ff:ff:ff

inet192.168.122.33/24 brd 192.168.122.255 scope global eth0

inet192.168.122.201/32 scope global eth0

inet6fe80::5054:ff:fed0:fe21/64 scope link

valid_lftforever preferred_lft forever



测试:





当然上面的一组是由desk34调度的。下面是有desk33调度的。但是因为上面desk34上出现两个vip则无法判断是否一定是有desk33提供的调度

关闭desk34的keepalived,后desk34上的vip182.168.122.200将会切换到desk33上:


[root@desk34haproxy]# /etc/init.d/keepalived stop

但是如果关闭haproxy服务keepalived将不会调度切换,因为keepalived本身不对外界的服务做健康检查,但是我们可以自己定义脚本,keepalived自动调用,实现happroxy的将康性检查;



6.实现haproxy的健康性检查



检查脚本:

[root@desk34keepalived]# vim /usr/local/keepalived/check-haproxy.sh

#!/bin/bash

if[ $(ps -C haproxy --no-header | wc -l) -eq 0 ];then

/etc/init.d/haproxystart

fi

sleep2

if[ $(ps -C haproxy --no-header | wc -l) -eq 0 ]; then

/etc/init.d/keepalived stop

fi

[root@desk34keepalived]# chmod a+x check-haproxy.sh



将定义的脚本添加到keepalived的配置文件中供keepalived自动调用:

HA_1节点:

[root@desk34~]# vim /etc/keepalived/keepalived.conf

添加:

vrrp_scriptcheck-haproxy {

script"/usr/local/keepalived/check-haproxy.sh"

interval2

weight2

}



在ha_1的MASTER(当然BACKUP中也可以添加上)节点的定义块里添加:

track_script{

check-haproxy

}



配置文件如下:



vrrp_instanceha_1 {

stateMASTER

interfaceeth0

virtual_router_id51

priority100

advert_int1

authentication{

auth_typePASS

auth_pass1111

}

virtual_ipaddress{

192.168.122.200

}

track_script{

check_process

}


track_script{

check-haproxy

}

}

在另一个keepalived+haproxy的节点上做以上的相同配置:

测试:

关闭keepalived和haproxy服务;

(1)开启keepalievd查看haproxy是否自动启动:

[root@desk34keepalived]# /etc/init.d/keepalived stop

Stoppingkeepalived:          [ OK ]

[root@desk34keepalived]# /etc/init.d/haproxy stop

Shuttingdown haproxy:          [ OK ]

[root@desk34keepalived]# /etc/init.d/keepalived start

Startingkeepalived:          [ OK ]

[root@desk34keepalived]# /etc/init.d/haproxy status

haproxy(pid 11787) is running...

脚本调用成功!!!!!!1



(2)关闭haproxy服务检查是否会正常重启动

[root@desk34keepalived]# /etc/init.d/haproxy stop

Shuttingdown haproxy:          [ OK ]

[root@desk34keepalived]# /etc/init.d/haproxy status

haproxy(pid 12612) is running...

其实,检测脚本还可以这样写哦:

#!/bin/bash

/etc/init.d/haproxystatus &> /dev/null || /etc/init.d/haproxy restart

&>/dev/null

if[ $? -ne 0 ];then

/etc/init.d/keepalivedstop &> /dev/null

fi

#!/bin/bash

[-f /var/run/haproxy.pid ] || /etc/init.d/haproxy restart &>/dev/null

if[ $? -ne 0 ];then

/etc/init.d/keepalivedstop &> /dev/null

fi

如果有人测试,发现不正确或是有什么更好的配置或方法!请不要吝惜自己的笔墨哦!留言相告,谢谢!

                                                                                西安石油大学计算机学院

                                                                                  王兹银 904483782



附件:http://down.运维网.com/data/2363654


运维网声明 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-656994-1-1.html 上篇帖子: Linux集群概述及高可用软件keepalived配置、测试 下篇帖子: 用HAproxy+keepalived+mysql Replication 构建基于企业级负载均衡
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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