LVS/DR模式

準(zhǔn)備工作(集群中所有主機關(guān)閉防火墻 selinux)

[root@lvs ~]# cat /etc/hosts
192.168.13.111 lvs
192.168.13.112 real-server1
192.168.13.115 real-server2

Director分發(fā)器配置(lvs這臺機器)

配置vip

[root@lvs ~]# yum -y install ipvsadm 	#RHEL確保LoadBalancer倉庫可用
[root@lvs ~]# ip a add dev ens33 192.168.13.100/32
[root@lvs ~]# service ipvsadm start		#啟動
注意:啟動如果報錯: /bin/bash: /etc/sysconfig/ipvsadm: 沒有那個文件或目錄
需要手動生成文件
[root@lvs ~]# ipvsadm -S /etc/sysconfig/ipvsadm

定義LVS分發(fā)策略

-A:添加VIP
-t:用的是tcp協(xié)議
-a:添加的是lo的vip地址
-r:轉(zhuǎn)發(fā)到realserverip
-s:算法
-L|-l –list #顯示內(nèi)核虛擬服務(wù)器表
--numeric, -n:#以數(shù)字形式輸出地址和端口號
-g --gatewaying #指定LVS工作模式為直接路由器模式(也是LVS默認(rèn)的模式)
-m  nat模式
-S -save #保存虛擬服務(wù)器規(guī)則到標(biāo)準(zhǔn)輸出,輸出為-R 選項可讀的格式
rr:輪循
如果添加ip錯了,刪除命令如下:
# ip addr del dev ens33 192.168.13.100 
[root@lvs ~]# ipvsadm -C 	#清除內(nèi)核虛擬服務(wù)器表中的所有記錄
[root@lvs ~]# ipvsadm -A -t 192.168.13.100:80 -s rr
###分發(fā)到兩臺機器
[root@lvs ~]# ipvsadm -a -t 192.168.13.100:80 -r 192.168.13.112:80 -g
[root@lvs ~]# ipvsadm -a -t 192.168.13.100:80 -r 192.168.13.115:80 -g
###保存分發(fā)策略
[root@lvs ~]# ipvsadm -S /etc/sysconfig/ipvsadm
[root@lvs ~]# 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.13.100:80 rr
  -> 192.168.13.112:80            Route   1      0          0         
  -> 192.168.13.115:80            Route   1      0          0 
###顯示統(tǒng)計信息
[root@lvs ~]# ipvsadm  -ln --stats
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port               Conns   InPkts  OutPkts  InBytes OutBytes
  -> RemoteAddress:Port
TCP  192.168.13.100:80                  36     3488        0   190186        0
  -> 192.168.13.112:80                  18     3398        0   182647        0
  -> 192.168.13.115:80                  18       90        0     7539        0

1. Conns    (connections scheduled)  已經(jīng)轉(zhuǎn)發(fā)過的連接數(shù)
2. InPkts   (incoming packets)       入包個數(shù)
3. OutPkts  (outgoing packets)       出包個數(shù)
4. InBytes  (incoming bytes)         入流量(字節(jié))  
5. OutBytes (outgoing bytes)         出流量(字節(jié))

#看速率
[root@lvs ~]# ipvsadm -ln --rate
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port                 CPS    InPPS   OutPPS    InBPS   OutBPS
  -> RemoteAddress:Port
TCP  192.168.13.100:80                   0        0        0        0        0
  -> 192.168.13.112:80                   0        0        0        0        0
  -> 192.168.13.115:80                   0        0        0        0        0

1. CPS      (current connection rate)   每秒連接數(shù)
2. InPPS    (current in packet rate)    每秒的入包個數(shù)
3. OutPPS   (current out packet rate)   每秒的出包個數(shù)
4. InBPS    (current in byte rate)      每秒入流量(字節(jié))
5. OutBPS   (current out byte rate)      每秒出流量(字節(jié))

所有RS配置

配置好網(wǎng)站服務(wù)器,測試所有RS

###real-server1機器
[root@real-server1 ~]# yum -y install nginx
[root@real-server1 ~]# vim /usr/share/nginx/html/index.html
111111111
###real-server2機器
[root@real-server2 ~]# yum -y install nginx
[root@real-server2 ~]# vim /usr/share/nginx/html/index.html
22222222

