当前位置:   article > 正文

LVS+Keepalived(主备)+Nginx实现高可用负载均衡_lvs+keepalived+nginx

lvs+keepalived+nginx

一、环境说明

#系统:Centos 7

#服务版本:nginx1.20.1、keepalived1.3.5

  • 架构图:

二.LVS+Keepalived服务部署

#LVS是linux内核自带的服务,不用安装,只需安装LVS管理工具,第一种叫ipvsadm,第二种叫keepalived。ipvsadm是通过命令行管理,而keepalive读取配置文件管理

1.安装ipvsadm

  1. [root@lvs01 ~]# yum -y install ipvsadm
  2. [root@lvs02 ~]# yum -y install ipvsadm

2.加载ipvsadm模板进系统

  1. [root@lvs01 ~]# ipvsadm
  2. IP Virtual Server version 1.2.1 (size=4096)
  3. Prot LocalAddress:Port Scheduler Flags
  4. -> RemoteAddress:Port Forward Weight ActiveConn InActConn
  5. [root@lvs01 ~]# lsmod | grep ip_vs
  6. ip_vs 145497 0
  7. nf_conntrack 133095 1 ip_vs
  8. libcrc32c 12644 3 xfs,ip_vs,nf_conntrack
  9. [root@lvs02 ~]# ipvsadm
  10. IP Virtual Server version 1.2.1 (size=4096)
  11. Prot LocalAddress:Port Scheduler Flags
  12. -> RemoteAddress:Port Forward Weight ActiveConn InActConn
  13. [root@lvs02 ~]# lsmod | grep ip_vs
  14. ip_vs 145497 0
  15. nf_conntrack 133095 1 ip_vs
  16. libcrc32c 12644 3 xfs,ip_vs,nf_conntrack

3.安装Keepalived

  1. [root@lvs01 ~]# yum install -y keepalived
  2. [root@lvs02 ~]# yum install -y keepalived

4.修改keepalived配置文件

  1. [root@lvs01 ~]# vi /etc/keepalived/keepalived.conf
  2. ! Configuration File for keepalived
  3. global_defs {
  4. router_id lvs01 #router_id 机器标识,通常为hostname,但不一定非得是hostname。故障发生时,邮件通知会用到。
  5. }
  6. vrrp_instance VI_1 { #vrrp实例定义部分
  7. state MASTER #设置lvs的状态,MASTERBACKUP两种,必须大写
  8. interface ens32 #设置对外服务的接口
  9. virtual_router_id 100 #设置虚拟路由标示,这个标示是一个数字,同一个vrrp实例使用唯一标示
  10. priority 100 #定义优先级,数字越大优先级越高,在一个vrrp——instance下,master的优先级必须大于backup
  11. advert_int 1 #设定master与backup负载均衡器之间同步检查的时间间隔,单位是秒
  12. authentication { #设置验证类型和密码
  13. auth_type PASS #主要有PASSAH两种
  14. auth_pass 1111 #验证密码,同一个vrrp_instance下MASTERBACKUP密码必须相同
  15. }
  16. virtual_ipaddress { #设置虚拟ip地址,可以设置多个,每行一个
  17. 10.0.0.192
  18. }
  19. }
  20. virtual_server 10.0.0.192 80 { #设置虚拟服务器,需要指定虚拟ip和服务端口
  21. delay_loop 6 #健康检查时间间隔
  22. lb_algo wrr #负载均衡调度算法
  23. lb_kind DR #负载均衡转发规则
  24. persistence_timeout 0 #设置会话保持时间,对动态网页非常有用
  25. protocol TCP #指定转发协议类型,有TCPUDP两种
  26. real_server 10.0.0.107 80 { #配置服务器节点1,需要指定real server的真实IP地址和端口
  27. weight 1 #设置权重,数字越大权重越高
  28. TCP_CHECK { #realserver的状态监测设置部分单位秒
  29. connect_timeout 10 #连接超时为10
  30. retry 3 #重连次数
  31. delay_before_retry 3 #重试间隔
  32. connect_port 80 #连接端口为80,要和上面的保持一致
  33. }
  34. }
  35. real_server 10.0.0.100 80 { #配置服务器节点2,需要指定real server的真实IP地址和端口
  36. weight 1 #设置权重,数字越大权重越高
  37. TCP_CHECK { #realserver的状态监测设置部分单位秒
  38. connect_timeout 10 #连接超时为10
  39. retry 3 #重连次数
  40. delay_before_retry 3 #重试间隔
  41. connect_port 80 #连接端口为80,要和上面的保持一致
  42. }
  43. }
  44. }
  1. [root@lvs02 ~]# vi /etc/keepalived/keepalived.conf
  2. ! Configuration File for keepalived
  3. global_defs {
  4. router_id lvs02 #标识
  5. }
  6. vrrp_instance VI_1 {
  7. state BACKUP #lvs标识,BACKUP
  8. interface ens32
  9. virtual_router_id 100
  10. priority 99 #优先级
  11. advert_int 1
  12. authentication {
  13. auth_type PASS
  14. auth_pass 1111
  15. }
  16. virtual_ipaddress {
  17. 10.0.0.192
  18. }
  19. }
  20. virtual_server 10.0.0.192 80 {
  21. delay_loop 6
  22. lb_algo wrr
  23. lb_kind DR
  24. persistence_timeout 0
  25. protocol TCP
  26. real_server 10.0.0.107 80 {
  27. weight 1
  28. TCP_CHECK {
  29. connect_timeout 10
  30. retry 3
  31. delay_before_retry 3
  32. connect_port 80
  33. }
  34. }
  35. real_server 10.0.0.100 80 {
  36. weight 1
  37. TCP_CHECK {
  38. connect_timeout 10
  39. retry 3
  40. delay_before_retry 3
  41. connect_port 80
  42. }
  43. }
  44. }

