Nginx 高可用

1习寸、使用Keepalived程序讓nginx高可用

下載:https://www.keepalived.org/download.html
上傳到服務(wù)器
解壓:tar -zxvf keepalived-2.0.18.tar.gz
然后就安裝三部曲页响,./configure碗脊、make屡久、make install

打開配置文件

vim keepalived.conf
global_defs { 
  # 路由id:當(dāng)前安裝keepalived的節(jié)點(diǎn)主機(jī)標(biāo)識符滨攻,保證全局唯一 
  router_id keep_171 
}
vrrp_instance VI_1 { 
  # 表示狀態(tài)是MASTER主機(jī)還是備用機(jī)BACKUP 
  state MASTER 
  # 該實(shí)例綁定的網(wǎng)卡  #查看網(wǎng)卡名稱 ip addr
  interface ens33 
  # 保證主備節(jié)點(diǎn)一致即可 
  virtual_router_id 51 
  # 權(quán)重钧舌,master權(quán)重一般高于backup禁熏,如果有多個垦巴,那就是選舉媳搪,誰的權(quán)重高,誰就當(dāng)選 
  priority 100 
  # 主備之間同步檢查時間間隔骤宣,單位秒 
  advert_int 2 
  # 認(rèn)證權(quán)限密碼秦爆,防止非法節(jié)點(diǎn)進(jìn)入 
  authentication { 
    auth_type PASS 
    auth_pass 1111 
  }
  # 虛擬出來的ip,可以有多個(vip) 
  virtual_ipaddress { 
    192.168.1.161
  } 
}

啟動

./keepalived

注冊為系統(tǒng)服務(wù)

在keepalived下有個etc目錄的憔披,進(jìn)入去
cp init.d/keepalived /etc/init.d/
cp sysconfig/keepalived /etc/sysconfig/

systemctl start keepalived.service

2等限、keepalived也可能崩的,也需要主備

配置備

global_defs { 
  router_id keep_172 
}
vrrp_instance VI_1 { 
  # 備用機(jī)設(shè)置為BACKUP 
  state BACKUP 
  interface ens33 
  virtual_router_id 51 
  # 權(quán)重低于MASTER 
  priority 80 
  advert_int 2 
  authentication { 
    auth_type PASS 
    auth_pass 1111 
  }
  virtual_ipaddress { 
    # 注意:主備兩臺的vip都是一樣的活逆,綁定到同一個vip 
    192.168.1.161 
  } 
}

增加Nginx重啟檢測腳本

vim /etc/keepalived/check_nginx_alive_or_not.sh

#!/bin/bash 

A=`ps -C nginx --no-header |wc -l` 
# 判斷nginx是否宕機(jī)精刷,如果宕機(jī)了,嘗試重啟 
if [ $A -eq 0 ];then 
  /usr/local/nginx/sbin/nginx 
  # 等待一小會再次檢查nginx蔗候,如果沒有啟動成功怒允,則停止keepalived,使其啟動備用機(jī) 
  sleep 3 
  if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then 
    killall keepalived 
  fi 
fi

增加運(yùn)行權(quán)限

chmod +x /etc/keepalived/check_nginx_alive_or_not.sh

配置keepalived監(jiān)聽nginx腳本

vrrp_script check_nginx_alive { 
  script "/etc/keepalived/check_nginx_alive_or_not.sh" 
  interval 2 # 每隔兩秒運(yùn)行上一行腳本 
  weight 10 # 如果腳本運(yùn)行失敗锈遥,則升級權(quán)重+10 
}

在 vrrp_instance 中新增監(jiān)控的腳本

track_script { 
  check_nginx_alive # 追蹤 nginx 腳本 
}

重啟Keepalived使得配置文件生效

systemctl restart keepalived

3纫事、雙主熱備

規(guī)則:以一個虛擬ip分組歸為同一個路由



主節(jié)點(diǎn)配置:

global_defs { 
  router_id keep_171 
}
vrrp_instance VI_1 { 
  state MASTER 
  interface ens33 
  virtual_router_id 51 
  priority 100 
  advert_int 1 
  authentication { 
    auth_type PASS 
    auth_pass 1111 
  }
  virtual_ipaddress { 
    192.168.1.161 
  } 
}
vrrp_instance VI_2 { 
  state BACKUP 
  interface ens33 
  virtual_router_id 52 
  priority 80 
  advert_int 1 
  authentication { 
    auth_type PASS 
    auth_pass 1111 
  }
  virtual_ipaddress { 
    192.168.1.162 
  } 
}

備節(jié)點(diǎn)配置

