工作,学习,生活,这里将会有一些记录. 备用域名:http://meisw.wdlinux.cn 注册 | 登陆
浏览模式: 标准 | 列表分类:集群/分流

lvs

net.ipv4.ip_forward = 0
net.ipv4.conf.all.send_redirects = 1
net.ipv4.conf.default.send_redirects = 1
net.ipv4.conf.eth0.send_redirects = 1

ifconfig eth0:3 17.139.148.246 broadcast 17.139.148.246 netmask 255.255.255.255 up
route add -host 17.139.148.246 dev eth0:3

ipvsadm -C
ipvsadm -A -t 17.139.148.246:http -s rr
ipvsadm -a -t 17.139.148.246:http -r 17.139.165.210 -g -w 1
ipvsadm -a -t 17.139.148.246:http -r 17.139.144.218 -g -w 1

ipvsadm -C
ipvsadm -A -t 17.139.148.246:80 -s rr
ipvsadm -a -t 17.139.148.246:80 -r 17.139.165.210 -g -w 1
ipvsadm -a -t 17.139.148.246:80 -r 17.139.144.218 -g -w 1

ipvsadm -C
ipvsadm -A -t 17.139.148.246:80 -s rr
ipvsadm -a -t 17.139.148.246:80 -r 17.139.148.244 -g -w 1
ipvsadm -a -t 17.139.148.246:80 -r 17.139.148.245 -g -w 1


net.ipv4.ip_forward = 0
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2

ifconfig lo:0 17.139.148.246 broadcast 17.139.148.246 netmask 255.255.255.255 up
route add -host 17.139.148.246 dev lo:0


grep ip_vs_init /boot/System.map


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

iptunnel

LB
ifconfig tunl0 17.139.148.246 broadcast 17.139.148.246 netmask 255.255.255.0 up
route add -host 17.139.148.246 dev tunl0
ipvsadm -C
ipvsadm -A -t 17.139.148.246:80 -s rr
ipvsadm -a -t 17.139.148.246:80 -r 17.139.165.210 -i
ipvsadm -a -t 17.139.148.246:80 -r 17.139.144.218 -i
ipvsadm -a -t 17.139.148.246:80 -r 6.198.139.186 -i
ipvsadm -a -t 17.139.148.246:80 -r 6.229.125.146 -i
ipvsadm -a -t 17.139.148.246:80 -r 11.34.173.210 -i
ipvsadm -a -t 17.139.148.246:80 -r 11.34.169.10 -i

RS
ifconfig tunl0 17.139.148.246 broadcast 17.139.148.246 netmask 255.255.255.0 up
route add -host 17.139.148.246 dev tunl0

net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2

 

http://lansgg.blog.51cto.com/5675165/1229421

haproxy配置文件详解

#/usr/local/sbin/haproxy -f /etc/haproxy/haproxy.cfg -st `cat /var/run/haproxy.pid`
       ####################全局配置信息########################
       #######参数是进程级的,通常和操作系统(OS)相关#########
global
       maxconn 20480                   #默认最大连接数
       log 127.0.0.1 local3            #[err warning info debug]
       chroot /var/haproxy             #chroot运行的路径
       uid 99                          #所属运行的用户uid
       gid 99                          #所属运行的用户组
       daemon                          #以后台形式运行haproxy
       nbproc 1                        #进程数量(可以设置多个进程提高性能)
       pidfile /var/run/haproxy.pid    #haproxy的pid存放路径,启动进程的用户必须有权限访问此文件
       ulimit-n 65535                  #ulimit的数量限制
 
 
       #####################默认的全局设置######################
       ##这些参数可以被利用配置到frontend,backend,listen组件##
defaults
       log global
       mode http                       #所处理的类别 (#7层 http;4层tcp  )
       maxconn 20480                   #最大连接数
       option httplog                  #日志类别http日志格式
       option httpclose                #每次请求完毕后主动关闭http通道
       option dontlognull              #不记录健康检查的日志信息
       option forwardfor               #如果后端服务器需要获得客户端真实ip需要配置的参数,可以从Http Header中获得客户端ip 
       option redispatch               #serverId对应的服务器挂掉后,强制定向到其他健康的服务器 
       option abortonclose             #当服务器负载很高的时候,自动结束掉当前队列处理比较久的连接
       stats refresh 30                #统计页面刷新间隔
       retries 3                       #3次连接失败就认为服务不可用,也可以通过后面设置
       balance roundrobin              #默认的负载均衡的方式,轮询方式
      #balance source                  #默认的负载均衡的方式,类似nginx的ip_hash
      #balance leastconn               #默认的负载均衡的方式,最小连接
       contimeout 5000                 #连接超时
       clitimeout 50000                #客户端超时
       srvtimeout 50000                #服务器超时
       timeout check 2000              #心跳检测超时
 
       ####################监控页面的设置#######################
