1、HAProxy是什么

HAProxy是一个免费的负载均衡软件,可以运行于大部分主流的Linux操作系统上。
HAProxy提供了L4(TCP)和L7(HTTP)两种负载均衡能力,具备丰富的功能。HAProxy的社区非常活跃,版本更新快速(最新稳定版1.7.2于2017/01/13推出)。最关键的是,HAProxy具备媲美商用负载均衡器的性能和稳定性。
因为HAProxy的上述优点,它当前不仅仅是免费负载均衡软件的首选,更几乎成为了唯一选择。

官网: http://www.haproxy.org/

2、HAProxy的核心功能

  • 负载均衡: L4和L7两种模式,支持丰富的负载均衡算法,如RR,IP Hash/URI Hash/URL_PARAM Hash等
  • 健康检查:支持TCP和HTTP两种健康检查模式
  • 会话保持:对于未实现会话共享的应用集群,可通过Insert Cookie/Rewrite Cookie/Prefix Cookie,以及上述的多种Hash方式实现会话保持
  • SSL:HAProxy可以解析HTTPS协议,并能够将请求解密为HTTP后向后端传输
  • HTTP请求重写与重定向
  • 监控与统计:HAProxy提供了基于Web的统计信息页面,展现健康状态和流量数据。基于此功能,使用者可以开发监控程序来监控HAProxy的状态

    3、HAProxy的关键特性

A: 性能

  • 采用单线程、事件驱动、非阻塞模型,减少上下文切换的消耗
  • O(1)复杂度的事件检查器,零拷贝转发,单缓存Single-buffereing

B: 稳定性
HAProxy的大部分工作都是在操作系统内核完成的,所以HAProxy的稳定性主要依赖于操作系统

  • 使用3.x内核的Linux操作系统运行HAProxy
  • 运行HAProxy的主机上不要部署其他的应用,确保HAProxy独占资源
  • 至少为HAProxy配备一台备机
  • sysctl的建议配置
    1. net.ipv4.tcp_tw_reuse = 1
    2. net.ipv4.ip_local_port_range = 1024 65023
    3. net.ipv4.tcp_max_syn_backlog = 10240
    4. net.ipv4.tcp_max_tw_buckets = 400000
    5. net.ipv4.tcp_max_orphans = 60000
    6. net.ipv4.tcp_synack_retries = 3
    7. net.core.somaxconn = 10000

4、HAProxy的安装及运行

A: CentOS7中安装和运行HAProxy最新稳定版(1.7.5)的方法

  1. HAProxy创建用户和用户组,此例中用户和用户组都是"ha"。注意,如果想要让HAProxy监听1024以下的端口,则需要以root用户来启动

编译安装HAProxy

  1. wget http://www.haproxy.org/download/1.7/src/haproxy-1.7.5.tar.gz
  2. tar -xf haproxy-1.7.5.tar.gz
  3. cd haproxy-1.7.5
  4. make TARGET=linux2628 PREFIX=/usr/local/haproxy
  5. make install PREFIX=/usr/local/haproxy
  6. #安装成功后,查看版本
  7. /usr/local/haproxy/sbin/haproxy -v

创建HAProxy配置文件

  1. mkdir /etc/haproxy
  2. cat > /etc/haproxy/haproxy.cfg << -EOF
  3. global #全局属性
  4. log 127.0.0.1 local3 info
  5. chroot /usr/local/haproxy
  6. #用户与用户组
  7. user haproxy
  8. group haproxy
  9. daemon #以daemon方式在后台运行
  10. maxconn 256 #最大同时256连接
  11. pidfile /usr/local/haproxy/haproxy.pid #指定保存HAProxy进程号的文件
  12. defaults #默认参数
  13. log global
  14. mode http
  15. option httplog
  16. option dontlognull
  17. timeout connect 5000ms #连接server端超时5s
  18. timeout client 50000ms #客户端响应超时50s
  19. timeout server 50000ms #server端响应超时50s
  20. frontend http-in #前端服务http-in
  21. bind *:8080 #监听8080端口
  22. default_backend servers #请求转发至名为"servers"的后端服务
  23. backend servers #后端服务servers
  24. server server1 127.0.0.1:8000 maxconn 32 #backend servers中只有一个后端服务,名字叫server1,起在本机的8000端口,HAProxy同时最多向这个服务发起32个连接
  25. EOF

