当前位置:   article > 正文

keepalived+ haproxy的简单使用及配置_keepalived haproxy 配置

keepalived haproxy 配置
先决条件 openeuler操作系统22.03 sp3(使用centos7 也一样)
  1. [root@ha01 /etc/keepalived]$uname -a
  2. Linux ha01 5.10.0-182.0.0.95.oe2203sp3.x86_64 #1 SMP Sat Dec 30 13:10:36 CST 2023 x86_64 x86_64 x86_64 GNU/Linux

主备服务器ha01 ha02(如果没有两块网卡可以用一块,也可以虚拟机添加一块网卡.)

  1. #检查网络IP相关信息
  2. [root@ha01 /etc/keepalived]$ip a |grep ens
  3. 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
  4. inet 192.168.59.238/24 brd 192.168.59.255 scope global noprefixroute ens33
  5. 3: ens35: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
  6. inet 192.168.61.238/24 brd 192.168.61.255 scope global noprefixroute ens35
  7. #↓
  8. [root@ha02 /etc/sysconfig/network-scripts]$ip a |grep ens
  9. 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
  10. inet 192.168.59.239/24 brd 192.168.59.255 scope global noprefixroute ens33
  11. 3: ens35: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
  12. inet 192.168.61.239/24 brd 192.168.61.255 scope global noprefixroute ens35
安装keepalived服务和haproxy服务(两台服务器都要安装)
[root@ha01 ~]$yum -y install keepalived  haproxy

原始配置文件备份

  1. [root@ha01 ~]$cd /etc/keepalived/
  2. [root@ha01 /etc/keepalived]$cp keepalived.conf keepalived.conf.bak

主节点ha01修改配置文件

  1. [root@ha01 /etc/keepalived]$cat keepalived.conf
  2. ! Configuration File for keepalived
  3. global_defs {
  4. #↓指定运行脚本的用户为root
  5. script_user root
  6. #↓启动脚本安全检查,防止恶意脚本执行
  7. enable_script_security
  8. #↓ 主备节点设置不同的 router_id,以便于管理和监控
  9. router_id ha01
  10. }
  11. #↓定义一个检查脚本
  12. vrrp_script check_haproxy {
  13. #↓指定脚本路径
  14. script "/etc/keepalived/check_apiserver.sh"
  15. #↓设置脚本执行间隔为3
  16. interval 3
  17. # ↓script中的指令执行失败或返回值非0时,则相应的vrrp_instance的priority会减少20,此时主节点优先级减20后,值已经低于备节点,就会发生主备切换。
  18. weight -20
  19. #↓脚本连续失败两次出发权重减少的情况
  20. fall 2
  21. #↓当脚本连续成功两次恢复主节点优先级
  22. rise 2
  23. }
  24. #
  25. vrrp_instance VI_1 {
  26. #↓设置该实例的状态为master(主节点)
  27. state MASTER
  28. # ↓不抢占,允许一个priority比较低的节点作为master,即使有priority更高的节点已经启动。
  29. nopreempt
  30. #↓指定绑定网卡的名称(使用nmcli con查看)
  31. interface ens33
  32. #↓ 主备节点上相同的值。virtual_router_id 是用来标识一个特定的 VRRP (Virtual Router Redundancy Protocol)组的,同一个 VRRP 组中的所有节点都应使用相同的 virtual_router_id。
  33. virtual_router_id 52
  34. # 如果 script执行失败,则此将降为90(与上面设置的权重一起使用,如果脚本失败会将priority的值减少20)
  35. priority 110
  36. # 设置 VRRP 广播消息的时间间隔。目前设置为2秒检查一次,根据您的网络环境和需求。
  37. advert_int 2
  38. #↓认证信息使用密码认证类型,密码是2222(主备节点数值相同)
  39. authentication {
  40. auth_type PASS
  41. auth_pass 2222
  42. }
  43. #↓单播模式,主节点IP
  44. unicast_src_ip 192.168.59.238
  45. unicast_peer {
  46. # 备节点的IP
  47. 192.168.59.239
  48. }
  49. virtual_ipaddress {
  50. # VIP
  51. 192.168.59.240
  52. }
  53. #↓跟踪脚本用于检查haproxy的状态.
  54. track_script {
  55. check_haproxy
  56. }
  57. }

