目錄
一、環境搭建
1.環境準備
2.安裝ipvsadm 和 安裝 keepalived(Lvs服務器)
3.為兩臺RS配置虛擬ip(nginx服務器)
1.配置虛擬網絡子接口(回環接口)
2.修改內容如下:
3.配置ARP
二、Keepalived+Lvs+Nginx高可用集群負載均衡的搭建
1. 配置 LVS-keepalived(主)
2. 配置Lvs-keepalived(備)
3、檢查服務和配置
4. 測試
1.測試Lvs
2.測試nginx
一、環境搭建
1.環境準備
HOSTNAME | IP | 說明 |
---|---|---|
nginx | 192.168.100.10 | nginx服務器 |
nginx | 192.168.100.11 | nginx服務器 |
Lvs+keepalived(主) | 192.168.100.100 | Lvs+keepalived(VIP:192.168.100.109) |
Lvs+keepalived(備) | 192.168.100.101 | Lvs+keepalived(VIP:192.168.100.109) |
并關閉防火墻和安全上下文? ? ? ?
所有計算機節點關閉網絡配置管理器,因為有可能會和網絡接口沖突:
systemctl stop NetworkManager
2.安裝ipvsadm 和 安裝 keepalived(Lvs服務器)
yum install ipvsadm -y
yum install keepalived -y
安裝成功進行檢測
[root@lvs1 ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port Forward Weight ActiveConn InActConn[root@lvs2 ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port Forward Weight ActiveConn InActConn
3.為兩臺RS配置虛擬ip(nginx服務器)
1.配置虛擬網絡子接口(回環接口)
(兩臺服務器配置一樣,以下已一臺服務器配置作為演示)
配置虛擬網絡子接口可以理解為構建一個虛擬ip,這個ip只能返回數據,不能被訪問。
1.進入到網卡配置目錄,找到 lo(本地環回接口,用戶構建虛擬網絡子接口),拷貝一份新的隨后進行修改:
2.修改內容如下:
(注意:由于沒有多的網卡,一下是臨時配置在lo下)
root@web1 network-scripts]# ifconfig lo:0 192.168.100.109/32
[root@web1 network-scripts]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet 192.168.100.109/0 scope global lo:0valid_lft forever preferred_lft foreverinet6 ::1/128 scope host noprefixroute valid_lft forever preferred_lft forever
3.重啟后通過ip addr 查看如下,表示ok:
[root@web1 network-scripts]# ifup lo
連接已成功激活(D-Bus 活動路徑:/org/freedesktop/NetworkManager/ActiveConnection/6)
另一臺nginx服務配置同上(web2)
3.配置ARP
1.打開sysctl.conf
vim /etc/sysctl.conf
2.配置所有網卡、默認網卡以及虛擬網卡的arp響應級別和通告行為,分別對應:all,default,lo
[root@web1 ~]# vim /etc/sysctl.conf #添加配置如下
net.ipv4.conf.all.arp_ignore=1
net.ipv4.conf.all.arp_announce=2
net.ipv4.conf.default.arp_ignore=1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce=2
3.刷新配置
sysctl -p
4.增加一個網關,用于接收數據報文,當有請求到本機后,會交給lo去處理
[root@web1 ~]# route add -host 192.168.100.109 dev lo:0
5.防止重啟失效,做如下處理,用于開機自啟動
vim /etc/profile
route add -host 192.168.100.109 dev lo:0
nginx服務器web2同上操作
二、Keepalived+Lvs+Nginx高可用集群負載均衡的搭建
這種架構目前在很多公司都在采用的高可用高性能架構, 優點如下:
-
使用Keepalived + Lvs 后可以實現主備切換高可用
-
結合了Lvs 后, 針對于后臺的Real Server 這些真實的服務器做健康檢查, 如果某臺真實的服務器宕機后, Lvs就會自動剔除, 如果恢復后也可以自動加入.
-
其實 Keepalived 本身就是為 Lvs 定做了, 他們的匹配度, 結合度非常高, 通過 keepalivd 就可以配置 Lvs與 RS 的關系, 如負載均衡算法, 健康檢查配置等.
1. 配置 LVS-keepalived(主)
1、keepalived配置文件, 修改配置信息
cd /etc/keepalived
vim keepalived.conf
配置文件如下:
! Configuration File for keepalivedglobal_defs {router_id LVS1
}vrrp_instance VI_1 {state MASTERinterface ens33virtual_router_id 51priority 100advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.100.109}
}
# LVS 配置: 配置集群訪問的 IP+端口, 端口和nginx保持一致, 都是80, IP與端口是空格而不是冒號
virtual_server 192.168.100.109 80 {# 健康檢查的時間, 單位是秒delay_loop 6# 配置負載均衡的算法, 默認是 輪詢lb_algo rr# 設置LVS的工作模式 NAT|TUN|DR lb是load_balance 負載均衡的縮寫lb_kind DR# 會話持久化的時間, 默認是 50 秒persistence_timeout 5# 協議 -tprotocol TCP# Real Server 配置 nginx服務ip+端口real_server 192.168.100.10 80 {# 輪詢的權重, 默認有多少臺, 就設置為多少個 1weight 1# 設置健康檢查, 基于 tcpTCP_CHECK {# 檢查的80端口connect_port 80# 檢查的超時時間 2秒connect_timeout 2# 重試的次數 我們設置為2, 一般是5-7nb_get_retry 2# 設置間隔時間 3sdelay_before_retry 3}}real_server 192.168.100.11 80 {weight 1# 設置健康檢查, 基于 tcpTCP_CHECK {# 檢查的80端口connect_port 80# 檢查的超時時間 2秒connect_timeout 2# 重試的次數 我們設置為2, 一般是5-7nb_get_retry 2# 設置間隔時間 3sdelay_before_retry 3}}
}
清除負載均衡的規則
[root@lvs1 keepalived]# ipvsadm -C
重啟keepalived, 使得配置生效
[root@lvs1 keepalived]# systemctl restart keepalived.service
2. 配置Lvs-keepalived(備)
步驟同 LVS-keepalived(主)一樣?,只有配置文件不一樣
vim? /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {#主服務器配置不同,名稱隨便起router_id LVS2
}vrrp_instance VI_1 {#主服務器配置不同state BACKUPinterface ens33virtual_router_id 51#主服務器配置不同,權重需要比主服務器低priority 90advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.100.109}
}
# LVS 配置: 配置集群訪問的 IP+端口, 端口和nginx保持一致, 都是80, IP與端口是空格而不是冒號
virtual_server 192.168.100.109 80 {# 健康檢查的時間, 單位是秒delay_loop 6# 配置負載均衡的算法, 默認是 輪詢lb_algo rr# 設置LVS的工作模式 NAT|TUN|DR lb是load_balance 負載均衡的縮寫lb_kind DR# 會話持久化的時間, 默認是 50 秒persistence_timeout 5# 協議 -tprotocol TCP# Real Server 配置 nginx服務ip+端口real_server 192.168.100.10 80 {# 輪詢的權重, 默認有多少臺, 就設置為多少個 1weight 1# 設置健康檢查, 基于 tcpTCP_CHECK {# 檢查的80端口connect_port 80# 檢查的超時時間 2秒connect_timeout 2# 重試的次數 我們設置為2, 一般是5-7nb_get_retry 2# 設置間隔時間 3sdelay_before_retry 3}}real_server 192.168.100.11 80 {weight 1# 設置健康檢查, 基于 tcpTCP_CHECK {# 檢查的80端口connect_port 80# 檢查的超時時間 2秒connect_timeout 2# 重試的次數 我們設置為2, 一般是5-7nb_get_retry 2# 設置間隔時間 3sdelay_before_retry 3}}
}
改完配置文件,進行重啟keeplivaed,命令同上!
[root@lvs2 keepalived]# vim keepalived.conf
[root@lvs2 keepalived]# systemctl restart keepalived.service
3、檢查服務和配置
? ? ?3.1? OpenEuler里自帶ipvsadm模塊兒 (主和備都需要做)
此時需啟動它,得先創建一個ipvsadm文件
[root@lvs1 keepalived]# touch /etc/sysconfig/ipvsadm
[root@lvs1 keepalived]# systemctl start ipvsadm
[root@lvs1 keepalived]# lsmod | grep ip_vs
ip_vs_rr 12288 0
ip_vs 229376 2 ip_vs_rr
nf_conntrack 212992 1 ip_vs
nf_defrag_ipv6 24576 2 nf_conntrack,ip_vs
libcrc32c 12288 2 nf_conntrack,ip_vs
[root@lvs1 keepalived]# systemctl status ipvsadm
● ipvsadm.service - Initialise the Linux Virtual ServerLoaded: loaded (/usr/lib/systemd/system/ipvsadm.service; disabled; preset: disabl>Active: active (exited) since Tue 2025-07-15 16:49:31 CST; 35s agoProcess: 29784 ExecStart=/bin/bash -c exec /sbin/ipvsadm-restore < /etc/sysconfig/>Main PID: 29784 (code=exited, status=0/SUCCESS)7月 15 16:49:31 lvs1 systemd[1]: Starting Initialise the Linux Virtual Server...
7月 15 16:49:31 lvs1 systemd[1]: Finished Initialise the Linux Virtual Server.
? ? ? ? 3.2? ?檢查web1 和web2(兩臺Rs) 的(nginx服務是否啟用)
? ? ? ? ? ? ? ? 檢查web1 和 web2? 配置網卡信息是否正確(? lo? )
? ? ? ? 3.3? 加載主和備 keepalived.conf
[root@lvs1 keepalived]# systemctl restart keepalived.service
[root@lvs2 keepalived]# systemctl restart keepalived.service
? ? ? ? 3.4? 加載ip_vs模塊
[root@lvs1]# modprobe ip_vs
[root@lvs2]# modprobe ip_vs
重啟完出現相同路由規則標識已配置成功
[root@lvs1 keepalived]# 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.100.109:80 rr persistent 50-> 192.168.100.10:80 Route 1 0 0 -> 192.168.100.11:80 Route 1 0 0
4. 測試
1.測試Lvs
訪問192.168.100.109? ?可以正常訪問
停掉 LVS 的 Master 節點
[root@lvs1 keepalived]# systemctl stop keepalived.service
觀察主節點LVS節點 IP
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000link/ether 00:0c:29:6a:66:62 brd ff:ff:ff:ff:ff:ffinet 192.168.100.100/24 brd 192.168.100.255 scope global noprefixroute ens33valid_lft forever preferred_lft foreverinet6 fe80::20c:29ff:fe6a:6662/64 scope link noprefixroute valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000link/ether 00:0c:29:6a:66:62 brd ff:ff:ff:ff:ff:ffinet 192.168.100.100/24 brd 192.168.100.255 scope global noprefixroute ens33valid_lft forever preferred_lft foreverinet 192.168.100.109/32 scope global ens33valid_lft forever preferred_lft foreverinet6 fe80::20c:29ff:fe6a:6662/64 scope link noprefixroute valid_lft forever preferred_lft forever
重啟Master 節點,我們發現ip又漂移回來了
2.測試nginx
我們關閉10節點的Nginx服務器(假如宕機狀態)
[root@web1 keepalived]# systemctl stop nginx
進入master節點進行查看集群信息
[root@lvs1 keepalived]# 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.100.109:80 rr persistent 50-> 192.168.100.11:80 Route 1 0 0