haproxy+keepalived 集群高可用集群转发

环境介绍

  1. #内核版本
  2. Ubuntu 18.04.4 LTS \n \l
  3. 107-Ubuntu SMP Thu Jun 4 11:27:52 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
  4. #节点介绍
  5. 192.168.1.113 hk-master1
  6. 192.168.1.114 hk-master2
  7. 192.168.1.111 hk-slave1
  8. 192.168.1.112 hk-slave2

内核调优

  1. #调整Linux进程资源限制 vim /etc/security/limits.conf
  2. root soft core unlimited
  3. root hard core unlimited
  4. root soft nproc 600000
  5. root hard nproc 600000
  6. root soft nofile 648576
  7. root hard nofile 600000
  8. root soft memlock 32000
  9. root hard memlock 32000
  10. root soft msgqueue 8192000
  11. root hard msgqueue 8192000
  12. * soft core unlimited
  13. * hard core unlimited
  14. * soft nproc 600000
  15. * hard nproc 600000
  16. * soft nofile 600000
  17. * hard nofile 600000
  18. * soft memlock 32000
  19. * hard memlock 32000
  20. * soft msgqueue 8192000
  21. * hard msgqueue 8192000
  22. #验证(进程对资源的使用情况)
  23. root@hk-master2:~# ulimit -a
  24. core file size (blocks, -c) unlimited
  25. data seg size (kbytes, -d) unlimited
  26. scheduling priority (-e) 0
  27. file size (blocks, -f) unlimited
  28. pending signals (-i) 7376
  29. max locked memory (kbytes, -l) 32000
  30. max memory size (kbytes, -m) unlimited
  31. open files (-n) 600000
  32. pipe size (512 bytes, -p) 8
  33. POSIX message queues (bytes, -q) 8192000
  34. real-time priority (-r) 0
  35. stack size (kbytes, -s) 8192
  36. cpu time (seconds, -t) unlimited
  37. max user processes (-u) 600000
  38. virtual memory (kbytes, -v) unlimited
  39. file locks (-x) unlimited
  40. #调整内核限制追加以下配置 /etc/sysctl.conf
  41. net.ipv4.conf.default.rp_filter = 1
  42. net.ipv4.ip_nonlocal_bind = 1
  43. net.ipv4.ip_forward = 1
  44. net.ipv4.conf.default.accept_source_route = 0
  45. kernel.sysrq = 0
  46. kernel.msgmnb = 65536
  47. kernel.msgmax = 65536
  48. kernel.shmmax = 68719476736
  49. kernel.shmall = 4294967296
  50. net.ipv4.tcp_mem = 786432 1048576 1572864
  51. net.ipv4.tcp_rmem = 4096 87380 4194304
  52. net.ipv4.tcp_wmem = 4096 16384 4194304
  53. net.ipv4.tcp_window_scaling = 1
  54. net.ipv4.tcp_sack = 1
  55. net.core.wmem_default = 8388608
  56. net.core.rmem_default = 8388608
  57. net.core.rmem_max = 16777216
  58. net.core.wmem_max = 16777216
  59. net.core.netdev_max_backlog = 262144
  60. net.core.somaxconn = 20480
  61. net.core.optmem_max = 81920
  62. net.ipv4.tcp_max_syn_backlog = 262144
  63. net.ipv4.tcp_syn_retries = 3
  64. net.ipv4.tcp_retries1 = 3
  65. net.ipv4.tcp_retries2 = 15
  66. net.ipv4.tcp_timestamps = 0 #代理不要开这个
  67. net.ipv4.tcp_fin_timeout = 1
  68. net.ipv4.tcp_max_tw_buckets = 20000
  69. net.ipv4.tcp_max_orphans = 3276800
  70. net.ipv4.tcp_synack_retries = 1
  71. net.ipv4.tcp_syncookies = 1
  72. net.ipv4.tcp_keepalive_time = 300
  73. net.ipv4.tcp_keepalive_intvl = 30
  74. net.ipv4.tcp_keepalive_probes = 3
  75. net.ipv4.ip_local_port_range = 10001 65000
  76. vm.overcommit_memory = 0
  77. vm.swappiness = 10
  78. #验证 sysctl -p

haproxy安装和功能介绍

  1. #安装
  2. root@hk-master2:~# apt install -y haproxy
  3. root@hk-master1:~# apt install -y haproxy

配置介绍

配置文件目录

  1. 主程序:/usr/sbin/haproxy
  2. 配置文件:/etc/haproxy/haproxy.cfg
  3. Unit file:/usr/lib/systemd/system/haproxy.service

配置段:

  1. #global 配置:
  2. chroot #锁定运行目录
  3. deamon #以守护进程运行
  4. #stats socket /var/lib/haproxy/haproxy.sock mode 600 level admin #socket文件
  5. user, group, uid, gid #运行haproxy的用户身份
  6. nbproc #开启的haproxy进程数,与CPU保持一致
  7. nbthread #指定每个haproxy进程开启的线程数,默认为每个进程一个线程
  8. cpu-map 1 0 #绑定haproxy 进程至指定CPU
  9. maxconn #每个haproxy进程的最大并发连接数
  10. maxsslconn #SSL每个haproxy进程ssl最大连接数
  11. maxconnrate #每个进程每秒最大连接数
  12. spread-checks #后端server状态check随机提前或延迟百分比时间,建议2-5(20%-50%)之间
  13. pidfile #指定pid文件路径
  14. log 127.0.0.1 local3 info #定义全局的syslog服务器;最多可以定义两个
  15. defaults [<name>] #默认配置项,针对以下的frontend、backend和lsiten生效,可以多个name
  16. frontend <name> #前端servername,类似于Nginx的一个虚拟主机 server。 • backend <name> #后端服务器组,等于nginx的upstream
  17. listen <name> #将frontend和backend合并在一起配置
  18. 注:name字段只能使用”-”、”_”、”.”、和”:”,并且严格区分大小写,例如:Webweb是完全不
  19. 同的两组服务器。
  20. #defaults 配置参数:
  21. option redispatch #当server Id对应的服务器挂掉后,强制定向到其他健康的服务器
  22. option abortonclose #当服务器负载很高的时候,自动结束掉当前队列处理比较久的链接
  23. option http-keep-alive 60#开启会话保持
  24. option forwardfor #开启IP透传
  25. mode http #默认工作类型
  26. timeout connect 120s #转发客户端请求到后端server的最长连接时间(TCP之前) • timeout server 600s #转发客户端请求到后端服务端的超时超时时长(TCP之后)
  27. timeout client 600s #与客户端的最长空闲时间
  28. timeout http-keep-alive 120s #session 会话保持超时时间,范围内会转发到相同的后端服务器
  29. #timeout check 5s #对后端服务器的检测超时时间
  30. #listen 配置参考:
  31. listen WEB_PORT_80
  32. bind 192.168.7.102:80
  33. mode http
  34. option forwardfor
  35. server web1 192.168.7.101:8080 check inter 3000 fall 3 rise 5
  36. server web2 192.168.7.101:8080 check inter 3000 fall 3 rise 5
  37. #后端服务器检测机制参数介绍:
  38. check #对指定real进行健康状态检查,默认不开启
  39. addr IP #可指定的健康状态监测IP
  40. port num #指定的健康状态监测端口
  41. inter num #健康状态检查间隔时间,默认2000 ms
  42. fall num #后端服务器失效检查次数,默认为3 • rise num #后端服务器从下线恢复检查次数,默认为2 • weight #默认为1,最大值为256,0表示不参与负载均衡
  43. backup #将后端服务器标记为备份状态
  44. disabled #将后端服务器标记为不可用状态
  45. redirect prefix http://www.magedu.com/ #将请求临时重定向至其它URL,只适用于http模式
  46. maxconn <maxconn>:当前后端server的最大并发连接数
  47. backlog <backlog>:当server的连接数达到上限后的后援队列长度