5.启动keepalived服务

  1. [root@lvs01 ~]# systemctl start keepalived
  2. [root@lvs02 ~]# systemctl start keepalived

6.查看vip

#lvs01是主节点,有vip10.0.0.192

 #lvs02是备用节点,所以没有

二、nginx服务部署

1.安装

  1. [root@nginx01 ~]# yum install -y nginx net-tools
  2. [root@nginx02 ~]# yum install -y nginx net-tools

2.启动

  1. [root@nginx01 ~]# systemctl start nginx
  2. [root@nginx02 ~]# systemctl start nginx

3.关闭VIP的ARP响应

vi /etc/rc.d/init.d/realserver.sh
  1. #!/bin/bash
  2. SNS_VIP=10.0.0.192 #虚拟ip地址
  3. /etc/rc.d/init.d/functions
  4. case "$1" in
  5. start)
  6. ifconfig lo:0 $SNS_VIP netmask 255.255.255.255 broadcast $SNS_VIP
  7. /sbin/route add -host $SNS_VIP dev lo:0
  8. echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
  9. echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
  10. echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
  11. echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
  12. sysctl -p >/dev/null 2>&1
  13. echo "RealServer Start OK"
  14. ;;
  15. stop)
  16. ifconfig lo:0 down
  17. route del $SNS_VIP >/dev/null 2>&1
  18. echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore
  19. echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce
  20. echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore
  21. echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce
  22. echo "RealServer Stoped"
  23. ;;
  24. *)
  25. echo "Usage: $0 {start|stop}"
  26. exit 1
  27. esac
  28. exit 0

4.realserver.sh脚本授予执行权限

  1. [root@nginx01 ~]# chmod u+x /etc/rc.d/init.d/realserver.sh
  2. [root@nginx02 ~]# chmod u+x /etc/rc.d/init.d/realserver.sh

5.启动服务

  1. [root@nginx01 ~]# /etc/rc.d/init.d/realserver.sh start
  2. /etc/rc.d/init.d/realserver.sh: line 3: /etc/rc.d/init.d/functions: Permission denied
  3. RealServer Start OK
  4. [root@nginx02 ~]# /etc/rc.d/init.d/realserver.sh start
  5. /etc/rc.d/init.d/realserver.sh: line 3: /etc/rc.d/init.d/functions: Permission denied
  6. RealServer Start OK

6.查看ip是否绑定

 7.修改页面显示,方便观察效果

echo "nginx01" > /usr/share/doc/HTML/index.html
echo "nginx02" > /usr/share/doc/HTML/index.html

8.客户端访问vip

 三.故障模拟

1.停止lvs01服务

[root@lvs01 ~]# systemctl stop keepalived

2.查看ip地址

#可以发现,虚拟ip地址已经漂到lvs02上了

lvs01:

 lvs02:

3.查看日志 

lvs01:

#服务停止

lvs02:

#可以看到从backup转换为master状态

 4.客户端访问vip,负载正常

 5.恢复lvs01服务

[root@master ~]# systemctl start keepalived

6.查看ip地址

#lvs01服务恢复,虚拟ip地址就会自动漂回原master

lvs01:

 lvs02:

 7.查看日志

#lvs01恢复后会自动抢占master状态

 四.健康检查

#后端web服务故障,keepalived会检查后端web服务状态,异常就从服务器列表移除,客户端访问只有nginx01会响应

1.停止nginx02服务

[root@nginx02 ~]# systemctl stop nginx

 2.查看日志

3.查看ipvsadm,nginx02已经被移除了

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/492442
推荐阅读
相关标签
  

闽ICP备14008679号