listen admin_status                    #Frontend和Backend的组合体,监控组的名称,按需自定义名称
        bind 0.0.0.0:65532             #监听端口
        mode http                      #http的7层模式
        log 127.0.0.1 local3 err       #错误日志记录
        stats refresh 5s               #每隔5秒自动刷新监控页面
        stats uri /admin?stats         #监控页面的url
        stats realm itnihao\ itnihao   #监控页面的提示信息
        stats auth admin:admin         #监控页面的用户和密码admin,可以设置多个用户名
        stats auth admin1:admin1       #监控页面的用户和密码admin1
        stats hide-version             #隐藏统计页面上的HAproxy版本信息 
        stats admin if TRUE            #手工启用/禁用,后端服务器(haproxy-1.4.9以后版本)
 
 
       errorfile 403 /etc/haproxy/errorfiles/403.http
       errorfile 500 /etc/haproxy/errorfiles/500.http
       errorfile 502 /etc/haproxy/errorfiles/502.http
       errorfile 503 /etc/haproxy/errorfiles/503.http
       errorfile 504 /etc/haproxy/errorfiles/504.http
 
       #################HAProxy的日志记录内容设置###################
       capture request  header Host           len 40
       capture request  header Content-Length len 10
       capture request  header Referer        len 200
       capture response header Server         len 40
       capture response header Content-Length len 10
       capture response header Cache-Control  len 8
    
       #######################网站监测listen配置#####################
       ###########此用法主要是监控haproxy后端服务器的监控状态############
listen site_status
       bind 0.0.0.0:1081                    #监听端口
       mode http                            #http的7层模式
       log 127.0.0.1 local3 err             #[err warning info debug]
       monitor-uri /site_status             #网站健康检测URL,用来检测HAProxy管理的网站是否可以用,正常返回200,不正常返回503
       acl site_dead nbsrv(server_web) lt 2 #定义网站down时的策略当挂在负载均衡上的指定backend的中有效机器数小于1台时返回true
       acl site_dead nbsrv(server_blog) lt 2
       acl site_dead nbsrv(server_bbs)  lt 2 
       monitor fail if site_dead            #当满足策略的时候返回503,网上文档说的是500,实际测试为503
       monitor-net 192.168.16.2/32          #来自192.168.16.2的日志信息不会被记录和转发
       monitor-net 192.168.16.3/32
 
       ########frontend配置############
       #####注意,frontend配置里面可以定义多个acl进行匹配操作########
frontend http_80_in
       bind 0.0.0.0:80      #监听端口,即haproxy提供web服务的端口,和lvs的vip端口类似
       mode http            #http的7层模式
       log global           #应用全局的日志配置
       option httplog       #启用http的log
       option httpclose     #每次请求完毕后主动关闭http通道,HA-Proxy不支持keep-alive模式
       option forwardfor    #如果后端服务器需要获得客户端的真实IP需要配置次参数,将可以从Http Header中获得客户端IP
       ########acl策略配置#############
       acl itnihao_web hdr_reg(host) -i ^(www.itnihao.cn|ww1.itnihao.cn)$   
       #如果请求的域名满足正则表达式中的2个域名返回true -i是忽略大小写
       acl itnihao_blog hdr_dom(host) -i blog.itnihao.cn
       #如果请求的域名满足www.itnihao.cn返回true -i是忽略大小写
       #acl itnihao    hdr(host) -i itnihao.cn
       #如果请求的域名满足itnihao.cn返回true -i是忽略大小写
       #acl file_req url_sub -i  killall=
       #在请求url中包含killall=,则此控制策略返回true,否则为false
       #acl dir_req url_dir -i allow
       #在请求url中存在allow作为部分地址路径,则此控制策略返回true,否则返回false
       #acl missing_cl hdr_cnt(Content-length) eq 0
       #当请求的header中Content-length等于0时返回true
 
       ########acl策略匹配相应#############
       #block if missing_cl
       #当请求中header中Content-length等于0阻止请求返回403
       #block if !file_req || dir_req
       #block表示阻止请求,返回403错误,当前表示如果不满足策略file_req,或者满足策略dir_req,则阻止请求
       use_backend  server_web  if itnihao_web
       #当满足itnihao_web的策略时使用server_web的backend
       use_backend  server_blog if itnihao_blog
       #当满足itnihao_blog的策略时使用server_blog的backend
       #redirect prefix http://blog.itniaho.cn code 301 if itnihao
       #当访问itnihao.cn的时候,用http的301挑转到http://192.168.16.3
       default_backend server_bbs
       #以上都不满足的时候使用默认server_bbs的backend
 
 
 
 
       ##########backend的设置##############
       #下面我将设置三组服务器 server_web,server_blog,server_bbs
###########################backend server_web#############################
backend server_web
       mode http            #http的7层模式
       balance roundrobin   #负载均衡的方式,roundrobin平均方式
       cookie SERVERID      #允许插入serverid到cookie中,serverid后面可以定义
       option httpchk GET /index.html #心跳检测的文件
       server web1 192.168.16.2:80 cookie web1 check inter 1500 rise 3 fall 3 weight 1 
       #服务器定义,cookie 1表示serverid为web1,check inter 1500是检测心跳频率rise 3是3次正确认为服务器可用,
       #fall 3是3次失败认为服务器不可用,weight代表权重
       server web2 192.168.16.3:80 cookie web2 check inter 1500 rise 3 fall 3 weight 2
       #服务器定义,cookie 1表示serverid为web2,check inter 1500是检测心跳频率rise 3是3次正确认为服务器可用,
       #fall 3是3次失败认为服务器不可用,weight代表权重
 