调度算法

静态调度算法
  1. balance 指明对后端服务器的调度算法,配置在listenbackend
  2. 静态算法:按照事先定义好的规则轮询公平调度,不关心后端服务器的当前负载、链接数和相应速度等,且无法实时修改权重,只能重启后生效。
  3. static-rr:基于权重的轮询调度,不支持权重的运行时调整及后端服务器慢启动,其后端主机数量没有限制 (出现请求按比例分发给后端)
  4. first:根据服务器在列表中的位置,自上而下进行调度,但是其只会当第一台服务器的连接数达到上限,新请求才会分配给下一台服务,因此会忽略服务器的权重设置。 (配置的后端服务器连接数到了上线,才会分发到下台后端服务器)
动态调度算法
  1. 动态算法:基于后端服务器 状态进行调度适当调整,比如优先调度至当前负载较低的服务器,且权重可以在haproxy运行时动态调整无需重启。
  2. roundrobin:基于权重的轮询动态调度算法,支持权重的运行时调整,不等于lvs rr,支持慢启动即新加的服务器会逐渐增加转发数,每个后端backend中最多支持4095server,此为默认调度算法,server 权重设置 weight
  3. leastconn 加权的最少连接的动态,支持权重的运行时调整和慢启动,即当前后端服务器连接最少的优先调度,比较适合长连接的场景使用,比如MySQL等场景。
source调度算法
  1. source:源地址hash,基于用户源地址hash并将请求转发到后端服务器,默认为静态即取模方式,但是可以通过hash-type支持的选项更改,后续同一个源地址请求将被转发至同一个后端web服务器,比较适用于session保持/缓存业务等场景。
  2. map-based:取模法,基于服务器权重的hash数组取模,该hash是静态的即不支持在线调整权重,不支持慢启动,其对后端服务器调度均衡,缺点是当服务器的总权重发生变化时,即有服务器上线或下线,都会因权重发生变化而导致调度结果整体改变hashomod n
  3. consistent:一致性哈希,该hash是动态的,支持在线调整权重,支持慢启动,优点在于当服务器的总权重发生变化时,对调度结果影响是局部的,不会引起大的变动。
  4. #配置案例:
  5. listen web_prot_http_nodes
  6. bind 192.168.7.101:80
  7. mode http
  8. balance source
  9. hash-type consistent
  10. log global
  11. option forwardfor
  12. server 192.168.7.101 192.168.7.101:8080 check inter 3000 fall 3 rise 5
  13. server 192.168.7.102 192.168.7.102:8080 check inter 3000 fall 3 rise 5
uri调度算法
  1. uri:基于对用户请求的urihash并将请求转发到后端指定服务器
  2. map-based:取模法
  3. consistent:一致性哈希
  4. listen web_prot_http_nodes
  5. bind 192.168.7.101:80
  6. mode http #不支持tcp,会切换到tcp的roundrobin负载模式
  7. balance uri
  8. hash-type consistent
  9. log global
  10. option forwardfor
  11. server 192.168.7.101 192.168.7.101:8080 check inter 3000 fall 3 rise 5
  12. server 192.168.7.102 192.168.7.102:8080 check inter 3000 fall 3 rise 5
url_param 调度算法
  1. #url_param: 对用户请求的url中的<params>部分中的参数name作hash计算,并由服务器总权重相除以后派发至某挑出的服务器;通常用于追踪用户,以确保来自同一个用户的请求始终发往同一个Backend Server
  2. #url 传递的查询字符串进行bash
  3. listen web_prot_http_nodes
  4. bind 192.168.7.101:80
  5. mode http #不支持tcp,会切换到tcp的roundrobin负载模式
  6. balance url_param name #基于参数name做hash
  7. hash-type consistent
  8. log global
  9. option forwardfor
  10. server 192.168.7.101 192.168.7.101:8080 check inter 3000 fall 3 rise 5
  11. server 192.168.7.102 192.168.7.102:8080 check inter 3000 fall 3 rise 5
hdr调度算法
  1. #针对每个用户的http请求头中的指定信息做hash,此处由<name>指定的http首部将会被取出并做hash计算,然后由服务器总权重相除以后派发至某挑出的服务器,假如无有效的值,则会被轮询调度
  2. hdr( Cookie User-Agenthost )
  3. listen web_prot_http_nodes
  4. bind 192.168.7.101:80
  5. mode http
  6. balance hdr(User-Agent)
  7. hash-type consistent #一致性hash
  8. log global
  9. option forwardfor
  10. server 192.168.7.101 192.168.7.101:8080 check inter 3000 fall 3 rise 5
  11. server 192.168.7.102 192.168.7.102:8080 check inter 3000 fall 3 rise 5
rdp-cookie调度算法
  1. rdp-cookie对远程桌面的负载,使用cookie保持会话
  2. listen RDP
  3. bind 192.168.7.101:3389
  4. balance rdp-cookie
  5. mode tcp
  6. server rdp0 172.18.139.20:3389 check fall 3 rise 5 inter 2000 weight 1
  7. server rdp1 172.18.139.21:3389 check fall 3 rise 5 inter 2000 weight 1

配置状态页

  1. stats enable #基于默认的参数启用stats page
  2. stats hide-version # 隐藏版本
  3. stats refresh <delay> # 设定自动刷新时间间隔
  4. stats uri <prefix> #自定义stats page uri,默认值:/haproxy?stats
  5. stats realm <realm> #账户认证时的提示信息,示例:stats realm : HAProxy\ Statistics
  6. stats auth <user>:<passwd> #认证时的账号和密码,可使用多次,默认:no authentication
  7. stats admin { if | unless } <cond> #启用stats page中的管理功能
  8. listen stats
  9. bind :9009
  10. stats enable
  11. #stats hide-version
  12. stats uri /haproxy-status
  13. stats realm HAPorxy\ Stats\ Page
  14. stats auth haadmin:123456
  15. stats auth admin:123456
  16. stats refresh 30s
  17. stats admin if TRUE

自定义错误页面

  1. errorfile 500 /usr/local/haproxy/html/500.html #自定义错误页面跳转
  2. errorfile 502 /usr/local/haproxy/html/502.html
  3. errorfile 503 /usr/local/haproxy/html/503.html
  4. errorloc 503 http://192.168.7.103/error_page/503.html

压缩功能

  1. compression algo #启用http协议中的压缩机制,常用算法有gzip deflate
  2. compression type #要压缩的类型
  3. 示例:
  4. compression algo gzip
  5. compression type compression type text/plain text/html text/css text/xml text/javascript application/javascript

