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

[经验分享] keepalied和haproxy的部署及配置

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-11-20 10:43:24 | 显示全部楼层 |阅读模式
Keepalived部署
编译keepalived
  #cd /opt/soft
  # wget http://www.keepalived.org/software/keepalived-1.2.12.tar.gz
  #tar zxvf keepalived-1.2.12.tar.gz
  #cd keepalived-1.2.12
  # ./configure && make && make install
  
将keepalived做成启动脚务
  #cp /usr/local/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/
  #cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/
  #mkdir /etc/keepalived/
  #cp /usr/local/etc/keepalived/keepalived.conf /etc/keepalived/
  #cp /usr/local/sbin/keepalived /usr/sbin/
  # chkconfig keepalived on
主备机间时间要同步
##############实现双机互信#######

#########node1#######

ssh-keygen -t rsa -P ''

ssh-copy-id-i.ssh/id_rsa.pub root@172.16.18.9

#########node2#######

ssh-keygen -t rsa -P ''

ssh-copy-id-i .ssh/id_rsa.pubroot@172.16.18.7

##############查看时间###########

[iyunv@node1 ~]#date;ssh node2 'date'

#####为实现同步可使用下面同步#####

crontab-e

*/5* * * * /usr/sbin/ntpdate172.16.0.1 &< /dev/nul

  
Keepalived配置
  配置文件说明
global_defs { #全局配置,这里额外的静态路由并未添加因为它是非必要的,除非我们在当前或特定的主机上生成特殊的静态路由等
   notification_email { #收件人信息
     zhangj@corp.21cn.com
     liangyw1@corp.21cn.com
   }
   notification_email_fromsmtp.21cn.com #发件人信息(可以随意伪装)
   smtp_server 192.168.200.1#发邮件的服务器(一定不可为外部地址)
   smtp_connect_timeout 30 #连接超时时间
   router_id LVS_21cn1 #路由器的标识(可以随便改动)
}
/*keepalived会定时执行脚本并对脚本执行的结果进行分析,动态调整vrrp_instance的优先级。
如果脚本执行结果为0,并且weight配置的&#20540;大于0,则优先级相应的增加
如果脚本执行结果非0,并且weight配置的&#20540;小于0,则优先级相应的减少
其他情况,维持原本配置的优先级,即配置文件中priority对应的&#20540;。
这里需要注意的是:
1) 优先级不会不断的提高或者降低
2) 可以编写多个检测脚本并为每个检测脚本设置不同的weight
3) 不管提高优先级还是降低优先级,最终优先级的范围是在[1,254],不会出现优先级小于等于0或者优先级大于等于255的情况
这样可以做到利用脚本检测业务进程的状态,并动态调整优先级从而实现主备切换。*/
vrrp_scriptchk_ha {  //定义检查脚本
script&quot;/root/chk_ha.sh&quot;  //要执行的脚本
interval1  //多长时间执行一次(s)
weight-10  //如果执行出现情况,优先级相应增减
}
vrrp_instance VI_1 { #配置虚拟路由器的(VI_1是实例名称)
    state BACKUP #初始状态,master|backup,当state指定的instance的初始化状态,在两台服务器都启动以后,马上发生竞选,优先级高的成为MASTER,所以这里的MASTER并不是表示此台服务器一直是MASTER
    interface eth0 #通告选举所用端口
    virtual_router_id 151  #虚拟路由的ID号(一般不可大于255)(同网段不同主备&#20540;不应相同,同一主备相同)
priority 100 #优先级信息,这个&#20540;与备机是不同的,备机可以设置为90
nopreempt #state都设置为Backup,在先级高的那台设置参数nopreempt,可以避免master宕掉恢复后再次接管业务,如果state区分了master和slaver则可不配置此项
    advert_int 1 #初始化通告几个
    authentication {  #认证
        auth_type PASS  #认证机制
        auth_pass 21cnlvs  #密码(尽量使用随机
    }
virtual_ipaddress {
       121.14.120.162
        121.14.120.176}
track_script{  //执行检查脚本
chk_ha
}
}
  virtual_server 121.14.120.162 80 {
  delay_loop6
  lb_algowlc
  lb_kind DR
  persistence_timeout 3600
  protocolTCP
  real_server 121.14.120.193 80 {
  weight3
  TCP_CHECK {
  connect_timeout 15
  nb_get_retry 2
  delay_before_retry 2
  connect_port 80
  }
  }
  real_server121.14.120.192 80 {
  weight3
  TCP_CHECK {
  connect_timeout 15
  nb_get_retry 2
  delay_before_retry 2
  connect_port 80
  }
  }
  }
  virtual_server 121.14.120.176 8080 {
  delay_loop6
  lb_algowlc
  lb_kind DR
  persistence_timeout 3600
  protocolTCP
  real_server121.14.120.193 8080 {
  weight 3
  TCP_CHECK {
  connect_timeout 15
  nb_get_retry 2
  delay_before_retry 2
  connect_port 8080
  }
  }
  real_server121.14.120.192 8080 {
  weight3
  TCP_CHECK {
  connect_timeout 15
  nb_get_retry 2
  delay_before_retry 2
  connect_port 8080
  }
  }
  }
