18.1 集羣介紹
·根據功能劃分爲兩大類:高可用和負載均衡
·高可用集羣通常爲兩臺服務器,一臺工作,另外一臺作爲冗餘,當提供服務的機器宕機,冗餘將接替繼續提供服務
·實現高可用的開源軟件有: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
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
執行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
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