以下記錄收集網路資源整理而成
官方網址:http://nginx.org/en/download.html
其中 「Stable version」 代表最新穩定版本
我這裏下載的是 nginx-1.16.1.tar.gz 壓縮包
下載完成後使用工具(如:xftp等)上傳到 Linux 系統上
yum install -y gcc-c++
yum install -y pcre pcre-devel
yum install -y zlib zlib-devel
yum install -y openssl openssl-devel
解壓壓縮包,解壓得到的是原始碼,需要編譯
tar zxf nginx-1.16.1.tar.gz
建立臨時目錄,注意應該是 /var/temp/nginx 目錄
mkdir -p /var/temp/nginx
進入到之前解壓得到的原始碼目錄(nginx-1.16.1)
執行以下命令,建立makefile檔案
./configure \
--prefix=/usr/local/nginx \
--pid-path=/var/run/nginx/nginx.pid \
--lock-path=/var/lock/nginx.lock \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--with-http_gzip_static_module \
--http-client-body-temp-path=/var/temp/nginx/client \
--http-proxy-temp-path=/var/temp/nginx/proxy \
--http-fastcgi-temp-path=/var/temp/nginx/fastcgi \
--http-uwsgi-temp-path=/var/temp/nginx/uwsgi \
--http-scgi-temp-path=/var/temp/nginx/scgi
命令 | 解釋 |
---|---|
–prefix | 指定nginx安裝目錄 |
–pid-path | 指向nginx的pid |
–lock-path | 鎖定安裝檔案,防止被惡意篡改或誤操作 |
–error-log | 錯誤日誌 |
–http-log-path | http日誌 |
–with-http_gzip_static_module | 啓用gzip模組,線上實時壓縮輸出數據流 |
–http-client-body-temp-path | 設定用戶端請求的臨時目錄 |
–http-proxy-temp-path | 設定http代理臨時目錄 |
–http-fastcgi-temp-path | 設定fastcgi臨時目錄 |
–http-uwsgi-temp-path | 設定uwsgi臨時目錄 |
–http-scgi-temp-path | 設定scgi臨時目錄 |
命令執行完成後,可以看到出現了Makefile檔案
開始編譯
make
安裝
make install
成功後,執行
whereis nginx
命令,發現安裝在了/usr/local/nginx目錄下
進入到whereis 查詢到的目錄,我這裏是/usr/local/nginx,
會發現存在三個目錄,分別是:conf,html以及sbin
進入sbin目錄,執行
./nginx
此時nginx 進程已經啓動,通過ps -ef命令可以檢視
可以看到存在一個master進程和一個worker進程
關閉linux防火牆後(注我這裏是虛擬機器環境)
systemctl stop firewalld.service #停止firewall
systemctl disable firewalld.service #禁止firewall開機啓動
在瀏覽器就可以存取目標linux主機ip,出現如下圖
至此 nginx安裝成功
在nginx的目錄下的conf資料夾下存在一個nginx.conf檔案就是linux的組態檔
nginx.conf的設定結構
main 全域性設定
event 工作模式及連線數
http{ http模組相關設定
upstream 叢集,內網伺服器
server{ 虛擬主機設定,可以有多個
location 路由規則
}
}
核心組態檔解析
#worker進程的操作使用者
#user nobody;
#worker進程數量,一般不大於CPU核心數
worker_processes 1;
#日誌級別 debug info notice warn error crit
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
# 工作模式,預設使用epoll
use epoll
# 每個worker允許的最大連線數
worker_connections 1024;
}
http {
# 包含的檔案
include mime.types;
default_type application/octet-stream;
#main代表變數名,可以在下方直接參照,$開頭的是nginx預設參數
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
#sendfile 使用高效檔案傳輸,提升傳輸效能。
#啓用後才能 纔能使用 tcp_nopush ,是指當數據表累積一定大小後才發送,提高了效率。
sendfile on;
#tcp_nopush on;
#keepalive_timeout 設定用戶端與伺服器端請求的超時時間,保證用戶端多次請求的時候不會重複建立新的連線,節約資源損耗
keepalive_timeout 65;
#gzip 啓用壓縮,html/js/css壓縮後傳輸會更快
#gzip on;
# server 可以在 http 指令塊中設定多個虛擬主機
server {
#listen 監聽埠
#server_name localhost、ip、域名
#location 請求路由對映,匹配攔截
#root 請求位置
#index 首頁設定
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
日誌預設參數解析
參數名 | 參數意義 |
---|---|
$remote_addr | 用戶端ip |
$remote_user | 遠端用戶端使用者名稱,一般爲:’-’ |
$time_local | 時間和時區 |
$request | 請求的url以及method |
$status | 響應狀態碼 |
$body_bytes_send | 響應用戶端內容位元組數 |
$http_referer | 記錄使用者從哪個鏈接跳轉過來的 |
$http_user_agent | 使用者所使用的代理,一般來時都是瀏覽器 |
$http_x_forwarded_for | 通過代理伺服器來記錄用戶端的ip |
建立一個shell檔案,我是在"/usr/local/nginx/sbin"目錄下
vi cut_my_log.sh
開啓檔案,複製以下內容,並儲存退出
#!/bin/bash
LOG_PATH="/var/log/nginx/"
RECORD_TIME=$(date -d "yesterday" +%Y-%m-%d+%H:%M)
PID=/var/run/nginx/nginx.pid
mv ${LOG_PATH}/access.log ${LOG_PATH}/access.${RECORD_TIME}.log
mv ${LOG_PATH}/error.log ${LOG_PATH}/error.${RECORD_TIME}.log
#向Nginx主進程發送信號,用於重新開啓日誌檔案
kill -USR1 `cat $PID`
注意LOG_PATH路徑以及PID,通過
./nginx -V
命令可以檢視自己的相關設定
爲剛纔的指令碼新增可執行許可權
chmod +x cut_my_log.sh
手動執行
./cut_my_log.sh
命令,檢視log路徑,發現日誌已切割
安裝定時任務(有可能已經存在)
yum install -y crontabs
crontab -e 編輯並且新增一行新的任務
*/1 * * * * /usr/local/nginx/sbin/cut_my_log.sh
爲做測試,這裏是每隔1分鐘執行一次指令碼
重新啓動定時任務
systemctl restart crond
或者是
service crond restart
一段時間後,可以發現日誌已經定時切割
crond 常用命令
systemctl start crond //啓動服務
systemctl stop crond //關閉服務
systemctl restart crond //重新啓動服務
systemctl reload crond //重新載入設定
crontab -e // 編輯任務
crontab -l // 檢視任務列表
Cron表達式是,分爲5或6個域,每個域代表一個含義,如下所示:
常用表達式:
每分鐘執行:
*/1 * * * *
每日凌晨(每天晚上23:59)執行:
59 23 * * *
每日凌晨1點執行:
0 1 * * *
使用crontab -e命令可以修改表達式,比如將之前表達式修改爲每日1點執行一次
首先上傳幾個檔案,我放在了/opt/static檔案下
修改nginx.conf檔案,修改server模組
server {
listen 80;
server_name localhost;
location / {
root /opt/static;
index index.html;
}
}
使用 /usr/local/nginx/sbin/nginx -t 命令檢查組態檔,發現沒有問題
重新載入設定
/usr/local/nginx/sbin/nginx -s reload
在瀏覽器輸入ip即可開啓index.html
使用 ip/檔名 ,即可存取具體的某個檔案,比如
http://192.168.2.30/2.jpg
會顯示之前上傳的2.jpg這個檔案
複製改寫一個server
server {
listen 81;
server_name localhost;
location / {
root /opt;
index index.html;
}
}
重新載入設定
瀏覽器輸入 ip:port ,會顯示Forbidden,因爲我們在/opt目錄下沒有一個叫index.html的檔案
此時需要輸入 ip:port/static 纔可以顯示index.html
除了 root
還有一個 alias
可以起到類似的效果
改寫一個server,當location 只包含 /
時,需要在alias最後面加一個/
,否則會找不到檔案,我下面 下麪的例子實際上可以不在最後加/
server {
listen 82;
server_name localhost;
location /ss {
alias /opt/static/;
index index.html;
}
}
載入設定後,使用 ip:port/ss 可以存取資源
root
與 alias
存取路徑的解釋:
假設伺服器存在 /opt/static/2.jpg 這個檔案
location /static {
root /opt;
}
存取路徑就是 ip:port/static/2.jpg,這個請求被解釋爲
root + location + 後續url路徑
即 /opt + /static + 2.jpg
,
顯然在伺服器裡的確存在一個 /opt/static/2.jpg
的資源
也就是 ip:port後面的url路徑在你的伺服器裏面必須真實存在,否則存取不到
location /ss {
alias /opt;
}
存取路徑就是 ip:port/ss/static/2.jpg,這個請求被解釋爲
(location 替換爲 alias) + 後續url路徑
即 (/ss 替換爲 /opt) + /static/2.jpg
也就是 /opt/static/2.jpg
相關於給 /opt 起了一個別名叫 /ss
location / {
root /opt;
}
location = /static/a.txt{
root /opt;
}
#符合圖片的顯示
location ~* \.(jpg|png|jpeg) {
root /opt;
}
#png必須小寫才能 纔能匹配到
location ~ \.(TXT|jpg|png|jpeg) {
root /opt;
}
location ^~ /static{
root /opt;
}
在server塊中加入以下設定
#允許跨域請求的域,*代表所有
add_header 'Access-Control-Allow-Origin' *;
#允許帶上cookie請求
add_header 'Access-Control-Allow-Credentials' 'true';
#允許請求的方法,比如 GET/POST/PUT/DELETE
add_header 'Access-Control-Allow-Methods' *;
#允許請求的header
add_header 'Access-Control-Allow-Headers' *;
#對源站點驗證,校驗域名或IP
valid_referers *.abc.com;
#非法引入會進入下方判斷
if ($invalid_referer) { return 404; }
首先啓動幾個應用伺服器,我這裏是啓動了springBoot打包的jar,在不同埠上
在http模組中加入upstream模組
upstream myJar{
server 192.168.2.1:80;
server 192.168.2.1:81;
server 192.168.2.1:82;
}
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://myJar;
}
}
載入設定後,存取ip可以看到返回結果確實是應用伺服器的結果,此時預設的負載均衡策略是輪詢
預設情況下是普通輪詢,權重都是1
下面 下麪看一下加權輪詢負載均衡
upstream myJar{
server 192.168.2.1:80 weight=2;
server 192.168.2.1:81;
server 192.168.2.1:82;
}
發現80埠的伺服器,會響應兩次,81和82的只會響應一次,如此往復
ip_hash負載均衡
upstream myJar{
ip_hash;
server 192.168.2.1:80;
server 192.168.2.1:81 down;
server 192.168.2.1:82;
}
注意 如果需要將後臺伺服器臨時移除,應標記 down
參考:http://nginx.org/en/docs/http/ngx_http_upstream_module.html
當應用伺服器擴容或宕機後,nginx會重新進行hash,可能導致session丟失(本來a請求存取的一直是伺服器1,結果伺服器2宕機了,重新hash後,導致a請求存取到了伺服器3,但是之前session一直維持在伺服器1中)
針對ip_hash的缺點,出現了一致性hash演算法,可以減小服務擴容或宕機帶來的影響
一致性hash需要安裝第三方模組 ngx_http_consistent_hash
,這裏暫時不展開
url_hash 負載均衡
upstream myJar{
hash $request_uri;
server 192.168.2.1:80;
server 192.168.2.1:81 down;
server 192.168.2.1:82;
}
根據請求的url進行hash
least_conn負載均衡
upstream myJar{
least_conn;
server 192.168.2.1:80;
server 192.168.2.1:81 down;
server 192.168.2.1:82;
}
會將請求轉發到連線數最少的那個伺服器上
在文件http://nginx.org/en/docs/http/ngx_http_upstream_module.html中可以看到server 後面可以帶上一些參數
參數 | 作用 |
---|---|
max_conns | 限制每台server的連線數,用於保護避免過載,可起到限流作用 |
max_fails | 表示失敗幾次,則標記server已宕機,剔出上遊服務 |
fail_timeout | 服務不可用的時間段;在fail_timeout時間內連續失敗max_fails次,表示服務不可用,在下一個fail_timeout時間段內不會有新請求鏈接到該伺服器,如此往復 |
backup | 標記爲備用服務 |
down | 標記服務永不可用 |
slow_start等 | 還有其他商業版本的參數不介紹了 |
使用 keepalive 提高吞吐量
upstream myJar{
least_conn;
server 192.168.2.1:80;
server 192.168.2.1:81;
server 192.168.2.1:82;
keepalive 16;
}
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://myJar;
proxy_http_version 1.1;
proxy_set_header Connection "";
}
}
其中
keepalived : 設定長連線處理的數量
proxy_http_version :設定長連線http版本爲1.1
proxy_set_header :清除connection header 資訊
expires 指令可以控制 HTTP 應答中的「 Expires 」和「 Cache-Control 」的頭標
(起到控制頁面快取的作用)
語法:expires [time|epoch|max|pff]
預設值:off
expires指令控制HTTP應答中的「Expires」和「Cache-Control」Header頭部資訊,啓動控制頁面快取的作用
time:可以使用正數或負數。「Expires」頭標的值將通過當前系統時間加上設定time值來設定。
time值還控制"Cache-Control"的值:
負數表示no-cache
正數或零表示max-age=time
epoch:指定「Expires」的值爲 1 January,1970,00:00:01 GMT
max:指定「Expires」的值爲31 December2037 23:59:59GMT,"Cache-Control"的值爲10年。
-1:指定「Expires」的值爲當前伺服器時間-1s,即永遠過期。
off:不修改「Expires」和"Cache-Control"的值
使用舉例
server {
listen 80;
server_name localhost;
location / {
alias /opt/static/;
# expires 10s;
# expires @10h30m;
# expires -1h;
# expires epoch;
# expires off;
expires max;
}
}
# proxy_cache_path 設定快取目錄
#keys_zone 設定共用記憶體以及佔用空間大小
#max_size 設定快取大小
#inactive 超過此時間則被清理
#use_temp_path 臨時目錄,使用後會影響nginx效能
proxy_cache_path /usr/local/nginx/upstream_cache
keys_zone=mycache:5m max_size=1g
inactive=1m use_temp_path=off;
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://myJar;
# 啓用快取,和keys_zone一致
proxy_cache mycache;
# 針對200和304狀態碼快取時間爲8小時
proxy_cache_valid 200 304 8h;
}
}
存取請求後,可以發現在 /usr/local/nginx/upstream_cache 下面 下麪存在快取檔案
進入到nginx的解壓目錄/opt/nginx-1.16.1下
執行
./configure \
--prefix=/usr/local/nginx \
--pid-path=/var/run/nginx/nginx.pid \
--lock-path=/var/lock/nginx.lock \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--with-http_gzip_static_module \
--http-client-body-temp-path=/var/temp/nginx/client \
--http-proxy-temp-path=/var/temp/nginx/proxy \
--http-fastcgi-temp-path=/var/temp/nginx/fastcgi \
--http-uwsgi-temp-path=/var/temp/nginx/uwsgi \
--http-scgi-temp-path=/var/temp/nginx/scgi \
--with-http_ssl_module
再次執行編譯make,然後進入objs目錄下,
如果nginx還在執行的話,先關閉,然後複製nginx檔案到/usr/local/nginx/sbin 那裏
#關閉進程
/usr/local/nginx/sbin/nginx -s stop
#覆蓋nginx檔案
cp nginx /usr/local/nginx/sbin/
通過nginx -V可以檢視已經帶上了SSL模組
進入要存放ssl檔案的目錄,我這裏是 /usr/local/nginx/mySSL
首先執行如下命令生成一個key
openssl genrsa -des3 -out ssl.key 1024
然後他會要求你輸入這個key檔案的密碼。不推薦輸入。因爲以後要給nginx使用。每次reload nginx設定時候都要你驗證這個PAM密碼的。
由於生成時候必須輸入密碼。你可以輸入後 再刪掉。
mv ssl.key xxx.key
openssl rsa -in xxx.key -out ssl.key
rm xxx.key
然後根據這個key檔案生成證書請求檔案
openssl req -new -key ssl.key -out ssl.csr
以上命令生成時候要填很多東西 一個個看着寫吧(可以隨便,畢竟這是自己生成的證書)
最後根據這2個檔案生成crt證書檔案
openssl x509 -req -days 365 -in ssl.csr -signkey ssl.key -out ssl.crt
這裏365是證書有效期 推薦3650哈哈。這個大家隨意。最後使用到的檔案是key和crt檔案。
摘自https://www.cnblogs.com/weifeng1463/p/7943633.html
在nginx.conf中加入ssl相關設定
upstream myJar{
server 192.168.2.1:80;
server 192.168.2.1:81;
server 192.168.2.1:82;
}
server {
listen 443 ssl;
server_name localhost;
location / {
proxy_pass http://myJar;
}
#設定ssl證書
ssl_certificate /usr/local/nginx/mySSL/ssl.crt;
#設定證書祕鑰
ssl_certificate_key /usr/local/nginx/mySSL/ssl.key;
#ssl對談cache
ssl_session_cache shared:SSL:1m;
#ssl對談超時時間
ssl_session_timeout 5m;
#設定加密套件,寫法遵循openssl標準
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
}
載入設定後,瀏覽器輸入https://ip:port即可存取
設定http自動跳轉https
server{
listen 80;
server_name localhost;
rewrite ^(.*)$ https://$host$1 permanent;
}
下載地址https://www.keepalived.org/download.html
我這裏使用的 keepalived-2.0.18.tar.gz 版本
上傳到linux,解壓
進入到解壓目錄,可以看到一個configure檔案
安裝依賴
yum install -y libnl libnl-devel
執行
./configure --prefix=/usr/local/keepalived --sysconf=/etc
編譯安裝
make && make install
通過whereis命令檢視keepalived路徑
使用ip addr 檢視網絡卡及ip
網絡卡名稱是ens33,ip是192.168.2.30
編輯 /etc/keepalived/keepalived.conf 檔案
global_defs {
# 路由id:當前安裝keepalived的節點主機識別符號,保證全域性唯一
router_id keep_30
}
vrrp_instance VI_1 {
# 表示狀態是MASTER主機還是備用機BACKUP
state MASTER
# 該範例系結的網絡卡
interface ens33
# 保證主備節點一致即可
virtual_router_id 51
# 權重,master權重一般高於backup,如果有多個,那就是選舉,誰的權重高,誰就當選
priority 100
# 主備之間同步檢查時間間隔,單位秒
advert_int 2
# 認證許可權密碼,防止非法節點進入
authentication {
auth_type PASS
auth_pass 1111
}
# 虛擬出來的ip,可以有多個(vip)
virtual_ipaddress {
192.168.2.29
}
}
執行 /usr/local/keepalived/sbin/keepalived
命令,
再次檢視ip,發現ens33網絡卡系結了192.168.2.29 虛擬ip
此時通過 http://192.168.2.29 可以存取應用服務
進入到keepalived的解壓目錄下,具體是/opt/keepalived-2.0.18/keepalived/etc
裏面存在init.d
和sysconfig
資料夾
執行
cp init.d/keepalived /etc/init.d/
cp sysconfig/keepalived /etc/sysconfig/
systemctl daemon-reload
這時就可以開始使用systemctl 開啓和關閉 keepalived 服務了
準備另一臺linux系統機器,裏面安裝nginx和keepalived
我這裏直接使用虛擬機器的克隆,並更改ip爲192.168.2.31
修改31機器的keepalived組態檔/etc/keepalived/keepalived.conf
global_defs {
# 路由id:當前安裝keepalived的節點主機識別符號,保證全域性唯一
router_id keep_31
}
vrrp_instance VI_1 {
# 表示狀態是MASTER主機還是備用機BACKUP
state BACKUP
# 該範例系結的網絡卡
interface ens33
# 保證主備節點一致即可
virtual_router_id 51
# 權重,master權重一般高於backup,如果有多個,那就是選舉,誰的權重高,誰就當選
priority 50
# 主備之間同步檢查時間間隔,單位秒
advert_int 2
# 認證許可權密碼,防止非法節點進入
authentication {
auth_type PASS
auth_pass 1111
}
# 虛擬出來的ip,可以有多個(vip)
virtual_ipaddress {
192.168.2.29
}
}
對比30機器的設定,其實就是修改了router_id
,state
和priority
三項內容
兩機器的nginx設定nginx.conf加入以下設定
server{
listen 80;
server_name localhost;
location / {
root html;
index index.html;
}
}
分別更改index.html,使之有區別
同時啓動兩機器的nginx和keepalived服務
執行以下步驟:
存取結果如下:
可以看到,當30宕機後,請求到達31機器,當30恢復後,請求重新回到了30機器,實現了高可用
以上方法在某個機器宕機後,可以自動轉移故障,但是僅當nginx宕機後,依舊會導致服務不可用
編寫nginx重新啓動檢測指令碼
vi /etc/keepalived/check_nginx_status.sh
#!/bin/bash
A=`ps -C nginx --no-header |wc -l`
# 判斷nginx是否宕機,如果宕機了,嘗試重新啓動
if [ $A -eq 0 ];then
/usr/local/nginx/sbin/nginx
# 等待一小會再次檢查nginx,如果沒有啓動成功,則停止keepalived,使其啓動備用機
sleep 3
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
killall keepalived
fi
fi
進入檔案目錄,加上可執行許可權 chmod +x check_nginx_status.sh
設定keepalived監聽nginx指令碼
vrrp_script check_nginx_alive {
script "/etc/keepalived/check_nginx_status.sh"
interval 2 # 每隔兩秒執行上一行指令碼
weight 10 # 如果指令碼執行成功,則升級權重+10
}
在 vrrp_instance 中新增監控的指令碼
track_script {
check_nginx_alive # 追蹤 nginx 指令碼
}
此時keepalived的完整檔案爲:
global_defs {
# 路由id:當前安裝keepalived的節點主機識別符號,保證全域性唯一
router_id keep_30
}
vrrp_script check_nginx_alive {
script "/etc/keepalived/check_nginx_status.sh"
interval 2 # 每隔兩秒執行上一行指令碼
weight 10 # 如果指令碼執行成功,則升級權重+10
}
vrrp_instance VI_1 {
# 表示狀態是MASTER主機還是備用機BACKUP
state MASTER
# 該範例系結的網絡卡
interface ens33
# 保證主備節點一致即可
virtual_router_id 51
# 權重,master權重一般高於backup,如果有多個,那就是選舉,誰的權重高,誰就當選
priority 100
# 主備之間同步檢查時間間隔,單位秒
advert_int 2
# 認證許可權密碼,防止非法節點進入
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
check_nginx_alive # 追蹤 nginx 指令碼
}
# 虛擬出來的ip,可以有多個(vip)
virtual_ipaddress {
192.168.2.29
}
}
重新啓動keepalived 使設定生效 systemctl restart keepalived
手動關閉nginx進程,存取192.168.2.29可發現依舊正常,nginx服務被自動重新啓動
顯然,有一半的機器資源被浪費了
修改30的keepalived組態檔
新增
vrrp_instance VI_2 {
# 表示狀態是MASTER主機還是備用機BACKUP
state BACKUP
# 該範例系結的網絡卡
interface ens33
# 保證主備節點一致即可
virtual_router_id 52
# 權重,master權重一般高於backup,如果有多個,那就是選舉,誰的權重高,誰就當選
priority 50
# 主備之間同步檢查時間間隔,單位秒
advert_int 2
# 認證許可權密碼,防止非法節點進入
authentication {
auth_type PASS
auth_pass 1111
}
# 虛擬出來的ip,可以有多個(vip)
virtual_ipaddress {
192.168.2.28
}
}
修改了vrrp_instance
,state
,virtual_router_id
,priority
,virtual_ipaddress
修改31的keepalived組態檔
新增
vrrp_instance VI_2 {
# 表示狀態是MASTER主機還是備用機BACKUP
state MASTER
# 該範例系結的網絡卡
interface ens33
# 保證主備節點一致即可
virtual_router_id 52
# 權重,master權重一般高於backup,如果有多個,那就是選舉,誰的權重高,誰就當選
priority 100
# 主備之間同步檢查時間間隔,單位秒
advert_int 2
# 認證許可權密碼,防止非法節點進入
authentication {
auth_type PASS
auth_pass 1111
}
# 虛擬出來的ip,可以有多個(vip)
virtual_ipaddress {
192.168.2.28
}
}
重新啓動30,31的keepalived服務
即30,31互爲主備,存在兩個虛擬ip192.168.2.29
以及192.168.2.28
,
通過DNS輪詢,可以使使用者請求發給29或28這兩個虛擬ip,使得兩個機器可以同時提供服務