18.11 LVS DR模式搭建 18.12 keepalived + LVS

18.11 LVS DR模式搭建

准备工作

三台机器, 三台机器均有公网IP。

  • 调度器(director)
    IP:192.168.230.135
  • real server1(real1)
    IP:192.168.230.130
  • real server2(real2)
    IP:192.168.230.145
  • VIP:192.168.230.200

开始搭建

配置director 

1[root@cham002 ~]# vim /usr/local/sbin/lvs_dr.sh 2 3#! /bin/bash 4echo 1 > /proc/sys/net/ipv4/ip_forward 5ipv=/usr/sbin/ipvsadm 6vip=192.168.230.200 7rs1=192.168.230.130 8rs2=192.168.230.145 9#注意这里的网卡名字 10ifdown ens33 11ifup ens33 12ifconfig ens33:2 $vip broadcast $vip netmask 255.255.255.255 up 13route add -host $vip dev ens33:2 14$ipv -C 15$ipv -A -t $vip:80 -s rr 16$ipv -a -t $vip:80 -r $rs1:80 -g -w 1 17$ipv -a -t $vip:80 -r $rs2:80 -g -w 1 18 19执行脚本: 20[root@cham002 ~]# sh /usr/local/sbin/lvs_dr.sh 21成功断开设备 'ens33'22成功激活的连接(D-Bus 激活路径:/org/freedesktop/NetworkManager/ActiveConnection/623[root@cham002 ~]# ip add 241: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1 25 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 26 inet 127.0.0.1/8 scope host lo 27 valid_lft forever preferred_lft forever 28 inet6 ::1/128 scope host 29 valid_lft forever preferred_lft forever 302: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 31 link/ether 00:0c:29:b6:9f:e3 brd ff:ff:ff:ff:ff:ff 32 inet 192.168.230.135/24 brd 192.168.230.255 scope global ens33 33 valid_lft forever preferred_lft forever 34 inet 192.168.230.200/32 brd 192.168.230.200 scope global ens33:2 35 valid_lft forever preferred_lft forever 36 inet 192.168.230.150/24 brd 192.168.230.255 scope global secondary ens33:0 37 valid_lft forever preferred_lft forever 38 inet6 fe80::6f15:52d3:ebeb:e193/64 scope link 39 valid_lft forever preferred_lft forever 403: ens37: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 41 link/ether 00:0c:29:b6:9f:ed brd ff:ff:ff:ff:ff:ff 42 inet 192.168.118.147/24 brd 192.168.118.255 scope global ens37 43 valid_lft forever preferred_lft forever 44 inet 192.168.100.1/24 brd 192.168.100.255 scope global ens37 45 valid_lft forever preferred_lft forever 46 inet6 fe80::1801:cbbb:ebcc:89a3/64 scope link 47 valid_lft forever preferred_lft forever

注: VIP绑定到了ens33网卡上。

 脚本解释

1#! /bin/bash 2echo 1 > /proc/sys/net/ipv4/ip_forward 3#开启端口转发 4ipv=/usr/sbin/ipvsadm 5vip=192.168.230.200 6rs1=192.168.230.130 7rs2=192.168.230.145 8#注意这里的网卡名字 9ifdown ens33 10ifup ens33 11#在此重启网卡的目的是避免重复设置命令行提供的IP 12ifconfig ens33:2 $vip broadcast $vip netmask 255.255.255.255 up 13#绑定VIP到dir的虚拟网卡ens33:2 14route add -host $vip dev ens33:2 15#添加网关 16$ipv -C 17$ipv -A -t $vip:80 -s wrr 18$ipv -a -t $vip:80 -r $rs1:80 -g -w 1 19$ipv -a -t $vip:80 -r $rs2:80 -g -w 1 20#设置ipvsadm规则,-g=gateway:使用默认网关(DR模式)

配置real server

分别在real1、real2配置下面的脚本:

