云计算27-------lvs_nat模式与lvs_dr模式配置

上午
 核心:内核中的ipvs,ipvsadm
 1、安装ipvsadm
 [root@nat ~]# yum -y install ipvsadm
 2、配置规则
 查看所有的规则,如果已经配置好规则,重启之后也就没有了
 [root@nat ~]# ipvsadm -L -n
1、配置vip网卡
(1)在编辑虚拟网络中创建桥接模式的网卡,并且桥接到有网的适配器上。

查看自己本机WLAN所属网卡

在VM创建桥接模式网卡,将外部连接设置为WLAN所属网卡

2、添加新的网卡,自定义为刚才创建的桥接模式网卡。

在本虚拟机中重新添加一块网络适配器,并设置网络连接为刚设置的桥接模式的网卡

3、此时在虚拟主机中使用ifconfig无法找到新的网卡,ip a能够查看到新的ens36网卡。

 查看所有网络
 [root@nat ~]# ip a
 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
     inet6 ::1/128 scope host 
        valid_lft forever preferred_lft forever
 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
     link/ether 00:0c:29:f5:ea:0a brd ff:ff:ff:ff:ff:ff
     inet 10.0.0.10/24 brd 10.0.0.255 scope global noprefixroute ens33
        valid_lft forever preferred_lft forever
     inet6 fe80::3598:4e0:b43d:ccc8/64 scope link noprefixroute 
        valid_lft forever preferred_lft forever
 3: ens36: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
     link/ether 00:0c:29:f5:ea:14 brd ff:ff:ff:ff:ff:ff
     inet 192.168.11.83/23 brd 192.168.11.255 scope global noprefixroute dynamic ens36
        valid_lft 7147sec preferred_lft 7147sec
     inet6 fe80::8de7:6bd9:74a1:8f60/64 scope link noprefixroute 
        valid_lft forever preferred_lft forever
 4、编辑网卡配置
 [root@nat ~]# cp /etc/sysconfig/network-scripts/ifcfg-ens33 /etc/sysconfig/network-scripts/ifcfg-ens36
 [root@nat ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens36
 TYPE=Ethernet
 BOOTPROTO=none
 IPADDR=192.168.10.101
 NAME=ens36
 UUID=d4cfa5ab-7c2a-4fab-b329-396b9b38b1bf
 DEVICE=ens36
 ONBOOT=yes
 5、重启网络服务
 [root@nat ~]# systemctl restart network
 6、本机cmd测试192.168.10.101ip是否可以正常使用

2、添加规则
 配置ipvs规则
 [root@nat ~]# ipvsadm -A -t 192.168.10.101:80 -s rr 
 # -A 选项表示添加一个新的服务。
 # -t 192.168.10.101:80 指明了要处理的服务是目标地址为 192.168.10.101 ,端口为 80 的 TCP 服务。
 # -s rr 表示使用轮询(Round Robin)的调度算法。
 [root@nat ~]# ipvsadm -Ln
 IP Virtual Server version 1.2.1 (size=4096)
 Prot LocalAddress:Port Scheduler Flags
   -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
 TCP  192.168.10.101:80 rr
 添加rs web01 web02 添加规则
 [root@nat ~]# ipvsadm -a -t 192.168.10.101:80 -r 10.0.0.11:80 -m
 # -a 选项用于添加一个真实服务器(Real Server)到指定的服务中。
 # -t 192.168.10.101:80 表示要添加真实服务器的服务是目标地址为 192.168.10.101 ,端口为 80 的 TCP 服务。
 # -r 10.0.0.11:80 指明了要添加的真实服务器的地址为 10.0.0.11 ,端口为 80 。
 # -m 表示使用 NAT(Network Address Translation,网络地址转换)模式。
 [root@nat ~]# ipvsadm -a -t 192.168.10.101:80 -r 10.0.0.12:80 -m
 [root@nat ~]# ipvsadm -Ln 
 # -L 选项表示列出(List)规则。
 # -n 选项表示以数字形式显示地址和端口,而不进行 DNS 解析,这样可以提高显示速度和准确性。
 IP Virtual Server version 1.2.1 (size=4096)
 Prot LocalAddress:Port Scheduler Flags
   -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
 TCP  192.168.10.101:80 rr
   -> 10.0.0.11:80                 Masq    1      0          0         
   -> 10.0.0.12:80                 Masq    1      0          0  
 # “TCP 192.168.10.101:80 rr” 表示这是一个 TCP 协议的服务,地址为 192.168.10.101,端口为 80,使用的调度算法是轮询(rr)
 # “-> 10.0.0.11:80 Masq 1 0 0” 表示后端的一个真实服务器地址为 10.0.0.11,端口为 80,采用网络地址转换(Masq)模式,权重为 1,当前活跃连接数为 0,非活跃连接数为 0。
 # “-> 10.0.0.12:80 Masq 1 0 0” 则是另一个后端真实服务器的配置信息,地址为 10.0.0.12,端口为 80,同样是网络地址转换模式,权重为 1,活跃和非活跃连接数均为 0。
 此时访问vip还无法访问到web01和web02

 

3、ip转发
 [root@nat ~]# vim /etc/sysctl.conf 
 net.ipv4.ip_forward=1
 # net.ipv4.ip_forward=1 这个配置的作用是启用系统的 IP 转发功能。
 # 当设置为 1 时,表示允许系统在不同的网络接口之间转发 IP 数据包。
 [root@nat ~]# sysctl -p
 net.ipv4.ip_forward = 1
 # 使在 /etc/sysctl.conf 中所做的更改立即生效,而无需重新启动系统。
 此时访问vip还无法访问到web01和web02

4、修改网关
临时修改web01和web02的网关,网关必须指向dip(调度服务器的对内的ip)

 要求rs的ip和dip要在同一个网段,因为dip是作为rs网关存在的
 [root@web01 ~]# ip route del default 
 # 删除系统中的默认路由
 [root@web01 ~]# ip route add 10.0.0.0/24 via 10.0.0.10
 # 添加一条新的路由规则
 # 对于目标网络为 10.0.0.0/24 的数据包,将通过网关 10.0.0.10 进行转发
 [root@web02 ~]# ip route del default
 [root@web02 ~]# ip route add 10.0.0.0/24 via 10.0.0.10
 此时访问vip可以访问到web01和web02

 

lvs-nat模式的优点是配置简单,缺点是请求和响应都必须经过ds,容易性能瓶颈

现在,希望请求时使用input链进行负载均衡,响应时不经过ds,直接由rs响应给客户端

在nat模式时,请求vip,接收vip响应。

构想 :请求vip,接收rip响应,这是不允许 使用lvs-dr模式

5、NAT模式脚本
 # ds脚本
 #!/bin/bash
 #配置网卡
 echo TYPE=Ethernet  >> /etc/sysconfig/network-scripts/ifcfg-ens36 
 echo BOOTPROTO=none >> /etc/sysconfig/network-scripts/ifcfg-ens36 
 echo IPADDR=192.168.10.101  >> /etc/sysconfig/network-scripts/ifcfg-ens36
 read -p "router name:" router_name
 echo NAME='"$router_name"'  >> /etc/sysconfig/network-scripts/ifcfg-ens36 
 uuid=$( uuidgen )
 echo UUID='"$uuidgen"'  >> /etc/sysconfig/network-scripts/ifcfg-ens36 
 echo DEVICE='"$router_name"'  >> /etc/sysconfig/network-scripts/ifcfg-ens36 
 echo ONBOOT=yes  >> /etc/sysconfig/network-scripts/ifcfg-ens36 
 #重启网络服务
 systemctl restart network
 #安装ipvsadm
 yum list installed|grep ipvsadm
 if [ $? —ne 0 ];then
     yum -y install ipvsadm
 fi
 #配置规则
 read -p "vip:" vip
 read -p "port:" port
 read -p "rule:" rule
 read -p "rip1:" rip1
 read -p "rip2:" rip2
 ipvsadm -A -t $vip:$port -s $rule
 ipvsadm -a -t $vip:$port -r $rip1:$port -m
 ipvsadm -a -t $vip:$port -r $rip2:$port -m
 #ip转发
 echo "net.ipv4.ip_forward=1" > /etc/sysctl.conf
 sysctl -p
 #rs 脚本
 #!/bin/bash
 # 设置网关
 read -p "dip:" dip
 ip route del default
 ip route add default via $dip
6、DR模式
(1)性能更优,回路不再经过ds

(2)ds和rs为了保证用户响应,都要求配置统一的vip

(3)由于rs是直接响应client,网关一定不能设置为ds的dip

(4)对rs的vip进行抑制,让ds的vip接收请求,rs的vip不接受请求

7、设置dr主机
 1、在ds的ens33上挂一个vip10.0.0.101
 [root@dr ~]# ifconfig ens33:0 10.0.0.101 broadcast 10.0.0.101 netmask 255.255.255.255 up
 # ifconfig 是用于配置网络接口的命令。
 # ens33:0 是创建的虚拟接口名称。
 # 10.0.0.101 是为该虚拟接口分配的 IP 地址。
 # broadcast 10.0.0.101 指明了广播地址为 10.0.0.101 。
 # netmask 255.255.255.255 表示子网掩码为 255.255.255.255 ,这实际上是一个单点广播地址,通常用于特定的网络配置场景。
 # up 表示启用该网络接口。
 [root@dr ~]# route add -host 10.0.0.101 dev ens33:0
 # 将目标主机地址为 10.0.0.101 的数据包通过网络接口 ens33:0 进行发送
 # 10.0.0.101 dip
 # 10.0.0.13 vip  在rs上的vip和这个vip相同
 2、设置规范
 # 安装ipvsadm
 [root@dr ~]# yum -y install ipvsadm.x86_64 
 # 设置规则
 ipvsadm -A -t 10.0.0.101:80 -s rr
 ipvsadm -a -t 10.0.0.101:80 -r 10.0.0.11 -g
 # -a 选项表示添加(Add)一个真实服务器到已存在的服务中。
 # -t 10.0.0.101:80 指明了要添加真实服务器的服务是目标地址为 10.0.0.101 ,端口为 80 的 TCP 服务。
 # -r 10.0.0.11 表示要添加的真实服务器地址为 10.0.0.11 。
 # -g 表示使用直接路由(Direct Routing)模式。
 ipvsadm -a -t 10.0.0.101:80 -r 10.0.0.12 -g
 [root@dr ~]# ipvsadm -Ln
 IP Virtual Server version 1.2.1 (size=4096)
 Prot LocalAddress:Port Scheduler Flags
   -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
 TCP  10.0.0.101:80 rr
   -> 10.0.0.11:80                 Route   1      0          0         
   -> 10.0.0.12:80                 Route   1      0          0 
 # rs不再需要指定端口,dr不支持端口映射,vip上是80端口,最终就是80端口
 # -m nat -g gateway
下午
1、设置rs主机
(1)在lo接口上绑定vip

 [root@web01 ~]# ifconfig lo:0 10.0.0.101 broadcast 10.0.0.101 netmask 255.255.255.255 up
 # ifconfig 是用于配置网络接口的命令。
 # lo:0 是创建的虚拟接口名称。
 # 10.0.0.101 是为该虚拟接口分配的 IP 地址。
 # broadcast 10.0.0.101 指明了广播地址为 10.0.0.101 。
 # netmask 255.255.255.255 表示子网掩码为 255.255.255.255 ,这实际上是一个单点广播地址,通常用于特定的网络配置场景。
 # up 表示启用该网络接口。
(2)设置主机路由

 [root@web01 ~]# route add -host 10.0.0.101 dev lo:0
 [root@web01 ~]# ifconfig
(3)抑制rs的vip接受请求

 echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
 echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
 echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
 echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
 # echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore :将本地回环接口(lo)的 arp_ignore 参数设置为 1。当收到 ARP 请求时,如果目标 IP 不是本地接口的地址,则不回应。
 # echo 2 > /proc/ssys/net/ipv4/conf/lo/arp_announce :将本地回环接口的 arp_announce 参数设置为 2。在发送 ARP 报文时,尽可能使用能被其他主机路由到达的本地接口的 IP 地址。
 # echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore :将所有网络接口的 arp_ignore 参数设置为 1。
 # echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce :将所有网络接口的 arp_announce 参数设置为 2。
 # 限制某些情况下的 ARP 响应
 # 1.不理睬非本机ip请求,2优先其他主机路由也就是如果其他主机路由可以到达本地,让他们走远路过来本地
(4)生成脚本,对web02使用

 [root@web01 ~]# vim arp.sh 
 ifconfig lo:0 10.0.0.101 broadcast 10.0.0.101 netmask 255.255.225.255 up
 route add -host 10.0.0.101 dev lo:0
 echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
 echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
 echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
 echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
2、测试
访问vip地址

 

 [root@dr ~]# ipvsadm -Ln
 IP Virtual Server version 1.2.1 (size=4096)
 Prot LocalAddress:Port Scheduler Flags
   -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
 TCP  10.0.0.101:80 rr
   -> 10.0.0.11:80                 Route   1      1          0         
   -> 10.0.0.12:80                 Route   1      2          0         
 [root@dr ~]# ipvsadm -Ln --stats
 IP Virtual Server version 1.2.1 (size=4096)
 Prot LocalAddress:Port               Conns   InPkts  OutPkts  InBytes OutBytes
   -> RemoteAddress:Port
 TCP  10.0.0.101:80                       3       14        0     2661        0
   -> 10.0.0.11:80                        1       10        0     2477        0
   -> 10.0.0.12:80                        2        4        0      184        0
3、dr模式脚本
(1)dr脚本

 #!/bin/bash
 # 在ens33上挂载一个ip地址
 read -p "vip:" vip
 read -p "mac:" mac
 read -p "num:" num
 ifconfig $mac:$num $vip broadcast $vip netmask 255.255.255.255
 # 主机路由
 route add -host $vip dev $mac:$num
 # 安装ipvsadm
 yum list installed|grep ipvsadmm
 if [ $? —ne 0 ];then
     yum -y install ipvsadm
 fi
 # 配置规则(不需要设置ip_forword)
 ipvsadm -C
 read -p "rule:" rule
 read -p "port:" port
 ipvsadm -A -t $vip:$port -s $rule
 read -p "rip1:" rip1
 ipvsadm -a -t $vip:$port -r $rip1 -g
 read -p "rip2:" rip2
 ipvsadm -a -t $vip:$port -r $rip2 -g
(2)rs脚本

 #!/bin/bash
 # 在ens33上挂载一个ip地址
 read -p "vip:" vip
 read -p "mac:" mac
 read -p "num:" num
 ifconfig $mac:$num $vip broadcast $vip netmask 255.255.255.255
 # 主机路由
 route add -host $vip dev $mac:$num
 # 抑制
 echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
 echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
 echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
 echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
练习:对mysql的3306服务进行负载均衡
1、配置mysql主机 x.x.x.21,命名为master_mysql.xxx.xxx,激活并且添加数据库test

2、在test中添加表student id int 主键,自增,name 字符串类型 非空,grade 字符串 非空,domi varchar 非空

3、添加三行数据

编号    姓名    班级    宿舍
1001    孙颖莎    云计算1班    1002
1002    大头    云计算2班    1003
1003    小胖    云计算2班    1004
3、配置mysql从服务,备份mysqlx.x.x.22的mysql服务,使用gtids同步事务

4、lvs对两台mysql主机进行rr负载均衡

5、使用python写一个脚本通过lvs ds主机读取mysql中的数据

6、自动化程度越高越好

  • 10
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值