从节点修改配置文件

  1. #具体参数配置信息参考ha01,修改的部分权重和ip信息.
  2. [root@ha02 /etc/keepalived]$cat keepalived.conf
  3. ! Configuration File for keepalived
  4. global_defs {
  5. script_user root
  6. enable_script_security
  7. # 主备节点设置不同的 router_id,以便于管理和监控
  8. router_id ha02
  9. }
  10. vrrp_script check_haproxy {
  11. # script
  12. script "/etc/keepalived/check_apiserver.sh"
  13. interval 3
  14. # script中的指令执行失败或返回值非0时,则相应的vrrp_instance的priority会减少20,此时主节点优先级减20后,值已经低于备节点,就会发生主备切换。
  15. weight -20
  16. fall 2
  17. rise 2
  18. }
  19. vrrp_instance VI_1 {
  20. state BACKUP
  21. # 不抢占,允许一个priority比较低的节点作为master,即使有priority更高的节点已经启动。
  22. nopreempt
  23. interface ens33
  24. # 主备节点上相同的值。virtual_router_id 是用来标识一个特定的 VRRP (Virtual Router Redundancy Protocol)组的,同一个 VRRP 组中的所有节点都应使用相同的 virtual_router_id。
  25. virtual_router_id 52
  26. # 如果 script执行失败,则此将降为80
  27. priority 100
  28. # 设置 VRRP 广播消息的时间间隔。目前设置为2秒检查一次,根据您的网络环境和需求。
  29. advert_int 2
  30. authentication {
  31. auth_type PASS
  32. auth_pass 2222
  33. }
  34. # 单播模式备节点IP
  35. unicast_src_ip 192.168.59.239
  36. unicast_peer {
  37. # 备节点的IP
  38. 192.168.59.238
  39. }
  40. virtual_ipaddress {
  41. 192.168.59.240
  42. }
  43. track_script {
  44. check_haproxy
  45. }
  46. }
书写检查脚本,

两台机器上编写的检查脚本是一样的.(ha01,ha02)

  1. [root@ha01 /etc/keepalived]$pwd
  2. /etc/keepalived
  3. [root@ha01 /etc/keepalived]$cat ./check_apiserver.sh
  4. #!/bin/sh
  5. errorExit() {
  6. echo "*** $*" 1>&2
  7. exit 1
  8. }
  9. curl --silent --max-time 2 --insecure https://localhost:6443/ -o /dev/null || errorExit "Error GET https://localhost:6443/"
  10. if ip addr | grep -q 192.168.59.240; then
  11. curl --silent --max-time 2 --insecure https://192.168.59.240:6443/ -o /dev/null || errorExit "Error GET https://192.168.59.240:6443/"
  12. fi

配置haproxy配置文件