###################################backend server_blog###############################################
backend server_blog
       mode http            #http的7层模式
       balance roundrobin   #负载均衡的方式,roundrobin平均方式
       cookie SERVERID      #允许插入serverid到cookie中,serverid后面可以定义
       option httpchk GET /index.html #心跳检测的文件
       server blog1 192.168.16.2:80 cookie blog1 check inter 1500 rise 3 fall 3 weight 1 
       #服务器定义,cookie 1表示serverid为web1,check inter 1500是检测心跳频率rise 3是3次正确认为服务器可用,fall 3是3次失败认为服务器不可用,weight代表权重
       server blog2 192.168.16.3:80 cookie blog2 check inter 1500 rise 3 fall 3 weight 2
        #服务器定义,cookie 1表示serverid为web2,check inter 1500是检测心跳频率rise 3是3次正确认为服务器可用,fall 3是3次失败认为服务器不可用,weight代表权重
 
###################################backend server_bbs###############################################
 
backend server_bbs
       mode http            #http的7层模式
       balance roundrobin   #负载均衡的方式,roundrobin平均方式
       cookie SERVERID      #允许插入serverid到cookie中,serverid后面可以定义
       option httpchk GET /index.html #心跳检测的文件
       server bbs1 192.168.16.2:80 cookie bbs1 check inter 1500 rise 3 fall 3 weight 1 
       #服务器定义,cookie 1表示serverid为web1,check inter 1500是检测心跳频率rise 3是3次正确认为服务器可用,fall 3是3次失败认为服务器不可用,weight代表权重
       server bbs2 192.168.16.3:80 cookie bbs2 check inter 1500 rise 3 fall 3 weight 2
        #服务器定义,cookie 1表示serverid为web2,check inter 1500是检测心跳频率rise 3是3次正确认为服务器可用,fall 3是3次失败认为服务器不可用,weight代表权重

haproxy.cfg

global
        log    127.0.0.1   local0
        ulimit-n 131091
        maxconn 65536
        #chroot /usr/local/haproxy
        uid 99
        gid 99
        #stats socket /usr/local/haproxy/HaproxSocket level admin
        #stats           socket /var/run/socket level admin
        daemon
        nbproc 8
        pidfile /var/run/haproxy.pid
        #debug
defaults
        log    127.0.0.1    local3
        mode   http
        option httplog
        #option httplog clf
        option httpclose
        option dontlognull
        #option forwardfor
        option redispatch
        option abortonclose
        retries 3
        maxconn 65536
        #balance source
        balance roundrobin
        #stats   uri     /haproxy-stats
        #stats   refresh 10s
        contimeout      30s
        clitimeout      60s
        srvtimeout      60s
listen  Cluster 0.0.0.0:80
        mode http
        balance roundrobin
        #option httpchk GET /goodo.html HTTP/1.0Host:9.126.13.13
        #option httpchk GET /goodo.html
        #server 192.168.0.111_node1  192.168.0.111:80 weight 3 check inter 2000 rise 2 fall 1
        #server node1 17.139.148.242:80 weight 3 check inter 2000 rise 2 fall 1
        #server node2 17.139.183.18:80 weight 1 check inter 12000 rise 2 fall 3
        server node3 17.139.165.210:80 weight 1 check inter 12000 rise 2 fall 3
        server node4 17.139.144.218:80 weight 1 check inter 12000 rise 2 fall 3
        server node5 11.34.169.10:80 weight 1 check inter 12000 rise 2 fall 3
        server node6 11.34.173.210:80 weight 1 check inter 12000 rise 2 fall 3
        server node7 6.198.139.186:80 weight 1 check inter 12000 rise 2 fall 3
        server node8 6.229.125.146:80 weight 1 check inter 12000 rise 2 fall 3

listen  stats_auth 0.0.0.0:91
        mode  http
        stats enable
        stats uri  /admin
        stats realm "LOGIN"
        stats auth  admin:123456
        stats hide-version
        stats refresh 10s
        stats admin if TRUE
        bind-process    1

haproxy配置文件解析

修改操作系统的日志配置
HAProxy可以收集本机及其他后端服务器日志,但是需要在HAProxy和操作系统上作一些配置。
使用root账户首先修改/etc/sysconfig/syslog文件,将SYSLOGD_OPTIONS="-m 0” 修改为SYSLOGD_OPTIONS="-m 0 -r -x",支持收集远程服务器日志。
然后修改/etc/syslog.conf,增加如下语句:
local0.* /home/admin/haproxy/logs/haproxy.log // haproxy.log地址代表了需要存储日志的地址,其中local0这个级别要和haproxy.cfg配置的log级别一样
执行service syslog restart,重新启动系统日志器

 