global_defs { 
  router_id keep_172 
}
vrrp_instance VI_1 { 
  state BACKUP 
  interface ens33 
  virtual_router_id 51 
  priority 80 
  advert_int 1 
  authentication { 
    auth_type PASS 
    auth_pass 1111 
  }
  virtual_ipaddress { 
    192.168.1.161
  }
}
vrrp_instance VI_2 { 
  state MASTER 
  interface ens33 
  virtual_router_id 52 
  priority 100 
  advert_int 1 
  authentication { 
    auth_type PASS 
    auth_pass 1111 
  }
  virtual_ipaddress { 
    192.168.1.162 
  } 
}

4、LVS

一般不會直接使用keepalived直接作用在nginx上所灸,而是keepalived+LVS+Nginx實(shí)現(xiàn)高可用丽惶。
LVS 基于四層,工作效率高
單個Nginx承受不了壓力爬立,需要集群
LVS 充當(dāng)Nginx集群的調(diào)度者
Nqinx 接受請求來回钾唬,LVS可以只接受不響應(yīng)




5、前期準(zhǔn)備:

服務(wù)器與ip規(guī)劃:
LVS - 1臺
VIP(虛擬IP):192.168.1.150
DIP(轉(zhuǎn)發(fā)者IP/內(nèi)網(wǎng)IP):192.168.1.151
Nginx - 2臺(RealServer)
RIP(真實(shí)IP/內(nèi)網(wǎng)IP):192.168.1.171
RIP(真實(shí)IP/內(nèi)網(wǎng)IP):192.168.1.172
所有計(jì)算機(jī)節(jié)點(diǎn)關(guān)閉網(wǎng)絡(luò)配置管理器侠驯,因?yàn)橛锌赡軙途W(wǎng)絡(luò)接口沖突:

systemctl stop NetworkManager 
systemctl disable NetworkManager

創(chuàng)建子接口

cd /etc/sysconfig/network-scripts/
#數(shù)字可以是其他抡秆,只是隨便起個別名
cp ifcfg-ens33 ifcfg-ens33:1

修改子接口配置: vim ifcfg-ens33:1,保留這些即可

BOOTPROTO="static"
DEVICE="ens33:1"
ONBOOT="yes"
IPADDR=192.168.1.150  #虛擬IP
NETMASK=255.255.255.0

service network restart
安裝集群管理工具
yum install ipvsadm

6吟策、搭建LVS-DR模式- 為兩臺RS配置虛擬IP

#這個文件上網(wǎng)查一查
cp ifcfg-lo ifcfg-lo:1

修改為
DEVICE=lo:1
IPADDR=192.168.1.150
NETMASK=255.255.255.255
NETWORK=127.0.0.1
BROADCAST=127.255.255.255
ONBOOT=yes
NAME=loopback

service network restart
另一臺

cp ifcfg-lo ifcfg-lo:1

修改為
DEVICE=lo:1
IPADDR=192.168.1.150
NETMASK=255.255.255.255
NETWORK=127.0.0.1
BROADCAST=127.255.255.255
ONBOOT=yes
NAME=loopback

這樣兩臺虛擬ip都構(gòu)建好了

7儒士、搭建LVS-DR模式- 為兩臺RS配置arp

ARP響應(yīng)級別與通告行為的概念

  1. arp-ignore:ARP響應(yīng)級別(處理請求)
    只要本機(jī)配置了ip,就能響應(yīng)請求
    請求的目標(biāo)地址到達(dá)對應(yīng)的網(wǎng)絡(luò)接口檩坚,才會響應(yīng)請求
  2. arp-announce:ARP通告行為(返回響應(yīng))
    本機(jī)上任何網(wǎng)絡(luò)接口都向外通告着撩,所有的網(wǎng)卡都能接受到通告
    盡可能避免本網(wǎng)卡與不匹配的目標(biāo)進(jìn)行通告
    只在本網(wǎng)卡通告

打開sysctl.conf:

vim /etc/sysctl.conf

配置 所有網(wǎng)卡 诅福、 默認(rèn)網(wǎng)卡 以及 虛擬網(wǎng)卡 的arp響應(yīng)級別和通告行為,分別對應(yīng): all 拖叙, default 氓润, lo :

兩臺都是相同配置
# configration for lvs 
net.ipv4.conf.all.arp_ignore = 1 
net.ipv4.conf.default.arp_ignore = 1 
net.ipv4.conf.lo.arp_ignore = 1 

net.ipv4.conf.all.arp_announce = 2 
net.ipv4.conf.default.arp_announce = 2 
net.ipv4.conf.lo.arp_announce = 2

刷新配置文件:

sysctl -p

增加一個網(wǎng)關(guān),用于接收數(shù)據(jù)報(bào)文薯鳍,當(dāng)有請求到本機(jī)后旺芽,會交給lo去處理:

