(1)lvs


1.7.6版本虚拟机封装

  • 封装7.6版本的虚拟机:安装:改时区,最小化安装,自动分区。
  • 修改:主机名;yum源,network的ip(uid一定要删掉); 安装vim bash-* httpd;解析vim /etc/hosts,双向解析,这样连接的速度会快些;禁止防火墙,selinux是disable;最后poweroff或reboot
hostnamectl set-hostname server11
[root@server1 ~]# cd /etc/yum.repos.d/
vi dvd.repo
[dvd]
name=rhel7.6
baseurl=http://172.25.3.250/rhel7.6
gpgcheck=0
cd /etc/sysconfig/network-scripts/
systemctl disable --now NetworkManager
vi ifcfg-eth0
BOOTPROTO=static
DEVICE=eth0
ONBOOT=yes
IPADDR=172.25.3.11
PREFIX=24
GATEWAY=172.25.3.250
DNS1=114.114.114.114
systemctl restart network
ip addr
yum install vim bash-* httpd 
vim /etc/hosts
添加:双向解析
172.25.3.250 zhenji  #真机name
172.25.3.11 server11
172.25.3.12 server12
172.25.3.13 server13
172.25.3.14 server14
172.25.3.15 server15
172.25.3.16 server16
172.25.3.17 server17
%真机里,清理一下7.6,再压缩7.6
[root@zhenji ~]# cd /var/lib/libvirt/images/
[root@zhenji images]# ls
linux.qcow2  node2.qcow2  node4-1.qcow2  rhel7.6-linux.qcow2  test1  test3
node1.qcow2  node3.qcow2  node4.qcow2    rhel7.6.qcow2        test2  test4
[root@zhenji images]# virt-sysprep -d rhel7.6-linux#清理
[root@zhenji images]# virt-sparsify --compress rhel7.6-linux.qcow2 demo.qcow2#压缩,将rhel7.6-linux.qcow2压缩为demo.qcow2
[root@zhenji images]# mv demo.qcow2 linux7.6.qcow2
[root@zhenji images]# ls
[root@zhenji images]# rm -fr rhel7.6-linux.qcow2
新建虚拟机,改主机名,ip地址

2.负载均衡

%server11
[root@server11 ~]# yum instal ipvsadm