创建HAProxy启动脚本

  1. cp /usr/local/haproxy/sbin/haproxy /usr/sbin/
  2. cp ./examples/haproxy.init /etc/init.d/haproxy
  3. chmod 755 /etc/init.d/haproxy
  4. #创建用户
  5. useradd -r haproxy
  6. #权限
  7. chown -R haproxy.haproxy /etc/haproxy /usr/local/haproxy
  1. vi /etc/init.d/haproxy
  2. #! /bin/sh
  3. set -e
  4. PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/haproxy/sbin
  5. PROGDIR=/usr/local/haproxy
  6. PROGNAME=haproxy
  7. DAEMON=$PROGDIR/sbin/$PROGNAME
  8. CONFIG=$PROGDIR/conf/$PROGNAME.cfg
  9. PIDFILE=$PROGDIR/conf/$PROGNAME.pid
  10. DESC="HAProxy daemon"
  11. SCRIPTNAME=/etc/init.d/$PROGNAME
  12. # Gracefully exit if the package has been removed.
  13. test -x $DAEMON || exit 0
  14. start()
  15. {
  16. echo -e "Starting $DESC: $PROGNAME\n"
  17. $DAEMON -f $CONFIG
  18. echo "."
  19. }
  20. stop()
  21. {
  22. echo -e "Stopping $DESC: $PROGNAME\n"
  23. haproxy_pid="$(cat $PIDFILE)"
  24. kill $haproxy_pid
  25. echo "."
  26. }
  27. restart()
  28. {
  29. echo -e "Restarting $DESC: $PROGNAME\n"
  30. $DAEMON -f $CONFIG -p $PIDFILE -sf $(cat $PIDFILE)
  31. echo "."
  32. }
  33. case "$1" in
  34. start)
  35. start
  36. ;;
  37. stop)
  38. stop
  39. ;;
  40. restart)
  41. restart
  42. ;;
  43. *)
  44. echo "Usage: $SCRIPTNAME {start|stop|restart}" >&2
  45. exit 1
  46. ;;
  47. esac
  48. exit 0

添加日志

  1. #为rsyslog添加haproxy日志的配置
  2. vi /etc/rsyslog.d/haproxy.conf
  3. $ModLoad imudp
  4. $UDPServerRun 514
  5. $FileCreateMode 0644 #日志文件的权限
  6. $FileOwner haproxy #日志文件的owner
  7. local3.* /var/log/haproxy.log #local3接口对应的日志输出文件

修改rsyslog的启动参数

  1. vi /etc/sysconfig/rsyslog
  2. # Options for rsyslogd
  3. # Syslogd options are deprecated since rsyslog v3.
  4. # If you want to use them, switch to compatibility mode 2 by "-c 2"
  5. # See rsyslogd(8) for more details
  6. SYSLOGD_OPTIONS="-c 2 -r -m 0"

启rsyslog和HAProxy

  1. service rsyslog restart
  2. service haproxy restart

用logrotate进行日志切分

通过rsyslog输出的日志是不会进行切分的,所以需要依靠Linux提供的logrotate(Linux系统Logrotate服务介绍)来进行切分工作
使用root用户,创建haproxy日志切分配置文件

  1. mkdir /root/logrotate
  2. vi /root/logrotate/haproxy
  3. /var/log/haproxy.log { #切分的两个文件名
  4. daily #按天切分
  5. rotate 7 #保留7份
  6. create 0644 ha ha #创建新文件的权限、用户、用户组
  7. compress #压缩旧日志
  8. delaycompress #延迟一天压缩
  9. missingok #忽略文件不存在的错误
  10. dateext #旧日志加上日志后缀
  11. sharedscripts #切分后的重启脚本只运行一次
  12. postrotate #切分后运行脚本重载rsyslog,让rsyslog向新的日志文件中输出日志
  13. /bin/kill -HUP $(/bin/cat /var/run/syslogd.pid 2>/dev/null) &>/dev/null
  14. endscript
  15. }
  1. 0 0 * * * /usr/sbin/logrotate /root/logrotate/haproxy

https://centos.pkgs.org/ 搜索haproxy的rpm包

B: Ubuntu18.04安装haproxy2 (支持多进程,多线程)