Haproxy部署
  #cd /opt/soft
  #wget http://haproxy.1wt.eu/download/1.4/src/haproxy-1.4.25.tar.gz
  #tar zxf haproxy-1.4.25.tar.gz
  
  #cd haproxy-1.4.25
  uname -a //查看linux内核版本
  # make TARGET=linux26 PREFIX=/opt/haproxy-1.4.25
  # make install PREFIX=/opt/haproxy-1.4.25
  # useradd haproxy
  #passwd haproxy
  #mkdir /opt/haproxy-1.4.25/conf
  #mkdir /opt/haproxy-1.4.25/logs
  #touch /opt/haproxy-1.4.25/conf/haproxy.cfg
  #chown -R haproxy.haproxy /opt/haproxy-1.4.25
  
  启动haproxy服务
  /opt/haproxy/sbin/haproxy -f /opt/haproxy/conf/haproxy.cfg
  
  启动成功
  关闭haproxy服务
  pkill haproxy
  重启haproxy
  /usr/local/haproxy/sbin/haproxy - f/usr/local/haproxy/haproxy.cfg -st cat /usr/local/haproxy/haproxy.pid
  
  制作haproxy启动脚本
  Vi /etc/init.d/haproxy
  #!/bin/bash
  BASE_DIR=&quot;/opt/haproxy&quot;
  ARGV=&quot;$@&quot;
  start()
  {
  $BASE_DIR/sbin/haproxy -f$BASE_DIR/conf/haproxy.cfg
  }
  stop()
  {
  echo &quot;STOP HAPoxy Listen&quot;
  kill -TTOU $(cat $BASE_DIR/haproxy.pid)
  echo &quot;STOP HAPoxy process&quot;
  kill -USR1 $(cat $BASE_DIR/haproxy.pid)
  }
  case $ARGV in
  start)
  start
  ERROR=$?
  ;;
  stop)
  stop
  ERROR=$?
  ;;
  restart)
  stop
  start
  ERROR=$?
  ;;
  *)
  echo &quot;hactl.sh[start|restart|stop]&quot;
  esac
  exit $ERROR
Haproxy配置
global   # 全局参数的设置

log 127.0.0.1 local0 info

# log语法:log [max_level_1]

# 全局的日志配置,使用log关键字,指定使用127.0.0.1上的syslog服务中的local0日志设备,

记录日志等级为info的日志

user haproxy

group haproxy

# 设置运行haproxy的用户和组,也可使用uid,gid关键字替代之

daemon

# 以守护进程的方式运行

nbproc 16

# 设置haproxy启动时的进程数,根据官方文档的解释,我将其理解为:该&#20540;的设置应该和服务

#器的CPU核心数一致,即常见的2颗8核心CPU的服务器,即共有16核心,则可以将其&#20540;设置为:

#< code>

#的崩溃。这里我设置为16

maxconn 4096

# 定义每个haproxy进程的最大连接数 ,由于每个连接包括一个客户端和一个服务器端,所以单

#个进程的TCP会话最大数目将是该&#20540;的两倍。

#ulimit -n 65536

# 设置最大打开的文件描述符数,在1.4的官方文档中提示,该&#20540;会自动计算,所以不建议进行

#设置

pidfile /var/run/haproxy.pid

# 定义haproxy的pid

defaults # 默认部分的定义

mode http

# mode语法:mode {http|tcp|health} 。http是七层模式,tcp是四层模式,health是健康检测

#,返回OK

log 127.0.0.1 local3 err

# 使用127.0.0.1上的syslog服务的local3设备记录错误信息

retries 3

# 定义连接后端服务器的失败重连次数,连接失败次数超过此&#20540;后将会将对应后端服务器标记为

#不可用

option httplog

# 启用日志记录HTTP请求,默认haproxy日志记录是不记录HTTP请求的,只记录“时间[Jan 5 13

#:23:46] 日志服务器[127.0.0.1] 实例名已经pid[haproxy[25218]] 信息[Proxy http_80_in s

#topped.]”,日志&#26684;式很简单。

option redispatch