[root@server11 ~]# ip addr add 172.25.3.100/24 dev eth0
[root@server11 ~]# ipvsadm -A -t 172.25.3.100:80 -s rr
[root@server11 ~]# ipvsadm -a -t 172.25.3.100:80 -r 172.25.3.12:80 -g
[root@server11 ~]# ipvsadm -a -t 172.25.3.100:80 -r 172.25.3.13:80 -g
[root@server11 ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  172.25.3.100:80 rr
  -> 172.25.3.12:80               Route   1      0          0         
  -> 172.25.3.13:80               Route   1      0          0 


%server12和server13里都需要
[root@server12 ~]# echo server12 > /var/www/html/index.html
[root@server12 ~]# systemctl enable --now httpd
[root@server12 ~]# curl localhost
server12
[root@server12 ~]# ip addr add 172.25.3.100/24 dev eth0
[root@server12 ~]# yum install -y arptables_jf
[root@server12 ~]# arptables -A INPUT -d 172.25.3.100 -j DROP
[root@server12 ~]# arptables -A OUTPUT -s 172.25.3.100 -j mangle --mangle-ip-s 172.25.3.12


[root@server13 ~]# echo server13 > /var/www/html/index.html
[root@server13 ~]# systemctl enable --now httpd
[root@server13 ~]# curl localhost
server13
[root@server13 ~]# ip addr add 172.25.3.100/24 dev eth0
[root@server13 ~]# yum install -y arptables_jf
[root@server13 ~]# arptables -A INPUT -d 172.25.3.100 -j DROP
[root@server13 ~]# arptables -A OUTPUT -s 172.25.3.100 -j mangle --mangle-ip-s 172.25.3.13


%真机里,检测负载均衡
[root@zhenji images]# arp -an | grep 100
? (172.25.3.100) at 52:54:00:37:64:a9 [ether] on br0
[root@zhenji images]# arp -d 172.25.3.100
[root@zhenji images]# curl 172.25.3.100
server13
[root@zhenji images]# curl 172.25.3.100
server12
[root@zhenji images]# curl 172.25.3.100
server13
[root@zhenji images]# curl 172.25.3.100
server12

在这里插入图片描述

在这里插入图片描述

3.写脚本:检测,等待5秒,如果没有,就删掉;如果有就添加

[root@server11 mnt]# vim lvscheck.sh
[root@server11 mnt]# cat lvscheck.sh 
#!/bin/bash
VIP=172.25.3.100
PORT=80
RS=(172.25.3.12 172.25.3.13)
LOG=checklvs.log
addrs() {
	ipvsadm -a -t $VIP:$PORT -r $1:$PORT -g
	echo "add $1 to ipvs" >> $LOG
}
delrs() {
	ipvsadm -d -t $VIP:$PORT -r $1
        echo "del $1 to ipvs" >> $LOG
}
checkrs() {
	for i in ${RS[*]}
	do
		num=`curl  -I -s -o /dev/null -w %{http_code} http://$i` #返回直是200说明该命令执行正确。
		if [ $num -eq 200 -a $(ipvsadm -ln|grep $i|wc -l) -eq 0 ];then  #返回值是200且ipvsadm -ln里没有该ip;$i相当于上面的$1
			addrs $i
		elif [ $num -ne 200 -a $(ipvsadm -ln|grep $i|wc -l) -ne 0 ];then#返回值不是200且ipvsadm -ln里有该ip
			delrs $i
		fi
	done
}
while true
do
	checkrs
	sleep 5#等待5s
done

[root@server11 mnt]# chmod + lvscheck.sh 
[root@server11 mnt]# sh lvscheck.sh &
[1] 23006
[root@server11 mnt]# watch -n 3 ipvsadm -ln
#在server12中分别stop查看server11中的ipvsadm会删除server12;start查看server11中的ipvsadm会添加server12
[root@server12 ~]# systemctl stop httpd

在这里插入图片描述

[root@server12 ~]# systemctl start httpd

在这里插入图片描述

4.keepalived:LVS管理软件

#新建虚拟机node4,该主机名该ip

[root@server11 mnt]# yum install keepalived -y
[root@server11 ~]# ipvsadm -C  #清除ipvsadm
[root@server11 ~]# cd /etc/keepalived/
[root@server11 keepalived]# ls
keepalived.conf
[root@server11 keepalived]# vim keepalived.conf
[root@server11 keepalived]# cat keepalived.conf
! Configuration File for keepalived

global_defs {
   notification_email {
   	root@1ocalhost
   }
   notification_email_from keepalived@1ocalhost
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
   vrrp_skip_check_adv_addr
   #vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 54
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.25.3.100
    }
}
virtual_server 172.25.3.100 80 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    #persistence_timeout 50
    protocol TCP

    real_server 172.25.3.12 80 {
        weight 1
        TCP_CHECK {
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
    real_server 172.25.3.13 80 {
        weight 1
        TCP_CHECK {
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    } 
}

在这里插入图片描述
在这里插入图片描述


[root@server11 keepalived]# scp keepalived.conf server14:/etc/keepalived/
[root@server14 ~]# yum install ipvsadm -y
[root@server14 ~]# yum install keepalived -y
[root@server14 ~]# vim /etc/keepalived/keepalived.conf 
vrrp_instance VI_1 {
    state BACKUP  #改为BACKUP
    interface eth0 
    virtual_router_id 54  #改成自己的
    priority 50  #权限改为50,比master小
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }

在这里插入图片描述

[root@server11 keepalived]# ip addr del 172.25.3.100/24 dev eth0
[root@server11 keepalived]# systemctl start keepalived.service 
[root@server14 keepalived]# systemctl start keepalived.service 
[root@server11 keepalived]# ipvsadm -ln #开启keepalived后会自动添加

在这里插入图片描述

[root@server11 keepalived]# systemctl stop keepalived.service
%停掉server11后,看日志会发现server14会变成Transition to MASTER STATE
[root@zhenji images]# arp -an | grep 100  #真机的100也会i发生相应变化
? (172.25.3.100) at 52:54:00:fd:3f:ac [ether] on br0

[root@server11 keepalived]# systemctl start keepalived.service 
%开server11后,会发现server14会变成Entering BACKUP STATE

在这里插入图片描述

4层的负载均衡已经解决,下面解决7层的
[root@server11 keepalived]# yum install haproxy
[root@server11 keepalived]# vim /etc/haproxy/haproxy.cfg 
添加更改
    stats uri /status
#---------------------------------------------------------------------
# main frontend which proxys to the backends
#---------------------------------------------------------------------
frontend  main *:80
#    acl url_static       path_beg       -i /static /images /javascript /stylesheets
#    acl url_static       path_end       -i .jpg .gif .png .css .js

#    use_backend static          if url_static

    default_backend             app

#---------------------------------------------------------------------
# static backend for serving up images, stylesheets and such
#---------------------------------------------------------------------
backend static
#    balance     roundrobin
#    server      static 127.0.0.1:4331 check

#---------------------------------------------------------------------
# round robin balancing between the various backends
#---------------------------------------------------------------------
backend app
    balance     roundrobin
    server  app1 172.25.3.12:80 check
    server  app2 172.25.3.13:80 check

在这里插入图片描述

[root@server11 keepalived]# systemctl stop keepalived.service
[root@server11 keepalived]# systemctl stop httpd
[root@server11 keepalived]# systemctl start haproxy
[root@server12 ~]# arptables -F
[root@server12 ~]# ip addr del 172.25.3.100/24 dev eth0
[root@server11 keepalived]# yum install net-tools
[root@server11 keepalived]# netstat -antlp
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      26071/haproxy 

%在真机中查看负载均衡
[root@zhenji images]# for i in {1..10};do curl 172.25.3.11;done

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qiao_qing/article/details/112679749
lvs