https://haproxy.debian.net/

  1. root@haproxy01:~# cat /etc/apt/sources.list
  2. deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse
  3. deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
  4. deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
  5. deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
  1. apt-get install --no-install-recommends software-properties-common
  2. add-apt-repository ppa:vbernat/haproxy-2.0
  3. apt -y update
  4. apt-cache madison haproxy
  5. apt-get -y install haproxy=2.0.\*
  6. root@haproxy01:~# systemctl start haproxy
  7. root@haproxy01:~# systemctl status haproxy
  8. haproxy.service - HAProxy Load Balancer
  9. Loaded: loaded (/lib/systemd/system/haproxy.service; enabled; vendor preset: enabled)
  10. Active: active (running) since Thu 2021-03-25 07:34:24 UTC; 24s ago
  11. Docs: man:haproxy(1)
  12. file:/usr/share/doc/haproxy/configuration.txt.gz
  13. Main PID: 12475 (haproxy)
  14. Tasks: 3 (limit: 2321)
  15. CGroup: /system.slice/haproxy.service
  16. ├─12475 /usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid -S /run/haproxy-master.sock
  17. └─12488 /usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid -S /run/haproxy-master.sock
  18. Mar 25 07:34:24 haproxy01 systemd[1]: Starting HAProxy Load Balancer...
  19. Mar 25 07:34:24 haproxy01 haproxy[12475]: [NOTICE] 083/073424 (12475) : New worker #1 (12488) forked
  20. Mar 25 07:34:24 haproxy01 systemd[1]: Started HAProxy Load Balancer.
  21. root@haproxy01:~# ps aux|grep haproxy
  22. root 12475 0.0 0.4 132464 9648 ? Ss 07:34 0:00 /usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid -S /run/haproxy-master.sock
  23. haproxy 12488 0.0 0.1 132464 3828 ? Sl 07:34 0:00 /usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid -S /run/haproxy-master.sock

二进制安装: https://blog.csdn.net/liuhaoy/article/details/103915064

5、使用HAProxy搭建L7负载均衡器 (以ubuntu为例)

  • 负载均衡
  • 会话保持
  • 健康检查
  • 根据URI前缀向不同的后端集群转发
  • 监控页面

架构中共有6个后端服务,划分为3组,每组中2个服务:

  • ms1:服务URI前缀为ms1/的请求
  • ms2:服务URI前缀为ms2/的请求
  • def:服务其他请求

健康检查页面healthCheck.html,确保通过http://ip:port/healthCheck.html可以访问到这个页面

  1. HAProxy配置文件:
  2. global
  3. daemon
  4. maxconn 30000 #ulimit -n至少为60018
  5. user haproxy
  6. pidfile /usr/local/haproxy/conf/haproxy.pid
  7. log 127.0.0.1 local0 info
  8. log 127.0.0.1 local1 warning
  9. defaults
  10. mode http
  11. log global
  12. option http-keep-alive #使用keepAlive连接
  13. option forwardfor #记录客户端IP在X-Forwarded-For头域中
  14. option httplog #开启httplog,HAProxy会记录更丰富的请求信息
  15. timeout connect 5000ms
  16. timeout client 10000ms
  17. timeout server 50000ms
  18. timeout http-request 20000ms #从连接创建开始到从客户端读取完整HTTP请求的超时时间,用于避免类DoS攻击
  19. option httpchk GET /healthCheck.html #定义默认的健康检查策略
  20. frontend http-in
  21. bind *:9001
  22. maxconn 30000 #定义此端口上的maxconn
  23. acl url_ms1 path_beg -i /ms1/ #定义ACL,当uri以/ms1/开头时,ACL[url_ms1]为true
  24. acl url_ms2 path_beg -i /ms2/ #同上,url_ms2
  25. use_backend ms1 if url_ms1 #当[url_ms1]为true时,定向到后端服务群ms1中
  26. use_backend ms2 if url_ms2 #当[url_ms2]为true时,定向到后端服务群ms2中
  27. default_backend default_servers #其他情况时,定向到后端服务群default_servers中
  28. backend ms1 #定义后端服务群ms1
  29. balance roundrobin #使用RR负载均衡算法
  30. cookie HA_STICKY_ms1 insert indirect nocache #会话保持策略,insert名为"HA_STICKY_ms1"的cookie
  31. #定义后端server[ms1.srv1],请求定向到该server时会在响应中写入cookie值[ms1.srv1]
  32. #针对此server的maxconn设置为300
  33. #应用默认健康检查策略,健康检查间隔和超时时间为2000ms,两次成功视为节点UP,三次失败视为节点DOWN
  34. server ms1.srv1 192.168.8.111:8080 cookie ms1.srv1 maxconn 300 check inter 2000ms rise 2 fall 3
  35. server ms1.srv2 192.168.8.112:8080 cookie ms1.srv2 maxconn 300 check inter 2000ms rise 2 fall 3
  36. backend ms2 #定义后端服务群ms2
  37. balance roundrobin
  38. cookie HA_STICKY_ms2 insert indirect nocache
  39. server ms2.srv1 192.168.8.111:8081 cookie ms2.srv1 maxconn 300 check inter 2000ms rise 2 fall 3
  40. server ms2.srv2 192.168.8.112:8081 cookie ms2.srv2 maxconn 300 check inter 2000ms rise 2 fall 3
  41. backend default_servers #定义后端服务群default_servers
  42. balance roundrobin
  43. cookie HA_STICKY_def insert indirect nocache
  44. server def.srv1 192.168.8.111:8082 cookie def.srv1 maxconn 300 check inter 2000ms rise 2 fall 3
  45. server def.srv2 192.168.8.112:8082 cookie def.srv2 maxconn 300 check inter 2000ms rise 2 fall 3
  46. listen stats #定义监控页面
  47. bind *:1080 #绑定端口1080
  48. stats refresh 30s #每30秒更新监控数据
  49. stats uri /stats #访问监控页面的uri
  50. stats realm HAProxy\ Stats #监控页面的认证提示
  51. stats auth admin:admin #监控页面的用户名和密码