# 当使用了cookie时,haproxy将会将其请求的后端服务器的serverID插入到cookie中,以保证

#会话的SESSION持久性;而此时,如果后端的服务器宕掉了,但是客户端的cookie是不会刷新的

#,如果设置此参数,将会将客户的请求强制定向到另外一个后端server上,以保证服务的正常

option abortonclose

# 当服务器负载很高的时候,自动结束掉当前队列处理比较久的链接

option dontlognull

# 启用该项,日志中将不会记录空连接。所谓空连接就是在上游的负载均衡器或者监控系统为了

#探测该服务是否存活可用时,需要定期的连接或者获取某一固定的组件或页面,或者探测扫描

#端口是否在监听或开放等动作被称为空连接;官方文档中标注,如果该服务上游没有其他的负

#载均衡器的话,建议不要使用该参数,因为互联网上的恶意扫描或其他动作就不会被记录下来

option httpclose

# 这个参数我是这样理解的:使用该参数,每处理完一个request时,haproxy都会去检查http头

#中的Connection的&#20540;,如果该&#20540;不是close,haproxy将会将其***,如果该&#20540;为空将会添加为:

#Connection: close。使每个客户端和服务器端在完成一次传输后都会主动关闭TCP连接。与该

#参数类&#20284;的另外一个参数是“option forceclose”,该参数的作用是强制关闭对外的服务通道

#,因为有的服务器端收到Connection: close时,也不会自动关闭TCP连接,如果客户端也不关

#闭,连接就会一直处于打开,直到超时。

contimeout 5000

# 设置成功连接到一台服务器的最长等待时间,默认单位是毫秒,新版本的haproxy使用timeout

#connect替代,该参数向后兼容

clitimeout 3000

# 设置连接客户端发送数据时的成功连接最长等待时间,默认单位是毫秒,新版本haproxy使用

#timeout client替代。该参数向后兼容

srvtimeout 3000

# 设置服务器端回应客户度数据发送的最长等待时间,默认单位是毫秒,新版本haproxy使用

#timeout server替代。该参数向后兼容

listen status

# 定义一个名为status的部分,可以在listen指令指定的区域中定义匹配规则和后端服务器ip,

#相当于需要在其中配置frontend,backend的功能。一般做tcp转发比较合适,不用太多的规则

#匹配。

bind 0.0.0.0:1080

# 定义监听的套接字

mode http

# 定义为HTTP模式

log global

# 继承global中log的定义

stats refresh 30s

# stats是haproxy的一个统计页面的套接字,该参数设置统计页面的刷新间隔为30s

stats uri /admin?stats

# 设置统计页面的uri为/admin?stats

stats realm Private lands

# 设置统计页面认证时的提示内容

stats auth admin:password

# 设置统计页面认证的用户和密码,如果要设置多个,另起一行写入即可

stats hide-version

# 隐藏统计页面上的haproxy版本信息

frontend http_80_in # 定义一个名为http_80_in的前端部分,haproxy会监听bind的端口

bind 0.0.0.0:80

# http_80_in定义前端部分监听的套接字

mode http

# 定义为HTTP模式

log global

# 继承global中log的定义

option forwardfor

# 启用X-Forwarded-For,在requests头部插入客户端IP发送给后端的server,使后端server获

#取到客户端的真实IP

acl static_down nbsrv(static_server) lt 1

# 定义一个名叫static_down的acl,当backend static_sever中存活机器数小于1时会被匹配到