2. HAProxy的配置
HAProxy配置中分成五部分内容,当然这些组件不是必选的,可以根据需要选择部分作为配置。
global:参数是进程级的,通常和操作系统(OS)相关。这些参数一般只设置一次,如果配置无误,就不需要再次配置进行修改
defaults:配置默认参数的,这些参数可以被利用配置到frontend,backend,listen组件
frontend:接收请求的前端虚拟节点,Frontend可以根据规则直接指定具体使用后端的 backend(可动态选择)。
backend:后端服务集群的配置,是真实的服务器,一个Backend对应一个或者多个实体服务器。
listen:Frontend和Backend的组合体。
下面是HAProxy的一些常用的配置,这个配置是用来说明HAProxy的一些常用功能的配置,具体详细配置请查看安装目录下的doc目录下的文档文件,或者到” http://cn.haproxy.org/
下载中文配置说明文档
配置文件例子:
global
#全局的日志配置 其中日志级别是[err warning info debug]
#local0 是日志设备,必须为如下24种标准syslog设备的一种:
#kern user mail daemon auth syslog lpr news
#uucp cron auth2 ftp ntp audit alert cron2
#local0 local1 local2 local3 local4 local5 local6 local7
#但是之前在/etc/syslog.conf文件中定义的是local0所以
#这里也是用local0
log 127.0.0.1 local0 info #[err warning info debug]
#最大连接数
maxconn 4096
#用户
user admin
#组
group admin
#使HAProxy进程进入后台运行。这是推荐的运行模式
daemon
#创建4个进程进入deamon模式运行。此参数要求将运行模式设置为"daemon"
nbproc 4
#将所有进程的pid写入文件
pidfile /home/admin/haproxy/logs/haproxy.pid
defaults
#默认的模式mode { tcp|http|health },tcp是4层,http是7层,health只会返回OK
mode http
#采用http日志格式
option httplog
#三次连接失败就认为是服务器不可用,也可以通过后面设置
retries 3
如果cookie写入了serverId而客户端不会刷新cookie,
#当serverId对应的服务器挂掉后,强制定向到其他健康的服务器
option redispatch
#当服务器负载很高的时候,自动结束掉当前队列处理比较久的链接
option abortonclose
#默认的最大连接数
maxconn 4096
#连接超时
contimeout 5000
#客户端超时
clitimeout 30000
#服务器超时
srvtimeout 30000
#=心跳检测超时
timeout check 2000
#注:一些参数值为时间,比如说timeout。时间值通常单位为毫秒(ms),但是也可以通过加#后缀,来使用其他的单位。
#- us : microseconds. 1 microsecond = 1/1000000 second
#- ms : milliseconds. 1 millisecond = 1/1000 second. This is the default.
#- s : seconds. 1s = 1000ms
#- m : minutes. 1m = 60s = 60000ms
#- h : hours. 1h = 60m = 3600s = 3600000ms
#- d : days. 1d = 24h = 1440m = 86400s = 86400000ms
########统计页面配置############
listen admin_stats
#监听端口
bind 0.0.0.0:1080
#http的7层模式
mode http
#日志设置
log 127.0.0.1 local0 err #[err warning info debug]
#统计页面自动刷新时间
stats refresh 30s
#统计页面url
stats uri /admin?stats
#统计页面密码框上提示文本
stats realm Gemini\ Haproxy
#统计页面用户名和密码设置
stats auth admin:admin
stats auth admin1:admin1
#隐藏统计页面上HAProxy的版本信息
stats hide-version
#######网站检测listen定义############
listen site_status
bind 0.0.0.0:1081
mode http
log 127.0.0.1 local0 err #[err warning info debug]
#网站健康检测URL,用来检测HAProxy管理的网站是否可以用,正常返回200,不正常返回500
monitor-uri /site_status
#定义网站down时的策略
#当挂在负载均衡上的指定backend的中有效机器数小于1台时返回true
acl site_dead nbsrv(denali_server) lt 1
acl site_dead nbsrv(tm_server) lt 1
acl site_dead nbsrv(mms_server) lt 1
#当满足策略的时候返回500
monitor fail if site_dead
#如果192.168.0.252或者192.168.0.31这两天机器挂了
#认为网站挂了,这时候返回500,判断标准是如果mode是
#http返回200认为是正常的,如果mode是tcp认为端口畅通是好的
monitor-net 192.168.0.252/31
########frontend配置############
frontend http_80_in
#监听端口
bind 0.0.0.0:80
#http的7层模式
mode http
#应用全局的日志配置
log global
#启用http的log
option httplog
#每次请求完毕后主动关闭http通道,HA-Proxy不支持keep-alive模式
option httpclose
#如果后端服务器需要获得客户端的真实IP需要配置次参数,将可以从Http Header中
#获得客户端IP
option forwardfor
###########HAProxy的日志记录内容配置##########
capture request header Host len 40
capture request header Content-Length len 10
capture request header Referer len 200
capture response header Server len 40
capture response header Content-Length len 10
capture response header Cache-Control len 8
####################acl策略定义#########################
#如果请求的域名满足正则表达式返回true -i是忽略大小写
acl denali_policy hdr_reg(host) -i ^(www.gemini.taobao.net|my.gemini.taobao.net|auction1.gemini.taobao.net)$
#如果请求域名满足trade.gemini.taobao.net 返回 true -i是忽略大小写
acl tm_policy hdr_dom(host) -i trade.gemini.taobao.net
##在请求url中包含sip_apiname=,则此控制策略返回true,否则为false
acl invalid_req url_sub -i sip_apiname=
##在请求url中存在timetask作为部分地址路径,则此控制策略返回true,否则返回false
acl timetask_req url_dir -i timetask
#当请求的header中Content-length等于0时返回 true
acl missing_cl hdr_cnt(Content-length) eq 0
######################acl策略匹配相应###################
##当请求中header中Content-length等于0 阻止请求返回403
block if missing_cl
##block表示阻止请求,返回403错误,当前表示如果不满足策略invalid_req,或者满足策略timetask_req,则阻止请求。
block if !invalid_req || timetask_req
#当满足denali_policy的策略时使用denali_server的backend
use_backend denali_server if denali_policy
#当满足tm_policy的策略时使用tm_server的backend
use_backend tm_server if tm_policy
#reqisetbe关键字定义,根据定义的关键字选择backend
reqisetbe ^Host:\ img dynamic
reqisetbe ^[^\ ]*\ /(img|css)/ dynamic
reqisetbe ^[^\ ]*\ /admin/stats stats
#以上都不满足的时候使用默认mms_server的backend
default_backend mms_server
#HAProxy错误页面设置
errorfile 400 /home/admin/haproxy/errorfiles/400.http
errorfile 403 /home/admin/haproxy/errorfiles/403.http
errorfile 408 /home/admin/haproxy/errorfiles/408.http
errorfile 500 /home/admin/haproxy/errorfiles/500.http
errorfile 502 /home/admin/haproxy/errorfiles/502.http
errorfile 503 /home/admin/haproxy/errorfiles/503.http
errorfile 504 /home/admin/haproxy/errorfiles/504.http
##########backend的设置##############
backend mms_server
#http的7层模式
mode http
#负载均衡的方式,roundrobin平均方式
balance roundrobin
#允许插入serverid到cookie中,serverid后面可以定义
cookie SERVERID
#心跳检测的URL,HTTP/1.1¥r¥nHost:XXXX,指定了心跳检测HTTP的版本,XXX为检测时请求
#服务器的request中的域名是什么,这个在应用的检测URL对应的功能有对域名依赖的话需要设置
option httpchk GET /member/login.jhtml HTTP/1.1\r\nHost:member1.gemini.taobao.net
#服务器定义,cookie 1表示serverid为1,check inter 1500 是检测心跳频率
#rise 3是3次正确认为服务器可用,fall 3是3次失败认为服务器不可用,weight代表权重
server mms1 10.1.5.134:80 cookie 1 check inter 1500 rise 3 fall 3 weight 1
server mms2 10.1.6.118:80 cookie 2 check inter 1500 rise 3 fall 3 weight 2
backend denali_server
mode http
#负载均衡的方式,source根据客户端IP进行哈希的方式
balance source
#但设置了backup的时候,默认第一个backup会优先,设置option allbackups后
#所有备份服务器权重一样
option allbackups
#心跳检测URL设置
option httpchk GET /mytaobao/home/my_taobao.jhtml HTTP/1.1\r\nHost:my.gemini.taobao.net
#可以根据机器的性能不同,不使用默认的连接数配置而使用自己的特殊的连接数配置
#如minconn 10 maxconn 20
server denlai1 10.1.5.114:80 minconn 4 maxconn 12 check inter 1500 rise 3 fall 3
server denlai2 10.1.6.104:80 minconn 10 maxconn 20 check inter 1500 rise 3 fall 3
#备份机器配置,正常情况下备机不会使用,当主机的全部服务器都down的时候备备机会启用
server dnali-back1 10.1.7.114:80 check backup inter 1500 rise 3 fall 3
server dnali-back2 10.1.7.114:80 check backup inter 1500 rise 3 fall 3
backend tm_server
mode http
#负载均衡的方式,leastconn根据服务器当前的请求数,取当前请求数最少的服务器
balance leastconn
option httpchk GET /trade/itemlist/prepayCard.htm HTTP/1.1\r\nHost:trade.gemini.taobao.ne
server tm1 10.1.5.115:80 check inter 1500 rise 3 fall 3
server tm2 10.1.6.105:80 check inter 1500 rise 3 fall 3
######reqisetbe自定义关键字匹配backend部分#######################
backend dynamic
mode http
balance source
option httpchk GET /welcome.html HTTP/1.1\r\nHost:www.taobao.net
server denlai1 10.3.5.114:80 check inter 1500 rise 3 fall 3
server denlai2 10.4.6.104:80 check inter 1500 rise 3 fall 3
backend stats
mode http
balance source
option httpchk GET /welcome.html HTTP/1.1\r\nHost:www.taobao.net
server denlai1 10.5.5.114:80 check inter 1500 rise 3 fall 3
server denlai2 10.6.6.104:80 check inter 1500 rise 3 fall 3

 

 

