个人随笔
目录
网站抗住大流量的终极架构:lvs+keepalived+nginx环境搭建
2023-08-14 21:59:29

前面我们学会了nginx环境搭建,keeplived+nginx环境搭建,lvs+nginx环境搭建,这里进行终极搭建lvs+keepalived+nginx

背景

开始我们网站小,可能一个tomcat服务器就可以了

后面随着访问数上升,一个tomcat不行了,那么就用Nginx做个负载均衡

后面随着用户访问上升,一个Nginx也不行了,有单点故障

后面随着用户访问上升,需要对Nginx进行横向扩容,加入第四层的负载均衡解决方案LVS

用户继续上升,LVS又会达到瓶颈,需要用DNS轮询.这里可以根据机房,地域轮询等,已经是做到极致了。所以终极环境就是lvs+keepalived+nginx。lvs最终是多个主备

准备

各种虚拟机准备克隆等
nginx-1.22.1在linux服务器上的安装和使用
keepalived+nginx实现高可用实战(双机主备,双主热备)
LVS+Nginx环境搭建(DR模式)

只需要对keepalived的配置文件进行修改即可,毕竟keepalived和lvs完美兼容

搭建lvs+keepalived+nginx跟lvs+nginx还是有点区别的,不需要在LVS服务器(DR)构建虚拟IP。keepalived会帮忙搞定。但是还是需要在在两台nginx(SR)构建虚拟IP。

主lvs

  1. ! Configuration File for keepalived
  2. global_defs {
  3. router_id LVS_15
  4. }
  5. vrrp_instance VI_1 {
  6. state MASTER
  7. interface ens33
  8. virtual_router_id 17
  9. priority 100
  10. advert_int 1
  11. authentication {
  12. auth_type PASS
  13. auth_pass 1111
  14. }
  15. virtual_ipaddress {
  16. 192.168.192.17
  17. }
  18. }
  19. #配置集群地址访问的IP+端口,端口和nginx保持一致,这个就是对应的LVS(DR)
  20. virtual_server 192.168.192.17 80 {
  21. #健康检查的时间,单位:秒
  22. delay_loop 6
  23. #配置负载均衡的算法:rr(轮询)
  24. lb_algo rr
  25. #设置lvs的模式:NAT/TUN/DR 我们用的是DR
  26. lb_kind DR
  27. #设置会话持久化时间
  28. persistence_timeout 5
  29. #协议,其实就是-t
  30. protocol TCP
  31. #负载均衡的真实服务器 这个就是对应两台Ngixn(RS)
  32. real_server 192.168.192.11 80 {
  33. #轮询默认权重为1
  34. weight 1
  35. #设置健康检查
  36. TCP_CHECK {
  37. #检查的80端口
  38. connect_port 80
  39. #超时时间:秒
  40. connect_timeout 2
  41. #重试次数
  42. nb_get_retry 2
  43. #间隔时间:秒
  44. delay_before_retry 3
  45. }
  46. }
  47. real_server 192.168.192.12 80 {
  48. weight 1
  49. #设置健康检查
  50. TCP_CHECK {
  51. #检查的80端口
  52. connect_port 80
  53. #超时时间:秒
  54. connect_timeout 2
  55. #重试次数
  56. nb_get_retry 2
  57. #间隔时间:秒
  58. delay_before_retry 3
  59. }
  60. }
  61. }