配置完成之后訪問本機 看是否能正常訪問 訪問成功之后進(jìn)行配置

在兩臺real-server機器進(jìn)行以下配置

[root@real-server1 ~]# ip a add dev ens33 192.168.13.100/32
[root@real-server1 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@real-server1 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
[root@real-server1 ~]# systemctl restart nginx

nginx關(guān)閉長連接

[root@real-server1 ~]# vim /etc/nginx/nginx.conf
    keepalive_timeout   0;

測試訪問

image-20240923214116437 image-20240923214143099

成功!!

LVS/NAT模式

準(zhǔn)備工作(集群中所有主機關(guān)閉防火墻 selinux)

在分發(fā)器中添加一個橋接網(wǎng)卡

主機名ip系統(tǒng)用途
lvs橋接
192.168.13.111 僅主機
centos7.9分發(fā)器
real-server1192.168.13.112 僅主機centos7.9web1
real-server2192.168.13.115 僅主機centos7.9web2

lvs機器安裝ipvsadm工具

[root@lvs ~]# yum -y install ipvsadm

將兩臺后端web服務(wù)器準(zhǔn)備好并測試正常訪問

real-server機器配置

###兩臺后端服務(wù)器都配置
[root@real-server1 ~]# ip r add default via 192.168.13.111		# 配置默認(rèn)路由(real—server的網(wǎng)關(guān)設(shè)置成director的DIP即可,real-server就能找到director了)

lvs機器配置

# 配置lvs-server  開啟路由轉(zhuǎn)發(fā)
[root@lvs ~]# vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
[root@lvs ~]# sysctl -p			//使添加的參數(shù)生效
(以下的ip是添加的橋接網(wǎng)卡的ip)
[root@lvs ~]# ipvsadm -A -t 10.8.165.229 :80 -s rr
設(shè)置后端服務(wù)器:
[root@lvs ~]# ipvsadm -a -t 10.8.165.229 :80 -r 192.168.13.112:80 -m
[root@lvs ~]# ipvsadm -a -t 10.8.165.229 :80 -r 192.168.72.115:80 -m
保存規(guī)則
[root@lvs ~]# ipvsadm -S > /etc/sysconfig/ipvsadm

訪問測試

[root@lvs ~]# elinks -dump http://10.8.165.229

lvs使用keepalived實現(xiàn)高可用(DR模式)

環(huán)境準(zhǔn)備

主機名ip系統(tǒng)用途
lvs-master192.168.13.111centos7.9主負(fù)載
lvs-slave192.168.13.114centos7.9主備
real-server1192.168.13.112centos7.9web1
real-server2192.168.13.115centos7.9web2

關(guān)閉所有機器防火墻和selinux

配置安裝兩臺后端web服務(wù)器并正常訪問

兩臺lvs服務(wù)器配置

[root@lvs ~]# yum -y install keepalived ipvsadm
###修改keepalived的配置文件
[root@lvs ~]# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
   router_id lvs-keepalived-master    #主備機器改為lvs-backup 兩臺機器不能一樣
}
vrrp_script check_ipvs {
   script "/etc/keepalived/ipvs.sh"  ##執(zhí)行腳本,這個腳本是用于檢測ipvsadm的狀態(tài),當(dāng)它宕機后,關(guān)閉keepalived實現(xiàn)vip漂移,達(dá)到高可用的效果
   interval 5     #五秒執(zhí)行一次
}