global:参数是进程级的,通常和操作系统(OS)相关

defaults:配置默认参数,这些参数可以被利用配置到frontend,backend,listen组件

frontend:接收请求的前端虚拟节点,Frontend可以根据规则直接指定具体使用后端的 backend(可动态选择)

backend:后端服务集群的配置,是真实的服务器,一个Backend对应一个或者多个实体服务器

listen:Frontend和Backend的组合体

 

log 127.0.0.1 local0             使用系统的syslog记录日志

maxconn 4096                     限制单个进程的最大连接数

option redispatch                 在连接失败或断开的情况下,允许当前会话被重新分发

retries 2                             设置在一个服务器上链接失败后的重连次数

balance roundrobin            设置服务器分配算法为轮询(即交替访问)
 

option dontlognull              不记录空连接

contimeout 5000               设置等待连接到服务器成功的最大时间

clitimeout 50000              设置客户端的最大超时时间

srvtimeout 50000              设置服务器端的最大超时时间

nbproc 1                          指定作为守护进程运行的时候,要创建多少个进程,默认只创建一个,需要daemon开启模式

daemon                            让进程在后台运行,即作为守护进程运行,正式运行的时候开启,此处先禁止,等同于在命令行添加参数 -D


 

debug                             设置debug模式运行,与daemon模式互斥,等同于在命令行添加参数 -d


 

1080                                监听端口(随意)

mode http                         http的7层模式


 