ha01

  1. [root@ha01 /etc/haproxy]$cat haproxy.cfg
  2. #---------------------------------------------------------------------
  3. # Example configuration for a possible web application. See the
  4. # full configuration options online.
  5. #
  6. # https://www.haproxy.org/download/1.8/doc/configuration.txt
  7. #
  8. #---------------------------------------------------------------------
  9. #---------------------------------------------------------------------
  10. # Global settings
  11. #---------------------------------------------------------------------
  12. global
  13. #↓日志输出地址为本地,类型为local2
  14. log 127.0.0.1 local2
  15. #↓haproxy进程根目录是/var/lib/haproxy18
  16. chroot /var/lib/haproxy18
  17. #↓pid文件存放位置
  18. pidfile /var/run/haproxy18.pid
  19. #↓最大连接数
  20. maxconn 5000
  21. #↓运行用户
  22. user haproxy
  23. #↓运行用户组
  24. group haproxy
  25. #↓守护进程的方式运行
  26. daemon
  27. #↓socket文件存放位置
  28. # turn on stats unix socket
  29. stats socket /var/lib/haproxy18/stats
  30. #---------------------------------------------------------------------
  31. # common defaults that all the 'listen' and 'backend' sections will
  32. # use if not designated in their block
  33. #---------------------------------------------------------------------
  34. #↓默认配置字段
  35. defaults
  36. #↓使用http连接模式
  37. mode http
  38. #↓全局日志模式
  39. log global
  40. #↓http日志记录形式
  41. option httplog
  42. #↓不记录空请求
  43. option dontlognull # 不记录无内容长度的响应。
  44. # option http-server-close # HAProxy 在完成 HTTP 请求/响应交换后关闭与后端服务器的连接,而不是保持长连接。这样可以确保每个请求都有一个明确的结束,并且后端服务器不会因为长时间没有活动而主动关闭连接。然而,这也可能导致更高的连接建立开销,尤其是在高并发场景下。
  45. option forwardfor except 127.0.0.0/8
  46. option redispatch # 当一个请求已经被分配给某个后端服务器,但由于某种原因(如服务器故障、超时等)无法处理该请求时,HAProxy 将尝试将请求重新分配给另一个健康的后端服务器,而不是直接返回错误给客户端。这有助于提高系统的可用性和容错能力。在某些情况下,例如使用了会话持久化(cookie 或源地址粘滞)的情况下,这项功能尤其有用。
  47. retries 2 # 在服务器标记为不可用之前,尝试重新发送请求的最大次数;可以将 retries 设置为一个较小的值。
  48. timeout http-request 5s # 如果在该时间内没有收到完整的 HTTP 请求头,HAProxy 将关闭客户端连接。
  49. timeout queue 1m # 请求在队列中等待代理的时间限制。
  50. timeout connect 5s # 连接到后端服务器的超时时间;可以减少到 2s 或更低,以便更快地检测到无法连接的后端服务器。
  51. timeout client 60s # 客户端(浏览器)的整个会话超时时间。
  52. timeout server 60s # 后端服务器的整个会话超时时间,值太小,比如15s,可能会影响kubectl logs 查看报`error: unexpected EOF`
  53. timeout http-keep-alive 60s # HTTP KeepAlive 的超时时间。
  54. timeout check 2s # 可以减少到 2s 或更低,以便更快地进行健康检查。
  55. maxconn 6000 # 最大并发连接数。
  56. #↓定义一个前端,名字是k8s-api
  57. frontend k8s-api
  58. #↓监听端口是所有网络接口(无论公网私网)都可以使用该端口进行通信
  59. bind 0.0.0.0:6443
  60. #↓启动本地监听端口.只适用于本地.
  61. bind 127.0.0.1:6443
  62. #↓使用哪种模式进行负载均衡
  63. mode tcp
  64. #mode http
  65. #↓启用tcp日志记录功能
  66. option tcplog
  67. #option httplog
  68. #↓表示处理tcp请求时延迟5s检查球球内容.
  69. tcp-request inspect-delay 5s
  70. #↓默认的后端名称是k8s-api
  71. default_backend k8s-master
  72. #---------------------------------------------------------------------
  73. # static backend for serving up images, stylesheets and such
  74. #---------------------------------------------------------------------
  75. #backend static
  76. # balance roundrobin
  77. # server static 127.0.0.1:4331 check
  78. #---------------------------------------------------------------------
  79. # round robin balancing between the various backends
  80. #---------------------------------------------------------------------
  81. #↓后端代理服务名称
  82. backend k8s-master
  83. #↓健康检查路径
  84. option httpchk GET /healthz
  85. #↓指定返回状态码
  86. http-check expect status 200
  87. #↓使用tcp模式进行负载均衡
  88. mode tcp
  89. #↓启用ssl检查功能,验证客户端与服务端ssl/tls链接是否有效
  90. option ssl-hello-chk
  91. #↓日志记录类型是tcplog
  92. option tcplog
  93. #↓负载均衡策略师轮询算法
  94. balance roundrobin
  95. #↓后端的服务器ip和端口,并且启用健康检查功能,这里有三台服务器.
  96. server k8s01 192.168.59.241:6443 check
  97. server k8s02 192.168.59.242:6443 check
  98. server k8s03 192.168.59.243:6443 check