acl php_web url_reg /*.php$

#acl php_web path_end .php

# 定义一个名叫php_web的acl,当请求的url末尾是以.php结尾的,将会被匹配到,上面两种写

#法任选其一

acl static_web url_reg /*.(css|jpg|png|jpeg|js|gif)$

#acl static_web path_end .gif .png .jpg .css .js .jpeg

# 定义一个名叫static_web的acl,当请求的url末尾是以.css、.jpg、.png、.jpeg、.js、.gif

结尾的,将会被匹配到,上面两种写法任选其一

use_backend php_server ifstatic_down

# 如果满足策略static_down时,就将请求交予backend php_server

use_backend php_server ifphp_web

# 如果满足策略php_web时,就将请求交予backend php_server

use_backend static_server ifstatic_web

# 如果满足策略static_web时,就将请求交予backend static_server

backend php_server #定义一个名为php_server的后端部分,frontend定义的请求会到到这里处理

mode http

# 设置为http模式

balance source

# 设置haproxy的调度算法为源地址hash

cookie SERVERID

# 允许向cookie插入SERVERID,每台服务器的SERVERID可在下面使用cookie关键字定义

option httpchk GET /test/index.php

# 开启对后端服务器的健康检测,通过GET /test/index.php来判断后端服务器的健康情况

server php_server_1 10.12.25.68:80 cookie 1 check inter 2000 rise 3 fall 3 weight 2

server php_server_2 10.12.25.72:80 cookie 2 check inter 2000 rise 3 fall 3 weight 1

server php_server_bak 10.12.25.79:80 cookie 3 check inter 1500 rise 3 fall 3 backup

# server语法:server [:port] [param*]

# 使用server关键字来设置后端服务器;为后端服务器所设置的内部名称[php_server_1],该名

#称将会呈现在日志或警报中、后端服务器的IP地址,支持端口映射[10.12.25.68:80]、指定该

#服务器的SERVERID为1[cookie 1]、接受健康监测[check]、监测的间隔时长,单位毫秒[inter

#2000]、监测正常多少次后被认为后端服务器是可用的[rise 3]、监测失败多少次后被认为后端

#服务器是不可用的[fall 3]、分发的权重[weight 2]、最为备份用的后端服务器,当正常的服

#务器全部都宕机后,才会启用备份服务器[backup]

backend static_server

mode http

option httpchk GET /test/index.html

server static_server_1 10.12.25.83:80 cookie 3 check inter 2000 rise 3 fall 3

  
  一个端口只能被一个frontend监听,但是可以被多个listen标签监听
  
Haproxy的acl规则使用
  acl is_e_redirect_ssl1 path_end -ichangePwd.do login.do getPassword.do findPwd.do register.do registerMobile.doiframe/modifyPassword.do addRegisterInfo.do
  acl is_e_redirect_ssl2 url      -i /index.do
  acl is_e_not_redirect_ssl2 path_end -iheadPic.do uploadFlash.do cropZoomFlash.do
  acl is_open hdr_beg(host) -i open.e.189.cn10.235.1.83
  acl is_message  path_beg -i /message
  
  
Haproxy对后端机器的健康监听
  1、通过监听端口进行健康检测
  这种检测方式,haproxy只会去检查后端server的端口,并不能保证服务的真正可用。
  listen http_proxy 0.0.0.0:80
  mode http
  cookie SERVERID
  balance roundrobin
  option httpchk
  server web1192.168.1.1:80 cookie server01 check
  server web2192.168.1.2:80 cookie server02 check inter 500 rise 1 fall 2
  2、通过URI获取进行健康检测
  这种检测方式,是用过去GET后端server的的web页面,基本上可以代表后端服务的可用性。
  listen http_proxy 0.0.0.0:80
  mode http
  cookie SERVERID
  balance roundrobin
  option httpchk GET/index.html
  server web1192.168.1.1:80 cookie server01 check
  server web2 192.168.1.2:80cookie server02 check inter 500 rise 1 fall 2
  3、通过request获取的头部信息进行匹配进行健康检测
  这种检测方式,则是基于高级,精细的一些监测需求。通过对后端服务访问的头部信息进行匹配检测。
  listen http_proxy 0.0.0.0:80
  mode http
  cookie SERVERID
  balance roundrobin
  option httpchk HEAD/index.jsp HTTP/1.1\r\nHost: www.xxx.com
  server web1192.168.1.1:80 cookie server01 check
  server web2192.168.1.2:80 cookie server02 check inter 500 rise 1 fall 2
Haproxy实现持久化链接
  1 调度算法source
  haroxy 将用户IP经过hash计算后 指定到固定的真实服务器上(类&#20284;于nginx 的IP hash 指令)
  配置指令       balance source
  2 cookie 识别
  haproxy 将WEB服务端发送给客户端的cookie中插入(或添加加前缀)haproxy定义的后端的服务器COOKIE ID。
  配置指令例举  cookie SESSION_COOKIE  insert indirect nocache
服务器定义  server s1 192.168.1.168:7003cookieA checkinter 1500 rise 3 fall 3 weight10

  3 session 识别
  haproxy 将后端服务器产生的session和后端服务器标识存在haproxy中的一张表里。客户端请求时先查询这张表。然后根据session分配后端server。
  配置指令:appsession len timeout
  
  Haproxy日志
vi /etc/sysconfig/syslog把SYSLOGD_OPTIONS=&quot;-m0&quot; 改成 SYSLOGD_OPTIONS=&quot;-r -m 0&quot;让syslogd接受远程的日志输出/etc/init.d/syslog restart然后就可以看到日志输出了

redhat6.0为/etc/rsyslog.conf

  
  
  
  
  

运维网声明 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-141458-1-1.html 上篇帖子: 负载均衡(haproxy安装,配置,使用) 下篇帖子: haproxy的安装和基本设置
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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