2018-4-9 15周4次課 用keepalived配置高可用集群
·根據功能劃分為兩大類:高可用和負載均衡
·高可用集群通常為兩臺服務器,一臺工作,另外一臺作為冗余,當提供服務的機器宕機,冗余將接替繼續提供服務
·實現高可用的開源軟件有:heartbeat、keepalived
·負載均衡集群,需要有一臺服務器作為分發器,它負責把用戶的請求分發給後端的服務器處理,在這·個集群裏,除了分發器外,就是給用戶提供服務的服務器了,這些服務器數量至少為2
·實現負載均衡的開源軟件有LVS、keepalived、haproxy、nginx,商業的有F5、Netscaler
·在這裏我們使用keepalived來實現高可用集群,因為heartbeat在centos6上有一些問題,影響實驗效果
·keepalived通過VRRP(Virtual Router Redundancy Protocl)來實現高可用。
·在這個協議裏會將多臺功能相同的路由器組成一個小組,這個小組裏會有1個master角色和N(N>=1)個backup角色。
·master會通過組播的形式向各個backup發送VRRP協議的數據包,當backup收不到master發來的VRRP數據包時,就會認為master宕機了。此時就需要根據各個backup的優先級來決定誰成為新的mater。
·Keepalived要有三個模塊,分別是core、check和vrrp。其中core模塊為keepalived的核心,負責主進程的啟動、維護以及全局配置文件的加載和解析,check模塊負責健康檢查,vrrp模塊是來實現VRRP協議的。
18.3/18.4/18.5 用keepalived配置高可用集群
準備兩臺主機,一臺ip為192.168.65.128,一臺ip為192.168.65.129
128為master,129為backup
兩臺機器都執行yum install -y keepalived,兩臺機器都安裝nginx
編輯配置文件/etc/keepalived/keepalived.conf
可以先備份keepalived.conf文件為keepalived.conf.bak
再清空keepalived.conf,之後寫入新配置內容
[root@localhost ~]# cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak [root@localhost keepalived]# ls keepalived.conf keepalived.conf.bak [root@localhost keepalived]# > keepalived.conf ## > 為清空快捷鍵 [root@localhost keepalived]# vim keepalived.conf
內容為:http://note.youdao.com/noteshare?id=cdc47a51a478dd704ce05af309c56da4&sub=9D7895DAD16F4AA6BBC79C20A0855852
notification_email 有問題,發郵件給哪個郵箱,可以不定義
notification_email_from 有問題用哪個郵箱發郵件,可以不定義
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_DEVEL 都可以不定義
vrrp_script chk_nginx 檢測服務是否正常 interval 3 檢測間斷為3秒
vrrp_instance VI_1 master相關的配置
state 角色是master,如果是從的話就是 backup
interface 發送廣播使用的網卡
virtual_router_id 路由id
priority 100 權重
authentication 認證相關信息
virtual_ipaddress 主從共有ip,也就是vip,主宕機,從解析到該ip上去
track_script 加載腳本,之前定義的chk_nginx檢查nginx
定義檢查nginx是否正常的腳本(keepalived.conf配置文件中定義位置):
[root@localhost keepalived]# vim /usr/local/sbin/check_ng.sh
配置文件內容:http://note.youdao.com/noteshare?id=17b7d082afd8d31b4fd5c48b5f93bcc1&sub=E207C9413B70409DA1A4E3F0A3FEE494
執行ps -C nginx --no-heading|wc -l命令計算nginx進程數,如果進程數等於0,則說明nginx服務沒有啟動,那麽需要啟動nginx服務,啟動之後再查看進程數值,如果還是0,說明nginx依然沒有啟動,那麽需要寫一個日期的錯誤提示到日誌裏,方便排查問題。之後停止keepalived,主keepalived一停,從就會自動起來服務,以免主從都有keepalived啟動,產生紊亂,腦裂。
ip addr可以看到vip 192.168.65.100
更改檢查nginx腳本的權限
[root@localhost keepalived]# chmod 755 /usr/local/sbin/check_ng.sh [root@localhost keepalived]# systemctl start keepalived ##啟動keepalived [root@localhost keepalived]# ps aux | grep keepalived root 1726 0.0 0.1 120740 1404 ? Ss 22:01 0:00 /usr/sbin/keepalived -D root 1727 0.0 0.2 120740 2752 ? S 22:01 0:00 /usr/sbin/keepalived -D root 1728 0.0 0.2 125104 2832 ? S 22:01 0:00 /usr/sbin/keepalived -D root 1745 0.0 0.0 112676 980 pts/0 R+ 22:01 0:00 grep --color=auto keepalived [root@localhost keepalived]# ps aux | grep nginx ##nginx也已經啟動 root 850 0.0 0.1 45992 1280 ? Ss 20:58 0:00 nginx: master process /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf nobody 854 0.0 0.3 48480 3920 ? S 20:58 0:00 nginx: worker process nobody 855 0.0 0.3 48480 3920 ? S 20:58 0:00 nginx: worker process root 1760 0.0 0.0 112676 980 pts/0 R+ 22:02 0:00 grep --color=auto nginx [root@localhost keepalived]# /etc/init.d/nginx stop ##停止nginx服務 Stopping nginx (via systemctl): [ 確定 ] [root@localhost keepalived]# ps aux | grep nginx ##ngxin又自己啟動了 root 1821 0.0 0.1 45992 1292 ? Ss 22:02 0:00 nginx: master process /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf nobody 1825 0.0 0.3 48480 3932 ? S 22:02 0:00 nginx: worker process nobody 1826 0.0 0.3 48480 3932 ? S 22:02 0:00 nginx: worker process root 1828 0.0 0.0 112676 980 pts/0 R+ 22:02 0:00 grep --color=auto nginx
·日誌都在/var/log/messages下
·檢查防火墻主從iptables和getenforce關閉
·編輯從上的/etc/keepalived/keepalived.conf
[root@localhost ~]# vim /etc/keepalived/keepalived.conf
內容:http://note.youdao.com/noteshare?id=b12b72e89f72aca6896e4f250f7b4ce2&sub=94B6C23176174E7AA5E4BADF6F31802F
state 為BACKUP
virtual_router_id,vip 都和主一致
priority 主是100,從是90,要低於主
監控nginx腳本:
[root@localhost ~]# vim /usr/local/sbin/check_ng.sh
如果nginx是yum 安裝的,可以用systemctl start nginx為啟動命令
更改腳本權限:
[root@localhost keepalived]# chmod 755 /usr/local/sbin/check_ng.sh
此時訪問192.168.65.128可以訪問nginx的默認虛擬服務器
而192.168.65.129也可以訪問自己nginx默認頁
如果是yum安裝的,那麽/usr/share/nginx/html/index.html
而此時如果訪問192.168.65.100,那麽訪問的是主
主上的ip:
從上ip:
[root@localhost ~]# iptables -I OUTPUT -p vrrp -j DROP
雖然從上有了vip,但是主上vip並沒有釋放掉
訪問192.168.65.100,依然是主上的默認虛擬服務器
停止主上的keepalived服務,那麽主上釋放vip,訪問192.168.65.100,已經不是主上的默認虛擬服務器了,而是從上的,因此vip已經轉移到從上
[root@localhost ~]# systemctl stop keepalived
重啟主上的keepalived,那麽vip會重新從從上轉移到主上
[root@localhost ~]# systemctl start keepalived
2018-4-9 15周4次課 用keepalived配置高可用集群