vrrp_instance VI_1 {
    state MASTER                    #主備機器更改為BACKUP
    interface ens33                 #VIP綁定接口
    virtual_router_id 80            #VRID 同一組集群,主備一致
    priority 100            		#本節(jié)點優(yōu)先級,主備改為50
    advert_int 1            		#檢查間隔,默認(rèn)為1s
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.13.100/24  			# 可以寫多個vip
    }
    track_script {
        check_ipvs
    }
}
virtual_server 192.168.13.100 80 {  #LVS配置
        delay_loop 3   				#故障切換的時間
        lb_algo rr     				#LVS調(diào)度算法
        lb_kind DR     				#LVS集群模式(路由模式)
        net_mask 255.255.255.0
        protocol TCP     		 	#健康檢查使用的協(xié)議
        real_server 192.168.13.112 80 { ##real-server的ip
                weight 1
                inhibit_on_failure  #當(dāng)該節(jié)點失敗時,把權(quán)重設(shè)置為0,而不是從IPVS中刪除
                TCP_CHECK {         #健康檢查
                        connect_port 80   #檢查的端口
                        connect_timeout 3  #連接超時的時間
                        }
                }
        real_server 192.168.13.115 80 {
                weight 1
                inhibit_on_failure
                TCP_CHECK {
                        connect_timeout 3
                        connect_port 80
                        }
                }
}
###編寫的腳本 并給執(zhí)行權(quán)限
[root@lvs ~]# vim /etc/keepalived/ipvs.sh
[root@lvs keepalived]# chmod +x ipvs.sh
#!/bin/bash
systemctl status ipvsadm &> /dev/null
if [ $? -ne 0 ];then
        systemctl stop keepalived
fi

###主備服務(wù)器keepalived修改
###不需要執(zhí)行腳本 當(dāng)主負(fù)載機器啟動之后vip會自動漂移到主備服務(wù)器
[root@lvs-slave ~]# vim /etc/keepalived/keepalived.conf 
! Configuration File for keepalived

global_defs {
   router_id lvs-keepalived-master    #主備機器改為lvs-backup 兩臺機器不能一樣
}

vrrp_instance VI_1 {
    state MASTER                    #主備機器更改為BACKUP
    interface ens33                 #VIP綁定接口
    virtual_router_id 80            #VRID 同一組集群,主備一致
    priority 100            		#本節(jié)點優(yōu)先級,主備改為50
    advert_int 1            		#檢查間隔,默認(rèn)為1s
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.13.100/24  			# 可以寫多個vip
    }
}
virtual_server 192.168.13.100 80 {  #LVS配置
        delay_loop 3   				#故障切換的時間
        lb_algo rr     				#LVS調(diào)度算法
        lb_kind DR     				#LVS集群模式(路由模式)
        net_mask 255.255.255.0
        protocol TCP     		 	#健康檢查使用的協(xié)議
        real_server 192.168.13.112 80 { ##real-server的ip
                weight 1
                inhibit_on_failure  #當(dāng)該節(jié)點失敗時,把權(quán)重設(shè)置為0,而不是從IPVS中刪除
                TCP_CHECK {         #健康檢查
                        connect_port 80   #檢查的端口
                        connect_timeout 3  #連接超時的時間
                        }
                }
        real_server 192.168.13.115 80 {
                weight 1
                inhibit_on_failure
                TCP_CHECK {
                        connect_timeout 3
                        connect_port 80
                        }
                }
}

后端服務(wù)器配置

添加vip

###臨時添加
[root@real-server1 ~]# ip a add dev lo 192.168.13.100
###永久添加
[root@real-server1 ~]# echo "ip addr add dev lo 192.168.13.100" >> /etc/rc.local ##開啟自動執(zhí)行
[root@real-server1 ~]# source /etc/rc.local  ##手動執(zhí)行
[root@real-server1 ~]# vim /etc/sysctl.conf 
[root@real-server1 ~]# sysctl -p
net.ipv4.conf.all.arp_ignore = 1    ##關(guān)閉接收arp組播
net.ipv4.conf.all.arp_announce = 2  ##精確匹配IP 在多網(wǎng)卡環(huán)境中更智能地處理 ARP 請求,避免使用不合適的地址。

測試

1.啟動主負(fù)載和主備服務(wù)器中的ipvsadm和keepalived

[root@lvs ~]# systemctl start keepalived ipvsadm
查看主負(fù)載中是否有虛擬ip

1.關(guān)閉主負(fù)載的ipvsadm,開啟主備服務(wù)器

查看主備服務(wù)器是否有虛擬ip 如果有說明ip漂移成功 實現(xiàn)了高可用

MySQL使用keepalived實現(xiàn)高可用

環(huán)境準(zhǔn)備

lvs 192.168.13.111 主負(fù)載機器

lvs-slave 192.168.13.114 主備服務(wù)器

準(zhǔn)備兩臺MySQL機器并做互為主從配置(過程略)