备lvs

  1. ! Configuration File for keepalived
  2. global_defs {
  3. router_id LVS_16
  4. }
  5. vrrp_instance VI_1 {
  6. state BACKUP
  7. interface ens33
  8. virtual_router_id 17
  9. priority 80
  10. advert_int 1
  11. authentication {
  12. auth_type PASS
  13. auth_pass 1111
  14. }
  15. virtual_ipaddress {
  16. 192.168.192.17
  17. }
  18. }
  19. #配置集群地址访问的IP+端口,端口和nginx保持一致,这个就是对应的LVS(DR)
  20. virtual_server 192.168.192.17 80 {
  21. #健康检查的时间,单位:秒
  22. delay_loop 6
  23. #配置负载均衡的算法:rr(轮询)
  24. lb_algo rr
  25. #设置lvs的模式:NAT/TUN/DR 我们用的是DR
  26. lb_kind DR
  27. #设置会话持久化时间
  28. persistence_timeout 5
  29. #协议,其实就是-t
  30. protocol TCP
  31. #负载均衡的真实服务器 这个就是对应两台Ngixn(RS)
  32. real_server 192.168.192.11 80 {
  33. #轮询默认权重为1
  34. weight 1
  35. #设置健康检查
  36. TCP_CHECK {
  37. #检查的80端口
  38. connect_port 80
  39. #超时时间:秒
  40. connect_timeout 2
  41. #重试次数
  42. nb_get_retry 2
  43. #间隔时间:秒
  44. delay_before_retry 3
  45. }
  46. }
  47. real_server 192.168.192.12 80 {
  48. weight 1
  49. #设置健康检查
  50. TCP_CHECK {
  51. #检查的80端口
  52. connect_port 80
  53. #超时时间:秒
  54. connect_timeout 2
  55. #重试次数
  56. nb_get_retry 2
  57. #间隔时间:秒
  58. delay_before_retry 3
  59. }
  60. }
  61. }

重启测试

先把之前lvs+nginx的配置清除

  1. ipvsadm -C

启动keepalived

  1. systemctl start keepalived

查看效果

  1. [root@localhost etc]# ipvsadm -Ln
  2. IP Virtual Server version 1.2.1 (size=4096)
  3. Prot LocalAddress:Port Scheduler Flags
  4. -> RemoteAddress:Port Forward Weight ActiveConn InActConn
  5. TCP 192.168.192.17:80 rr persistent 5
  6. -> 192.168.192.11:80 Route 1 0 0
  7. -> 192.168.192.12:80 Route 1 0 0

双机热备

其实就是跟keepalived的双机热备差不多,只不过RS(两台Nginx)需要多加个虚拟IP,这里假设用的是192.168.192.18,则在两台nginx(11,12)进行如下操作

  1. cd /etc/sysconfig/network-scripts/
  2. cp ifcfg-lo:1 ifcfg-lo:2
  3. vi ifcfg-lo:2

输入如下内容

  1. DEVICE=lo:2
  2. IPADDR=192.168.192.18
  3. NETMASK=255.255.255.255
  4. NETWORK=127.0.0.0
  5. # If you're having problems with gated making 127.0.0.0/8 a martian,
  6. # you can change this to something else (255.255.255.255, for example)
  7. BROADCAST=127.255.255.255
  8. ONBOOT=yes
  9. NAME=loopback

进行刷新

  1. ifup lo

依然需要添加路由

  1. route add -host 192.168.192.18 dev lo:2

