本文共 22022 字,大约阅读时间需要 73 分钟。
HAProxy是一个特别适用于高可用性环境的TCP/HTTP开源的反向代理和负载均衡软件。在7层负载均衡方面的功能很强大(支持cookie track, header rewrite等等),支持双机热备,支持虚拟主机,支持健康检查,同时还提供直观的监控页面,可以清晰实时的监控服务集群的运行状况。同时支持Linux 2.6内核中System Epoll,通过简化系统调用,大幅的提高了网络I/O性能。
带有用户验证的详细的HTML监控报告.
HAProxy is known to reliably run on the following OS/Platforms :Linux 2.4 on x86, x86_64, Alpha, Sparc, MIPS, PARISC Linux 2.6 / 3.x on x86, x86_64, ARM, Sparc, PPC64 Solaris 8/9 on UltraSPARC 2 and 3 Solaris 10 on Opteron and UltraSPARC FreeBSD 4.10 - 10 on x86 OpenBSD 3.1 to -current on i386, amd64, macppc, alpha, sparc64 and VAX (check the ports) AIX 5.1 - 5.3 on Power™ architecture
roundrobin
,表示简单的轮询,这个不多说,这个是负载均衡基本都具备的;static-rr
,表示根据权重,建议关注;leastconn
,表示最少连接者先处理,建议关注;source
,表示根据请求源IP,这个跟Nginx
的IP_hash
机制类似,我们用其作为解决session
问题的一种方法,建议关注;ri
,表示根据请求的URI;rl_param
,表示根据请求的URl参数’balance url_param’ requires an URL parameter name;hdr(name)
,表示根据HTTP请求头来锁定每一次HTTP请求;rdp-cookie(name)
,表示根据据cookie(name)来锁定并哈希每一次TCP请求。[root@linux-node1 ~]# yum install -y net-tools vim lrzsz tree screen lsof tcpdump nc mtr nmap gcc glib gcc-c++ make[root@linux-node1 ~]# cd /usr/local/src[root@linux-node1 src]# wget http://www.haproxy.org/download/1.6/src/haproxy-1.6.3.tar.gz[root@linux-node1 src]# tar zxf haproxy-1.6.3.tar.gz
[root@linux-node1 src]# cd haproxy-1.6.3[root@linux-node1 src]# make TARGET=linux2628 PREFIX=/usr/local/haproxy-1.6.3[root@linux-node1 src]# make install[root@linux-node1 ~]# cp /usr/local/sbin/haproxy /usr/sbin/[root@linux-node1 ~]# haproxy -vHA-Proxy version 1.6.3 2015/12/25Copyright 2000-2015 Willy Tarreau
[root@linux-node1 ~]# cd /usr/local/src/haproxy-1.6.3[root@linux-node1 haproxy-1.6.3]# cp examples/haproxy.init /etc/init.d/haproxy[root@linux-node1 haproxy-1.6.3]# chmod 755 /etc/init.d/haproxy
[root@linux-node1 ~]# useradd -r haproxy[root@linux-node1 ~]# mkdir /etc/haproxy[root@linux-node1 ~]# mkdir /var/lib/haproxy[root@linux-node1 ~]# mkdir /var/run/haproxy[root@linux-node1 ~]# vim /etc/haproxy/haproxy.cfgglobal log 127.0.0.1 local3 info chroot /var/lib/haproxy user haproxy group haproxy daemondefaults log global mode http option httplog option dontlognull timeout connect 5000 timeout client 50000 timeout server 50000frontend http_front bind *:80 stats uri /haproxy?stats default_backend http_backbackend http_back balance roundrobin server linux-node1 192.168.56.11:8080 check server linux-node2 192.168.56.12:8080 check#设置可以监听非本地IPnet.ipv4.ip_nonlocal_bind: sysctl.present: - value: 1
[root@saltstack-node1 ~]# vim /etc/rsyslog.conf#rsyslog 默认情况下,需要在514端口监听UDP,所以可以把/etc/rsyslog.conf如下的注释去掉# Provides UDP syslog reception $ModLoad imudp $UDPServerRun 514local3.* /var/log/haproxy.log
[root@saltstack-node1 ~]# vim /etc/sysconfig/rsyslog[root@linux-node1 ~]# systemctl restart rsyslog
globalmaxconn 100000chroot /usr/local/haproxyuid 99 gid 99 daemonnbproc 1 pidfile /usr/local/haproxy/logs/haproxy.pid log 127.0.0.1 local3 infodefaultsoption http-keep-alivemaxconn 100000mode httptimeout connect 5000mstimeout client 50000mstimeout server 50000mslisten statsmode httpbind 0.0.0.0:8888stats enablestats uri /haproxy-status stats auth haproxy:saltstackfrontend frontend_www_example_combind 192.168.56.21:80mode httpoption httploglog globaldefault_backend backend_www_example_combackend backend_www_example_comoption forwardfor header X-REAL-IPoption httpchk HEAD / HTTP/1.0balance sourceserver web-node1 192.168.56.21:8080 check inter 2000 rise 30 fall 15server web-node2 192.168.56.22:8080 check inter 2000 rise 30 fall 15
配置文件的语法是由关键字后跟可选的一个或者多个参数(参数之间有空格)组成。如果字符串中包含空格,必须使用''进行转义。\本身需要使用\进行转义。
一些参数值为时间,比如说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
HAProxy配置文件的配置方法主要用两种:一种是由前端(frontend)和后端(backend)配置块组成,前端和后端都可以有多个。第二种方法是只有一个listen配置快块来同时实现前端和后端。我们这里主要介绍最常用的frontend和backend工作模式,这个也是推荐的配置方法。
同时前端(frontend)区域可以根据HTTP请求的header信息来定义一些规则,然后将符合某规则的请求转发到相应后端(backend)进行处理,这个我们后面会详细讲解。
global # 全局参数的设置log 127.0.0.1 local0 info # log语法:log [max_level_1] # 全局的日志配置,使用log关键字,指定使用127.0.0.1上的syslog服务中的local0日志设备,记录日志等级为info的日志maxconn 4096 # 定义每个haproxy进程的最大连接数,由于每个连接包括一个客户端和一个服务器端,所以单个进程的TCP会话最大数目将是该值的两倍。user haproxygroup haproxy # 设置运行haproxy的用户和组,也可使用uid,gid关键字替代之daemon # 以守护进程的方式运行nbproc 16 # 设置haproxy启动时的进程数,根据官方文档的解释,我将其理解为:该值的设置应该和服务器的CPU核心数一致,即常见的2颗8核心CPU的服务器,即共有16核心,则可以将其值设置为:<=16 ,创建多个进程数,可以减少每个进程的任务队列,但是过多的进程数也可能会导致进程的崩溃。这里我设置为16maxconn 4096 # 定义每个haproxy进程的最大连接数,由于每个连接包括一个客户端和一个服务器端,所以单个进程的TCP会话最大数目将是该值的两倍。 #ulimit -n 65536 # 设置最大打开的文件描述符数,在1.4的官方文档中提示,该值会自动计算,所以不建议进行设置 pidfile /var/run/haproxy.pid# 定义haproxy的pid
使用Haproxy进行反向代理负载均衡,最常修改的部分就是代理相关的配置了,代理相关配置位于下列配置段中:
- defaults- frontend - backend - listen
"defaults"
段为其后的所有其他配置段设置默认参数。 "defaults"
段可以有多个,后设置的总是会覆盖之前的配置。查看下面的列表可以知道"defaults"段可以使用哪些配置参数。"defaults"关键字是可选的,但是为了更好的可读性,建议加上。
"frontend"
段描述了一组监听的套接字,它们接受客户端连接。
"backend"
段描述了一组服务器,代理(Haproxy)会连接这些服务器并转发客户端请求到这些服
"listen"
段定义了一个完整的代理,它的前段(frontend)和后端(frontend)都在这个配置
当前,HAProxy支持两种主要的代理模式: "tcp"也即4层,和"http",即7层。在4层模式下,
HAproxy仅在客户端和服务器之间转发双向流量。7层模式下,HAProxy会分析协议,并且能通过 允许、拒绝、交换、增加、修改或者删除请求(request)或者回应(response)里指定内容来控制 协议,这种操作要基于特定规则。
defaults # 默认部分的定义mode http # mode语法:mode {http|tcp|health} 。http是七层模式,tcp是四层模式,health是健康检测,返回OKlog 127.0.0.1 local3 err # 使用127.0.0.1上的syslog服务的local3设备记录错误信息retries 3 # 定义连接后端服务器的失败重连次数,连接失败次数超过此值后将会将对应后端服务器标记为不可用option httplog # 启用日志记录HTTP请求,默认haproxy日志记录是不记录HTTP请求的,只记录“时间[Jan 5 13:23:46] 日志服务器[127.0.0.1] 实例名已经pid[haproxy[25218]] 信息[Proxy http_80_in stopped.]”,日志格式很简单。option redispatch # 当使用了cookie时,haproxy将会将其请求的后端服务器的serverID插入到cookie中,以保证会话的SESSION持久性;而此时,如果后端的服务器宕掉了,但是客户端的cookie是不会刷新的,如果设置此参数,将会将客户的请求强制定向到另外一个后端server上,以保证服务的正常。option abortonclose # 当服务器负载很高的时候,自动结束掉当前队列处理比较久的链接option dontlognull # 启用该项,日志中将不会记录空连接。所谓空连接就是在上游的负载均衡器或者监控系统为了探测该服务是否存活可用时,需要定期的连接或者获取某一固定的组件或页面,或者探测扫描端口是否在监听或开放等动作被称为空连接;官方文档中标注,如果该服务上游没有其他的负载均衡器的话,建议不要使用该参数,因为互联网上的恶意扫描或其他动作就不会被记录下来option httpclose # 这个参数我是这样理解的:使用该参数,每处理完一个request时,haproxy都会去检查http头中的Connection的值,如果该值不是close,haproxy将会将其删除,如果该值为空将会添加为:Connection: close。使每个客户端和服务器端在完成一次传输后都会主动关闭TCP连接。与该参数类似的另外一个参数是“option forceclose”,该参数的作用是强制关闭对外的服务通道,因为有的服务器端收到Connection: close时,也不会自动关闭TCP连接,如果客户端也不关闭,连接就会一直处于打开,直到超时。contimeout 5000 # 设置成功连接到一台服务器的最长等待时间,默认单位是毫秒,新版本的haproxy使用timeout connect替代,该参数向后兼容clitimeout 3000 # 设置连接客户端发送数据时的成功连接最长等待时间,默认单位是毫秒,新版本haproxy使用timeout client替代。该参数向后兼容srvtimeout 3000 # 设置服务器端回应客户度数据发送的最长等待时间,默认单位是毫秒,新版本haproxy使用timeout server替代。该参数向后兼容
listen status # 定义一个名为status的部分bind 0.0.0.0:1080 # 定义监听的套接字mode http # 定义为HTTP模式log global # 继承global中log的定义stats refresh 30s # stats是haproxy的一个统计页面的套接字,该参数设置统计页面的刷新间隔为30sstats uri /admin?stats # 设置统计页面的uri为/admin?statsstats realm Private lands # 设置统计页面认证时的提示内容stats auth admin:password # 设置统计页面认证的用户和密码,如果要设置多个,另起一行写入即可stats hide-version # 隐藏统计页面上的haproxy版本信息
frontend http_80_in # 定义一个名为http_80_in的前端部分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获取到客户端的真实IPacl static_down nbsrv(static_server) lt 1 # 定义一个名叫static_down的acl,当backend static_sever中存活机器数小于1时会被匹配到 use_backend php_server if static_down # 如果满足策略static_down时,就将请求交予backend php_server
backend php_server #定义一个名为php_server的后端部分mode http # 设置为http模式balance source # 设置haproxy的调度算法为源地址hashcookie 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 2server php_server_2 10.12.25.72:80 cookie 2 check inter 2000 rise 3 fall 3 weight 1server 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_servermode httpoption httpchk GET /test/index.htmlserver static_server_1 10.12.25.83:80 cookie 3 check inter 2000 rise 3 fall 3
HAProxy作为Loadbalance,支持对backend的健康检查,以保证在后端backend不能服务时,把从frotend进来的request分配至可以其它可服务的backend,从而保证整体服务的可用性。
这种检测方式,haproxy只会去检查后端server的端口,并不能保证服务的真正可用。
listen http_proxy 0.0.0.0:80 mode http cookie SERVERID balance roundrobin option httpchk server web1 192.168.1.1:80 cookie server01 check server web2 192.168.1.2:80 cookie server02 check inter 500 rise 1 fall 2
这种检测方式,是用过去GET后端server的的web页面,基本上可以代表后端服务的可用性。
listen http_proxy 0.0.0.0:80 mode http cookie SERVERID balance roundrobin option httpchk GET /index.html server web1 192.168.1.1:80 cookie server01 check server web2 192.168.1.2:80 cookie server02 check inter 500 rise 1 fall 2 相关配置option httpchk
http-check disable-on-404 如果backend返回404,则除了长连接之外的后续请求将不被分配至该backend http-check send-state 增加一个header,同步HAProxy中看到的backend状态。该header为server可见。 X-Haproxy-Server-State: UP 2/3; name=bck/srv2; node=lb1; weight=1/2; scur=13/22; qcur=0 server option check:启用健康检测inter:健康检测间隔rise:检测服务可用的连续次数fall:检测服务不可用的连续次数error-limit:往server写数据连续失败的次数上限,执行on-error的设定observe:把正常服务过程作为健康检测请求,即实时检测on-error :满足error-limit后执行的操作(fastinter、fail-check、sudden-death、mark-down)。其中fastinter表示立即按照fastinter的检测延时进行。fail-check表示改次error作为一次检测;sudden-death表示模仿一次fatal,如果紧接着一次fail则置server为down;mark-down表示直接把server置为down状态。其它retries:连接失败重试的次数,如果重试该次数后还不能正常服务,则断开连接。
这种检测方式,则是基于高级,精细的一些监测需求。通过对后端服务访问的头部信息进行匹配检测。
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 web1 192.168.1.1:80 cookie server01 check server web2 192.168.1.2:80 cookie server02 check inter 500 rise 1 fall 2
HAProxy的算法有如下8种:
roundrobin,表示简单的轮询,static-rr,表示根据权重,建议关注;leastconn,表示最少连接者先处理,建议关注;source,表示根据请求源IP,建议关注;uri,表示根据请求的URI;url_param,表示根据请求的URl参数'balance url_param' requires an URL parameter namehdr(name),表示根据HTTP请求头来锁定每一次HTTP请求;rdp-cookie(name),表示根据据cookie(name)来锁定并哈希每一次TCP请求。
haroxy 将用户IP经过hash计算后 指定到固定的真实服务器上(类似于nginx 的IP hash 指令)
配置指令balance source
haproxy 将WEB服务端发送给客户端的cookie中插入(或添加加前缀)haproxy定义的后端的服务器COOKIE ID。
配置指令例举cookie SESSION_COOKIE insert indirect nocache
haproxy 将后端服务器产生的session和后端服务器标识存在haproxy中的一张表里。客户端请求时先查询这张表。然后根据session分配后端server。
配置指令:appsession<cookie> len <length> timeout <holdtime>
reqirep ^Host:\\ www.abc.com Host:\\ abc.comacl host_abc_com hdr(host) -i abc.comacl host_cn hdr_end(host) -i .cnacl host_xyz hdr_beg(host) -i xzy.acl url_xxx url_reg -i ^/xxxuse_backend host-abc-com if host_abc_com use_backend host-cn if host_cnuse_backend host-xyz-url-xxx if host_xyz url_xxxdefault_backend default-servers
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 if php_web# 如果满足策略php_web时,就将请求交予backend php_serveruse_backend static_server if static_web# 如果满足策略static_web时,就将请求交予backend static_server
acl invitec url_reg /invitec_pk.douse_backend b_yxpopo_com_pk if invitec
需求如下:
Haproxy主要配置如下:
acl static_d path_beg /static /small /big #匹配XX开始的acl index_page path_reg ^/$ #匹配首页acl ua hdr_reg(User-Agent) -i iphone android #匹配User-Agent类型acl club hdr_reg(host) -i club.jesse.com #匹配访问的域名redirect prefix http://3g.club.jesse.com if ua static_d club #匹配相关的ACL策略就进行跳转redirect prefix http://3g.club.jesse.com if index_page ua clubuse_backend club_pool if club
在实际使用过程中,有两个问题比较容易发生:
Linux系统默认提供了65K个端口,每当Haproxy建立了一个到MySQL的连接,就会消耗一个端口;当Haproxy断开和MySQL的连接时,该端口并不会立即释放,而是会处于TIME_WAIT状态(2*MSL),超时后才会释放此端口供新的连接使用。
我的环境中,tcp_fin_timeout
为15秒,也就是说如果我环境中的haproxy可以承载的最大并发连接数为64K/(15*2)=2.1K
,可实际上达不到这个上限,原因如下:net.ipv4.ip_local_port_range = 15000 65000
linux会保留一段端口,实际能参与分配的端口数只有50K,为了获得尽可能多的可分配端口,做如下调整: # sysctl net.ipv4.ip_local_port_range="1025 65000"# sysctl net.ipv4.ip_local_port_range="1025 65000"#记得修改/etc/sysctl.conf中对应的内容
调整两个参数:
net.ipv4.tcp_tw_reuse = 1net.ipv4.tcp_tw_recycle = 1
第一个参数很安全,可以不用过多关注。需要注意的是第二个参数,某些情况下会导致数据包被丢弃。
例如:client通过NAT连接haproxy,并且haproxy端打开了tcp_tw_recycle,同时saw_tstamp也没有关闭,当第一个连接建立并关闭后,此端口(句柄)处于TIME_WAIT状态,在2*MSL时间内又一个client(相同IP,如果打开了xfrm还要相同PORT)发一个syn包,此时linux内核就会认为这个数据包异常,从而丢掉这个包,并发送rst包. 不过通常情况下,client都是通过内网直接连接haproxy,所以可以认为tcp_tw_recycle是安全的,只是需要记住此坑。Linux系统默认MSL为60秒,也就是正常情况下,120秒后处于TIME_WAIT的端口(句柄)才会释放,可以将MSL的时间缩小,缩短端口的释放周期。
# cat /proc/sys/net/ipv4/tcp_fin_timeout60# echo 15 > /proc/sys/net/ipv4/tcp_fin_timeout#这是一个折中的数值,太小也会导致其它问题
如优化一中所说,我们已经尽可能多的使用了系统提供的端口范围。但最多依然不超过65K。
Haproxy提供了内建的端口管理方法,可以充分利用以扩大我们的端口范围。server mysql0 10.0.3.1:3306 check source 10.0.3.100:1025-65000server mysql1 10.0.3.1:3306 check source 10.0.3.101:1025-65000
如果使用两个ip,我们可用的端口数就接近130K。扩展多个IP,就可以不断增加端口数。
服务最好使用长连接,一是避免频繁的申请连接,导致端口耗尽;二是避免创建连接带来的时间消耗。
开启Haproxy Unix Socket
在global添加:stats socket /usr/local/haproxy/haproxy.sock mode 600 level admin stats timeout 2m
socat是一个多功能的网络工具,名字来由是“Socket CAT”,可以看作是netcat的N倍加强版,socat的官方网站: 。
socat是一个两个独立数据通道之间的双向数据传输的继电器。这些数据通道包含文件、管道、设备(终端或调制解调器等)、插座(Unix,IP4,IP6 - raw,UDP,TCP)、SSL、SOCKS4客户端或代理CONNECT。 socat支持广播和多播、抽象Unix sockets、Linux tun/tap、GNU readline和PTY。它提供了分叉、记录和进程间通信的不同模式。多个选项可用于调整socat和其渠道,Socat可以作为TCP中继(一次性或守护进程),作为一个守护进程基于socksifier,作为一个shell Unix套接字接口,作为IP6的继电器,或面向TCP的程序重定向到一个串行线。socat的主要特点就是在两个数据流之间建立通道;且支持众多协议和链接方式:ip, tcp, udp, ipv6, pipe,exec,system,open,proxy,openssl,socket
等。
使用socat可以查看和设置HAProxy状态,首先得让HAProxy产生出一个sock出来(hatop ,socat都是基于这个的,没这个什么都做不了)。
[root@lb-node3 ~]#yum install –y readline-devel openssl-devel tcp_wrappers[root@lb-node3 ~]# cd /usr/local/src[root@lb-node3 src]# wgethttp://www.dest-unreach.org/socat/download/socat-1.7.2.4.tar.gz[root@lb-node3 src]# tar zxf socat-1.7.2.4.tar.gz [root@lb-node3 src]# cd socat-1.7.2.4[root@lb-node3 socat-1.7.2.4]# ./configure&& make && make install
常用功能
echo "help"| socat stdio /usr/local/haproxy/haproxy.sockUnknown command. Please enter one of the following commands only :clear counters : clear max statistics counters (add 'all' for all counters)clear table : remove an entry from a tablehelp : this messageprompt : toggle interactive mode with promptquit : disconnectshow info : report information about the running processshow pools : report information about the memory pools usageshow stat : report counters for each proxy and servershow errors : report last request and response errors for each proxyshow sess [id] : report the list of current sessions or dump this sessionshow table [id]: report table usage stats or dump this table's contentsget weight : report a server's current weightset weight : change a server's weightset server : change a server's state or weightset table [id] : update or create a table entry's dataset timeout : change a timeout settingset maxconn : change a maxconn settingset rate-limit : change a rate limiting valuedisable : put a server or frontend in maintenance modeenable : re-enable a server or frontend which is in maintenance modeshutdown : kill a session or a frontend (eg:to release listening ports)show acl [id] : report avalaible acls or dump an acl's contentsget acl : reports the patterns matching a sample for an ACLadd acl : add acl entrydel acl : delete acl entryclear acl: clear the content of this aclshow map [id] : report avalaible maps or dump a map's contentsget map : reports the keys and values matching a sample for a mapset map : modify map entryadd map : add map entrydel map : delete map entryclear map : clear the content of this mapset ssl : set statement for ssl#查看状态:echo "show info;show stat" | socat /usr/local/haproxy/haproxy.sock stdio#关闭节点:echo "disable server b_yxpopo_com/hongbao-node11" | socat /usr/local/haproxy/haproxy.sock stdio#启用节点:echo "enable server b_yxpopo_com/hongbao-node11" | socat /usr/local/haproxy/haproxy.sock stdio
[root@linux-node1 ~]# cd /usr/local/src[root@linux-node1 src]# wget http://www.keepalived.org/software/keepalived-1.2.19.tar.gz[root@linux-node1 src]# tar zxf keepalived-1.2.19.tar.gz [root@linux-node1 src]# cd keepalived-1.2.19[root@linux-node1 keepalived-1.2.19]# ./configure --prefix=/usr/local/keepalived-1.2.19[root@linux-node1 keepalived-1.2.19]# make && make install[root@linux-node1 keepalived-1.2.19]# cp keepalived/etc/init.d/keepalived.init /etc/init.d/keepalived[root@linux-node1 keepalived-1.2.19]# chmod +x /etc/init.d/keepalived[root@linux-node1 keepalived-1.2.19]# cp keepalived/etc/init.d/keepalived.sysconfig /etc/sysconfig/keepalived[root@linux-node1 keepalived-1.2.19]# cp keepalived/etc/keepalived/keepalived.conf /etc
Keepalived的所有配置都在一个配置文件里面,主要分为三大类:
LVS配置
配置文件是以配置块的形式存在,每个配置块都在一个闭合的{}范围内,所有编辑的时候注意大括号的闭合问题。#和!开头的都是注释。 2.3.1 全局配置 全局配置是对整个Keepalived生效的配置,一个典型的配置如下:global_defs {#设置keepalived再发生事件(比如切换)的时候,需要发送到的email地址,可以设置多个,每行一个。 notification_email { shundong.zhao@dianjoy.com }#设置通知邮件发送来自于哪里 notification_email_from keepalived@dianjoy.com#指定发送邮件的smtp服务器 smtp_server 127.0.0.1#设置smtp连接超时事件,单位是秒 smtp_connect_timeout 30#设置route_id,是运行keepalived的一个标示,多个集群设置为不同的。 router_id nginx_ha}
VRRPD的配置是Keepalived比较重要的配置,主要分为两个部分VRR同步组合VRRP实例,我们先说VRRP实例,也就是要想使用VRRP进行高可用选举,那么就一定需要配置一个VRRP实例,在实例中来定义VIP、服务器角色等。
vrrp_instance NGINX_HA { #指定实例初始状态,实际的MASTER和BACKUP是选举决定的 state MASTER#指定实例绑定的网卡 interface eth0#设置VRID标记,多个集群不同重复(0..255) virtual_router_id 51#设置优先级,优先级高的会被竞选为Master,Master要高于BACKUP至少50 priority 150#检查的时间间隔,默认是1s。 advert_int 1#设置验证的类型和密码。 authentication { auth_type PASS auth_pass nginx }#设置VIP,可以设置多个,用于切换时的地址绑定。 virtual_ipaddress { 192.168.99.176 192.168.99.170 }}
设置路由,可以设置多条,用于切换时执行。
virtual_routes{#srcto / via | gw dev scope }#track_interface 设置额外的监控网卡,如果任何一个出现故障,就会进入FAULT状态#mcast_src_ip 设置发送多播的地址,默认是绑定的网卡的primary IP
! Configuration File for keepalivedglobal_defs {notification_email {saltstack@example.com}notification_email_from keepalived@example.comsmtp_server 127.0.0.1smtp_connect_timeout 30router_id 150}vrrp_instance haproxy_ha {state Masterinterface eth0virtual_router_id 36priority 100advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.56.20}}
转载地址:http://hrcix.baihongyu.com/