linux系統------LVS+KeepAlived+Nginx高可用方案

目錄

一、環境搭建

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.環境準備

HOSTNAMEIP說明
nginx192.168.100.10nginx服務器
nginx192.168.100.11nginx服務器
Lvs+keepalived(主)192.168.100.100Lvs+keepalived(VIP:192.168.100.109)
Lvs+keepalived(備)192.168.100.101Lvs+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高可用集群負載均衡的搭建

這種架構目前在很多公司都在采用的高可用高性能架構, 優點如下:

  1. 使用Keepalived + Lvs 后可以實現主備切換高可用

  2. 結合了Lvs 后, 針對于后臺的Real Server 這些真實的服務器做健康檢查, 如果某臺真實的服務器宕機后, Lvs就會自動剔除, 如果恢復后也可以自動加入.

  3. 其實 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 

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/915255.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/915255.shtml
英文地址,請注明出處:http://en.pswp.cn/news/915255.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【MySQL】性能優化實戰指南:釋放數據庫潛能的藝術

文章目錄MySQL性能優化實戰指南&#xff1a;釋放數據庫潛能的藝術&#x1f680; 引言為什么需要MySQL性能優化&#xff1f;&#x1f4cb; 性能優化基礎知識MySQL性能瓶頸分析1. 硬件資源瓶頸2. MySQL內部瓶頸&#x1f3c6; 優化配置策略大全&#x1f4be; 內存配置優化InnoDB緩…

Unity 3D碰撞器

在Unity中&#xff0c;碰撞器&#xff08;Collider&#xff09;是用于檢測物體之間碰撞的組件&#xff0c;它們定義了物體的物理邊界。碰撞器與剛體&#xff08;Rigidbody&#xff09;配合使用&#xff0c;實現物理模擬。下面我將按您的要求&#xff0c;從碰撞器的種類、常用參…

Windows批處理實現帶時間戳ping

windows環境 &#xff0c; 將以下代碼保存為 .bat文件 echo off echo.---------------------------------------------------------- echo.----------------------------------------------------------- echo off set /p hostplease input your destination ip : set logfi…

GeoPandas 城市規劃:Python 空間數據初學者指南

安裝和設置 在深入研究數據之前&#xff0c;我們需要準備好工具。設置 GeoPandas 及其必要的依賴項是第一步。 我們將在 Google Colab 中完成此操作。 !pip install geopandas contextily matplotlib 空間數據有多種格式&#xff0c;但 GeoJSON 是常見且易于訪問的格式。Ge…

力扣面試150題--環形子數組的最大和

Day 80 題目描述思路 初次做法&#xff1a;在昨天代碼的基礎上修改 計算普通子數組的最大和 使用動態規劃計算以每個位置為起點的最大子數組和&#xff08;存儲在 val 中&#xff09;&#xff0c;并更新全局最大值 rightmax。計算后綴和與前綴和 sum[i]&#xff1a;從位置 i 到…

python類Keys

類Keys的定義:Elass Keys (object): 程軒開Set of special keys codes.#n# 第 15 章 網絡爬蟲 合情些準出照地限公軹 esms0 pro 瘀 Δ器代芻奄燉慧 圖 15-39 工件肉業魚光得 國有上子 理人場營&#xff0c;有司;可有B 相關圍書 圖 15-40 頁源代碼 ython". 名可能不鞋 NUL…

svn如何設置忽略文件夾或者文件的提交

使用svn&#xff0c;每次提交代碼時&#xff0c;都會把java的編譯文件target&#xff0c;或者前端的node_modules&#xff0c;dist等不需要提交的目錄或這文件&#xff0c;列出來實現。通過配置svn&#xff0c;可以在提交代碼時&#xff0c;自動忽略這些不需要提交到倉庫的文件…

MonoGame 游戲開發框架日記 -06

第六章&#xff1a;動畫類以及動畫精靈 好久不見家人們好久沒更新MonoGame系列了&#xff0c;不是主包棄坑了&#xff0c;主要是主包最近忙著搞項目學科一找暑假工打&#xff0c;這不一閑下來就立刻馬不停蹄的來給大家更新了&#xff0c;今天的教程代碼部分比較多接下來我們正式…

LVS四種工作模式深度解析

LVS&#xff08;linux virual server&#xff09;LVS四種工作模式深度解析 LVS-NAT模式 四臺虛擬機 火墻關閉 關閉火墻 systemctl stop firewalldsystemctl disable firewalld關閉開機自啟火墻1.clienteth0 IP&#xff1a;172.25.254.1002.lvs eth0ip :172.25.254.200; eth1ip:…