两台lvs的配置文件
lvs01

  1. ! Configuration File for keepalived
  2. global_defs {
  3. router_id LVS_15
  4. }
  5. vrrp_instance VI_1 {
  6. state MASTER
  7. interface ens33
  8. virtual_router_id 17
  9. priority 100
  10. advert_int 1
  11. authentication {
  12. auth_type PASS
  13. auth_pass 1111
  14. }
  15. virtual_ipaddress {
  16. 192.168.192.17
  17. }
  18. }
  19. vrrp_instance VI_2 {
  20. state BACKUP
  21. interface ens33
  22. virtual_router_id 18
  23. priority 80
  24. advert_int 1
  25. authentication {
  26. auth_type PASS
  27. auth_pass 1111
  28. }
  29. virtual_ipaddress {
  30. 192.168.192.18
  31. }
  32. }
  33. #配置集群地址访问的IP+端口,端口和nginx保持一致,这个就是对应的LVS(DR)
  34. virtual_server 192.168.192.17 80 {
  35. #健康检查的时间,单位:秒
  36. delay_loop 6
  37. #配置负载均衡的算法:rr(轮询)
  38. lb_algo rr
  39. #设置lvs的模式:NAT/TUN/DR 我们用的是DR
  40. lb_kind DR
  41. #设置会话持久化时间
  42. persistence_timeout 5
  43. #协议,其实就是-t
  44. protocol TCP
  45. #负载均衡的真实服务器 这个就是对应两台Ngixn(RS)
  46. real_server 192.168.192.11 80 {
  47. #轮询默认权重为1
  48. weight 1
  49. #设置健康检查
  50. TCP_CHECK {
  51. #检查的80端口
  52. connect_port 80
  53. #超时时间:秒
  54. connect_timeout 2
  55. #重试次数
  56. nb_get_retry 2
  57. #间隔时间:秒
  58. delay_before_retry 3
  59. }
  60. }
  61. real_server 192.168.192.12 80 {
  62. weight 1
  63. #设置健康检查
  64. TCP_CHECK {
  65. #检查的80端口
  66. connect_port 80
  67. #超时时间:秒
  68. connect_timeout 2
  69. #重试次数
  70. nb_get_retry 2
  71. #间隔时间:秒
  72. delay_before_retry 3
  73. }
  74. }
  75. }
  76. #配置集群地址访问的IP+端口,端口和nginx保持一致,这个就是对应的LVS(DR)
  77. virtual_server 192.168.192.18 80 {
  78. #健康检查的时间,单位:秒
  79. delay_loop 6
  80. #配置负载均衡的算法:rr(轮询)
  81. lb_algo rr
  82. #设置lvs的模式:NAT/TUN/DR 我们用的是DR
  83. lb_kind DR
  84. #设置会话持久化时间
  85. persistence_timeout 5
  86. #协议,其实就是-t
  87. protocol TCP
  88. #负载均衡的真实服务器 这个就是对应两台Ngixn(RS)
  89. real_server 192.168.192.11 80 {
  90. #轮询默认权重为1
  91. weight 1
  92. #设置健康检查
  93. TCP_CHECK {
  94. #检查的80端口
  95. connect_port 80
  96. #超时时间:秒
  97. connect_timeout 2
  98. #重试次数
  99. nb_get_retry 2
  100. #间隔时间:秒
  101. delay_before_retry 3
  102. }
  103. }
  104. real_server 192.168.192.12 80 {
  105. weight 1
  106. #设置健康检查
  107. TCP_CHECK {
  108. #检查的80端口
  109. connect_port 80
  110. #超时时间:秒
  111. connect_timeout 2
  112. #重试次数
  113. nb_get_retry 2
  114. #间隔时间:秒
  115. delay_before_retry 3
  116. }
  117. }
  118. }