stats refresh 30s                 统计页面自动刷新时间

stats uri /haproxy-stats          统计页面URL


 

stats realm Haproxy\ Statistics             统计页面密码框上提示文本

stats auth ming:123456               统计页面用户名和密码设置

stats hide-version                      隐藏统计页面上HAProxy的版本信息

monitor-uri /site_status         网站健康检测URL,用来检测HAProxy管理的网站是否可以用,正常返回200,不正常返回500

 

weight  -- 调节服务器的负重

check -- 允许对该服务器进行健康检查

inter  -- 设置连续的两次健康检查之间的时间,单位为毫秒(ms),默认值 2000

rise  -- 指定多少次连续成功的健康检查后,即可认定该服务器处于可操作状态,默认值 2

fall  -- 指定多少次不成功的健康检查后,认为服务器为当掉状态,默认值 3

 

balance roundrobin     简单的轮询

balance source           根据请求的源IP

balance uri                根据请求的url
 
balance url_param     根据请求RUL中的参数

Linux高可用性方案之Heartbeat的watchdog配置(转)

Watchdog概述 

在日常使用heartbeat接管资源的应用中,由于heartbeat无法对 操作系统自身出现的问题进行监控。如果主节点操作系统挂起,一方面可能导致服务中断,另一方面由于主节点资源无法释放,而备份节点却接管了主节点的资源, 此时就发生了两个节点同时争用一个资源的状况。
针对这个问题,就需要在Linux内核中启用一个叫watchdog的模块。watchdog是一个Linux内核模块,它通过定时向/dev /watchdog设备文件执行写操作,从而确定系统是否正常运行。如果watchdog认为内核挂起,就会重新启动系统,进而释放节点资源。
watchdog代码也支持用软件替换外部的硬件计时器,该软件叫做 softdog,softdog维护一个内部计时器,在另一个进程写入/dev/watchdog设备文件时更新,如果softdog没有看到进程写入 /dev/watchdog文件,它认为内核一定出故障了,它将启动一个内核恐慌,正常情况下,内核恐慌将导致系统关闭,但是你可以修改这个默认行为,将 其改为默认行为为重启系统。
当你在/etc/ha.d/ha.cf文件中启用了watchdog选项后,Heartbeat将每隔相当于deadtime长的时间写入/dev /watchdog文件(或设备),因此,出现任何导致Heartbeat更新 watchdog设备失败的事情,一旦watchdog超时周期(默认是一分钟)过期,watchdog将启动内核恐慌。
Watchdog的工作原理 
Watchdog在实现上可以是硬件电路也可以是软件定时器,能够在系统出现故障时自动重新启动系统。在Linux 内核下, watchdog的基本工作原理是:当watchdog启动后(即/dev/watchdog 设备被打开后),如果在某一设定的时间间隔内/dev/watchdog没有被执行写操作, 硬件watchdog电路或软件定时器就会重新启动系统。
/dev/watchdog 是一个主设备号为10, 从设备号130的字符设备节点。 Linux内核不仅为各种不同类型的watchdog硬件电路提供了驱动,还提供了一个基于定时器的纯软件watchdog驱动。 驱动源码位于内核源码树drivers\char\watchdog\目录下。
硬件与软件watchdog的区别 
硬件watchdog必须有硬件电路支持, 设备节点/dev/watchdog对应着真实的物理设备, 不同类型的硬件watchdog设备由相应的硬件驱动管理。软件watchdog由一内核模块softdog.ko 通过定时器机制实现,/dev/watchdog并不对应着真实的物理设备,只是为应用提供了一个与操作硬件watchdog相同的接口。
硬件watchdog比软件watchdog有更好的可靠性。 软件watchdog基于内核的定时器实现,当内核或中断出现异常时,软件watchdog将会失效。而硬件watchdog由自身的硬件电路控制, 独立于内核。无论当前系统状态如何,硬件watchdog在设定的时间间隔内没有被执行写操作,仍会重新启动系统。
一些硬件watchdog卡如WDT501P 以及一些Berkshire卡还可以监测系统温度,提供了 /dev/temperature接口。 对于应用程序而言, 操作软件、硬件watchdog的方式基本相同:打开设备/dev/watchdog, 在重启时间间隔内对/dev/watchdog执行写操作。即软件、硬件watchdog对应用程序而言基本是透明的。
在任一时刻, 只能有一个watchdog驱动模块被加载,管理/dev/watchdog 设备节点。如果系统没有硬件watchdog电路,可以加载软件watchdog驱动softdog.ko。
测试Watchdog

只要在/etc/ha.d/ha.cf加入

watchdog /dev/watchdog

即可自动启用watchdog功能
可通过如下步骤确认

1、 # grep misc /proc/devices 
10 misc
2、 # cat /proc/misc |grep watchdog
130 watchdog
3、 # lsmod |grep softdog
softdog                 9941  2 

即可确认启用了watchdog功能如果没有生成/dev/watchdong设备,则可通过如下命令自行创建
mknod /dev/watchdog c 10 130 
在主节点上可通过"killall -9 heartbeat"命令关闭Heartbeat进程。由于是非法关闭Heartbeat进程,因此Heartbeat所控制的资源并没有释放。备份节点 在很短一段时间没有收到主节点的响应后,就会认为主节点出现故障,进而接管主节点资源。在这种情况下,就出现了资源争用情况,两个节点都占用一个资源,造 成数据冲突。针对这个情况,可以通过Linux提供的内核监控模块watchdog来解决这个问题,将watchdog集成到Heartbeat中。如果 Heartbeat异常终止,或者系统出现故障,watchdog都会自动重启系统,从而释放集群资源,避免了数据冲突的发生。
在执行"killall -9 heartbeat"时,会在/var/log/messages中看到如下信息:
Softdog: WDT device closed unexpectedly. WDT will not stop! 
系统就会马上重启

 