兩臺都是相同配置
route add -host 192.168.1.150 dev lo:1

route -n

開機(jī)自啟

echo "route add -host 192.168.1.150 dev lo:1" >> /etc/rc.local

8、搭建LVS-DR模式- 使用ipvsadm配置集群規(guī)則

創(chuàng)建LVS節(jié)點(diǎn)辐啄,用戶訪問的集群調(diào)度者

ipvsadm -A -t 192.168.1.150:80 -s rr -p 5

-A:添加集群
-t:tcp協(xié)議
ip地址:設(shè)定集群的訪問ip,也就是LVS的虛擬ip
-s:設(shè)置負(fù)載均衡的算法运嗜,rr表示輪詢
-p:設(shè)置連接持久化的時間

創(chuàng)建2臺RS真實(shí)服務(wù)器

ipvsadm -a -t 192.168.1.150:80 -r 192.168.1.171:80 -g 
ipvsadm -a -t 192.168.1.150:80 -r 192.168.1.172:80 -g

-a:添加真實(shí)服務(wù)器
-t:tcp協(xié)議
-r:真實(shí)服務(wù)器的ip地址
-g:設(shè)定DR模式

保存到規(guī)則庫壶辜,否則重啟失效

ipvsadm -S

檢查集群

查看集群列表
ipvsadm -Ln
查看集群狀態(tài)
ipvsadm -Ln --stats

其他命令:

# 重啟ipvsadm,重啟后需要重新配置 
service ipvsadm restart 
# 查看持久化連接 
ipvsadm -Ln --persistent-conn 
# 查看連接請求過期時間以及請求源ip和目標(biāo)ip 
ipvsadm -Lnc 
# 設(shè)置tcp tcpfin udp 的過期時間(一般保持默認(rèn)) 
ipvsadm --set 1 1 1 
# 查看過期時間 
ipvsadm -Ln --timeout
#更詳細(xì)的幫助文檔
ipvsadm -h 
man ipvsadm

至此担租,已經(jīng)實(shí)現(xiàn)單個LVS+兩個Nginx砸民,但這樣LVS還是有可能崩的,所以LVS要配置主備

9奋救、Keepalived+LVS岭参,主配置

修改Keepalived的配置文件

global_defs {
  router_id LVS_151
}

vrrp_instance VI_1 { 
  state MASTER 
  interface ens33 
  virtual_router_id 41 
  priority 100 
  advert_int 1 
  authentication { 
    auth_type PASS 
    auth_pass 1111 
  }
  virtual_ipaddress {
    192.168.1.150
  }
}

#配置集群地址訪問的IP+端口,端口和nginx保持一致尝艘,都是80
virtual server 192.168.1.150 80 { 
  # 健康檢查的時問演侯,單位:秒
  delay_loop 6
  #配置負(fù)載均衡的算法,默認(rèn)是輪詢
  lb_algo rr
  # 設(shè)置LVS的模式 NAT | TUN | DR
  lb_kind DR
  # 設(shè)置會話持久化的事件
  persistence_timeout 5
  #協(xié)議 -t
  protocol TCP

  #負(fù)載均衡的真實(shí)服務(wù)器背亥,也就是nginx節(jié)點(diǎn)的具體的真實(shí)ip地址
  real_server 192.168.1.171 80 {
    #輪詢的默認(rèn)權(quán)重配比設(shè)置為1
    weight 1
    #設(shè)置健康檢查
    TCP_CHECK {
      #檢查的80端口
      connect_port 80
      #超時時間
      connect_timeout 2
      # 重試次數(shù) 2次
       nb_get_retry 2
       # 間隔時間 3秒
       delay_before_retry 3
     }
  }
  real_server 192.168.1.172 80 {
    weight 1
    #設(shè)置健康檢查
    TCP_CHECK {
      #檢查的80端口
      connect_port 80
      #超時時間
      connect_timeout 2
      # 重試次數(shù) 2次
       nb_get_retry 2
       # 間隔時間 3秒
       delay_before_retry 3
     }
  }
}
清空規(guī)則
ipvsadm -C
重啟
systemctl restart keepalived

10秒际、Keepalived+LVS,備配置

修改Keepalived的配置文件

global_defs {
  router_id LVS_152
}

vrrp_instance VI_1 { 
  state BACKUP 
  interface ens33 
  virtual_router_id 41 
  priority 50 
  advert_int 1 
  authentication { 
    auth_type PASS 
    auth_pass 1111 
  }
  virtual_ipaddress {
    192.168.1.150
  }
}