lvs02

  1. ! Configuration File for keepalived
  2. global_defs {
  3. router_id LVS_16
  4. }
  5. vrrp_instance VI_1 {
  6. state BACKUP
  7. interface ens33
  8. virtual_router_id 17
  9. priority 80
  10. advert_int 1
  11. authentication {
  12. auth_type PASS
  13. auth_pass 1111
  14. }
  15. virtual_ipaddress {
  16. 192.168.192.17
  17. }
  18. }
  19. vrrp_instance VI_2 {
  20. state MASTER
  21. interface ens33
  22. virtual_router_id 18
  23. priority 100
  24. advert_int 1
  25. authentication {
  26. auth_type PASS
  27. auth_pass 1111
  28. }
  29. virtual_ipaddress {
  30. 192.168.192.18
  31. }
  32. }
  33. #配置集群地址访问的IP+端口,端口和nginx保持一致,这个就是对应的LVS(DR)
  34. virtual_server 192.168.192.17 80 {
  35. #健康检查的时间,单位:秒
  36. delay_loop 6
  37. #配置负载均衡的算法:rr(轮询)
  38. lb_algo rr
  39. #设置lvs的模式:NAT/TUN/DR 我们用的是DR
  40. lb_kind DR
  41. #设置会话持久化时间
  42. persistence_timeout 5
  43. #协议,其实就是-t
  44. protocol TCP
  45. #负载均衡的真实服务器 这个就是对应两台Ngixn(RS)
  46. real_server 192.168.192.11 80 {
  47. #轮询默认权重为1
  48. weight 1
  49. #设置健康检查
  50. TCP_CHECK {
  51. #检查的80端口
  52. connect_port 80
  53. #超时时间:秒
  54. connect_timeout 2
  55. #重试次数
  56. nb_get_retry 2
  57. #间隔时间:秒
  58. delay_before_retry 3
  59. }
  60. }
  61. real_server 192.168.192.12 80 {
  62. weight 1
  63. #设置健康检查
  64. TCP_CHECK {
  65. #检查的80端口
  66. connect_port 80
  67. #超时时间:秒
  68. connect_timeout 2
  69. #重试次数
  70. nb_get_retry 2
  71. #间隔时间:秒
  72. delay_before_retry 3
  73. }
  74. }
  75. }
  76. #配置集群地址访问的IP+端口,端口和nginx保持一致,这个就是对应的LVS(DR)
  77. virtual_server 192.168.192.18 80 {
  78. #健康检查的时间,单位:秒
  79. delay_loop 6
  80. #配置负载均衡的算法:rr(轮询)
  81. lb_algo rr
  82. #设置lvs的模式:NAT/TUN/DR 我们用的是DR
  83. lb_kind DR
  84. #设置会话持久化时间
  85. persistence_timeout 5
  86. #协议,其实就是-t
  87. protocol TCP
  88. #负载均衡的真实服务器 这个就是对应两台Ngixn(RS)
  89. real_server 192.168.192.11 80 {
  90. #轮询默认权重为1
  91. weight 1
  92. #设置健康检查
  93. TCP_CHECK {
  94. #检查的80端口
  95. connect_port 80
  96. #超时时间:秒
  97. connect_timeout 2
  98. #重试次数
  99. nb_get_retry 2
  100. #间隔时间:秒
  101. delay_before_retry 3
  102. }
  103. }
  104. real_server 192.168.192.12 80 {
  105. weight 1
  106. #设置健康检查
  107. TCP_CHECK {
  108. #检查的80端口
  109. connect_port 80
  110. #超时时间:秒
  111. connect_timeout 2
  112. #重试次数
  113. nb_get_retry 2
  114. #间隔时间:秒
  115. delay_before_retry 3
  116. }
  117. }
  118. }

然后重启keepalived即可

  1. systemctl restart keepalived

查看目前的lvs配置

  1. [root@localhost ~]# ipvsadm -Ln
  2. IP Virtual Server version 1.2.1 (size=4096)
  3. Prot LocalAddress:Port Scheduler Flags
  4. -> RemoteAddress:Port Forward Weight ActiveConn InActConn
  5. TCP 192.168.192.17:80 rr persistent 5
  6. -> 192.168.192.11:80 Route 1 2 0
  7. -> 192.168.192.12:80 Route 1 0 0
  8. TCP 192.168.192.18:80 rr persistent 5
  9. -> 192.168.192.11:80 Route 1 0 0
  10. -> 192.168.192.12:80 Route 1 0 0

可以看到有两组了。

然后在浏览器访问VIP:http://192.168.192.17/和http://192.168.192.18/分别渠道了11和12.
完美!

 109

啊!这个可能是世界上最丑的留言输入框功能~


当然,也是最丑的留言列表

有疑问发邮件到 : suibibk@qq.com 侵权立删
Copyright : 个人随笔   备案号 : 粤ICP备18099399号-2