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

[经验分享] keepalived+haproxy配置

[复制链接]

尚未签到

发表于 2018-12-29 10:13:00 | 显示全部楼层 |阅读模式
  写在前面:
  很早之前就知道用keepalived和haproxy可以实现负载和高可用性,一直都没有亲手实践。最近闲来没事,自己就按照网上的教程配置了一下,加深了对于keepalived和haproxy的理解。
  

  本人所有的环境都是基于linux虚拟机的,1台linux安装了Apache+mysql+php,1台安装了Nginx+mysql+php,环境如下:
  Apache:192.168.150.131   8080
  Nginx:192.168.150.130    80
  

  这里因为之前的一些历史问题,两台web服务器绑定的端口并不一致,其实更好的做法是把Nginx绑定的80端口释放出来,留作haproxy使用。为什么要释放80呢?因为为了方便,我们让用户使用默认的80端口来访问haproxy所做的代理服务,所以要把80留给haproxy使用。不过我这里懒得改了,反正大家自己是新处理的web服务器,建议改成非80的端口,反正也是对用户可见的。

  

  两台服务器的VIP都是192.168.150.140
  

  第一步:130和131都安装haproxy
  # cd /usr/local/src
# wget  http://haproxy.1wt.eu/download/1.4/src/haproxy-1.4.24.tar.gz
# tar zxvf  haproxy-1.4.24.tar.gz
# cd haproxy-1.4.24
# make TARGET=linux26 ARCH=x86_64 PREFIX=/usr/local/haproxy
#编译参数参考README,其中TARGET是指定内核版本,ARCH指定CPU架构, PREFIX 安装之后所在的目录
# make  install PREFIX=/usr/local/haproxy
  

  第二步:创建启动文件
  # useradd -s /sbin/nologin haproxy
# passwd haproxy
# chown -R haproxy.haproxy /usr/local/haproxy
# cd /usr/local/haproxy
# 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/
  

  第三步:编辑配置文件
  # vim /etc/haproxy/haproxy.cfg

  # this config needs haproxy-1.1.28 or haproxy-1.2.1

global
        log 127.0.0.1   local0
        log 127.0.0.1   local1 notice
        #log loghost    local0 info
        maxconn 4096
        chroot /usr/local/haproxy
        user haproxy
        group haproxy
        daemon
        #debug
        #quiet

defaults
        log     global
        mode    http
        option  httplog
        option  dontlognull
        option abortonclose             #当服务器负载很高的时候,自动结束掉当前队列处理比较久的连接
        retries 3
        option redispatch
        maxconn 2000
        contimeout      5000
        clitimeout      50000
        srvtimeout      50000
        timeout check 2000              #心跳检测超时

frontend www
        bind *:8000                    #我这里的haproxy使用8000代理服务器,更好的是用80
        default_backend server_pool

backend server_pool
        mode    http
        balance roundrobin
        option  forwardfor
        option  httpclose
        option  httpchk GET /haproxy.html   #这个文件必须存在在两台web服务器,用来检测服务器的状态的,如果不存在,会被认为相应的服务器不可用
        server  s1      192.168.150.130:8080 cookie app1inst1 check inter 2000 rise 2 fall 5        #一台真实的服务器指向130
        server  s2      192.168.150.131:80 cookie app1inst3 check inter 2000 rise 2 fall 5 #另一台真实的服务器指向131

  

  第四步:启动服务
  # service haproxy start
  # 查看服务是否起来
  # ps aux| grep haproxy
  

  

  第五步:130和131都安装keepalived
  # 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
# 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/keepalived/etc/keepalived/keepalived.conf  /etc/keepalived/
  

  第六步:130配置keepalived.conf
  # vim /etc/keepalived/keepalived.conf
  ! Configuration File for keepalived

global_defs {
#   notification_email {
#     acassen@firewall.loc
#     failover@firewall.loc
#     sysadmin@firewall.loc
#   }
#   notification_email_from Alexandre.Cassen@firewall.loc
#   smtp_server 192.168.200.1
#   smtp_connect_timeout 30
   router_id LVS_DEVEL
}

vrrp_instance VI_1 {
    state MASTER            #此处表明此机器具有优先获取vip请求的能力
    interface eth0
    virtual_router_id 51
    priority 100            #此优先级必须比131中的要高,要不然131会有优先获取vip请求的能力
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.150.140
        #192.168.200.17
        #192.168.200.18
        # 可以绑定多个IP
    }
}

  #当系统中安装了haproxy,virtual_server不是必须的,因为keepalived的主要目的是虚拟出一个相同的ip给到不同的机器,用户通过虚拟IP,keepalived通过竞争使其中一台真实的服务器响应用户的请求,此请求通过端口被haproxy监听,提供服务,而且我个人在未使用haproxy的情况下试验virtual_server中的real_server提供的服务器,发现一直没有成功,通过查看发现8888端口并没有被任何程序绑定,不知为何。望知情的小伙伴不吝指教。
  

  #所以此处就权当写着玩吧