[設計模式]C++單例模式的幾種寫法以及通用模板

之前在這篇文章中簡單的介紹了一下單例模式的作用和應用C中單例模式詳解_c單例模式的作用-CSDN博客&#xff0c;今天我將在在本文梳理單例模式從C98到C11及以后的演變過程&#xff0c;探討其不同實現方式的優劣&#xff0c;并介紹在現代C中的最佳實踐。 什么是單例模式&#x…

小架構step系列19:請求和響應

1 概述作為Web程序&#xff0c;通用形式是發起HTTP請求并獲取返回的結果&#xff0c;在這個過程中&#xff0c;需要把請求映射到代碼的接口上&#xff0c;提供這種接口的類一般稱為Controller&#xff0c;也就是需要把請求映射到Controller的接口方法上&#xff0c;把請求的參數…

論文分享 | LABRADOR:響應引導的針對物聯網設備的黑盒模糊測試

由于固件仿真以及重托管的技術挑戰&#xff0c;部分企業級 IoT 設備只能在黑盒環境下進行模糊測試。分享一篇發表于 2024 年 S&P 會議的論文 Labrador&#xff0c;它利用響應來引導請求變異&#xff0c;實現了針對 IoT 設備的高效黑盒模糊測試。 猴先生說&#xff1a;這篇論…

WPF為啟動界面(Splash Screen)添加背景音樂

1. 添加音頻文件到項目 將音頻文件&#xff08;如.mp3/.wav&#xff09;放入項目文件夾&#xff08;如Resources&#xff09;在解決方案資源管理器中右鍵文件 → 屬性&#xff1a; 生成操作&#xff1a;選擇Resource&#xff08;嵌入資源&#xff09;或Content&#xff08;內容…

【Jmeter】報錯:An error occured:Unknown arg

問題 調試Jmeter時&#xff0c;報錯&#xff1a;‘An error occurred: Unknown arg: l’&#xff0c;腳本如下&#xff1a; $JMETER_PATH -n -t "$target_jmx" -l "$SCENARIO_REPORT_DIR/result_${threads}.jtl" -e -o "$SCENARIO_REPORT_DIR/htm…

vue3使用KeepAlive組件及一些注意事項

目錄 一、KeepAlive的作用 二、緩存組件配置 2.1、過濾緩存組件 2.2、最大緩存實例數 三、KeepAlive組件的生命周期 四、錯誤用法 4.1、緩存v-if包裹的動態組件 4.2、拼寫錯誤 一、KeepAlive組件的作用 首先&#xff0c;keep-alive是一個vue的內置組件&#xff0c;官網…

辛普森悖論

辛普森悖論第一步&#xff1a;概念拆解想象你在比較兩個班級的考試成績&#xff1a;?第一天?&#xff1a;實驗組&#xff08;1個學生考了90分&#xff09;&#xff0c;對照組&#xff08;99個學生平均考了80分&#xff09;?第二天?&#xff1a;實驗組&#xff08;50個學生平…

有效的括號數據結構oj題(力口20)

目錄 目錄 題目描述 題目分析解析 解決代碼 寫題感悟&#xff1a; 題目描述 還有實例 題目分析解析 對于這個題目&#xff0c;我們首先有效字符串需要滿足什么&#xff0c;第一個左右括號使用相同類型的括號&#xff0c;這好理解&#xff0c;無非就是小括號和小括號大括號…

Mock 單元測試

作者&#xff1a;小凱 沉淀、分享、成長&#xff0c;讓自己和他人都能有所收獲&#xff01; 本文的宗旨在于通過簡單干凈實踐的方式教會讀者&#xff0c;如何使用 Mock (opens new window)進行工程的單元測試&#xff0c;以便于驗證系統中的獨立模塊功能的健壯性。 從整個工程所…

MySQL 深度性能優化配置實戰指南

?? 一、硬件與系統層優化:夯實性能基石 ??硬件選型策略?? ??CPU??:讀密集型場景選擇多核CPU(如32核);寫密集型場景選擇高主頻CPU(如3.5GHz+)。 ??內存??:建議≥64GB,??緩沖池命中率≥99%?? 是性能關鍵指標。 ??存儲??:??必用NVMe SSD??,I…

Visual Studio Code(VSCode)中設置中文界面

在VS Code中設置中文界面主要有兩種方法&#xff1a;通過擴展市場安裝中文語言包或通過命令面板直接切換語言。?方法一&#xff1a;通過擴展市場安裝中文語言包?打開VS Code&#xff0c;點擊左側活動欄的"擴展"圖標&#xff08;或按CtrlShiftX&#xff09;。在搜索…