参考至:http://linux.chinaitlab.com/linuxjq/744842_6.html

          http://book.51cto.com/art/200912/168038.htm

          http://aaa3060.blog.163.com/blog/static/2817338520104314466314/

          http://blog.sina.com.cn/s/blog_5fc3a8b60100x0ge.html

LVS集群(NAT\DR\IP tunnel)

前期准备:
试验环境 Red Hat Enterprise Linux 4 U2
软件版本 ipvsadm-1.24.tar.gz
编译安装注意
        #pwd
        /usr/src
        #ln -s kernels/2.6.9-22.EL.i686 linux        如果没有目录则安装RPEM包kernel-devel-2.6.9-22.EL
      
        #rpmbuild -tb  ipvsadm-1.24.tar.gz
        #rpm -ivh /usr/src/redhat/RPEM/i386/ipvsadm-1.24-6.i386.rpm
正常使用时提示:
[root@lvs boot]# ipvsadm
IP Virtual Server version 1.2.0 (size=65536)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
  
一、NAT方式
Load Balance:192.168.1.1
Virtual IP:   10.0.0.1
RealServer1: 192.168.1.2   
RealServer2: 192.168.1.3
nameserver:   192.168.1.1
gateway:      192.168.1.1 (使用正确地址,或者使用本机地址,否则会出现刷新ipvsadm rule时很慢)
1.开启路由机制
#echo 1 > /proc/sys/net/ipv4/ip_forward
注意:
     永久修改要修改sysctl.conf
2.加载nat模块
#modprobe iptable_nat
注意:
     用lsmod检查,另如果不加载此模块,也可以在第一次访问时成功,但是会在再次访问时出现延迟过长,或访问超时现象。
3.加载rule
#ipvsadm -A -t 10.0.0.1:80 -s rr
#ipvsadm -a -t 10.0.0.1:80 -r 192.168.1.2:80 -m
#ipvsadm -a -t 10.0.0.1:80 -r 192.168.1.3:80 -m
rr 轮询方式
-m 设置为NAT方式
4.保存rule
#ipvsadm --save > /etc/sysconfig/ipvsadm
5.邦定vip
#ifconfig eth0:1 10.0.0.1 netmask 255.255.255.0 borcast 10.0.0.255
6.RealServer设置
RealServer1:
ip:         192.168.1.2
gateway:    192.168.1.1
nameserver: 192.168.1.1
开启HTTP服务,确认自己能够访问。
RealServer2:
ip:         192.168.1.3
gateway:    192.168.1.1
nameserver: 192.168.1.1
开启HTTP服务,确认自己能够访问。页面与realserver1不同就可以。
7.测试
选择一台主机,ip设置10.0.0.2 ,访问http://10.0.0.1,反复刷新网页,每次出现的网页不同则表示成功。
二、Direct Routing方式
Load Balance:192.168.1.1
Virtual IP:   10.0.0.1
RealServer1: 192.168.1.2   
RealServer2: 192.168.1.3
nameserver:   192.168.1.254
gateway:      192.168.1.254
1.开启路由机制
#echo 1 > /proc/sys/net/ipv4/ip_forward
注意:
     永久修改要修改sysctl.conf
2.加载rule
#ipvsadm -A -t 10.0.0.1:80 -s rr
#ipvsadm -a -t 10.0.0.1:80 -r 192.168.1.2:80 -g
#ipvsadm -a -t 10.0.0.1:80 -r 192.168.1.3:80 -g
rr 轮询方式
-g 设置为DR方式
3.保存rule
#ipvsadm --save > /etc/sysconfig/ipvsadm
4.邦定vip
#ifconfig eth0:1 10.0.0.1 netmask 255.255.255.0 borcast 10.0.0.255
4.RealServer设置
RealServer1:
ip:         192.168.1.2
gateway:    192.168.1.254
nameserver: 192.168.1.254
#ifconfig lo:1 10.0.0.1 netmask 255.255.255.255 borcast 10.0.0.1
#echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore           注释:这四句目的是为了关闭ARP广播响应
#echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
#echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
#echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
开启HTTP服务,确认自己能够访问。
RealServer2:
ip:         192.168.1.3
gateway:    192.168.1.254
nameserver: 192.168.1.254
#ifconfig lo:1 10.0.0.1 netmask 255.255.255.255 borcast 10.0.0.1
#echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
#echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
#echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
#echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
开启HTTP服务,确认自己能够访问。页面与realserver1不同就可以。
5.测试
在网关作测试即可,其中一块ip设置10.0.0.2 ,另一块设置192.168.1.254。访问http://10.0.0.1,反复刷新网页,每次出现的网页不同则表示成功。
三、IP Tunnel方式
vpn server:   
    eth0:10.0.0.3    (测试时使用的OPENVPN)
gateway server:
    eth0:10.0.0.2
    eth1:192.168.1.254  