virtual_server 192.168.150.140 8888 {
    delay_loop 6
    lb_algo rr
    protocol TCP

    real_server 192.168.150.130 80 {
        weight 1
        TCP_CHECK {
                connect_timeout 5
                connect_port 8000
        }
    }
}
  

  第七步:131配置keepalived
  # vim /etc/keepalived/keepalived.conf
  ! Configuration File for keepalived

global_defs {
#   notification_email {
#     acassen@firewall.loc
#     failover@firewall.loc
#     sysadmin@firewall.loc
#   }
#   notification_email_from Alexandre.Cassen@firewall.loc
#   smtp_server 192.168.200.1
#   smtp_connect_timeout 30
   router_id LVS_DEVEL
}

vrrp_instance VI_1 {
    state BACKUP            #此处表明此机器是个备份机器,当MASTER不可用的时候才出手
    interface eth0
    virtual_router_id 51
    priority 99            #此优先级必须比130中的要低,要不然就反客为主了
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.150.140
        #192.168.200.17
        #192.168.200.18
        # 可以绑定多个IP
    }
}

  #当系统中安装了haproxy,virtual_server不是必须的,因为keepalived的主要目的是虚拟出一个相同的ip给到不同的机器,用户通过虚拟IP,keepalived通过竞争使其中一台真实的服务器响应用户的请求,此请求通过端口被haproxy监听,提供服务,而且我个人在未使用haproxy的情况下试验virtual_server中的real_server提供的服务器,发现一直没有成功,通过查看发现8888端口并没有被任何程序绑定,不知为何。望知情的小伙伴不吝指教。
  

  #所以此处就权当写着玩吧
virtual_server 192.168.150.140 8888 {
    delay_loop 6
    lb_algo rr
    protocol TCP

    real_server 192.168.150.130 80 {
        weight 1
        TCP_CHECK {
                connect_timeout 5
                connect_port 8000
        }
    }
}
  

  第八步:130和131上启动keepalived
  # service keepalived start
  # 查看网卡是否绑定了vip
  # ip addr
  这里可能要等个一两秒钟,之前我太心急发现没有绑定,又去折腾配置文件,发现白搭,老老实实的等绑定成功吧,如果成功应该能看到类似以下的信息:
  2: eth0:  mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:ad:a4:8a brd ff:ff:ff:ff:ff:ff
    inet 192.168.150.131/24 brd 192.168.150.255 scope global eth0
    inet 192.168.150.140/32 scope global eth0
    inet6 fe80::20c:29ff:fead:a48a/64 scope link
       valid_lft forever preferred_lft forever
  

  表明140已经成功绑定到网卡eth0上了,130也是一样的。
  

  第九步:测试
  通过浏览器访问 http://192.168.150.140:8000,  不停的狂刷新,你会发现页面的内容时而改变,说明haproxy根据负载的情况选择了不同的web服务器来相应用户的请求。

  

  停掉130上的keepalived服务器
  # service keepalived stop
  

  再次访问,发现访问的服务器只是131上的
  同理,停掉131的keepalived,只能访问130的服务。
  

  想要测试haproxy是否工作了,将某一台服务器上的web服务器停掉即可。
  

  

  总结:
  通过keepalived和haproxy可以增加程序的健壮性,扩展起来也不复杂,所以对于一般的用户来讲,实在是出门旅行,强身健体的不二之选。
  

  整个请求的流程大致如下:
  1:用户打电话到XXX酒店说要定一个满汉全席(XXX酒店是个连锁酒店,旗下有上百间店面)
  2:XXX酒店一看有活干了,挺高兴的,但是作为老大(开了上百间大酒店),不能自己亲自干活啊,所以大手一挥,随便(通过一定的机制)叫了个小弟(某一个酒店)接手了
  3:小弟一看用户要的是满汉全席,好办,通知大厨(haproxy)准备开工
  4:大厨作为一个大厨,手上业务也很多,除了会做满汉全席(apache,ngxin),还会做法国大餐(mysql)等。大厨作为一个有经验的大厨,发现满汉全席很火爆,一个人搞不定,于是雇佣了一帮小弟,大厨拿到业务之后,就看看其中的某个小弟是否可以做(是否空闲),如果是的话,就把订单丢个小弟了,小弟一想闲着也是闲着,就做了。
  

  





运维网声明 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-657135-1-1.html 上篇帖子: keepalived+lvs+httpd实现 下篇帖子: keepalived 安装配置
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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