一.Linux安裝nginx
1.安裝依賴
yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel
2.創建一個文件夾
cd /usr/local mkdir nginx cd nginx
3.將nginx安裝包放在nginx文件夾下並解壓
或者使用wget聯網下載
wget http://nginx.org/download/nginx-1.16.1.tar.gz tar -xvf nginx-1.16.1.tar.gz
4.編譯並make
cd nginx-1.16.1 ./configure --prefix=/usr/local/naginx make make install
常用命令
#啟動 /usr/local/nginx/sbin/nginx #修改配置文件重新加載 /usr/local/nginx/sbin/nginx -s reload #關閉 /usr/local/nginx/sbin/nginx
二:安裝Keepalived
1.聯網下載到/usr/local目錄下並解壓
有可能會提示連接不成功,加上它提示的命令再下載就好了
cd /usr/local wget http://www.keepalived.org/software/keepalived-1.4.2.tar.gz
tar zxvf keepalived-1.4.2.tar.gz
2.安裝相關依賴,有不用下載了
yum install -y gcc openssl-devel popt-devel
3.編譯
cd keepalived-1.4.2 ./configure --prefix=/usr/local/keepalived make make install
4.相關配置,復制就完了
cp /usr/local/keepalived-1.4.2/keepalived/etc/init.d/keepalived /etc/init.d/ mkdir /etc/keepalived cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/ cp /usr/local/keepalived-1.4.2/keepalived/etc/sysconfig/keepalived /etc/sysconfig/ cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
使用keepalived保證nginx的高可用(一主一從)
我的主服務器ip為(192.168.118.3),從機(192.168.118.5)
在兩條服務器分別安裝nginx和keepalived,
修改keeplived.conf文件
vim /etc/keepalived/keepalived.conf
主機配置文件
! Configuration File for keepalived global_defs { #一個沒重復的名字即可 router_id LVS_DEVEL } # 檢測nginx是否運行 vrrp_script chk_nginx { script "/etc/keepalived/nginx_check.sh" interval 2
#權重減少20,減少完要比從機的值小 weight -20 } vrrp_instance VI_1 { # MASTER代表主機 state MASTER # 網卡名字 ip addr 可以查看 interface eno16777736 # 同一個keepalived集群的virtual_router_id相同 virtual_router_id 51 # 權重,master要大於slave priority 100 # 主備通訊時間間隔 advert_int 1 # 如果兩節點的上聯交換機禁用了組播,則采用vrrp單播通告的方式 # 本機ip unicast_src_ip 192.168.118.3 unicast_peer { # 其他機器ip 192.168.118.5 } # 設置nopreempt防止搶占資源 nopreempt # 主備保持一致 authentication { auth_type PASS auth_pass 1111 } # 與上方nginx運行狀況檢測呼應 track_script { chk_nginx } virtual_ipaddress { # 虛擬ip地址(VIP,一個尚未占用的內網ip即可) 192.168.118.118 } }
從機配置文! Configuration File for keepalived
global_defs { #一個沒重復的名字即可 router_id LVS_DEVEL } # 檢測nginx是否運行 vrrp_script chk_nginx { script "/etc/keepalived/nginx_check.sh" interval 2
weight -20 } vrrp_instance VI_1 { # 代表是從機 state BACKUP # 網卡名字,ip addr獲取 interface eno16777736 # 同一個keepalived集群的virtual_router_id相同 virtual_router_id 51 # 權重,master要大於slave priority 90 # 主備通訊時間間隔 advert_int 1 # 如果兩節點的上聯交換機禁用了組播,則采用vrrp單播通告的方式 # 本機ip unicast_src_ip 192.168.118.5 unicast_peer { # 其他機器ip 192.168.118.3 } # 設置nopreempt防止搶占資源 nopreempt # 主備保持一致 authentication { auth_type PASS auth_pass 1111 } # 與上方nginx運行狀況檢測呼應 track_script { chk_nginx } virtual_ipaddress { # 虛擬ip地址(VIP,一個尚未占用的內網ip即可) 192.168.118.118 } }
主從機都需配置檢測nginx是否在運行,不在允許就直接啟動nginx的腳本,和keepalived放在一起
腳本名稱 nginx_check.sh
#!/bin/bash A=`ps -C nginx –no-header |wc -l` if [ $A -eq 0 ];then /usr/local/nginx/sbin/nginx sleep 2 if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then killall keepalived fi fi
只要配置好了,以后直接啟動keepalived就好了,keepalived運行之后就會檢測nginx是否在運行,不在運行就通過腳本去啟動
自動重啟不了解決方案
查看腳本是否有運行的權限
如果你是root登陸的話(不是的話,切換到root用戶,對*.sh 賦可執行的權限)
chmod 777*.sh 或者 chmod +x *.sh
keepalived常用命令
#啟動 service keepalived start #停止 service keepalived stop #查看狀態 service keepalived status
開始測試
直接訪問主機的nginx服務
直接訪問從機的nginx服務
通過keepalived 設置的虛擬ip進行訪問
一切正常,將主機的keepalived服務給停掉,模擬服務器宕機的場景
然后再通過虛擬IP進行訪問
成功切換到備用服務器
接下來重啟主服務器,再訪問虛擬ip
由此可見,當主機dowm掉的時候才會訪問從機,當主機連進來的時候又回去訪問主機
當主機正常運行通過ip addr命令的時候可以看到網絡下多了個虛擬ip,而從機卻沒有,只要當主機掛了時候從機才會顯示xuniip