1##real1(1302[root@cham1 ~]# vi /usr/local/sbin/lvs_rs.sh 3 4#/bin/bash 5vip=192.168.230.200 6#把vip绑定在lo上,是为了实现rs直接把结果返回给客户端 7ifdown lo 8ifup lo 9ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up 10route add -host $vip lo:0 11#以下操作为更改arp内核参数,目的是为了让rs顺利发送mac地址给客户端 12#参考文档www.cnblogs.com/lgfeng/archive/2012/10/16/2726308.html 13echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore 14echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce 15echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore 16echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce 17 18执行脚本: 19[root@cham1 ~]# vi /usr/local/sbin/lvs_rs.sh 20[root@cham1 ~]# sh !$ 21sh /usr/local/sbin/lvs_rs.sh 22 23[root@cham1 ~]# route -n 24Kernel IP routing table 25Destination Gateway Genmask Flags Metric Ref Use Iface 260.0.0.0 192.168.230.2 0.0.0.0 UG 100 0 0 ens33 27192.168.230.0 0.0.0.0 255.255.255.0 U 100 0 0 ens33 28192.168.230.200 0.0.0.0 255.255.255.255 UH 0 0 0 lo 29 30[root@cham1 ~]# ip add 311: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1 32 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 33 inet 127.0.0.1/8 scope host lo 34 valid_lft forever preferred_lft forever 35 inet 192.168.230.200/32 brd 192.168.230.200 scope global lo:0 36 valid_lft forever preferred_lft forever 37 inet6 ::1/128 scope host 38 valid_lft forever preferred_lft forever 392: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 40 link/ether 00:0c:29:90:35:d9 brd ff:ff:ff:ff:ff:ff 41 inet 192.168.230.130/24 brd 192.168.230.255 scope global ens33 42 valid_lft forever preferred_lft forever 43 inet6 fe80::7fe3:4489:d9af:a1ed/64 scope link 44 valid_lft forever preferred_lft forever 45 inet6 fe80::6f15:52d3:ebeb:e193/64 scope link tentative dadfailed 46 valid_lft forever preferred_lft forever 47 48 49##rs2(145) 50[root@test ~]# vim /usr/local/sbin/lvs_rs.sh 51[root@test ~]# sh !$ 52sh /usr/local/sbin/lvs_rs.sh 53 54[root@test ~]# route -n 55Kernel IP routing table 56Destination Gateway Genmask Flags Metric Ref Use Iface 570.0.0.0 192.168.230.2 0.0.0.0 UG 100 0 0 ens33 58192.168.230.0 0.0.0.0 255.255.255.0 U 100 0 0 ens33 59192.168.230.200 0.0.0.0 255.255.255.255 UH 0 0 0 lo 60 61[root@test ~]# ip add 621: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1 63 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 64 inet 127.0.0.1/8 scope host lo 65 valid_lft forever preferred_lft forever 66 inet 192.168.230.200/32 brd 192.168.230.200 scope global lo:0 67 valid_lft forever preferred_lft forever 68 inet6 ::1/128 scope host 69 valid_lft forever preferred_lft forever 702: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 71 link/ether 00:0c:29:50:f9:44 brd ff:ff:ff:ff:ff:ff 72 inet 192.168.230.145/24 brd 192.168.230.255 scope global ens33 73 valid_lft forever preferred_lft forever 74 inet6 fe80::9b07:b28d:f5e9:d107/64 scope link 75 valid_lft forever preferred_lft forever

135 

1[root@cham002 ~]# ipvsadm -ln 2IP Virtual Server version 1.2.1 (size=4096) 3Prot LocalAddress:Port Scheduler Flags 4 -> RemoteAddress:Port Forward Weight ActiveConn InActConn 5TCP 192.168.230.200:80 rr 6 -> 192.168.230.130:80 Route 1 0 1 7 -> 192.168.230.145:80 Route 1 0 1 8[root@cham002 ~]# ipvsadm -ln 9IP Virtual Server version 1.2.1 (size=4096) 10Prot LocalAddress:Port Scheduler Flags 11 -> RemoteAddress:Port Forward Weight ActiveConn InActConn 12TCP 192.168.230.200:80 rr 13 -> 192.168.230.130:80 Route 1 2 1 14 -> 192.168.230.145:80 Route 1 1 1 15[root@cham002 ~]#

测试

在浏览器访问VIP:192.168.230.200,刷新网页,访问结果由real1、real2交替回复。

开另一台同网段虚拟机测试!