keepalived配置

###兩臺機器都安裝keepalived
[root@lvs ~]# yum -y install keepalived
[root@lvs ~]# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
   router_id master ###兩臺服務(wù)器的名字不同
}
vrrp_script check_run {
   script "/etc/keepalived/keepalived_check_mysql.sh"  ###執(zhí)行檢測mysql狀態(tài)的腳本
   interval 5
}

vrrp_instance VI_1 {
    state MASTER   ###兩臺機器不同
    interface ens33
    virtual_router_id 89	###集群組ID相同
    priority 100 	###主負(fù)載優(yōu)先級要大于主備服務(wù)器
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.13.100/24	###虛擬IP
    }
    track_script {
        check_run   ##調(diào)用腳本 主備服務(wù)器不需要執(zhí)行腳本 主備服務(wù)器的配置文件可以去掉腳本的配置
    }
}
###主備服務(wù)器
[root@lvs-slave ~]# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
   router_id backup
}

vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    virtual_router_id 89
    priority 50
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.13.100/24
    }
}

主負(fù)載服務(wù)器腳本編寫

[root@lvs ~]# vim /etc/keepalived/keepalived_check_mysql.sh
#!/bin/bash
/usr/bin/mysql -uroot -p'12QW!@qw' -e 'show status' &> /dev/null
if [ $? -ne 0 ];then
        systemctl stop keepalived
fi
[root@lvs ~]# chmod +x /etc/keepalived/keepalived_check_mysql.sh

###啟動測試

1.啟動MySQL和keepalived進(jìn)行測試 結(jié)果:主負(fù)載服務(wù)器要有VIP

2.關(guān)閉主負(fù)載服務(wù)器的MySQL進(jìn)行VIP漂移 結(jié)果:主備服務(wù)器中要有VIP

3.重啟主備服務(wù)器的MySQL和keepalived 結(jié)果:VIP要漂移到主備服務(wù)器

HAproxy使用keepalived實現(xiàn)高可用

七層負(fù)載模型

環(huán)境準(zhǔn)備

haproxy-master 192.168.13.111 主負(fù)載

haproxy-slave 192.168.13.114 主備

real-server1 192.168.13.112 nginx后端web服務(wù)器

real-server2 192.168.13.115 nginx后端web服務(wù)器

搭建負(fù)載均衡

后端web服務(wù)器使用nginx,測試顯示出頁面(略)

haproxy服務(wù)器配置

###根據(jù)自己的服務(wù)器進(jìn)行修改
[root@haproxy-master ~]# vim /etc/haproxy/haproxy.cfg
global
    log         127.0.0.1 local2 info
    pidfile     /var/run/haproxy.pid
    maxconn     4000   #優(yōu)先級低
    user        haproxy
    group       haproxy
    daemon               #以后臺形式運行ha-proxy
    nbproc 1                #工作進(jìn)程數(shù)量  cpu內(nèi)核是幾就寫幾
defaults
    mode                    http  #工作模式 http ,tcp 是 4 層,http是 7 層       
    log                     global
    retries                 3   #健康檢查。3次連接失敗就認(rèn)為服務(wù)器不可用,主要通過后面的check檢查
    option                  redispatch  #服務(wù)不可用后重定向到其他健康服務(wù)器。
    maxconn                 4000  #優(yōu)先級中
    contimeout              5000  #ha服務(wù)器與后端服務(wù)器連接超時時間,單位毫秒ms
    clitimeout              50000 #客戶端超時
    srvtimeout              50000 #后端服務(wù)器超時
listen stats
    bind                        *:80
    stats                       enable
    stats uri                   /haproxy  #使用瀏覽器訪問 http://192.168.13.111/haproxy,可以看到服務(wù)器狀態(tài)(uri不
可改變)  
    stats auth                  boforest:123  #用戶認(rèn)證,客戶端使用elinks瀏覽器的時候不生效
frontend  web
    mode                        http
    bind                            *:80   #監(jiān)聽哪個ip和什么端口
    option                  httplog             #日志類別 http 日志格式
    acl html url_reg  -i  \.html$  #1.訪問控制列表名稱html。規(guī)則要求訪問以html結(jié)尾的url
    use_backend httpservers if  html #2.如果滿足acl html規(guī)則,則推送給后端服務(wù)器httpservers
    default_backend    httpservers   #默認(rèn)使用的服務(wù)器組