6、HAProxy搭建L4负载均衡器

以L4模式运行的HAProxy,无法实现根据URL向不同后端转发、通过cookie实现会话保持等功能,在L4模式下工作的HAProxy也无法提供监控页面

  1. global
  2. daemon
  3. maxconn 30000 #ulimit -n至少为60018
  4. user ha
  5. pidfile /home/ha/haproxy/conf/haproxy.pid
  6. log 127.0.0.1 local0 info
  7. log 127.0.0.1 local1 warning
  8. defaults
  9. mode tcp
  10. log global
  11. option tcplog #开启tcplog
  12. timeout connect 5000ms
  13. timeout client 10000ms
  14. timeout server 10000ms #TCP模式下,应将timeout client和timeout server设置为一样的值,以防止出现问题
  15. option httpchk GET /healthCheck.html #定义默认的健康检查策略
  16. frontend http-in
  17. bind *:9002
  18. maxconn 30000 #定义此端口上的maxconn
  19. default_backend default_servers #请求定向至后端服务群default_servers
  20. backend default_servers #定义后端服务群default_servers
  21. balance roundrobin
  22. server def.srv1 192.168.8.111:8082 maxconn 300 check
  23. server def.srv2 192.168.8.112:8082 maxconn 300 check

7、HAProxy关键配置

  1. global:用于配置全局参数
  2. default:用于配置所有frontendbackend的默认属性
  3. frontend:用于配置前端服务(即HAProxy自身提供的服务)实例
  4. backend:用于配置后端服务(即HAProxy后面接的服务)实例组
  5. listenfrontend+backend的组合配置,可以理解成更简洁的配置方法

global区域

  1. daemon:指定HAProxy以后台模式运行,通常情况下都应该使用这一配置
  2. user [username] :指定HAProxy进程所属的用户
  3. group [groupname] :指定HAProxy进程所属的用户组
  4. log [address] [device] [maxlevel] [minlevel]:日志输出配置,如log 127.0.0.1 local0 info warning,即向本机rsyslogsysloglocal0输出infowarning级别的日志。其中[minlevel]可以省略。HAProxy的日志共有8个级别,从高到低为emerg/alert/crit/err/warning/notice/info/debug
  5. pidfile :指定记录HAProxy进程号的文件绝对路径。主要用于HAProxy进程的停止和重启动作。
  6. maxconn HAProxy进程同时处理的连接数,当连接数达到这一数值时,HAProxy将停止接收连接请求

defautls区域

  1. option redispatch server Id对应的服务器挂掉后,强制定向到其他健康的服务器,重新派发
  2. option abortonclose 当服务器负载很高的时候,自动结束掉当前队列处理比较久的连接,关闭
  3. option http-keep-alive #开启与客户端的会话连接
  4. option forwardfor #透传客户端真实IP到后端web服务器
  5. option httplog #开启httplog,HAProxy将会以类似Apache HTTP或Nginx的格式来记录请求日志
  6. mode http #设置默认工作类型为http
  7. timeout http-keep-alive 120s #session会话保持超时时间,范围内转发到相同的后端服务器
  8. timeout connect 120s #客户端请求从haproxy到后端server的最长连接等待时间
  9. timeout client 600s #设置haproxy与客户端的最长非活动时间
  10. timeout server 600s #客户端请求从haproxy到后端服务器的请求处理超时时长
  11. timeout check 5s #对后端默认的检测超时时间
  12. log:同global域的log配置,仅应用于此frontend。如果要沿用global域的log配置,则此处配置为log global