gatewat server2:
    eth0:10.0.0.4
    eth1:172.0.0.254  
LVS Director Servers:
Load Balance:192.168.1.1
Virtual IP:   10.0.0.1
nameserver:   192.168.1.254
gateway:      192.168.1.254
RealServer1:
ip:         192.168.1.2
gateway:    192.168.1.254
nameserver: 192.168.1.254
tun0:       20.0.0.1      (这个是连接到vpn后有服务器分配到的)
RealServer2:
ip:         172.0.0.1     
gateway:    172.0.0.254
nameserver: 172.0.0.254
tun0:       20.0.0.2      (这个是连接到vpn后有服务器分配到的)
1.开启路由机制
#echo 1 > /proc/sys/net/ipv4/ip_forward
注意:
     永久修改要修改sysctl.conf
2.加载rule
#ipvsadm -A -t 10.0.0.1:80 -s rr
#ipvsadm -a -t 10.0.0.1:80 -r 20.0.0.1:80 -i  (RS1的地址指定,也可以选择本地地址192.168.1.2)
#ipvsadm -a -t 10.0.0.1:80 -r 20.0.0.2:80 -i
rr 轮询方式
-i 设置为IP Tunnel方式
3.保存rule
#ipvsadm --save > /etc/sysconfig/ipvsadm
4.邦定vip
#ifconfig eth0:1 10.0.0.1 netmask 255.255.255.0 borcast 10.0.0.255
4.RealServer设置
RealServer1:
ip:         192.168.1.2
gateway:    192.168.1.254
nameserver: 192.168.1.254
tun0:       20.0.0.1
#ifconfig tunl0 10.0.0.1 netmask 255.255.255.255 borcast 10.0.0.1
#echo 1 > /proc/sys/net/ipv4/conf/tunl0/arp_ignore           注释:这四句目的是为了关闭ARP广播响应
#echo 2 > /proc/sys/net/ipv4/conf/tunl0/arp_announce
#echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
#echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
开启HTTP服务,确认自己能够访问。
RealServer2:
RealServer2:
ip:         172.0.0.1
gateway:    172.0.0.254
nameserver: 172.0.0.254
tun0:       20.0.0.2
#ifconfig tunl0 10.0.0.1 netmask 255.255.255.255 borcast 10.0.0.1
#echo 1 > /proc/sys/net/ipv4/conf/tunl0/arp_ignore
#echo 2 > /proc/sys/net/ipv4/conf/tunl0/arp_announce
#echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
#echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
开启HTTP服务,确认自己能够访问。页面与realserver1不同就可以。
5.测试
在网关作测试即可,访问http://10.0.0.1,反复刷新网页,每次出现的网页不同则表示成功。

对于windows服务器配置

dr方式,先安装ms loopback adapter
添加新硬件--〉添加网络适配器--〉microsoft-->loopback adapter

只需要在windows的的服务器上,添加加一个microsoft loopback网卡(虚拟网卡),IP地址就是lvs的VIP,然后,进入注册表,把loopback网卡的掩码改为255.255.255.255,重启loopback网卡便可。

LVS笔记

在RS中建立一个lo:0接口,设置ip为vip地址。

当使用arping vip时,会有多个MAC地址回应,这是因为RS也响应的VS的arp查询。[code]sysctl -e net.ipv4.conf.all.arp_ignore=1[/code]复制代码

此时,RS即不再影响RS关于vip的ARP MAC查询了。

假如两台VS之间使用的互备关系,那么当一台VS接管LVS服务时,可能会网络不通,这时因为路由器的MAC缓存表里关于vip这个地址的MAC地址还是被替换的VS的MAC,有两种解决方法,一种是修改新VS的MAC地址,另一种是使用send_arp 命令(piranha软件包里带的一个小工具),格式如下:[code]send_arp

send_arp [-i dev] src_ip_addr src_hw_addr targ_ip_addr tar_hw_addr[/code]复制代码

这个命令不一定非要在VS上执行,只要在同一VLAN即可。

12-17:

今天对RS ARP MAC查询有了新的认识,网上大多数的文章都提到要用四个参数来关闭arp查询响应请求:[code]
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce[/code]复制代码
我的RS最近的流量也频繁出现“异常”,经分析是因为arp的问题,rs有时会夺取VS的ip援用权。使用以上四条之后,VS立刻有了流量。

1. LVS调度的最小单位是“连接”。
2. 当apache的KeepAlive被设置成Off时,“连接”才能被较均衡的调度。
3. 在不指定-p参数时,LVS才真正以“连接”为单位按“权值”调度流量。
4. 在指定了-p参数时,则一个client在一定时间内,将会被调度到同一台RS。
5. 可以通过”ipvsadm ?set tcp tcpfin udp”来调整TCP和UDP的超时,让连接淘汰得快一些。
6. 在NAT模式时,RS的PORT参数才有意义。
7. DR和TUN模式时,InActConn 是没有意义的(Thus the count in the InActConn column for LVS-DR, LVS-Tun is
inferred rather than real.)

lvs iptun模式下realserver需要运行的脚本

$vip = 192.168.0.254

ifconfig tunl0 $vip netmask 255.255.255.255 broadcast $vip up
route add -host $vip dev tunl0
echo 1 > /proc/sys/net/ipv4/conf/all/hidden
echo 1 > /proc/sys/net/ipv4/conf/tunl0/hidden

Records:1412