backend httpservers    #名字要與上面的名字必須一樣
    balance     roundrobin  #負(fù)載均衡的方式
    server  http1 192.168.13.112:80 maxconn 2000 weight 1  check inter 1s rise 2 fall 2
    server  http2 192.168.13.115:80 maxconn 2000 weight 1  check inter 1s rise 2 fall 2

保存退出進(jìn)行測試 訪問haproxy服務(wù)器的IP 結(jié)果:要能跳轉(zhuǎn)到后端服務(wù)器

搭建HAproxy高可用

###兩臺機器都安裝keepalived
[root@haproxy-master ~]# yum -y install keepalived
! Configuration File for keepalived

global_defs {
   router_id master ###兩臺服務(wù)器的名字不同
}
vrrp_script check_haproxy {
   script "/etc/keepalived/haproxy.sh"  ###執(zhí)行檢測mysql狀態(tài)的腳本
   interval 5
}

vrrp_instance VI_1 {
    state MASTER   ###兩臺機器不同
    interface ens33
    virtual_router_id 89	###集群組ID相同
    priority 100 	###主負(fù)載優(yōu)先級要大于主備服務(wù)器
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.13.100/24	###虛擬IP
    }
    track_script {
        check_haproxy   ##調(diào)用腳本 主備服務(wù)器不需要執(zhí)行腳本 主備服務(wù)器的配置文件可以去掉腳本的配置
    }
}

###主備服務(wù)器配置
[root@haproxy-slave ~]# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
   router_id backup
}

vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    virtual_router_id 89
    priority 50
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.13.100/24
    }
}

###啟動測試

1.啟動HAproxy和keepalived進(jìn)行測試 結(jié)果:主負(fù)載服務(wù)器要有VIP

2.關(guān)閉主負(fù)載服務(wù)器的HAproxy進(jìn)行VIP漂移 結(jié)果:主備服務(wù)器中要有VIP

3.重啟主備服務(wù)器的HAproxy和keepalived 結(jié)果:VIP要漂移到主備服務(wù)器

四層負(fù)載模型

主負(fù)載和主備服務(wù)器中HAproxy配置文件修改

###兩臺服務(wù)器均配置
[root@haproxy-master ~]# vim /etc/haproxy/haproxy.cfg
global
    log         127.0.0.1 local2 info
    pidfile     /var/run/haproxy.pid
    maxconn     4000
    user        haproxy
    group       haproxy
    daemon
    nbproc      1  # 工作進(jìn)程數(shù)量

defaults
    mode                    tcp  # 設(shè)置為 TCP 模式
    log                     global
    retries                 3  # 健康檢查重試次數(shù)
    option                  redispatch  # 服務(wù)不可用時重定向到其他健康服務(wù)器
    maxconn                 4000  # 最大連接數(shù)
    contimeout              5000  # HAProxy 與后端服務(wù)器連接超時(毫秒)
    clitimeout              50000  # 客戶端超時
    srvtimeout              50000  # 后端服務(wù)器超時

listen stats
    bind                    *:80
    stats                   enable
    stats uri               /haproxy  # 狀態(tài)頁面的 URI
    stats auth              boforest:123  # 用戶認(rèn)證

frontend web
    mode                    tcp  # 設(shè)置為 TCP 模式
    bind                    *:80  # 監(jiān)聽所有 IP 的 80 端口
    default_backend         httpservers  # 默認(rèn)后端服務(wù)器組

backend httpservers
    mode                    tcp  # 后端也設(shè)置為 TCP 模式
    balance                 roundrobin  # 負(fù)載均衡方式
    server http1           192.168.13.112:80 maxconn 2000 weight 1 check inter 1s rise 2 fall 2
    server http2           192.168.13.115:80 maxconn 2000 weight 1 check inter 1s rise 2 fall 2

###將配置文件發(fā)送到主備服務(wù)器
[root@haproxy-master ~]# scp /etc/haproxy/haproxy.cfg 192.168.13.114:/etc/haproxy/

配置完成 其余不變