ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、视频、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
[TOC] ### **主机规划** 《LVS + Keepalived + DR》 LVS主机:192.168.2.101 RS主机 :192.168.2.102,192.168.2.103 VIP:192.168.2.110 ### **前置操作** * 关闭firewalld、selinux(所有主机) * 设置ip_forward为1(所有主机) * 在102主机上安装nginx,在103主机上安装httpd,监听80端口 ### **RS主机** 1、配置lo网卡 编辑`/etc/sysconfig/network-scripts/ifcfg-lo`,内容更改为如下,把lo网卡的IP配置为VIP ``` DEVICE=lo IPADDR=192.168.2.110 NETMASK=255.255.255.255 BROADCAST=192.168.2.110 ONBOOT=yes NAME=loopback ``` 然后重启网络 ``` $ sudo systemctl restart network ``` 查看lo网卡多了刚才的IP ``` $ ip addr show lo 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet 192.168.2.110/32 brd 192.168.2.110 scope host lo valid_lft forever preferred_lft forever ``` 2、配置ARP系统参数 修改`/etc/sysctl.conf`,在文件尾部添加如下内容 ``` net.ipv4.conf.lo.arp_ignore = 1 net.ipv4.conf.all.arp_ignore = 1 net.ipv4.conf.lo.arp_announce = 2 net.ipv4.conf.all.arp_announce = 2 ``` 然后执行以下命令生效 ``` $ sysctl -p ``` ### **LVS主机** 1、安装ipvsadm ``` $ yum -y install ipvsadm ``` 2、安装keepalived ``` $ yum -y install keepalived ``` 3、配置keepalived 编辑`/etc/keepalived/keepalived.conf`文件,内容如下 ``` global_defs { notification_email { acassen@firewall.loc failover@firewall.loc sysadmin@firewall.loc } notification_email_from Alexandre.Cassen@firewall.loc smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id LVS_DEVEL } vrrp_instance VI_1 { state MASTER #备用服务器上为 BACKUP interface eth0 # 网卡 virtual_router_id 110 # 注意不要和其他keepalived集群冲突 priority 100 #优先级,数值越大优先级越高;备用服务器上为90 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.2.110 } } virtual_server 192.168.2.110 80 { delay_loop 6 #(每隔6秒查询realserver状态,是否存活) lb_algo rr #(轮询算法) lb_kind DR #(DR模式) persistence_timeout 0 #(同一IP的连接多少秒内被分配到同一台realserver,0表示不连接) protocol TCP #(用TCP协议检查realserver状态) real_server 192.168.2.102 80 { weight 100 #(权重) TCP_CHECK { connect_timeout 10 #(10秒无响应超时) delay_before_retry 3 connect_port 80 } } real_server 192.168.2.103 80 { weight 100 TCP_CHECK { connect_timeout 10 delay_before_retry 3 connect_port 80 } } } ``` 4、启动keepalived ``` $ systemctl enable keepalived && systemctl start keepalived ``` 5、查看转发规则 ``` $ ipvsadm -L -n IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 192.168.2.110:80 rr -> 192.168.2.102:80 Route 100 0 0 -> 192.168.2.103:80 Route 100 0 0 ``` ### **访问** 注意访问的时候不能够在lvs主机上使用vip进行访问,会访问不通。我们在这三台主机以外的主机进行访问。 我们在这三台主机以外的一台主机上进行访问,如下: > 这是访问到了httpd,103主机 ![](https://img.kancloud.cn/13/ab/13abe88c31535d328be8de79ec147d1c_1256x402.png) > 这是访问到了nginx,102主机 ![](https://img.kancloud.cn/11/cd/11cd13afc72a784853c5fa84aea5a971_1063x194.png) ### **FAQ** **Q:是否可以不装keepalived,直接在网卡上配置vip?** A:可以的,keepalived的作用有两个:一是在网卡上配置vip,二是通过ipvsadm命令配置ipvs的转发规则 **Q:`arp_ignore`和`arp_annouce`的作用是什么?** A:参考google **Q:按照上面的轮询配置,应该是102一次,103一次,但是实际结果并不是这样,为什么?** A:原因未知 可能参考:https://ieevee.com/tech/2017/08/15/lvs-persistence.html **Q:当我们执行一次访问后,ipvsadm -L -n -c 命令会有如下输出,代表什么意思?** ``` $ ipvsadm -L -n -c IPVS connection entries pro expire state source virtual destination TCP 14:56 ESTABLISHED 192.168.2.1:54648 192.168.2.110:80 192.168.2.102:80 TCP 14:57 ESTABLISHED 192.168.2.1:54647 192.168.2.110:80 192.168.2.103:80 ``` ### **Reference** * https://www.cnblogs.com/MacoLee/p/5856858.html * https://blog.51cto.com/cuchadanfan/1661576