frontend区域

  1. acl [name] [criterion] [flags] [operator] [value]:定义一条ACLACL是根据数据包的指定属性以指定表达式计算出的true/false值。如"acl url_ms1 path_beg -i /ms1/"定义了名为url_ms1ACL,该ACL在请求uri以/ms1/开头(忽略大小写)时为true
  2. bind [ip]:[port]:frontend服务监听的端口
  3. default_backend [name]:frontend对应的默认backend
  4. disabled:禁用此frontend
  5. http-request [operation] [condition]:对所有到达此frontendHTTP请求应用的策略,例如可以拒绝、要求认证、添加header、替换header、定义ACL等等。
  6. http-response [operation] [condition]:对所有从此frontend返回的HTTP响应应用的策略,大体同上
  7. maxconn:同global域的maxconn,仅应用于此frontend
  8. use_backend [backend] if|unless [acl]:与ACL搭配使用,在满足/不满足ACL时转发至指定的backend
  9. acl invalid_src src 172.16.141.99 # 定义名称为 invalid_src 的 ACL 名称
  10. block if invalid_src # 对源地址符合 invalid_src 的地址进行 block 操作
  11. errorfile 403 /etc/fstab # 错误页定向为 /etc/fstab

backend区域

  1. acl:同frontend
  2. balance [algorithm]:在此backend下所有server间的负载均衡算法,常用的有roundrobinsource,完整的算法说明见官方文档configuration.html#4.2-balance
  3. cookie:在backend server间启用基于cookie的会话保持策略,最常用的是insert方式,如cookie HA_STICKY_ms1 insert indirect nocache,指HAProxy将在响应中插入名为HA_STICKY_ms1cookie,其值为对应的server定义中指定的值,并根据请求中此cookie的值决定转发至哪个serverindirect代表如果请求中已经带有合法的HA_STICK_ms1 cookie,则HAProxy不会在响应中再次插入此cookienocache则代表禁止链路上的所有网关和缓存服务器缓存带有Set-Cookie头的响应。
  4. default-server:用于指定此backend下所有server的默认设置。具体见下面的server配置。
  5. disabled:禁用此backend
  6. http-request/http-response:同frontend
  7. log:同frontend
  8. mode:同frontend
  9. option forwardfor:同frontend
  10. option http-keep-alive:同frontend
  11. option httpclose:同frontend
  12. option httpchk [METHOD] [URL] [VERSION]:定义以http方式进行的健康检查策略。如option httpchk GET /healthCheck.html HTTP/1.1
  13. option httplog:同frontend
  14. option tcplog:同frontend
  15. server [name] [ip]:[port] [params]:定义backend中的一个后端server,[params]用于指定这个server的参数,常用的包括有:
  16. check:指定此参数时,HAProxy将会对此server执行健康检查,检查方法在option httpchk中配置。同时还可以在check后指定inter, rise, fall三个参数,分别代表健康检查的周期、连续几次成功认为server UP,连续几次失败认为server DOWN,默认值是inter 2000ms rise 2 fall 3
  17. cookie [value]:用于配合基于cookie的会话保持,如cookie ms1.srv1代表交由此server处理的请求会在响应中写入值为ms1.srv1cookie(具体的cookie名则在backend域中的cookie设置中指定)
  18. maxconn:指HAProxy最多同时向此server发起的连接数,当连接数到达maxconn后,向此server发起的新连接会进入等待队列。默认为0,即无限
  19. maxqueue:等待队列的长度,当队列已满后,后续请求将会发至此backend下的其他server,默认为0,即无限
  20. weightserver的权重,0-256,权重越大,分给这个server的请求就越多。weight0server将不会被分配任何新的连接。所有server默认weight1
  21. timeout connect [time]:指HAProxy尝试与backend server创建连接的超时时间
  22. timeout check [time]:默认情况下,健康检查的连接+响应超时时间为server命令中指定的inter值,如果配置了timeout checkHAProxy会以inter作为健康检查请求的连接超时时间,并以timeout check的值作为健康检查请求的响应超时时间
  23. timeout server [time]:指backend server响应HAProxy请求的超时时间

8、haproxy实现request请求重定向