配置https

  1. bind *:443 ssl crt /PATH/TO/SOME_PEM_FILE
  2. crt 后证书文件为PEM格式,且同时包含证书和所有私钥
  3. cat demo.crt demo.key > demo.pem
  4. 80端口的请求重向定443
  5. bind *:80
  6. redirect scheme https if !{ ssl_fc }
  7. 向后端传递用户请求的协议和端口(frontendbackend
  8. http_request set-header X-Forwarded-Port %[dst_port]
  9. http_request add-header X-Forwared-Proto https if { ssl_fc }
  10. #配置示例:
  11. frontend https_frontend
  12. bind *:443 ssl crt /etc/ssl/certs/servername.pem
  13. mode http
  14. option httpclose
  15. option forwardfor
  16. reqadd X-Forwarded-Proto:\ https
  17. default_backend web_server
  18. backend web_server
  19. mode http
  20. balance roundrobin
  21. cookie SERVERID insert indirect nocache
  22. server s1 192.168.250.47:80 check cookie s1
  23. server s2 192.168.250.49:80 check cookie s2
  24. 注意:这里的pem 文件是下面两个文件合并而成:
  25. cat servername.crt servername.key |tee servername.pem
  26. #第二种四层转发
  27. frontend https_frontend
  28. bind *:443
  29. mode tcp
  30. default_backend web_server
  31. backend web_server
  32. mode tcp
  33. balance roundrobin
  34. stick-table type ip size 200k expire 30m
  35. stick on src
  36. server s1 192.168.250.47:443
  37. server s2 192.168.250.49:443
  38. 注意,这种模式下mode 必须是tcp 模式

四层负载IP透传

  1. #在四层负载设备中,把client发送的报文目标地址(原来是负载均衡设备的IP地址),根据均衡设备设置的选择web服务器的规则选择对应的web服务器IP地址,这样client就可以直接跟此服务器建立TCP连接并发送数据。
  2. listen web_prot_http_nodes
  3. bind 192.168.7.102:80
  4. mode tcp
  5. server 192.168.7.102 blogs.studylinux.net:80 send-proxy check inter 3000 fall 3 rise 5 #send-proxy
  6. Nginx配置:
  7. listen 80 proxy_protocol;
  8. '"tcp_ip":"$proxy_protocol_addr",' #TCP获取客户端真实IP日志格式

七层负载IP透传

  1. #七层负载均衡服务器起了一个代理服务器的作用,服务器建立一次TCP连接要三次握手,而client要访问webserver要先与七层负载设备进行三次握手后建立TCP连接,把要访问的报文信息发送给七层负载均衡;然后七层负载均衡再根据设置的均衡规则选择特定的webserver,然后通过三次握手与此台webserver建立TCP连接,然后webserver把需要的数据发送给七层负载均衡设备,负载均衡设备再把数据发送给client;所以,七层负载均衡设备起到了代理服务器的作用。
  2. listen web_prot_http_nodes
  3. bind 192.168.7.102:80
  4. mode http
  5. #option forwardfor
  6. server 192.168.7.102 blogs.studylinux.net:80 check inter 3000 fall 3 rise 5

heepalived 安装和功能介绍

  1. root@hk-master2:~# apt install -y haproxy
  2. root@hk-master1:~# apt install -y haproxy

功能

  1. 基于vrrp协议完成地址流动
  2. vip地址所在的节点生成ipvs规则(在配置文件中预先定义)
  3. ipvs集群的各RS做健康状态检测
  4. 基于脚本调用接口通过执行脚本完成脚本中定义的功能,进而影响集群事务,以此支持nginxhaproxy等服务

环境要求

  1. #个节点时间同步
  2. #关闭selinux
  3. #添加防火墙策略/关闭防火墙
  4. firewall-cmd --direct --permanent --add-rule ipv4 filter INPUT 0 \
  5. --in-interface ens33--destination 192.168.1.114 --protocol vrrp -j ACCEPT
  6. success
  7. firewall-cmd --direct --permanent --add-rule ipv4 filter OUTPUT 0 \
  8. --out-interface ens33--destination 192.168.1.114 --protocol vrrp -j ACCEPT
  9. success
  10. firewall-cmd --reload
  11. success

配置介绍

  1. 主配置文件:/etc/keepalived/keepalived.conf
  2. 主程序文件:/usr/sbin/keepalived
  3. Unit File
  4. /usr/lib/systemd/system/keepalived.service (CentOS)
  5. /lib/systemd/system/keepalived.service (Ubuntu)
  6. #配置文件组成部分
  7. TOP HIERACHY
  8. GLOBAL CONFIGURATION
  9. Global definitions
  10. VRRP CONFIGURATION
  11. VRRP instance(s):即一个vrrp虚拟路由器
  12. LVS CONFIGURATION
  13. Virtual server group(s)
  14. Virtual server(s):ipvs集群的vsrs
  15. #配置参数:
  16. state MASTER|BACKUP:当前节点在此虚拟路由器上的初始状态,状态为MASTER或者BACKUP
  17. interface IFACE_NAME:绑定为当前虚拟路由器使用的物理接口ens32,ens33,bond0,br0
  18. virtual_router_id VRID:当前虚拟路由器惟一标识,范围是0-255
  19. priority 100:当前物理节点在此虚拟路由器中的优先级;范围1-254
  20. advert_int 1vrrp通告的时间间隔,默认1s
  21. authentication { #认证机制
  22. auth_type AH|PASS
  23. auth_pass <PASSWORD> 仅前8位有效
  24. }
  25. virtual_ipaddress { #虚拟IP
  26. <IPADDR>/<MASK> brd <IPADDR> dev <STRING> scope <SCOPE> label <LABEL>
  27. 192.168.200.17/24 dev eth1
  28. 192.168.200.18/24 dev eth2 label eth2:1
  29. }
  30. track_interface { #配置监控网络接口,一旦出现故障,则转为FAULT状态实现地址转移
  31. ens33
  32. ens37

  33. }

组播配置

  1. #master :
  2. global_defs {
  3. notification_email {
  4. root@localhost #keepalived 发生故障切换时邮件发送的对象,可以按行区分写多个
  5. }
  6. notification_email_from keepalived@localhost
  7. smtp_server 127.0.0.1
  8. smtp_connect_timeout 30
  9. router_id ha1.example.com
  10. vrrp_skip_check_adv_addr #所有报文都检查比较消耗性能,此配置为如果收到的报文和上一个报文是同一个路由器则跳过检查报文中的源地址
  11. vrrp_strict #严格遵守VRRP协议,不允许状况:1,没有VIP地址,2.单播邻居,3.在VRRP版本2中有IPv6地 址. • vrrp_garp_interval 0 #ARP报文发送延迟
  12. vrrp_gna_interval 0 #消息发送延迟
  13. vrrp_mcast_group4 224.0.0.18 #默认组播IP地址,224.0.0.0到239.255.255.255
  14. #vrrp_iptables
  15. }
  16. vrrp_instance VI_1 {
  17. state MASTER
  18. interface ens33
  19. virtual_router_id 80
  20. priority 100
  21. advert_int 1
  22. authentication {
  23. auth_type PASS
  24. auth_pass 1111qwer
  25. }
  26. virtual_ipaddress {
  27. 192.168.7.248 dev ens33 label ens33:0
  28. }
  29. }
  30. #backup :
  31. global_defs {
  32. notification_email {
  33. root@localhost
  34. }
  35. notification_email_from keepalived@localhost
  36. smtp_server 127.0.0.1
  37. smtp_connect_timeout 30
  38. router_id ha2.example.com
  39. vrrp_skip_check_adv_addr #
  40. vrrp_strict #严格遵守VRRP协议。
  41. vrrp_garp_interval 0 #ARP报文发送延迟
  42. vrrp_gna_interval 0 #消息发送延迟
  43. vrrp_mcast_group4 224.0.0.18 #组播IP地址,224.0.0.0到239.255.255.255
  44. #vrrp_iptables
  45. }
  46. vrrp_instance VI_1 {
  47. state BACKUP
  48. interface ens33
  49. virtual_router_id 80
  50. priority 90
  51. advert_int 1
  52. authentication {
  53. auth_type PASS
  54. auth_pass 1111qwer
  55. }
  56. virtual_ipaddress {
  57. 192.168.7.248 dev ens33 label ens33:0
  58. }
  59. }

非抢占

  1. #设置成双备模式 关闭vip抢占 + nopreempt
  2. #hk-master1
  3. vrrp_instance VI_1 {
  4. state BACKUP
  5. interface ens33
  6. virtual_router_id 80
  7. priority 100
  8. advert_int 1
  9. nopreempt
  10. #hk-master2
  11. vrrp_instance VI_1 {
  12. state BACKUP
  13. interface ens33
  14. virtual_router_id 80
  15. priority 90
  16. advert_int 1
  17. nopreempt

单波配置

  1. unicast_src_ip 本机源IP
  2. unicast_peer {
  3. 目标主机IP
  4. }

通知配置

  1. vim /etc/mail.rc
  2. set from=12161xxqq.com
  3. set smtp=smtp.qq.com
  4. set smtp-auth-user=12161xxqq.com
  5. set smtp-auth-password=xxxxxxx
  6. set smtp-auth=login
  7. set ssl-verify=ignore
  8. nopreempt:定义工作模式为非抢占模式
  9. preempt_delay 300:抢占式模式,节点上线后触发新选举操作的延迟时长,
  10. 默认模式
  11. 定义通知脚本:
  12. notify_master <STRING>|<QUOTED-STRING>:
  13. 当前节点成为主节点时触发的脚本
  14. notify_backup <STRING>|<QUOTED-STRING>:
  15. 当前节点转为备节点时触发的脚本
  16. notify_fault <STRING>|<QUOTED-STRING>:
  17. 当前节点转为“失败”状态时触发的脚本
  18. notify <STRING>|<QUOTED-STRING>:
  19. 通用格式的通知触发机制,一个脚本可完成以上三种状态的转换时的通知

![image-20200626143900396](C:\Users\HZY\Documents\Mkdown_Note\haproxy+keepalived 集群高可用集群转发\image-20200626143900396.png)

应用层监控

  1. HTTP_GET|SSL_GET:应用层检测
  2. HTTP_GET|SSL_GET {
  3. url {
  4. path <URL_PATH>:定义要监控的URL
  5. status_code <INT>:判断上述检测机制为健康状态的响应码
  6. }
  7. connect_timeout <INTEGER>:连接请求的超时时长
  8. nb_get_retry <INT>:重试次数
  9. delay_before_retry <INT>:重试之前的延迟时长
  10. connect_ip <IP ADDRESS>:向当前RS哪个IP地址发起健康状态检测请求
  11. connect_port <PORT>:向当前RS的哪个PORT发起健康状态检测请求
  12. bindto <IP ADDRESS>:发出健康状态检测请求时使用的源地址
  13. bind_port <PORT>:发出健康状态检测请求时使用的源端口
  14. }
  15. #real_server http监测
  16. real_server 192.168.7.103 80 {
  17. weight 1
  18. HTTP_GET {
  19. url {
  20. path /index.html
  21. status_code 200
  22. }
  23. }
  24. connect_timeout 5
  25. nb_get_retry 3
  26. delay_before_retry 3
  27. }3

tcp监控

  1. 传输层检测 TCP_CHECK
  2. TCP_CHECK {
  3. connect_ip <IP ADDRESS>:向当前RS的哪个IP地址发起健康状态检测请求
  4. connect_port <PORT>:向当前RS的哪个PORT发起健康状态检测请求
  5. bindto <IP ADDRESS>:发出健康状态检测请求时使用的源地址
  6. bind_port <PORT>:发出健康状态检测请求时使用的源端口
  7. connect_timeout <INTEGER>:连接请求的超时时长
  8. }

脚本监控

  1. 分两步:(1) 先定义一个脚本;(2) 调用此脚本
  2. vrrp_script <SCRIPT_NAME> {
  3. script <STRING>|<QUOTED-STRING>
  4. interval <INTEGER> # 间隔时间,单位为秒,默认1秒
  5. timeout <INTEGER> # 超时时间
  6. weight <INTEGER:-254..254> # 权重,监测失败后会执行权重+操作
  7. fall <INTEGER> #脚本几次失败转换为失败
  8. rise <INTEGER> # 脚本连续监测成果后,把服务器从失败标记为成功的次数
  9. user USERNAME [GROUPNAME] # 执行监测的用户或组
  10. init_fail # 设置默认标记为失败状态,监测成功之后再转换为成功状态
  11. }
  12. vrrp_instance VI_1 {

  13. track_script {
  14. SCRIPT_NAME_1
  15. SCRIPT_NAME_2
  16. }
  17. }

配置案例:

  1. #查找配置案例
  2. root@hk-master2:~# find /usr/share/doc/keepalived/ -name keepalived.*
  3. /usr/share/doc/keepalived/samples/keepalived.conf.vrrp.routes
  4. /usr/share/doc/keepalived/samples/keepalived.conf.fwmark
  5. /usr/share/doc/keepalived/samples/keepalived.conf.vrrp.sync
  6. /usr/share/doc/keepalived/samples/keepalived.conf.SMTP_CHECK
  7. /usr/share/doc/keepalived/samples/keepalived.conf.HTTP_GET.port
  8. /usr/share/doc/keepalived/samples/keepalived.conf.vrrp.scripts
  9. /usr/share/doc/keepalived/samples/keepalived.conf.SSL_GET
  10. /usr/share/doc/keepalived/samples/keepalived.conf.virtual_server_group
  11. /usr/share/doc/keepalived/samples/keepalived.conf.virtualhost
  12. /usr/share/doc/keepalived/samples/keepalived.conf.vrrp.static_ipaddress
  13. /usr/share/doc/keepalived/samples/keepalived.conf.misc_check
  14. /usr/share/doc/keepalived/samples/keepalived.conf.vrrp.localcheck
  15. /usr/share/doc/keepalived/samples/keepalived.conf.sample
  16. /usr/share/doc/keepalived/samples/keepalived.conf.misc_check_arg
  17. /usr/share/doc/keepalived/samples/keepalived.conf.IPv6
  18. /usr/share/doc/keepalived/samples/keepalived.conf.quorum
  19. /usr/share/doc/keepalived/samples/keepalived.conf.inhibit
  20. /usr/share/doc/keepalived/samples/keepalived.conf.track_interface
  21. /usr/share/doc/keepalived/samples/keepalived.conf.vrrp.lvs_syncd
  22. /usr/share/doc/keepalived/samples/keepalived.conf.vrrp
  23. /usr/share/doc/keepalived/samples/keepalived.conf.status_code
  24. /usr/share/doc/keepalived/samples/keepalived.conf.vrrp.rules
  25. /usr/share/doc/keepalived/keepalived.conf.SYNOPSIS.gz
  26. #
  27. root@hk-master2:~# vim /etc/keepalived/keepalived.conf #hk-master1与这个配置就routid和优先级不一样其他的都一样
  28. ! Configuration File for keepalived
  29. global_defs {
  30. #notification_email {
  31. # acassen
  32. #}
  33. # notification_email_from Alexandre.Cassen@firewall.loc
  34. # smtp_server 192.168.200.1
  35. # smtp_connect_timeout 30
  36. router_id LVS_DEVEL_114
  37. }
  38. vrrp_instance VI_1 {
  39. state BACKUP
  40. interface ens33
  41. garp_master_delay 10
  42. #smtp_alert
  43. virtual_router_id 51
  44. priority 99
  45. nopreempt
  46. advert_int 1
  47. authentication {
  48. auth_type PASS
  49. auth_pass 1111
  50. }
  51. virtual_ipaddress {
  52. 192.168.1.200 label ens33:1
  53. }
  54. }

haproxy动态上线下线后端服务器

  1. #以上基于hk-master1实现了一个vip-192.168.1.200。 这里基于这个vip做负载均衡配置
  2. #hk-master1:
  3. global
  4. log /dev/log local0
  5. log /dev/log local1 notice
  6. chroot /var/lib/haproxy
  7. nbproc 2
  8. maxconn 65536
  9. stats timeout 30s
  10. cpu-map 1 0
  11. cpu-map 2 1
  12. stats socket /run/haproxy/admin.sock1 mode 660 level admin process 1
  13. stats socket /run/haproxy/admin.sock2 mode 660 level admin process 2
  14. nbthread 12
  15. user haproxy
  16. group haproxy
  17. daemon
  18. #ulimit -n 65536
  19. defaults
  20. log global
  21. mode http
  22. option httplog
  23. option dontlognull
  24. timeout connect 5000
  25. timeout client 50000
  26. timeout server 50000
  27. errorfile 400 /etc/haproxy/errors/400.http
  28. errorfile 403 /etc/haproxy/errors/403.http
  29. errorfile 408 /etc/haproxy/errors/408.http
  30. errorfile 500 /etc/haproxy/errors/500.http
  31. errorfile 502 /etc/haproxy/errors/502.http
  32. errorfile 503 /etc/haproxy/errors/503.http
  33. errorfile 504 /etc/haproxy/errors/504.http
  34. listen stats
  35. mode http
  36. bind 192.168.1.113:9999
  37. stats enable
  38. log global
  39. stats uri /haproxy-status
  40. stats auth haadmin:123123
  41. listen nginx
  42. bind 192.168.1.200:80
  43. mode http
  44. server 192.168.1.111 192.168.1.111:80 check inter 2s fall 3 rise 5
  45. server 192.168.1.112 192.168.1.112:80 check inter 2s fall 3 rise 5
  46. #升级前下线后端服务器
  47. root@hk-master1:~# cat updatecode.sh
  48. #!/bin/bash
  49. cpus=`cat /proc/cpuinfo |grep processor |wc -l`
  50. for ((i=1;i<=$cpus;i++));
  51. do
  52. echo "disable server $1/$2" | socat stdio /run/haproxy/admin.sock$i;
  53. done
  54. #升级完毕上线后端服务器
  55. root@hk-master1:~# cat percode.sh
  56. #!/bin/bash
  57. cpus=`cat /proc/cpuinfo |grep processor |wc -l`
  58. for ((i=1;i<=$cpus;i++));
  59. do
  60. echo "enable server $1/$2" | socat stdio /run/haproxy/admin.sock$i;
  61. done

LVS+keepalived 高可用集群

lvs 主要的工作是提供调度算法,把客户端请求按照需求调度在 real 服务器,keepalived 主要的工作是提供 lvs 控制器的一个冗余,并且对 real 服务器做健康检查,发现不健康的 real 服务器,就把它从 lvs 集群中剔除,real 服务器只负责提供服务。

keepalived底层有关于IPVS的功能模块,可以直接在其配置文件中实现LVS的配置,不需要通过ipvsadm命令再单独配置

LVS 负载策略介绍

  1. #IP 负载均衡技术(VS/NAT,VS/TUN,VS/DR):
  2. Virtual Server via Network Address TranslationVS/NAT
  3. 通过网络地址转换,调度器重写请求报文的目标地址,根据预设的调度算法,将请求分派给后端的真实服务器;真实服务器的响应报文通过调度器时,报文的源地址被重写,再返回给客户,完成整个负载调度过程。
  4. Virtual Server via IP TunnelingVS/TUN
  5. 采用 NAT 技术时,由于请求和响应报文都必须经过调度器地址重写,当客户请求越来越多时,调度器的处理能力将成为瓶颈。为了解决这个问题,调度器把请求报 文通过 IP 隧道转发至真实服务器,而真实服务器将响应直接返回给客户,所以调度器只处理请求报文。由于一般网络服务应答比请求报文大许多,采用 VS/TUN 技术后,集群系统的最大吞吐量可以提高 10 倍。
  6. Virtual Server via Direct RoutingVS/DR
  7. VS/DR 通过改写请求报文的 MAC 地址,将请求发送到真实服务器,而真实服务器将响应直接返回给客户。同 VS/TUN 技术一样,VS/DR 技术可极大地 提高集群系统的伸缩性。这种方法没有 IP 隧道的开销,对集群中的真实服务器也没有必须支持 IP 隧道协议的要求,但是要求调度器与真实服务器都有一块网卡连 在同一物理网段上。

LVS 调度算法

  1. 1.轮询:Round Robin,简称rr,分发器按照循环的方式将请求平均的发送给后端的rs
  2. 2.加权轮询:Weight Round-Robin,简称wrr,增对轮询的优化,会给每台rs定义对应的权重值,权重值大的rs会比权重值小的rs接收到更多分发器转发的请求
  3. 3.最小连接:Least-Connection,简称lc,分发器向每台rs转发请求时,会记录rs的连接数,根据连接数判断所有rs的情况,将最新的请求转发给连接数最少的rs
  4. 4.加权最小连接:Weight Least-Connection,简称wlc,增对最小连接的优化,定义每台rs的权重值,分发器将新的请求转发给rs时,会根据权重值判断转发请求给每台rs的比例,分发器可以自动判断rs的情况,动态调整权重值
  5. #以上为4中常用调度算法,除此之外还有基于局部性的最小连接、带复制的基于局部性最小连接、目标地址散列调度、源地址散列调度等

LVS NAT模式搭建

测试环境:准备3台机器,1台分发器(dir)和2台rs

dir内网:192.168.1.113 外网:192.168.111.200

rs1内网:192.168.1.111

rs2内网:192.168.1.112

  1. apt install -y iptables #all node
  2. systemctl enable iptables --now #all node
  3. #设置rs1与rs2的网关为dir的内网ip:
  4. root@hk-slave1:/opt# vim /etc/netplan/01-netcfg.yaml
  5. root@hk-slave1:/opt# netplan apply
  6. root@hk-slave1:/opt# route -n
  7. Kernel IP routing table
  8. Destination Gateway Genmask Flags Metric Ref Use Iface
  9. 0.0.0.0 192.168.1.1 0.0.0.0 UG 0 0 0 ens33
  10. 0.0.0.0 192.168.1.113 0.0.0.0 UG 0 0 0 ens33
  11. 172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0
  12. 192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 ens33
  13. # dir 上创建vip 开启代理后端服务的lvs 模块
  14. root@hk-master1:~# cat /usr/local/sbin/lvs_nat.sh
  15. #! /bin/bash
  16. # dir上开启路由转发功能
  17. echo 1 > /proc/sys/net/ipv4/ip_forward
  18. # 关闭icmp的重定向
  19. echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects
  20. echo 0 > /proc/sys/net/ipv4/conf/default/send_redirects
  21. # 注意区分网卡名字,两个网卡分别为ens33(内网)和ens37(外网)
  22. echo 0 > /proc/sys/net/ipv4/conf/ens33/send_redirects
  23. #echo 0 > /proc/sys/net/ipv4/conf/ens37/send_redirects
  24. # dir设置nat防火墙
  25. iptables -t nat -F
  26. iptables -t nat -X
  27. iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j MASQUERADE
  28. # 定义ipvsadm路径到变量
  29. IPVSADM='/sbin/ipvsadm'
  30. # 清空ipvsadm规则
  31. $IPVSADM -C
  32. # 配置lvs,-s 指定调度算法为轮询
  33. $IPVSADM -A -t 192.168.1.200:80 -s rr
  34. # -r指定rs1,-w表示模式为nat,-w指定权重值
  35. $IPVSADM -a -t 192.168.1.200:80 -r 192.168.1.111:80 -m -w 1
  36. # 指定rs2
  37. $IPVSADM -a -t 192.168.1.200:80 -r 192.168.1.112:80 -m -w 1
  38. root@hk-master1:~# bash /usr/local/sbin/lvs_nat.sh
  39. # 验证代理配置
  40. root@hk-master1:~# ipvsadm -ln
  41. IP Virtual Server version 1.2.1 (size=4096)
  42. Prot LocalAddress:Port Scheduler Flags
  43. -> RemoteAddress:Port Forward Weight ActiveConn InActConn
  44. TCP 192.168.1.200:80 rr
  45. -> 192.168.1.111:80 Masq 1 0 0
  46. -> 192.168.1.112:80 Masq 1 0 0
  47. #dir 主机 curl 调用虚拟ip 192.168.1.200
  48. root@hk-master1:~# curl 192.168.1.200
  49. 192.168.1.112 nginx page
  50. root@hk-master1:~# curl 192.168.1.200
  51. 192.168.1.111 nginx page
  52. root@hk-master1:~# curl 192.168.1.200
  53. 192.168.1.112 nginx page
  54. root@hk-master1:~# curl 192.168.1.200
  55. 192.168.1.111 nginx page
  56. root@hk-master1:~#

LVS DR 模式搭建

测试环境:准备3台机器,1台分发器(dir)和2台rs

dir内网:192.168.1.113

rs1内网:192.168.1.111

rs2内网:192.168.1.112

VIP:192.168.1.200

DR模式rs1,与rs2机器的网关不需要配置为dir的ip地址,同样使用iptables工具管理防火墙,也要下载ipvsadm

  1. root@hk-master1:~#iptables -F
  2. root@hk-master1:~# ipvsadm -C
  3. root@hk-master1:~# ipvsadm -ln
  4. IP Virtual Server version 1.2.1 (size=4096)
  5. Prot LocalAddress:Port Scheduler Flags
  6. -> RemoteAddress:Port Forward Weight ActiveConn InActConn
  7. root@hk-master1:~# bash /usr/local/sbin/lvs_dr.sh
  8. SIOCADDRT: File exists
  9. root@hk-master1:~# ipvsadm -ln
  10. IP Virtual Server version 1.2.1 (size=4096)
  11. Prot LocalAddress:Port Scheduler Flags
  12. -> RemoteAddress:Port Forward Weight ActiveConn InActConn
  13. TCP 192.168.1.200:80 rr
  14. -> 192.168.1.111:80 Route 1 0 0
  15. -> 192.168.1.112:80 Route 1 0 0
  16. root@hk-master1:~# cat /usr/local/sbin/lvs_dr.sh
  17. #! /bin/bash
  18. # 开启端口转发
  19. echo 1 > /proc/sys/net/ipv4/ip_forward
  20. ipv=/sbin/ipvsadm
  21. vip=192.168.1.200
  22. rs1=192.168.1.111
  23. rs2=192.168.1.112
  24. # 添加VIP
  25. ifconfig ens33:2 $vip broadcast $vip netmask 255.255.255.255 up
  26. route add -host $vip dev ens33:2
  27. # 清空ipvsadm规则
  28. $ipv -C
  29. # 定义lvs调度算法为轮询
  30. $ipv -A -t $vip:80 -s rr
  31. # 指定转发目标rs1,-g表示dr模式,-w定义权重值
  32. $ipv -a -t $vip:80 -r $rs1:80 -g -w 1
  33. # 指定转发目标rs2
  34. $ipv -a -t $vip:80 -r $rs2:80 -g -w 1
  35. # rs1和rs2 都执行:
  36. root@hk-slave1:/opt# bash /usr/local/sbin/lvs_rs.sh
  37. root@hk-slave1:/opt# ip a
  38. 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
  39. link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
  40. inet 127.0.0.1/8 scope host lo
  41. valid_lft forever preferred_lft forever
  42. inet 192.168.1.200/32 brd 192.168.1.200 scope global lo:0
  43. valid_lft forever preferred_lft forever
  44. inet6 ::1/128 scope host
  45. valid_lft forever preferred_lft forever
  46. 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
  47. link/ether 00:0c:29:9f:37:c7 brd ff:ff:ff:ff:ff:ff
  48. inet 192.168.1.111/24 brd 192.168.1.255 scope global ens33
  49. valid_lft forever preferred_lft forever
  50. inet6 fe80::20c:29ff:fe9f:37c7/64 scope link
  51. valid_lft forever preferred_lft forever
  52. 3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
  53. link/ether 02:42:d9:b9:ab:13 brd ff:ff:ff:ff:ff:ff
  54. inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
  55. valid_lft forever preferred_lft forever
  56. inet6 fe80::42:d9ff:feb9:ab13/64 scope link
  57. valid_lft forever preferred_lft forever
  58. root@hk-slave1:/opt# cat /usr/local/sbin/lvs_rs.sh
  59. #!/bin/bash
  60. netplan apply
  61. vip=192.168.1.200
  62. # 把vip绑定在lo上,是为了实现rs直接把结果返回给客户端
  63. ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up
  64. route add -host $vip lo:0
  65. # 以下操作为更改arp内核参数,目的是为了让rs顺利发送mac地址给客户端
  66. echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
  67. echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
  68. echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
  69. echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce

结合keepalive 实现高可用

以上面配置的LVS DR模式为例,使用keepalived+lvs的场景:

1.dir会将收到的请求分发给后端的rs,但是当某台rs宕机的时候,dir不会知道,还会继续分发请求到宕机的rs机器,为了避免该情况出现,可以使用keepalived的避免

  1. #清空规则
  2. root@hk-master1:~# iptables -F
  3. root@hk-master1:~# ipvsadm -C
  4. #编辑keepalive配置文件
  5. root@hk-master1:~# ipvsadm -ln
  6. IP Virtual Server version 1.2.1 (size=4096)
  7. Prot LocalAddress:Port Scheduler Flags
  8. -> RemoteAddress:Port Forward Weight ActiveConn InActConn
  9. TCP 192.168.1.200:80 rr persistent 1
  10. -> 192.168.1.111:80 Route 100 0 0
  11. -> 192.168.1.112:80 Route 100 0 0
  12. root@hk-master1:~# vim /etc/keepalived/keepalived.conf
  13. root@hk-master1:~# cat /etc/keepalived/keepalived.conf
  14. vrrp_instance VI_1 {
  15. state BACKUP
  16. #绑定vip的网卡
  17. interface ens33
  18. #路由id,需要与backup机器相同
  19. virtual_router_id 51
  20. #定义权重,备用服务器上要小于100
  21. priority 100
  22. advert_int 1
  23. authentication {
  24. auth_type PASS
  25. auth_pass keepalived123
  26. }
  27. virtual_ipaddress {
  28. 192.168.1.200
  29. }
  30. }
  31. virtual_server 192.168.1.200 80 {
  32. #每隔10秒查询realserver状态
  33. delay_loop 10
  34. #lvs 算法
  35. lb_algo rr
  36. #DR模式
  37. lb_kind DR
  38. #同一IP的连续1秒内被分配到同一台rs
  39. persistence_timeout 1
  40. #用TCP协议检查rs
  41. protocol TCP
  42. real_server 192.168.1.111 80 {
  43. #权重
  44. weight 100
  45. TCP_CHECK {
  46. #10秒无响应超时
  47. connect_timeout 10
  48. nb_get_retry 3
  49. delay_before_retry 3
  50. connect_port 80
  51. }
  52. }
  53. real_server 192.168.1.112 80 {
  54. weight 100
  55. TCP_CHECK {
  56. connect_timeout 10
  57. nb_get_retry 3
  58. delay_before_retry 3
  59. connect_port 80
  60. }
  61. }
  62. }
  63. #验证配置
  64. root@hk-master1:~# ip a
  65. 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
  66. link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
  67. inet 127.0.0.1/8 scope host lo
  68. valid_lft forever preferred_lft forever
  69. inet6 ::1/128 scope host
  70. valid_lft forever preferred_lft forever
  71. 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
  72. link/ether 00:0c:29:bb:35:0d brd ff:ff:ff:ff:ff:ff
  73. inet 192.168.1.113/24 brd 192.168.1.255 scope global ens33
  74. valid_lft forever preferred_lft forever
  75. inet 192.168.1.200/32 scope global ens33
  76. valid_lft forever preferred_lft forever
  77. inet6 fe80::20c:29ff:febb:350d/64 scope link
  78. valid_lft forever preferred_lft forever
  79. 3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
  80. link/ether 02:42:c9:56:f7:39 brd ff:ff:ff:ff:ff:ff
  81. inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
  82. valid_lft forever preferred_lft forever
  83. root@hk-master1:~# ipvsadm -ln
  84. IP Virtual Server version 1.2.1 (size=4096)
  85. Prot LocalAddress:Port Scheduler Flags
  86. -> RemoteAddress:Port Forward Weight ActiveConn InActConn
  87. TCP 192.168.1.200:80 wlc persistent 1
  88. -> 192.168.1.111:80 Route 100 1 0
  89. #浏览器测试
  90. #在rs当中一台服务停的时候会暂时出现访问不了的清空
  91. curl: (7) Failed to connect to 192.168.1.200 port 80: Connection refused
  92. root@hk-master2:~# curl 192.168.1.200
  93. curl: (7) Failed to connect to 192.168.1.200 port 80: Connection refused
  94. root@hk-master2:~# curl 192.168.1.200
  95. 192.168.1.112 nginx page
  96. root@hk-master2:~# curl 192.168.1.200

2.完整的架构dir需要两台,实现高可用,当dir1宕机时,dir2会切换为dir1,接收请求并分发到后端的rs

  1. #配置一台dir的从服务器
  2. scp /etc/keepalived/keepalived.conf 192.168.1.114:/etc/keepalived/
  3. root@hk-master2:~# cat /etc/keepalived/keepalived.conf
  4. vrrp_instance VI_1 {
  5. state BACKUP
  6. #绑定vip的网卡
  7. interface ens33
  8. #路由id,需要与backup机器相同
  9. virtual_router_id 51
  10. #定义权重,备用服务器上要小于100
  11. priority 99
  12. advert_int 1
  13. authentication {
  14. auth_type PASS
  15. auth_pass keepalived123
  16. }
  17. virtual_ipaddress {
  18. 192.168.1.200
  19. }
  20. }
  21. virtual_server 192.168.1.200 80 {
  22. #每隔10秒查询realserver状态
  23. delay_loop 10
  24. #lvs 算法
  25. lb_algo wlc
  26. #DR模式
  27. lb_kind DR
  28. #同一IP的连续1秒内被分配到同一台rs
  29. persistence_timeout 1
  30. #用TCP协议检查rs
  31. protocol TCP
  32. real_server 192.168.1.111 80 {
  33. #权重
  34. weight 100
  35. TCP_CHECK {
  36. #10秒无响应超时
  37. connect_timeout 10
  38. nb_get_retry 3
  39. delay_before_retry 3
  40. connect_port 80
  41. }
  42. }
  43. real_server 192.168.1.112 80 {
  44. weight 100
  45. TCP_CHECK {
  46. connect_timeout 10
  47. nb_get_retry 3
  48. delay_before_retry 3
  49. connect_port 80
  50. }
  51. }
  52. }
  53. #重启 rs 中的一台nginx 测试keepalived
  54. root@hk-master1:~# tail -f /var/log/syslog
  55. Jun 26 20:55:17 k8s-node3 Keepalived_healthcheckers[46661]: TCP connection to [192.168.1.111]:tcp:80 failed.
  56. Jun 26 20:55:17 k8s-node3 Keepalived_healthcheckers[46661]: Check on service [192.168.1.111]:tcp:80 failed after 1 retry.
  57. Jun 26 20:55:17 k8s-node3 Keepalived_healthcheckers[46661]: Removing service [192.168.1.111]:tcp:80 to VS [192.168.1.200]:tcp:80
  58. Jun 26 20:56:45 k8s-node3 Keepalived_healthcheckers[46661]: TCP connection to [192.168.1.111]:tcp:80 success.
  59. Jun 26 20:56:45 k8s-node3 Keepalived_healthcheckers[46661]: Adding service [192.168.1.111]:tcp:80 to VS [192.168.1.200]:tcp:80
  60. root@hk-master2:~# tail -f /var/log/syslog
  61. Jun 26 20:55:15 k8s-node4 Keepalived_healthcheckers[43729]: Check on service [192.168.1.111]:tcp:80 failed after 1 retry.
  62. Jun 26 20:55:15 k8s-node4 Keepalived_healthcheckers[43729]: Removing service [192.168.1.111]:tcp:80 to VS [192.168.1.200]:tcp:80
  63. Jun 26 20:56:43 k8s-node4 Keepalived_healthcheckers[43729]: TCP connection to [192.168.1.111]:tcp:80 success.
  64. Jun 26 20:56:43 k8s-node4 Keepalived_healthcheckers[43729]: Adding service [192.168.1.111]:tcp:80 to VS [192.168.1.200]:tcp:80
  65. #测试 vip 飘逸
  66. root@hk-master1:~# systemctl stop keepalived.service
  67. root@hk-master2:~# tail -f /var/log/syslog
  68. Jun 26 20:57:36 k8s-node4 Keepalived_vrrp[43730]: VRRP_Instance(VI_1) Transition to MASTER STATE
  69. Jun 26 20:57:37 k8s-node4 Keepalived_vrrp[43730]: VRRP_Instance(VI_1) Entering MASTER STATE
  70. root@hk-master2:~# ip a
  71. 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
  72. link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
  73. inet 127.0.0.1/8 scope host lo
  74. valid_lft forever preferred_lft forever
  75. inet6 ::1/128 scope host
  76. valid_lft forever preferred_lft forever
  77. 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
  78. link/ether 00:0c:29:0f:45:99 brd ff:ff:ff:ff:ff:ff
  79. inet 192.168.1.114/24 brd 192.168.1.255 scope global ens33
  80. valid_lft forever preferred_lft forever
  81. inet 192.168.1.200/32 scope global ens33
  82. valid_lft forever preferred_lft forever
  83. inet6 fe80::20c:29ff:fe0f:4599/64 scope link
  84. valid_lft forever preferred_lft forever
  85. 3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
  86. link/ether 02:42:d1:34:f6:db brd ff:ff:ff:ff:ff:ff
  87. inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
  88. valid_lft forever preferred_lft forever

Haproxy/LVS负载均衡实现+keepalived实现高可用的更多相关文章

  1. JAVAEE——宜立方商城03:商品类目选择、Nginx端口或域名区分虚拟机、Nginx反向代理、负载均衡、keepalived实现高可用

    1. 学习计划 第三天: 1.商品类目选择(EasyUI的tree实现) 2.图片上传 a) 图片服务器FastDFS(Nainx部分) 2. 商品类目选择 2.1. 原型 2.2. 功能分析 展示商 ...

  2. Nginx(七):keepalived实现Nginx负载均衡服务器的双机高可用

    前言 之前咱们通过 Nginx(六):Nginx HTTP负载均衡和反向代理的配置与优化 和 Nginx+tomcat组合实现高并发场景的动静分离和负载均衡方案 这两篇文章了解了Nginx对高并发应用 ...

  3. Nginx,Haproxy/lvs负载均衡的优缺点分析

    PS:Nginx/LVS/HAProxy是目前使用最广泛的三种负载均衡软件,本人都在多个项目中实施过,参考了一些资料,结合自己的一些使用经验,总结一下. 一般对负载均衡的使用是随着网站规模的提升根据不 ...

  4. 高性能Linux服务器 第11章 构建高可用的LVS负载均衡集群

    高性能Linux服务器 第11章 构建高可用的LVS负载均衡集群 libnet软件包<-依赖-heartbeat(包含ldirectord插件(需要perl-MailTools的rpm包)) l ...

  5. LVS+Keepalived 实现高可用负载均衡

    前言 在业务量达到一定量的时候,往往单机的服务是会出现瓶颈的.此时最常见的方式就是通过负载均衡来进行横向扩展.其中我们最常用的软件就是 Nginx.通过其反向代理的能力能够轻松实现负载均衡,当有服务出 ...

  6. LVS负载均衡群集部署——NAT模式

    LVS负载均衡群集部署--NAT模式 1.群集应用概述 2.NAT模式LVS负载均衡群集部署 1.群集应用概述: 存在的问题: 互联网应用中,随着站点对硬件性能.响应速度.服务稳定性.数据可靠性等要求 ...

  7. haproxy+keepalived实现高可用负载均衡

    软件负载均衡一般通过两种方式来实现:基于操作系统的软负载实现和基于第三方应用的软负载实现.LVS就是基于Linux操作系统实现的一种软负载,HAProxy就是开源的并且基于第三应用实现的软负载. HA ...

  8. haproxy+keepalived实现高可用负载均衡(转)

      软件负载均衡一般通过两种方式来实现:基于操作系统的软负载实现和基于第三方应用的软负载实现.LVS就是基于Linux操作系统实现的一种软负载,HAProxy就是开源的并且基于第三应用实现的软负载. ...

  9. 通过LVS+Keepalived搭建高可用的负载均衡集群系统

    1. 安装LVS软件      (1)安装前准备操作系统:统一采用Centos6.5版本,地址规划如下: 服务器名 IP地址 网关 虚拟设备名 虚拟ip Director Server 192.168 ...

随机推荐

  1. Vue中控制更新的方式

    一.  强制更新的实例方法   vm.$forceUpdate() 迫使 Vue 实例重新渲染.注意它仅仅影响实例本身和插入插槽内容的子组件,而不是所有子组件. 在没有留意到数组或对象的变更检测注意事 ...

  2. Rocket - regmapper - RegMapper

    https://mp.weixin.qq.com/s/aXxgzWwh6unuztjgyVX0iQ 简单介绍RegMapper的实现. 1. 简单介绍 RegMapper使用指定的输入接口,为一组寄存 ...

  3. jchdl - RTL Module

    https://mp.weixin.qq.com/s/Sr4ffU4TPPoUJpdInwWd6w ​​ jchdl Module类在概念上对应Verilog的module,作为所有用户自定义模块的父 ...

  4. Jmeter(七) - 从入门到精通 - 建立数据库测试计划实战<MySQL数据库>(详解教程)

    1.简介 在实际工作中,我们经常会听到数据库的性能和稳定性等等,这些有时候也需要测试工程师去评估和测试,上一篇文章宏哥主要介绍了jmeter连接和创建数据库测试计划的过程,宏哥在文中通过示例和代码非常 ...

  5. Java 蓝桥杯 算法训练 貌似化学

    ** 貌似化学 ** 问题描述 现在有a,b,c三种原料,如果他们按x:y:z混合,就能产生一种神奇的物品d. 当然不一定只产生一份d,但a,b,c的最简比一定是x:y:z 现在给你3种可供选择的物品 ...

  6. Java实现 LeetCode 397 整数替换

    397. 整数替换 给定一个正整数 n,你可以做如下操作: 如果 n 是偶数,则用 n / 2替换 n. 如果 n 是奇数,则可以用 n + 1或n - 1替换 n. n 变为 1 所需的最小替换次数 ...

  7. Java实现 LeetCode 273 整数转换英文表示

    273. 整数转换英文表示 将非负整数转换为其对应的英文表示.可以保证给定输入小于 231 - 1 . 示例 1: 输入: 123 输出: "One Hundred Twenty Three ...

  8. Java实现 蓝桥杯VIP 算法提高 多项式输出

    算法提高 多项式输出 时间限制:1.0s 内存限制:512.0MB 问题描述 一元n 次多项式可用如下的表达式表示: f(x)=a[n]xn+a[n-1]x(n-1)+-+a[1]x+a[0], a[ ...

  9. java实现第三届蓝桥杯机器人行走

    机器人行走 [编程题](满分18分) 某少年宫引进了一批机器人小车.可以接受预先输入的指令,按指令行动.小车的基本动作很简单,只有3种:左转(记为L),右转(记为R),向前走若干厘米(直接记数字). ...

  10. java实现第七届蓝桥杯打印数字

    打印数字 打印数字 小明写了一个有趣的程序,给定一串数字. 它可以输出这串数字拼出放大的自己的样子. 比如"2016"会输出为: 00000 1 6666 2 0 0 1 1 6 ...