生產(chǎn)環(huán)境部署Nginx服務(wù)器雙機(jī)熱備部署keepalived的步驟(多種模式教程)
前言:今天演示下生產(chǎn)環(huán)境keepalived的部署方式,安裝模式有很多,比如說主備模型和雙主模型,主備分:搶占模式 和 非搶占模式。這里我會(huì)一一展開說具體怎么配置
一、雙節(jié)點(diǎn)均部署Nginx:
第一步:上傳安裝包到/usr/local/
第二步:安裝編譯依賴(使用普通用戶需要家sudo)
yum install gcc gcc-c++ yum install zlib zlib-devel yum install pcre pcre-devel yum install openssl libssl-dev
第三步:解壓,編譯安裝:
解壓命令: sudo tar -zxvf nginx-1.24.0.tar.gz 進(jìn)入nginx路徑:cd nginx-1.24.0 編譯安裝: 命令: sudo ./configure --prefix=/etc/nginx --sbin-path=/usr/bin/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --with-http_ssl_module # --with-http_ssl_module這個(gè)參數(shù)為了啟用 SSL 支持。 命令:sudo make install
第四步:?jiǎn)?dòng)nginx
命令:sudo nginx
第五步:停止nginx命令:sudo nginx -s stop
第六步:配置nginx開機(jī)啟動(dòng)
sudo vim /etc/rc.d/rc.local 添加執(zhí)行語句/usr/bin/nginx 退出保存 開機(jī)啟動(dòng)文件授權(quán) sudo chmod +x /etc/rc.d/rc.local
第六步:重載nginxnginx -s reload
Nginx安全加固配置:在nginx.conf配置文件里加上TLSv1.2 TLSv1.3; 和隱藏版本號(hào)的部分。
# 在server { }塊里配置啟用TLSv1.2和TLSv1.3的參數(shù) ssl_protocols TLSv1.2 TLSv1.3; # 在http { }塊里配置隱藏Nginx服務(wù)器版本信息的參數(shù) server_tokens off;
二、雙節(jié)點(diǎn)部署keepalived主備模式
第一步:上傳安裝包到/mpjava/
第二步:安裝gcc等編譯需要的軟件庫(kù)。(要求網(wǎng)絡(luò)能連接外網(wǎng)進(jìn)行更新,如果已安裝,可跳過此步驟)
命令:yum -y install libnl libnl-devel 命令:yum -y install gcc gcc-c++ 命令:yum -y install openssl 命令:yum -y install openssl-devel 命令:yum -y install libnl3-devel
第三步:解壓,并編譯安裝
命令:tar -zxf keepalived-2.2.4.tar.gz 命令:cd keepalived-2.2.4 命令:./configure --prefix=/usr/local/keepalived 命令:make && make install
第四步:復(fù)制配置文件
命令:mkdir -p /etc/keepalived 命令:cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/ #主配置文件 命令:cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/ 命令:ln -s /usr/local/keepalived/sbin/keepalived /sbin/
第五步:設(shè)置開機(jī)啟動(dòng)命令:chkconfig keepalived on
第六步:?jiǎn)?dòng)keepalived
命令:systemctl start keepalived 命令:ps -ef | grep keepalived
問題:發(fā)現(xiàn)未能正常啟動(dòng)
查看日志命令: systemctl status keepalived.service -l:查看 keepalived 服務(wù)的狀態(tài)及相關(guān)日志信息 journalctl -u keepalived.service -f:實(shí)時(shí)查看 keepalived 服務(wù)的日志輸出 tail -22f /var/log/messages | grep Keepalived:通過查看系統(tǒng)日志/var/log/messages中與 Keepalived 相關(guān)的內(nèi)容來獲取日志信息
原因:通過查詢系統(tǒng)日志發(fā)現(xiàn)keepalived配置文件默認(rèn)網(wǎng)卡名和當(dāng)前服務(wù)器網(wǎng)卡名不一致。
解決:需要修改/etc/keepalived/keepalived.conf的網(wǎng)卡名,與服務(wù)器同步即可。重啟keepalived:systemctl start keepalived
第七步:新建nginx檢測(cè)腳本nginxcheck.sh,并存放在指定目錄,本例使用:/mpjava/nginxcheck.sh
命令:vim /mpjava/nginxcheck.sh 添加以下內(nèi)容: #/bin/sh nginxPidNum=`ps -C nginx --no-header |wc -l` if [[ $nginxPidNum -eq 0 ]]; then killall keepalived fi 注:需要設(shè)置nginxcheck.sh有執(zhí)行權(quán)限,chmod 777 /mpjava/nginxcheck.sh
第八步:按下例分別修改主、備服務(wù)器/etc/keepalived/keepalived.conf
聲明:這里的ip為虛假ip,只是舉例說明
主節(jié)點(diǎn):
! Configuration File for keepalived global_defs { notification_email { acassen@firewall.loc failover@firewall.loc sysadmin@firewall.loc } notification_email_from Alexandre.Cassen@firewall.loc smtp_server 10.0.0.1 #配置當(dāng)前網(wǎng)關(guān) smtp_connect_timeout 30 router_id LVS_DEVEL vrrp_skip_check_adv_addr vrrp_strict vrrp_garp_interval 0 vrrp_gna_interval 0 } vrrp_script chk_nginx { script "/mpjava/nginxcheck.sh" #腳本位置 interval 2 #檢測(cè)時(shí)間間隔 weight 2 #權(quán)重2 } vrrp_instance VI_1 { state BACKUP #主節(jié)點(diǎn)如果寫B(tài)ACKUP,和配置下面的nopreempt參數(shù)就為 非搶占模式;如果寫MASTER,刪除nopreempt參數(shù),則為 搶占模式 nopreempt #非搶占模式參數(shù) interface enp4s3 virtual_router_id 69 #不能使用同網(wǎng)段已使用的ip地址;同一個(gè)VRRP實(shí)例中每個(gè)節(jié)點(diǎn)的虛擬路由ID必須相同 priority 100 #不管是否開啟搶占模式,主節(jié)點(diǎn)的優(yōu)先級(jí)必須高于 從節(jié)點(diǎn) advert_int 1 authentication { auth_type PASS auth_pass 1111 } track_script { #以腳本為監(jiān)控chk_http_port是前面填寫的 chk_nginx } virtual_ipaddress { 10.0.0.10 #vip } }
從節(jié)點(diǎn):
! Configuration File for keepalived global_defs { notification_email { acassen@firewall.loc failover@firewall.loc sysadmin@firewall.loc } notification_email_from Alexandre.Cassen@firewall.loc smtp_server 10.0.0.1 #配置當(dāng)前網(wǎng)關(guān) smtp_connect_timeout 30 router_id LVS_DEVEL vrrp_skip_check_adv_addr vrrp_strict vrrp_garp_interval 0 vrrp_gna_interval 0 } vrrp_script chk_nginx { script "/mpjava/nginxcheck.sh" #腳本位置 interval 2 #檢測(cè)時(shí)間間隔 weight 2 #權(quán)重2 } vrrp_instance VI_1 { state BACKUP #不管是搶占模式否,從節(jié)點(diǎn)設(shè)置為backup nopreempt #非搶占模式參數(shù),如果不開啟該模式,需要?jiǎng)h除 interface eth0 virtual_router_id 69 #不能使用同網(wǎng)段已使用的ip地址;同一個(gè)VRRP實(shí)例中每個(gè)節(jié)點(diǎn)的虛擬路由ID必須相同 priority 99 advert_int 1 authentication { auth_type PASS auth_pass 1111 } track_script { #以腳本為監(jiān)控chk_http_port是前面填寫的 chk_nginx } virtual_ipaddress { 10.0.0.10 #VIP } }`
第九步:驗(yàn)證
由于涉及公司內(nèi)網(wǎng)ip,驗(yàn)證結(jié)果不方便展示,我這里口述方法:
搶占模式:?jiǎn)?dòng)兩個(gè)節(jié)點(diǎn)的nginx和keepalived,當(dāng)主節(jié)點(diǎn)的keepalived關(guān)了后,VIP會(huì)漂移到從節(jié)點(diǎn)上,當(dāng)主節(jié)點(diǎn)啟動(dòng)后,此時(shí)VIP會(huì)漂移回主節(jié)點(diǎn); 非搶占模式:?jiǎn)?dòng)兩個(gè)節(jié)點(diǎn)的nginx和keepalived,當(dāng)主節(jié)點(diǎn)的keepalived關(guān)了后,VIP會(huì)漂移到從節(jié)點(diǎn)上,此時(shí)再將主節(jié)點(diǎn)啟動(dòng)后,VIP不會(huì)漂移回主節(jié)點(diǎn); (以上驗(yàn)證方法用命令ip a實(shí)時(shí)查看網(wǎng)卡的VIP地址的漂移節(jié)奏)
高可用集群中的不搶占功能。在一個(gè)HA集群中,如果主節(jié)點(diǎn)死機(jī)了,備用節(jié)點(diǎn)會(huì)進(jìn)行接管,主節(jié)點(diǎn)再次正常啟動(dòng)后一般會(huì)自動(dòng)接管服務(wù)。對(duì)于實(shí)時(shí)性和穩(wěn)定性要求不高的業(yè)務(wù)系統(tǒng)來說,這種來回切換的操作還是可以接受的。而對(duì)于穩(wěn)定性和實(shí)時(shí)性要求很高的業(yè)務(wù)系統(tǒng)來說,不建議來回切換,畢竟服務(wù)的切換存在一定的風(fēng)險(xiǎn)和不穩(wěn)定性
三、Keepalived主主模式
第一步:按下例分別修改主、主服務(wù)器/etc/keepalived/keepalived.conf
聲明:這里的ip為虛假ip,只是舉例說明
主節(jié)點(diǎn)1:
! Configuration File for keepalived global_defs { notification_email { acassen@firewall.loc failover@firewall.loc sysadmin@firewall.loc } notification_email_from Alexandre.Cassen@firewall.loc smtp_server 10.0.0.1 #配置當(dāng)前網(wǎng)關(guān) smtp_connect_timeout 30 router_id LVS_DEVEL vrrp_skip_check_adv_addr vrrp_strict vrrp_garp_interval 0 vrrp_gna_interval 0 } vrrp_script chk_nginx { script "/mpjava/nginxcheck.sh" #腳本位置 interval 2 #檢測(cè)時(shí)間間隔 weight 2 #權(quán)重2 } vrrp_instance VI_1 { state MASTER #主節(jié)點(diǎn)為MASTER interface enp4s3 virtual_router_id 69 #不能使用同網(wǎng)段已使用的ip地址;同一個(gè)VRRP實(shí)例中每個(gè)節(jié)點(diǎn)的虛擬路由ID必須相同 priority 100 #MASTER節(jié)點(diǎn)必須高于BACKUP節(jié)點(diǎn) advert_int 1 authentication { auth_type PASS auth_pass 1111 } track_script { #以腳本為監(jiān)控chk_http_port是前面填寫的 chk_nginx } virtual_ipaddress { 10.0.0.8 #vip1 } } vrrp_instance VI_2 { state BACKUP #該節(jié)點(diǎn)設(shè)置為backup interface eth0 virtual_router_id 70 # 同一個(gè)VRRP實(shí)例中每個(gè)節(jié)點(diǎn)的虛擬路由ID必須相同 priority 90 # MASTER節(jié)點(diǎn)必須高于BACKUP節(jié)點(diǎn) advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 10.0.0.9 #vip2 } }
主節(jié)點(diǎn)2:
! Configuration File for keepalived global_defs { notification_email { acassen@firewall.loc failover@firewall.loc sysadmin@firewall.loc } notification_email_from Alexandre.Cassen@firewall.loc smtp_server 10.0.0.1 #配置當(dāng)前網(wǎng)關(guān) smtp_connect_timeout 30 router_id LVS_DEVEL vrrp_skip_check_adv_addr vrrp_strict vrrp_garp_interval 0 vrrp_gna_interval 0 } vrrp_script chk_nginx { script "/mpjava/nginxcheck.sh" #腳本位置 interval 2 #檢測(cè)時(shí)間間隔 weight 2 #權(quán)重2 } vrrp_instance VI_1 { state BACKUP #不管是搶占模式否,從節(jié)點(diǎn)設(shè)置為backup nopreempt #非搶占模式參數(shù),如果不開啟該模式,需要?jiǎng)h除 interface eth0 virtual_router_id 69 #不能使用同網(wǎng)段已使用的ip地址;同一個(gè)VRRP實(shí)例中每個(gè)節(jié)點(diǎn)的虛擬路由ID必須相同 priority 99 #MASTER節(jié)點(diǎn)必須高于BACKUP節(jié)點(diǎn) advert_int 1 authentication { auth_type PASS auth_pass 1111 } track_script { #以腳本為監(jiān)控chk_http_port是前面填寫的 chk_nginx } virtual_ipaddress { 10.0.0.8 #vip1 } }` vrrp_instance VI_2 { state MASTER #該節(jié)點(diǎn)設(shè)置為MASTER interface eth0 virtual_router_id 70 #同一個(gè)VRRP實(shí)例中每個(gè)節(jié)點(diǎn)的虛擬路由ID必須相同 priority 100 #MASTER節(jié)點(diǎn)的優(yōu)先級(jí)必須高于BACKUP節(jié)點(diǎn) advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 10.0.0.9 #vip2 } }
第二步:驗(yàn)證
由于涉及公司內(nèi)網(wǎng)ip,驗(yàn)證結(jié)果不方便展示,我這里口述方法:
啟動(dòng)兩個(gè)主節(jié)點(diǎn)的nginx和keepalived,將nginx中配置的域名解析到這兩個(gè)VIP地址上,瀏覽器訪問正常。此時(shí)關(guān)閉其中一個(gè)主節(jié)點(diǎn)的keepalived,VIP會(huì)漂移到另外一臺(tái)主節(jié)點(diǎn)服務(wù)器上。 (以上驗(yàn)證方法用命令ip a實(shí)時(shí)查看網(wǎng)卡的VIP地址的漂移節(jié)奏)
在keepalived的主備模式中,當(dāng)主節(jié)點(diǎn)正常的時(shí)候,備節(jié)點(diǎn)永遠(yuǎn)處于閑置狀態(tài),不會(huì)接受web請(qǐng)求,這樣就會(huì)浪費(fèi)一半的資源。根據(jù)自身業(yè)務(wù)和資源等綜合來選擇模式。
到此這篇關(guān)于生產(chǎn)環(huán)境部署Nginx服務(wù)器雙機(jī)熱備部署-keepalived(多種模式教程)的文章就介紹到這了,更多相關(guān)Nginx keepalived 雙機(jī)熱備部署內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
nginx反向代理proxy_pass遇到的死循環(huán)問題
這篇文章主要介紹了nginx反向代理proxy_pass遇到的死循環(huán)問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-01-01Nginx Lua 緩存配置的實(shí)現(xiàn)步驟
在Web應(yīng)用緩存層次中,Nginx Lua緩存因其高效的協(xié)程機(jī)制,與Nginx的集成,以及OpenResty的擴(kuò)展性,成為了一種高性能的緩存解決方案,本文就來詳細(xì)介紹,感興趣的可以了解一下2022-05-05Nginx中l(wèi)ocation proxy_pass加與不加/的區(qū)別說明
本文總結(jié)了Nginx配置中的location匹配規(guī)則和proxy_pass用法,包括前綴匹配、精確匹配、正則表達(dá)式匹配、通配符匹配以及proxy_pass的配置細(xì)節(jié)2024-12-12