ha02 haproxy文件配置

  1. #Example configuration for a possible web application. See the
  2. # full configuration options online.
  3. #
  4. # https://www.haproxy.org/download/1.8/doc/configuration.txt
  5. #
  6. #---------------------------------------------------------------------
  7. #---------------------------------------------------------------------
  8. # Global settings
  9. #---------------------------------------------------------------------
  10. global
  11. # to have these messages end up in /var/log/haproxy.log you will
  12. # need to:
  13. #
  14. # 1) configure syslog to accept network log events. This is done
  15. # by adding the '-r' option to the SYSLOGD_OPTIONS in
  16. # /etc/sysconfig/syslog
  17. #
  18. # 2) configure local2 events to go to the /var/log/haproxy.log
  19. # file. A line like the following can be added to
  20. # /etc/sysconfig/syslog
  21. #
  22. # local2.* /var/log/haproxy.log
  23. #
  24. log 127.0.0.1 local2
  25. chroot /var/lib/haproxy18
  26. pidfile /var/run/haproxy18.pid
  27. maxconn 5000
  28. user haproxy
  29. group haproxy
  30. daemon
  31. # turn on stats unix socket
  32. stats socket /var/lib/haproxy18/stats
  33. #---------------------------------------------------------------------
  34. # common defaults that all the 'listen' and 'backend' sections will
  35. # use if not designated in their block
  36. #---------------------------------------------------------------------
  37. defaults
  38. mode http
  39. log global
  40. option httplog
  41. option dontlognull
  42. option http-server-close
  43. option forwardfor except 127.0.0.0/8
  44. option redispatch
  45. retries 2
  46. timeout http-request 5s
  47. timeout queue 1m
  48. timeout connect 5s
  49. timeout client 60s
  50. timeout server 60s
  51. timeout http-keep-alive 60s
  52. timeout check 2s
  53. maxconn 6000
  54. #---------------------------------------------------------------------
  55. # main frontend which proxys to the backends
  56. #---------------------------------------------------------------------
  57. #frontend main
  58. # bind *:5000
  59. # acl url_static path_beg -i /static /images /javascript /stylesheets
  60. # acl url_static path_end -i .jpg .gif .png .css .js
  61. #
  62. # use_backend static if url_static
  63. # default_backend app
  64. frontend k8s-api
  65. bind 0.0.0.0:6443
  66. bind 127.0.0.1:6443
  67. mode tcp
  68. option tcplog
  69. tcp-request inspect-delay 5s
  70. default_backend k8s-api
  71. #---------------------------------------------------------------------
  72. # static backend for serving up images, stylesheets and such
  73. #---------------------------------------------------------------------
  74. #backend static
  75. # balance roundrobin
  76. # server static 127.0.0.1:4331 check
  77. #---------------------------------------------------------------------
  78. # round robin balancing between the various backends
  79. #---------------------------------------------------------------------
  80. backend k8s-api
  81. mode tcp
  82. option tcplog
  83. option tcp-check
  84. balance roundrobin
  85. server k8s01 192.168.59.241:6443 check
  86. server k8s02 192.168.59.242:6443 check
  87. server k8s03 192.168.59.243:6443 check
启动haproxy并检查服务启动状态(两台服务器都做)
  1. #启动haproxy
  2. [root@ha01 /etc/haproxy]$ haproxy -f /etc/haproxy/haproxy.cfg
  3. #检查进程
  4. [root@ha01 /etc/haproxy]$ps -ef |grep hap
  5. haproxy 1955 1 0 15:07 ? 00:00:00 haproxy -f /etc/haproxy/haproxy.cfg
  6. root 2664 1229 0 15:27 pts/0 00:00:00 grep --color=auto hap
  7. #检查端口
  8. [root@ha01 /etc/haproxy]$netstat -lntup|grep haproxy
  9. tcp 0 0 127.0.0.1:6443 0.0.0.0:* LISTEN 1955/haproxy
  10. tcp 0 0 0.0.0.0:6443 0.0.0.0:* LISTEN 1955/haproxy
  11. udp 0 0 0.0.0.0:43905 0.0.0.0:* 1955/haproxy
启动keepalived(两台服务器都做)
  1. #启动keepalived
  2. [root@ha01 /etc/keepalived]$keepalived -f /etc/keepalived/keepalived.conf
  3. #查看进程
  4. [root@ha01 /etc/haproxy]$ps -ef |grep keep
  5. root 2012 1 0 15:13 ? 00:00:00 keepalived -f /etc/keepalived/keepalived.conf
  6. root 2469 2012 0 15:23 ? 00:00:00 keepalived -f /etc/keepalived/keepalived.conf
  7. root 2735 1229 0 15:29 pts/0 00:00:00 grep --color=auto keep
  8. #查看ip状态
  9. #ha01
  10. [root@ha01 /etc/keepalived]$ip a |grep ens
  11. 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
  12. inet 192.168.59.238/24 brd 192.168.59.255 scope global noprefixroute ens33
  13. inet 192.168.59.240/32 scope global ens33
  14. 3: ens35: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
  15. inet 192.168.61.238/24 brd 192.168.61.255 scope global noprefixroute ens35
  16. #ha02
  17. [root@ha02 /etc/haproxy]$ip a |grep ens
  18. 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
  19. inet 192.168.59.239/24 brd 192.168.59.255 scope global noprefixroute ens33
  20. 3: ens35: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
  21. inet 192.168.61.239/24 brd 192.168.61.255 scope global noprefixroute ens35

可以停止ha01的keepalived看下ip是否可以漂移到ha02.翻过来重新启动ha01查看ip是否可以漂移回ha01.如果可以的话那么表示服务部署成功.

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号