keepalived他須要包含一個服務,好比這個服務用來實現高可用,最先講述集羣的時候一個角色可能存在單點故障,若是這個服務當機就有問題了,如今想讓這個服務高可用就得用一個keepalived或者heartbeat等高可用的軟件,讓他實現高可用
搭建了高可用的集羣首先要有個keepalived的服務而後還要有讓那個服務去實現高可用,這裏用nginx作高可用的實驗
爲何用nginx作實驗對象,由於在工做中或在生產環境中好多企業把nginx做爲負載均衡器,後面講負載均衡集羣的時候會介紹到nginx他能夠實現負載均衡linux
準備兩臺機器192.168.63.100和192.168.63.101,192.168.63.100做master,192.168.63.101做爲backup
兩臺機器都執行yum install -y keepalivednginx
兩臺機器都安裝nginx,其中100上已經編譯安裝過nginx,101上須要yum安裝nginx: yum install -y nginx
在101上安裝nginx的時候提示沒有可用軟件包 nginx。錯誤:無須任何處理,這個由於centos7系統庫中默認是沒有nginx的rpm包的,因此咱們本身須要先更新下rpm依賴庫git
[root@101xuni2 ~]# rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm ##更新rpm依賴庫
以上操做完成後修改100上keepalived的配置文件,配置文件內容去https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D21Z/master_keepalived.conf獲取vim
[root@100xuni1 ~]# ls /etc/keepalived/keepalived.conf ##配置文件路徑 /etc/keepalived/keepalived.conf
[root@100xuni1 ~]# > !$ ##清空配置文件的原始內容 > /etc/keepalived/keepalived.conf
[root@100xuni1 ~]# vim /etc/keepalived/keepalived.conf ##進入配置文件編輯,把如下內容拷貝到這個配置文件裏
global_defs { notification_email { aming@aminglinux.com } notification_email_from root@aminglinux.com smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id LVS_DEVEL } vrrp_script chk_nginx { script "/usr/local/sbin/check_ng.sh" interval 3 } vrrp_instance VI_1 { state MASTER interface ens33 virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASS auth_pass aminglinux>com } virtual_ipaddress { 192.168.188.100 } track_script { chk_nginx } }
130上定義檢查nginx是否正常的腳本,內容從https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D21Z/master_check_ng.sh獲取
centos
[root@100xuni1 ~]# vim /usr/local/sbin/check_ng.sh ##寫入如下內容
#!/bin/bash #時間變量,用於記錄日誌 d=`date --date today +%Y%m%d_%H:%M:%S` #計算nginx進程數量 n=`ps -C nginx --no-heading|wc -l` #若是進程爲0,則啓動nginx,而且再次檢測nginx進程數量, #若是還爲0,說明nginx沒法啓動,此時須要關閉keepalived if [ $n -eq "0" ]; then /etc/init.d/nginx start n2=`ps -C nginx --no-heading|wc -l` if [ $n2 -eq "0" ]; then echo "$d nginx down,keepalived will stop" >> /var/log/check_ng.log systemctl stop keepalived fi fi
寫完腳本作權限若是不去改這個他就沒有權限自動加載這個腳本bash
[root@100xuni1 ~]# chmod 755 /usr/local/sbin/check_ng.sh
100上啓動服務負載均衡
[root@100xuni1 ~]# systemctl start keepalived
關閉nginx服務自動起來keep成功less
查看日誌ide
[root@100xuni1 ~]# less /var/log/messages
開始配置從,在配置從以前先看防火牆測試
從上修改配置文件內容從https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D21Z/backup_keepalived.conf獲取
[root@101xuni2 ~]# vim /etc/keepalived/keepalived.conf ##寫入一下內容
global_defs { notification_email { aming@aminglinux.com } notification_email_from root@aminglinux.com smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id LVS_DEVEL } vrrp_script chk_nginx { script "/usr/local/sbin/check_ng.sh" interval 3 } vrrp_instance VI_1 { state BACKUP interface ens33 virtual_router_id 51 priority 90 advert_int 1 authentication { auth_type PASS auth_pass aminglinux>com } virtual_ipaddress { 192.168.188.100 } track_script { chk_nginx } }
定義檢查nginx是否正常的腳本內容從https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D21Z/backup_check_ng.sh獲取
[root@101xuni2 ~]# vim /usr/local/sbin/check_ng.sh ##寫入如下內容
#!/bin/bash #時間變量,用於記錄日誌 d=`date --date today +%Y%m%d_%H:%M:%S` #計算nginx進程數量 n=`ps -C nginx --no-heading|wc -l` #若是進程爲0,則啓動nginx,而且再次檢測nginx進程數量, #若是還爲0,說明nginx沒法啓動,此時須要關閉keepalived if [ $n -eq "0" ]; then systemctl start nginx n2=`ps -C nginx --no-heading|wc -l` if [ $n2 -eq "0" ]; then echo "$d nginx down,keepalived will stop" >> /var/log/check_ng.log systemctl stop keepalived fi fi
給腳本755權限
[root@101xuni2 ~]# chmod 755 /usr/local/sbin/check_ng.sh
啓動keepalived服務
[root@101xuni2 ~]# systemctl start keepalived
刪除nginx自動啓動成功
區分主從的nginx
主默認頁
從,是yum安裝的默認頁
訪問63.200的默認頁
下面作測試高可用的時候訪問的是vip的ip是192.168.63.200
停掉Keepalived查看是否高可用成功
之前主沒事的時候vip顯示主的頁面,主出現問題後跳轉到從的頁面設置高可用設置成功
主上恢復後,從上不運行vip的ip了一切恢復正常
高可用集羣測試完畢