#配置集群地址訪問的IP+端口狡汉,端口和nginx保持一致娄徊,都是80
virtual server 192.168.1.150 80 { 
  # 健康檢查的時問,單位:秒
  delay_loop 6
  #配置負(fù)載均衡的算法盾戴,默認(rèn)是輪詢
  lb_algo rr
  # 設(shè)置LVS的模式 NAT | TUN | DR
  lb_kind DR
  # 設(shè)置會話持久化的事件
  persistence_timeout 5
  #協(xié)議 -t
  protocol TCP

  #負(fù)載均衡的真實(shí)服務(wù)器寄锐,也就是nginx節(jié)點(diǎn)的具體的真實(shí)ip地址
  real_server 192.168.1.171 80 {
    #輪詢的默認(rèn)權(quán)重配比設(shè)置為1
    weight 1
    #設(shè)置健康檢查
    TCP_CHECK {
      #檢查的80端口
      connect_port 80
      #超時時間
      connect_timeout 2
      # 重試次數(shù) 2次
       nb_get_retry 2
       # 間隔時間 3秒
       delay_before_retry 3
     }
  }
  real_server 192.168.1.172 80 {
    weight 1
    #設(shè)置健康檢查
    TCP_CHECK {
      #檢查的80端口
      connect_port 80
      #超時時間
      connect_timeout 2
      # 重試次數(shù) 2次
       nb_get_retry 2
       # 間隔時間 3秒
       delay_before_retry 3
     }
  }
}
清空規(guī)則
ipvsadm -C
重啟
systemctl restart keepalived
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市尖啡,隨后出現(xiàn)的幾起案子橄仆,更是在濱河造成了極大的恐慌,老刑警劉巖可婶,帶你破解...
    沈念sama閱讀 222,590評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件沿癞,死亡現(xiàn)場離奇詭異,居然都是意外死亡矛渴,警方通過查閱死者的電腦和手機(jī)椎扬,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評論 3 399
  • 文/潘曉璐 我一進(jìn)店門惫搏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人蚕涤,你說我怎么就攤上這事筐赔。” “怎么了揖铜?”我有些...
    開封第一講書人閱讀 169,301評論 0 362
  • 文/不壞的土叔 我叫張陵茴丰,是天一觀的道長。 經(jīng)常有香客問我天吓,道長贿肩,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,078評論 1 300
  • 正文 為了忘掉前任龄寞,我火速辦了婚禮汰规,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘物邑。我一直安慰自己溜哮,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,082評論 6 398
  • 文/花漫 我一把揭開白布色解。 她就那樣靜靜地躺著茂嗓,像睡著了一般。 火紅的嫁衣襯著肌膚如雪科阎。 梳的紋絲不亂的頭發(fā)上述吸,一...
    開封第一講書人閱讀 52,682評論 1 312
  • 那天,我揣著相機(jī)與錄音锣笨,去河邊找鬼刚梭。 笑死,一個胖子當(dāng)著我的面吹牛票唆,可吹牛的內(nèi)容都是我干的朴读。 我是一名探鬼主播,決...
    沈念sama閱讀 41,155評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼走趋,長吁一口氣:“原來是場噩夢啊……” “哼衅金!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起簿煌,我...
    開封第一講書人閱讀 40,098評論 0 277
  • 序言:老撾萬榮一對情侶失蹤氮唯,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后姨伟,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體惩琉,經(jīng)...
    沈念sama閱讀 46,638評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,701評論 3 342
  • 正文 我和宋清朗相戀三年夺荒,在試婚紗的時候發(fā)現(xiàn)自己被綠了瞒渠。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片良蒸。...
    茶點(diǎn)故事閱讀 40,852評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖伍玖,靈堂內(nèi)的尸體忽然破棺而出嫩痰,到底是詐尸還是另有隱情,我是刑警寧澤窍箍,帶...
    沈念sama閱讀 36,520評論 5 351
  • 正文 年R本政府宣布串纺,位于F島的核電站,受9級特大地震影響椰棘,放射性物質(zhì)發(fā)生泄漏纺棺。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,181評論 3 335
  • 文/蒙蒙 一邪狞、第九天 我趴在偏房一處隱蔽的房頂上張望五辽。 院中可真熱鬧,春花似錦外恕、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,674評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至蠕蚜,卻和暖如春尚洽,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背靶累。 一陣腳步聲響...
    開封第一講書人閱讀 33,788評論 1 274
  • 我被黑心中介騙來泰國打工腺毫, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人挣柬。 一個月前我還...
    沈念sama閱讀 49,279評論 3 379
  • 正文 我出身青樓潮酒,卻偏偏與公主長得像,于是被迫代替她去往敵國和親邪蛔。 傳聞我的和親對象是個殘疾皇子急黎,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,851評論 2 361

推薦閱讀更多精彩內(nèi)容