关于haproxy 请求重定向主要会用到:1. redirect ;2. redir 这两类重定向配置语法
http-request redirect location [code ] [

9、HAProxy实现动静分离

  1. frontend westos *:80
  2. acl url_static path_beg -i /images
  3. acl url_static path_end -i .jpg .gif .png
  4. use_backend static if url_static
  5. default_backend app (默认访问app)
  6. #backend:定义后端服务器集群
  7. backend static (静态)
  8. #balance roundrobin
  9. server web2 172.25.42.14:80 check
  10. backend app
  11. #balance roundrobin
  12. server web1 172.25.42.13:80 check
  13. server local 172.25.42.12:8000 backup (如果后端real server down 则调度报错页面 但是正常情况下不会访问 因为 是“backup”)

10、HAProxy https配置

证书文件为PEM格式,要求把私钥和证书文件放在一起
bind *:443 ssl crt /PATH/TO/SOME_PEM_FILE

  1. frontend LB_http
  2. bind 10.123.122.112:80
  3. reqadd X-Forwarded-Proto:\ http
  4. default_backend LB
  5. frontend LB_https
  6. bind 10.123.122.112:443 ssl crt /usr/local/apache2/conf/server.pem
  7. reqadd X-Forwarded-Proto:\ https
  8. default_backend LB
  9. backend LB
  10. redirect scheme https if !{ ssl_fc }
  11. mode http
  12. stats enable
  13. stats hide-version
  14. stats uri /stats
  15. stats realm Haproxy\ Statistics
  16. stats auth haproxy:redhat # Credentials for HAProxy Statistic report page.
  17. balance roundrobin # Load balancing will work in round-robin process.
  18. option httpchk
  19. option httpclose
  20. option forwardfor
  21. server myserver.domain.com myserver.domain.com:80 # backend server.

11、使用Keepalived实现HAProxy高可用

搭建HAProxy主备集群

1) 安装Keepalived

注意:Keepalived需要使用root用户进行安装和配置

  1. wget http://www.keepalived.org/software/keepalived-1.2.19.tar.gz
  2. tar -xzf keepalived-1.2.19.tar.gz
  3. ./configure --prefix=/usr/local/keepalived
  4. make
  5. make install
  1. cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
  2. cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
  3. cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
  4. chmod +x /etc/init.d/keepalived

2) 配置Keepalived

  1. yum intall psmisc -y
  2. mkdir -p /etc/keepalived/
  3. cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
  4. vi /etc/keepalived/keepalived.conf
  1. global_defs {
  2. router_id LVS_DEVEL #虚拟路由名称
  3. }
  4. #HAProxy健康检查配置
  5. vrrp_script chk_haproxy {
  6. script "killall -0 haproxy" #使用killall -0检查haproxy实例是否存在,性能高于ps命令
  7. interval 2 #脚本运行周期
  8. weight 2 #每次检查的加权权重值
  9. }
  10. #虚拟路由配置
  11. vrrp_instance VI_1 {
  12. state MASTER #本机实例状态,MASTER/BACKUP,备机配置文件中请写BACKUP
  13. interface eth0 #本机网卡名称,使用ifconfig命令查看
  14. virtual_router_id 51 #虚拟路由编号,主备机保持一致
  15. priority 101 #本机初始权重,备机请填写小于主机的值(例如100)
  16. advert_int 1 #争抢虚地址的周期,秒
  17. virtual_ipaddress {
  18. 192.168.31.201 dev eth0 #虚地址IP,主备机保持一致
  19. }
  20. track_script {
  21. chk_haproxy #对应的健康检查配置
  22. }
  23. }
  1. global_defs {
  2. router_id LVS_DEVEL #虚拟路由名称
  3. }
  4. #HAProxy健康检查配置
  5. vrrp_script chk_haproxy {
  6. script "killall -0 haproxy" #使用killall -0检查haproxy实例是否存在,性能高于ps命令
  7. interval 2 #脚本运行周期
  8. weight 3 #每次检查的加权权重值
  9. }
  10. #虚拟路由配置
  11. vrrp_instance VI_1 {
  12. state BACKUP #本机实例状态,MASTER/BACKUP,备机配置文件中请写BACKUP
  13. interface eth0 #本机网卡名称,使用ifconfig命令查看
  14. virtual_router_id 51 #虚拟路由编号,主备机保持一致
  15. priority 99 #本机初始权重,备机请填写小于主机的值(例如100)
  16. advert_int 1 #争抢虚地址的周期,秒
  17. virtual_ipaddress {
  18. 192.168.31.201 dev eth0 #虚地址IP,主备机保持一致
  19. }
  20. track_script {
  21. chk_haproxy #对应的健康检查配置
  22. }
  23. }