1Type `help' to learn how to use Xshell prompt. 2[d:\~]$ ssh 192.168.230.140 3 4 5Connecting to 192.168.230.140:22... 6Connection established. 7To escape to local shell, press 'Ctrl+Alt+]'. 8 9Last login: Fri Nov 17 15:14:29 2017 from 192.168.230.1 10[root@cham3 ~]# curl 192.168.230.200 11cham 145 backup backup. 12[root@cham3 ~]# curl 192.168.230.200 13cham 130 14 15[root@cham3 ~]# curl 192.168.230.200 16cham 145 backup backup. 17[root@cham3 ~]# curl 192.168.230.200 18cham 130 19 20[root@cham3 ~]# curl 192.168.230.200 21cham 145 backup backup. 22[root@cham3 ~]# curl 192.168.230.200 23cham 130 24 25[root@cham3 ~]# curl 192.168.230.200 26cham 145 backup backup. 27[root@cham3 ~]# curl 192.168.230.200 28cham 130

18.12 Keepalived LVS

完整的架构需要两台服务器(角色为dir),分别安装Keepalived工具,目的是实现高可用,但Keepalived本身也有负载均衡功能,所以本次使用可以只安装一台Keepalived。Keepalived内置了ipvsadm的功能,所以不需要安装ipvsadm包,也不用编写和执行lvs_dr脚本。

准备工作

三台机器:

  • 调度器director:
    IP:192.168.230.135;安装Keepalived
  • real server(real1):
    IP:192.168.230.130
  • real server(real2):
    IP:192.168.230.145
  • VIP:192.168.230.200

•两台rs上,依然要执行/usr/local/sbin/lvs_rs.sh脚本

• keepalived有一个比较好的功能,可以在一台rs宕机时,不再把请求转发过去

• 测试

配置director (因为我们之前做keepalived高可用的时候已经安装过了)

1[root@cham002 ~]# vim /etc/keepalived/keepalived.conf 2 3vrrp_instance VI_1 { 4 #备用服务器上为 BACKUP 5 state MASTER 6 #绑定vip的网卡为ens33,你的网卡和阿铭的可能不一样,这里需要你改一下 7 interface ens33 8 virtual_router_id 51 9 #备用服务器上为90 10 priority 100 11 advert_int 1 12 authentication { 13 auth_type PASS 14 auth_pass aminglinux 15 } 16 virtual_ipaddress { 17 192.168.230.200 18 } 19} 20virtual_server 192.168.230.200 80 { 21 #(每隔10秒查询realserver状态) 22 delay_loop 10 23 #(lvs 算法) 24 lb_algo wlc 25 #(DR模式) 26 lb_kind DR 27 #(同一IP的连接60秒内被分配到同一台realserver) 28 persistence_timeout 0 29 #(TCP协议检查realserver状态) 30 protocol TCP 31 real_server 192.168.230.130 80 { 32 #(权重) 33 weight 100 34 TCP_CHECK { 35 #(10秒无响应超时) 36 connect_timeout 10 37 nb_get_retry 3 38 delay_before_retry 3 39 connect_port 80 40 } 41 } 42 real_server 192.168.230.145 80 { 43 weight 100 44 TCP_CHECK { 45 connect_timeout 10 46 nb_get_retry 3 47 delay_before_retry 3 48 connect_port 80 49 } 50 } 51} 52 53执行ipvsadm -C 把之前的ipvsadm规则清空掉 54[root@cham002 ~]# ipvsadm -C 55 56重启网络可以把之前的vip关掉 57[root@cham002 ~]# systemctl restart network 58 59 60启动Keepalived服务: 61[root@cham002 ~]# systemctl start keepalived 62[root@cham002 ~]# ps aux |grep keep 63root 11296 0.0 0.1 120720 1404 ? Ss 124 0:00 /usr/sbin/keepalived -D 64root 11297 0.0 0.3 127460 3272 ? S 124 0:00 /usr/sbin/keepalived -D 65root 11298 0.0 0.3 131656 3032 ? S 124 0:05 /usr/sbin/keepalived -D 66root 47689 0.0 0.0 112680 976 pts/1 S+ 00:31 0:00 grep --color=auto keep 67 68查看网卡信息: 69[root@cham002 ~]# ip addr 701: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1 71 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 72 inet 127.0.0.1/8 scope host lo 73 valid_lft forever preferred_lft forever 74 inet6 ::1/128 scope host 75 valid_lft forever preferred_lft forever 762: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 77 link/ether 00:0c:29:b6:9f:e3 brd ff:ff:ff:ff:ff:ff 78 inet 192.168.230.135/24 brd 192.168.230.255 scope global ens33 79 valid_lft forever preferred_lft forever 80 inet 192.168.230.200/32 scope global ens33 81 valid_lft forever preferred_lft forever 82 inet 192.168.230.150/24 brd 192.168.230.255 scope global secondary ens33:0 83 valid_lft forever preferred_lft forever 84 inet6 fe80::6f15:52d3:ebeb:e193/64 scope link 85 valid_lft forever preferred_lft forever 863: ens37: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 87 link/ether 00:0c:29:b6:9f:ed brd ff:ff:ff:ff:ff:ff 88 inet 192.168.118.147/24 brd 192.168.118.255 scope global ens37 89 valid_lft forever preferred_lft forever 90 inet 192.168.100.1/24 brd 192.168.100.255 scope global ens37 91 valid_lft forever preferred_lft forever 92 inet6 fe80::1801:cbbb:ebcc:89a3/64 scope link 93 94[root@cham002 ~]# ipvsadm -ln 95IP Virtual Server version 1.2.1 (size=4096) 96Prot LocalAddress:Port Scheduler Flags 97 -> RemoteAddress:Port Forward Weight ActiveConn InActConn 98TCP 192.168.230.200:80 wlc 99 -> 192.168.230.130:80 Route 100 0 0 100 -> 192.168.230.145:80 Route 100 0 0

添加Keepalived后会自动将宕机的real server清除出rs列表。

1如有一方的ngixn 宕掉了,能自动检测,开启后自动加载回来 2[root@cham002 ~]# ipvsadm -ln 3IP Virtual Server version 1.2.1 (size=4096) 4Prot LocalAddress:Port Scheduler Flags 5 -> RemoteAddress:Port Forward Weight ActiveConn InActConn 6TCP 192.168.230.200:80 wlc 7 -> 192.168.230.145:80 Route 100 0 0 8 9[root@cham002 ~]# ipvsadm -ln 10IP Virtual Server version 1.2.1 (size=4096) 11Prot LocalAddress:Port Scheduler Flags 12 -> RemoteAddress:Port Forward Weight ActiveConn InActConn 13TCP 192.168.230.200:80 wlc 14 -> 192.168.230.130:80 Route 100 0 0 15 -> 192.168.230.145:80 Route 100 0 0

测试

1To escape to local shell, press 'Ctrl+Alt+]'. 2 3Last login: Tue Jan 30 23:15:25 2018 from 192.168.230.1 4130宕机 5[root@cham3 ~]# curl 192.168.230.200 6cham 145 backup backup. 7[root@cham3 ~]# curl 192.168.230.200 8cham 145 backup backup. 9[root@cham3 ~]# curl 192.168.230.200 10cham 145 backup backup. 11[root@cham3 ~]# curl 192.168.230.200 12cham 145 backup backup. 13[root@cham3 ~]# curl 192.168.230.200 14cham 145 backup backup. 15[root@cham3 ~]# curl 192.168.230.200 16cham 145 backup backup. 17[root@cham3 ~]# curl 192.168.230.200 18cham 145 backup backup. 19[root@cham3 ~]# curl 192.168.230.200 20cham 145 backup backup. 21[root@cham3 ~]# curl 192.168.230.200 22cham 145 backup backup. 23 24145宕机 25[root@cham3 ~]# curl 192.168.230.200 26cham 130 27 28[root@cham3 ~]# curl 192.168.230.200 29cham 130 30 31[root@cham3 ~]# curl 192.168.230.200 32cham 130 33 34[root@cham3 ~]# curl 192.168.230.200 35cham 130

Keepalived+LVS作用

  • Keepalived搭建高可用保证LVS中director宕机后服务器不瘫痪
  • 如果只使用LVS,那么当LVS架构中某个real server宕机后,director仍然会继续向其发送请求,
点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )