1. 總結(jié)日志分類, 優(yōu)先級別。圖文并茂解釋應(yīng)用如何將日志發(fā)到rsyslog,并寫到目標(biāo)。
- 日志分類
#內(nèi)置分類
auth, authpriv, cron, daemon,ftp,kern, lpr, mail, news, security(auth),
user(default), uucp, syslog
#自定義的分類
local0-local7
- Priority 優(yōu)先級別,從低到高排序
debug,info, notice, warn(warning), err(error), crit(critical), alert,
emerg(panic)
- 圖文并茂解釋應(yīng)用如何將日志發(fā)到rsyslog,并寫到目標(biāo)
#進(jìn)配置文件
[root@ubuntu200 ~J$vim /etc/rsyslog.d/50-default.conf
修改info以上級別日志存放到/var/log/syslog中

image.png
#重啟日志服務(wù)
[root@ubuntu200 ~J$systemctl restart rsyslog.service
#查看日志
[root@ubuntu200 ~J$tail /var/log/syslog

image.png
2.完成功能,sshd應(yīng)用將日志寫到rsyslog的local6分類,過濾所有級別,寫入到/var/log/ssh.log。
#更改ssh的log日志定制單獨存到sshd.log里
#進(jìn)sshd的配置文件添加日志寫到local6
[root@ubuntu200 ~J$vim /etc/ssh/sshd_config
SyslogFacility LOCAL6
#進(jìn)默認(rèn)配置文件,將local6.* 寫入/var/log/ssh.log中
[root@ubuntu200 ~J$vim /etc/rsyslog.d/50-default.conf
local6.* /var/log/ssh.log
#重啟sshd和rsyslog服務(wù)
[root@ubuntu200 ~J$systemctl restart sshd rsyslog
#查看日志
[root@ubuntu200 ~J$tail -f /var/log/ssh.log

image.png
3. 完成功能,將3個主機(jī)(要求主機(jī)名為ip)的ssh日志,通過rsyslog服務(wù)將ssh日志寫入到集中的主機(jī)上的rsyslog服務(wù),寫入到/var/log/all-ssh.log文件
#修改服務(wù)器日志配置文件,打開udp514端口
[root@ubuntu200 ~J$vim /etc/rsyslog.conf
module(load="imudp")
input(type="imudp" port="514")
[root@ubuntu200 htmlJ$vim /etc/rsyslog.d/50-default.conf
local6.* /var/log/all-ssh.log
#重啟日志服務(wù)使其生效
[root@ubuntu200 ~J$systemctl restart rsyslog.service
#查看端口,確認(rèn)udp514已開啟
[root@ubuntu200 ~J$ss -ntlu

image.png
#客戶端10.0.0.8安裝日志服務(wù)
[root@rocky8 ~]# yum -y install rsyslog
#客戶端10.0.0.8修改配置文件
[root@rocky8 ~]# vim /etc/ssh/sshd_config
SyslogFacility LOCAL6
[root@rocky8 ~]# vim /etc/rsyslog.conf
*.info @10.0.0.200
#客戶端10.0.0.200重啟ssh和rsyslog服務(wù)
[root@rocky8 ~]# systemctl restart rsyslog.service sshd
#其他兩臺客戶端配置同上
#查看日志
[root@ubuntu200 htmlJ$tail -f /var/log/all-ssh.log

image.png
4. 總結(jié)/var/log/目錄下常用日志文件作用。
- /var/log/secure,/var/log/auth.log:系統(tǒng)安全日志,文本格式,應(yīng)周期性分析
- /var/log/btmp:當(dāng)前系統(tǒng)上,用戶的失敗嘗試登錄相關(guān)的日志信息,二進(jìn)制格式,lastb命令進(jìn)行查看
- /var/log/wtmp:當(dāng)前系統(tǒng)上,用戶正常登錄系統(tǒng)的相關(guān)日志信息,二進(jìn)制格式,last命令可以查看
- /var/log/lastlog:每一個用戶最近一次的登錄信息,二進(jìn)制格式,lastlog命令可以查看
- /var/log/dmesg:CentOS7 之前版本系統(tǒng)引導(dǎo)過程中的日志信息,文本格式,開機(jī)后的硬件變化將不再記 錄,也可以通過專用命令dmesg查看,可持續(xù)記錄硬件變化的情況
- /var/log/boot.log 系統(tǒng)服務(wù)啟動的相關(guān)信息,文本格式,Ubuntu無此文件 /var/log/messages(紅帽系統(tǒng)),/var/log/syslog (Ubuntu) :系統(tǒng)中大部分的信息
- /var/log/anaconda : anaconda的日志,Ubuntu無此文件
5. 總結(jié)journalctl命令的選項及示例
選項說明:
--no-full, --full, -l
如果字段內(nèi)容超長則以省略號(...)截斷以適應(yīng)列寬。
默認(rèn)顯示完整的字段內(nèi)容(超長的部分換行顯示或者被分頁工具截斷)。
老舊的 -l/--full 選項 僅用于撤銷已有的 --no-full 選項,除此之外沒有其他用處。
-a, --all
完整顯示所有字段內(nèi)容, 即使其中包含不可打印字符或者字段內(nèi)容超長。
-f, --follow
只顯示最新的日志項,并且不斷顯示新生成的日志項。 此選項隱含了 -n 選項。
-e, --pager-end
在分頁工具內(nèi)立即跳轉(zhuǎn)到日志的尾部。 此選項隱含了 -n1000
以確保分頁工具不必緩存太多的日志行。 不過這個隱含的行數(shù)可以被明確設(shè)置的 -n
選項覆蓋。 注意,此選項僅可用于 less(1) 分頁器。
-n, --lines=
限制顯示最新的日志行數(shù)。 --pager-end 與 --follow 隱含了此選項。
此選項的參數(shù):若為正整數(shù)則表示最大行數(shù); 若為 "all" 則表示不限制行數(shù);
若不設(shè)參數(shù)則表示默認(rèn)值10行。
--no-tail
顯示所有日志行, 也就是用于撤銷已有的 --lines= 選項(即使與 -f 連用)。
-r, --reverse
反轉(zhuǎn)日志行的輸出順序, 也就是最先顯示最新的日志。
-o, --output=
控制日志的輸出格式。 可以使用如下選項:
short
這是默認(rèn)值, 其輸出格式與傳統(tǒng)的 syslog[1] 文件的格式相似, 每條日志一行。
short-iso
與 short 類似,只是將時間戳字段以 ISO 8601 格式顯示。
short-precise
與 short 類似,只是將時間戳字段的秒數(shù)精確到微秒級別。
short-monotonic
與 short 類似,只是將時間戳字段的零值從內(nèi)核啟動時開始計算。
short-unix
與 short 類似,只是將時間戳字段顯示為從"UNIX時間原點"(1970-1-1 00:00:00
UTC)以來的秒數(shù)。 精確到微秒級別。
verbose
以結(jié)構(gòu)化的格式顯示每條日志的所有字段。
export
將日志序列化為二進(jìn)制字節(jié)流(大部分依然是文本) 以適用于備份與網(wǎng)絡(luò)傳輸(詳見
Journal Export Format[2] 文檔)。
json
將日志項按照J(rèn)SON數(shù)據(jù)結(jié)構(gòu)格式化, 每條日志一行(詳見 Journal JSON Format[3]
文檔)。
json-pretty
將日志項按照J(rèn)SON數(shù)據(jù)結(jié)構(gòu)格式化, 但是每個字段一行, 以便于人類閱讀。
json-sse
將日志項按照J(rèn)SON數(shù)據(jù)結(jié)構(gòu)格式化,每條日志一行,但是用大括號包圍, 以適應(yīng)
Server-Sent Events[4] 的要求。
cat
僅顯示日志的實際內(nèi)容, 而不顯示與此日志相關(guān)的任何元數(shù)據(jù)(包括時間戳)。
--utc
以世界統(tǒng)一時間(UTC)表示時間
--no-hostname
不顯示來源于本機(jī)的日志消息的主機(jī)名字段。 此選項僅對 short
系列輸出格式(見上文)有效。
-x, --catalog
在日志的輸出中增加一些解釋性的短文本, 以幫助進(jìn)一步說明日志的含義、
問題的解決方案、支持論壇、 開發(fā)文檔、以及其他任何內(nèi)容。
并非所有日志都有這些額外的幫助文本, 詳見 Message Catalog Developer
Documentation[5] 文檔。
注意,如果要將日志輸出用于bug報告, 請不要使用此選項。
-q, --quiet
當(dāng)以普通用戶身份運(yùn)行時, 不顯示任何警告信息與提示信息。 例如:"-- Logs begin at
...", "-- Reboot --"
-m, --merge
混合顯示包括遠(yuǎn)程日志在內(nèi)的所有可見日志。
-b [ID][±offset], --boot=[ID][±offset]
顯示特定于某次啟動的日志, 這相當(dāng)于添加了一個 "_BOOT_ID=" 匹配條件。
如果參數(shù)為空(也就是 ID 與 ±offset 都未指定), 則表示僅顯示本次啟動的日志。
如果省略了 ID , 那么當(dāng) ±offset 是正數(shù)的時候, 將從日志頭開始正向查找,
否則(也就是為負(fù)數(shù)或零)將從日志尾開始反響查找。 舉例來說, "-b
1"表示按時間順序排列最早的那次啟動, "-b 2"則表示在時間上第二早的那次啟動; "-b
-0"表示最后一次啟動, "-b -1"表示在時間上第二近的那次啟動, 以此類推。 如果
±offset 也省略了, 那么相當(dāng)于"-b -0", 除非本次啟動不是最后一次啟動(例如用
--directory 指定了另外一臺主機(jī)上的日志目錄)。
如果指定了32字符的 ID , 那么表示以此 ID 所代表的那次啟動為基準(zhǔn)
計算偏移量(±offset), 計算方法同上。 換句話說, 省略 ID 表示以本次啟動為基準(zhǔn)
計算偏移量(±offset)。
--list-boots
列出每次啟動的 序號(也就是相對于本次啟動的偏移量)、32字符的ID、
第一條日志的時間戳、最后一條日志的時間戳。
-k, --dmesg
僅顯示內(nèi)核日志。隱含了 -b 選項以及 "_TRANSPORT=kernel" 匹配項。
-t, --identifier=SYSLOG_IDENTIFIER
僅顯示 syslog[1] 識別符為 SYSLOG_IDENTIFIER 的日志項。
可以多次使用該選項以指定多個識別符。
-u, --unit=UNIT|PATTERN
僅顯示屬于特定單元的日志。 也就是單元名稱正好等于 UNIT 或者符合 PATTERN
模式的單元。 這相當(dāng)于添加了一個 "_SYSTEMD_UNIT=UNIT" 匹配項(對于 UNIT 來說),
或一組匹配項(對于 PATTERN 來說)。
可以多次使用此選項以添加多個并列的匹配條件(相當(dāng)于用"OR"邏輯連接)。
--user-unit=
僅顯示屬于特定用戶會話單元的日志。 相當(dāng)于同時添加了 "_SYSTEMD_USER_UNIT=" 與
"_UID=" 兩個匹配條件。
可以多次使用此選項以添加多個并列的匹配條件(相當(dāng)于用"OR"邏輯連接)。
-p, --priority=
根據(jù)日志等級(包括等級范圍)過濾輸出結(jié)果。 日志等級數(shù)字與其名稱之間的對應(yīng)關(guān)系如下
(參見 syslog(3)): "emerg" (0), "alert" (1), "crit" (2), "err" (3),
"warning" (4), "notice" (5), "info" (6), "debug" (7) 。
若設(shè)為一個單獨的數(shù)字或日志等級名稱, 則表示僅顯示小于或等于此等級的日志
(也就是重要程度等于或高于此等級的日志)。 若使用 FROM..TO.. 設(shè)置一個范圍,
則表示僅顯示指定的等級范圍內(nèi)(含兩端)的日志。 此選項相當(dāng)于添加了 "PRIORITY="
匹配條件。
-c, --cursor=
從指定的游標(biāo)(cursor)開始顯示日志。
[提示]每條日志都有一個"__CURSOR"字段,類似于該條日志的指紋。
--after-cursor=
從指定的游標(biāo)(cursor)之后開始顯示日志。 如果使用了 --show-cursor 選項,
則也會顯示游標(biāo)本身。
--show-cursor
在最后一條日志之后顯示游標(biāo), 類似下面這樣,以"--"開頭:
-- cursor: s=0639...
游標(biāo)的具體格式是私有的(也就是沒有公開的規(guī)范), 并且會變化。
-S, --since=, -U, --until=
顯示晚于指定時間(--since=)的日志、顯示早于指定時間(--until=)的日志。
參數(shù)的格式類似 "2012-10-30 18:17:16" 這樣。 如果省略了"時:分:秒"部分,
則相當(dāng)于設(shè)為 "00:00:00" 。 如果僅省略了"秒"的部分則相當(dāng)于設(shè)為 ":00" 。
如果省略了"年-月-日"部分, 則相當(dāng)于設(shè)為當(dāng)前日期。 除了"年-月-日 時:分:秒"格式,
參數(shù)還可以進(jìn)行如下設(shè)置: (1)設(shè)為 "yesterday", "today", "tomorrow"
以表示那一天的零點(00:00:00)。 (2)設(shè)為 "now" 以表示當(dāng)前時間。
(3)可以在"年-月-日 時:分:秒"前加上 "-"(前移) 或 "+"(后移)
前綴以表示相對于當(dāng)前時間的偏移。 關(guān)于時間與日期的詳細(xì)規(guī)范, 參見
systemd.time(7)
-F, --field=
顯示所有日志中某個字段的所有可能值。 [譯者注]類似于SQL語句:"SELECT DISTINCT
某字段 FROM 全部日志"
-N, --fields
輸出所有日志字段的名稱
--system, --user
僅顯示系統(tǒng)服務(wù)與內(nèi)核的日志(--system)、 僅顯示當(dāng)前用戶的日志(--user)。
如果兩個選項都未指定,則顯示當(dāng)前用戶的所有可見日志。
-M, --machine=
顯示來自于正在運(yùn)行的、特定名稱的本地容器的日志。 參數(shù)必須是一個本地容器的名稱。
-D DIR, --directory=DIR
僅顯示來自于特定目錄中的日志, 而不是默認(rèn)的運(yùn)行時和系統(tǒng)日志目錄中的日志。
--file=GLOB
GLOB 是一個可以包含"?"與"*"的文件路徑匹配模式。 表示僅顯示來自與指定的 GLOB
模式匹配的文件中的日志, 而不是默認(rèn)的運(yùn)行時和系統(tǒng)日志目錄中的日志。
可以多次使用此選項以指定多個匹配模式(多個模式之間用"OR"邏輯連接)。
--root=ROOT
在對日志進(jìn)行操作時, 將 ROOT 視為系統(tǒng)的根目錄。 例如 --update-catalog 將會創(chuàng)建
ROOT/var/lib/systemd/catalog/database
--new-id128
此選項并不用于顯示日志內(nèi)容, 而是用于重新生成一個標(biāo)識日志分類的 128-bit ID 。
此選項的目的在于 幫助開發(fā)者生成易于辨別的日志消息, 以方便調(diào)試。
--header
此選項并不用于顯示日志內(nèi)容, 而是用于顯示日志文件內(nèi)部的頭信息(類似于元數(shù)據(jù))。
--disk-usage
此選項并不用于顯示日志內(nèi)容,
而是用于顯示所有日志文件(歸檔文件與活動文件)的磁盤占用總量。
--vacuum-size=, --vacuum-time=, --vacuum-files=
這些選項并不用于顯示日志內(nèi)容,
而是用于清理日志歸檔文件(并不清理活動的日志文件), 以釋放磁盤空間。
--vacuum-size= 可用于限制歸檔文件的最大磁盤使用量 (可以使用 "K", "M", "G", "T"
后綴); --vacuum-time= 可用于清除指定時間之前的歸檔 (可以使用 "s", "m", "h",
"days", "weeks", "months", "years" 后綴); --vacuum-files=
可用于限制日志歸檔文件的最大數(shù)量。 注意,--vacuum-size= 對 --disk-usage
的輸出僅有間接效果, 因為 --disk-usage 輸出的是歸檔日志與活動日志的總量。
同樣,--vacuum-files= 也未必一定會減少日志文件的總數(shù),
因為它同樣僅作用于歸檔文件而不會刪除活動的日志文件。
此三個選項可以同時使用,以同時從三個維度去限制歸檔文件。
若將某選項設(shè)為零,則表示取消此選項的限制。
--list-catalog [128-bit-ID...]
簡要列出日志分類信息, 其中包括對分類信息的簡要描述。
如果明確指定了分類ID(128-bit-ID), 那么僅顯示指定的分類。
--dump-catalog [128-bit-ID...]
詳細(xì)列出日志分類信息 (格式與 .catalog 文件相同)。
如果明確指定了分類ID(128-bit-ID), 那么僅顯示指定的分類。
--update-catalog
更新日志分類索引二進(jìn)制文件。
每當(dāng)安裝、刪除、更新了分類文件,都需要執(zhí)行一次此動作。
--setup-keys
此選項并不用于顯示日志內(nèi)容, 而是用于生成一個新的FSS(Forward Secure
Sealing)密鑰對。 此密鑰對包含一個"sealing key"與一個"verification key"。
"sealing key"保存在本地日志目錄中, 而"verification key"則必須保存在其他地方。
詳見 journald.conf(5) 中的 Seal= 選項。
--force
與 --setup-keys 連用, 表示即使已經(jīng)配置了FSS(Forward Secure Sealing)密鑰對,
也要強(qiáng)制重新生成。
--interval=
與 --setup-keys 連用,指定"sealing key"的變化間隔。
較短的時間間隔會導(dǎo)致占用更多的CPU資源, 但是能夠減少未檢測的日志變化時間。
默認(rèn)值是 15min
--verify
檢查日志文件的內(nèi)在一致性。 如果日志文件在生成時開啟了FSS特性, 并且使用
--verify-key= 指定了FSS的"verification key",
那么,同時還將驗證日志文件的真實性。
--verify-key=
與 --verify 選項連用, 指定FSS的"verification key"
--sync
要求日志守護(hù)進(jìn)程將所有未寫入磁盤的日志數(shù)據(jù)刷寫到磁盤上,
并且一直阻塞到刷寫操作實際完成之后才返回。 因此該命令可以保證當(dāng)它返回的時候,
所有在調(diào)用此命令的時間點之前的日志, 已經(jīng)全部安全的刷寫到了磁盤中。
--flush
要求日志守護(hù)進(jìn)程 將 /run/log/journal 中的日志數(shù)據(jù) 刷寫到 /var/log/journal 中
(如果持久存儲設(shè)備當(dāng)前可用的話)。 此操作會一直阻塞到操作完成之后才會返回,
因此可以確保在該命令返回時, 數(shù)據(jù)轉(zhuǎn)移確實已經(jīng)完成。
注意,此命令僅執(zhí)行一個單獨的、一次性的轉(zhuǎn)移動作, 若沒有數(shù)據(jù)需要轉(zhuǎn)移,
則此命令什么也不做, 并且也會返回一個表示操作已正確完成的返回值。
--rotate
要求日志守護(hù)進(jìn)程滾動日志文件。 此命令會一直阻塞到滾動完成之后才會返回。
-h, --help
顯示簡短的幫助信息并退出。
--version
顯示簡短的版本信息并退出。
--no-pager
不將程序的輸出內(nèi)容管道(pipe)給分頁程序
范例:
#顯示尾部的最新10行日志
journalctl -n
#顯示尾部指定行數(shù)的日志
journalctl -n 20
#實時滾動顯示最新日志
journalctl -f
#查看指定服務(wù)的日志
journalctl /usr/lib/systemd/systemd
#查看指定進(jìn)程的日志
journalctl _PID=1
#查看某個路徑的腳本的日志
journalctl /usr/bin/bash
#查看指定用戶的日志
journalctl _UTO=33 --since today
#查看某個Unit的日志
journalctl -u nginx.service
6. 完成將多個主機(jī)(要求主機(jī)名為ip)的nginx日志集中寫入到mysql表中
#安裝數(shù)據(jù)庫MySQL
root@ubuntu202:~# apt update && apt install -y mysql-server
#更改遠(yuǎn)程服務(wù)器IP
root@ubuntu202:~# vim /etc/mysql/mysql.conf.d/mysqld.cnf
bind-address = 0.0.0.0
mysqlx-bind-address = 0.0.0.0
root@ubuntu202:~# systemctl restart mysql
root@ubuntu202:~# ss -ntl
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 70 0.0.0.0:33060 0.0.0.0:*
LISTEN 0 151 0.0.0.0:3306
#日志服務(wù)器200上安裝包
root@ubuntu:~# apt update && apt install -y rsyslog-mysql
root@ubuntu:~# cat /etc/rsyslog.d/mysql.conf
module (load="ommysql")
*.* action(type="ommysql" server="localhost" db="Syslog" uid="rsyslog" pwd="")
root@ubuntu:~# dpkg -L rsyslog-mysql
root@ubuntu:~# file /usr/share/dbconfig-common/data/rsyslog-mysql/install/mysql
/usr/share/dbconfig-common/data/rsyslog-mysql/install/mysql: ASCII text
#查看此文件,是創(chuàng)建表結(jié)構(gòu)的文件
root@ubuntu:~# less /usr/share/dbconfig-common/data/rsyslog-mysql/install/mysql
#數(shù)據(jù)庫服務(wù)器202上創(chuàng)建數(shù)據(jù)庫,賬號密碼,授權(quán)
mysql> create database Syslog;
mysql> create user rsyslog@'10.0.0.%' identified by '123456';
mysql> grant all on Syslog.* to rsyslog@'10.0.0.%';
#日志服務(wù)器200上更改配置
root@ubuntu:~# vim /etc/rsyslog.d/mysql.conf
module (load="ommysql")
*.info action(type="ommysql" server="10.0.0.202" db="Syslog" uid="rsyslog" pwd="123456")
#日志服務(wù)器上遠(yuǎn)程導(dǎo)入數(shù)據(jù)庫表結(jié)構(gòu)
root@ubuntu:~# mysql -ursyslog -p123456 -h10.0.0.202 Syslog < /usr/share/dbconfig-common/data/rsyslog-mysql/install/mysql
root@ubuntu:~# systemctl restart rsyslog.service
此時日志服務(wù)器10.0.0.200已經(jīng)可以吧日志自動寫入10.0.0.202數(shù)據(jù)庫Syslog表中了
#更改10.0.0.200日志服務(wù)器配置,接受10.0.0.8的日志數(shù)據(jù)
root@ubuntu:~# vim /etc/rsyslog.conf
module(load="imudp")
input(type="imudp" port="514")
root@ubuntu:~# systemctl restart rsyslog.service
#10.0.0.8配置日志服務(wù)器指到10.0.0.200(此處@10.0.0.200指的是udp514,@@10.0.0.200指的是tcp514)
[root@rocky8 ~]# vim /etc/rsyslog.conf
*.info @10.0.0.200
[root@rocky8 ~]# systemctl restart rsyslog.service
#查看數(shù)據(jù)庫已經(jīng)有日志傳過來了
mysql> select * from SystemEvents\G;
#多臺寫入同上

image.png
7. 嘗試使用logrotate服務(wù)切割nginx日志,每天切割一次,要求大于不超過3M, 保存90天的日志, 舊日志以時間為后綴,要求壓縮。
#在/var/log/nginx中寫入一個4M的文件
[root@ubuntu200 ~J$dd if=/dev/zero of=/var/log/nginx.log bs=4M count=1
[root@ubuntu200 ~J$vim /etc/logrotate.d/nginx
/var/log/nginx.log {
su root list #由于不添加此項會報權(quán)限錯誤
daily #每天轉(zhuǎn)儲
rotate 90 #轉(zhuǎn)儲的次數(shù)
size 3M #每個文件大小為3M
dateext #舊文件帶日期
missingok #日志不存在,不提示錯誤,繼續(xù)處理下一個
notifempty #空文件不轉(zhuǎn)儲
compress #壓縮
delaycompress #延時壓縮
create 666 nginx nginx #轉(zhuǎn)儲舊文件以后,創(chuàng)建新的文件并更改對應(yīng)的屬性
postrotate
if [ -f /apps/nginx/logs/nginx.pid ]; then #針對nginx特有的設(shè)置
kill -USR1 `cat /apps/nginx/logs/nginx.pid`
fi
endscript
}
#日志切割
[root@ubuntu200 ~J$logrotate /etc/logrotate.d/nginx
#查看
[root@ubuntu200 ~J$ll /var/log/nginx.log*

image.png
8.總結(jié) LVS的NAT和DR模型工作原理,并完成DR模型實戰(zhàn)。
-
LVS的NAT模型工作原理
lvs-nat:本質(zhì)是多目標(biāo)IP的DNAT,通過將請求報文中的目標(biāo)地址和目標(biāo)端口修改為某挑出的RS的RIP和
PORT實現(xiàn)轉(zhuǎn)發(fā)
(1)RIP和DIP應(yīng)在同一個IP網(wǎng)絡(luò),且應(yīng)使用私網(wǎng)地址;RS的網(wǎng)關(guān)要指向DIP
(2)請求報文和響應(yīng)報文都必須經(jīng)由Director轉(zhuǎn)發(fā),Director易于成為系統(tǒng)瓶頸
(3)支持端口映射,可修改請求報文的目標(biāo)PORT
(4)VS必須是Linux系統(tǒng),RS可以是任意OS系統(tǒng)
LVS是請求報文的入口,也是響應(yīng)報文的出口

image.png
-
LVS的DR模型工作原理
解決LVS-nat性能瓶頸問題,可以直接返回,相應(yīng)報文不經(jīng)過LVS
RIP上配置不回應(yīng)ARP報文(ignore),默默擁有VIP,還有不向外主動發(fā)布(annance)
DR模型缺點無法更改端口,工作在數(shù)據(jù)鏈路層,LVS和RS必須在同網(wǎng)段
DR模式特點:
1. Director和各RS都配置有VIP
2. 確保前端路由器將目標(biāo)IP為VIP的請求報文發(fā)往Director
- 在前端網(wǎng)關(guān)做靜態(tài)綁定VIP和Director的MAC地址
- 在RS上使用arptables工具
arptables -A IN -d $VIP -j DROP
arptables -A OUT -s $VIP -j mangle --mangle-ip-s $RIP
- 在RS上修改內(nèi)核參數(shù)以限制arp通告及應(yīng)答級別
不主動不負(fù)責(zé)不拒絕--M49
/proc/sys/net/ipv4/conf/all/arp_ignore
/proc/sys/net/ipv4/conf/all/arp_announce
3.RS的RIP可以使用私網(wǎng)地址,也可以是公網(wǎng)地址;RIP與DIP在同一IP網(wǎng)絡(luò);RIP的網(wǎng)關(guān)不能指向DIP,以確保響應(yīng)報文不會經(jīng)由Dirextor
4.RS和Director要在同一個物理網(wǎng)絡(luò)
5.請求報文要經(jīng)由Director,但響應(yīng)報文不經(jīng)由Director,而由RS直接發(fā)往Client
6.不支持端口映射
7.無須開啟ip_forward
8.RS可使用大多數(shù)OS系統(tǒng)

image.png
-
DR模型實戰(zhàn)案例

image.png
#路由器10.0.0.7開啟ip_forward
[root@centos7 ~]# vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
[root@centos7 ~]# sysctl -p
#更改內(nèi)核參數(shù)(永久保存寫入/etc/sysctl.conf,路徑中/換成.):
root@ubuntu201:~# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
root@ubuntu201:~# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
root@ubuntu201:~# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
root@ubuntu201:~# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
root@ubuntu202:~# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
root@ubuntu202:~# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
root@ubuntu202:~# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
root@ubuntu202:~# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
#配置web的回環(huán)網(wǎng)卡地址
root@ubuntu201:~# ip a a 10.0.0.10/32 dev lo label lo:1
root@ubuntu202:~# ip a a 10.0.0.10/32 dev lo label lo:1
#LVS服務(wù)器
root@ubuntu:~# ip a a 10.0.0.10/32 dev lo label lo:1
root@ubuntu:~# ipvsadm -A -t 10.0.0.10:80 -s rr
root@ubuntu:~# ipvsadm -a -t 10.0.0.10:80 -r 10.0.0.201:80 -g
root@ubuntu:~# ipvsadm -a -t 10.0.0.10:80 -r 10.0.0.202:80 -g
#關(guān)閉ip_forward,因為DR模型不需要開啟ip_forward,臨時改內(nèi)存
root@ubuntu:~# sysctl -w net.ipv4.ip_forward=0
net.ipv4.ip_forward = 0
#客戶端測試
[root@rocky8 ~]# curl 10.0.0.10
10.0.0.202
[root@rocky8 ~]# curl 10.0.0.10
10.0.0.201
[root@rocky8 ~]# curl 10.0.0.10
10.0.0.202
[root@rocky8 ~]# curl 10.0.0.10
10.0.0.201