集羣介紹+用keepalived配置高可用集羣(總結)

1、集羣介紹

根據功能劃分爲兩大類:高可用和負載均衡

高可用集羣通常爲兩臺服務器,一臺工作,另外一臺作爲冗餘,當提供服務的機器宕機,冗餘將接替繼續提供服務
高可用集羣,英文原文爲High Availability Cluster,簡稱HACluster,簡單的說,集羣(cluster)就是一組計算機,它們作爲一個整體向用戶提供一組網絡資源。這些單個的計算機系統 就是集羣的節點(node)
HA(High Available), 高可用性羣集是通過系統的可靠性(reliability)和可維護性(maintainability)來度量的。工程上,通常用平均無故障時間(MTTF)來度量系統的可靠性,用平均維修時間(MTTR)來度量系統的可維護性。於是可用性被定義爲:HA=MTTF/(MTTF+MTTR)*100%
==具體HA衡量標準:
99% 一年宕機時間不超過4天
99.9% 一年宕機時間不超過10小時
99.99% 一年宕機時間不超過1小時
99.999% 一年宕機時間不超過6分鐘==
實現高可用的開源軟件有:heartbeat、keepalived

負載均衡集羣,需要有一臺服務器作爲分發器,它負責把用戶的請求分發給後端的服務器處理,在這個集羣裏,除了分發器外,就是給用戶提供服務的服務器了,這些服務器數量至少爲2
實現負載均衡的開源軟件有LVS、keepalived、haproxy、nginx,商業的有F5、Netscaler

2keepalived介紹

在這裏我們使用keepalived來實現高可用集羣,因爲heartbeat在centos6上有一些問題,影響實驗效果
keepalived通過VRRP(Virtual Router Redundancy Protocl)來實現高可用。
Keepalived要有三個模塊,分別是core、check和vrrp。中core模塊爲keepalived的核心,負責主進程的啓動、維護以及全局配置文件的加載和解析,check模塊負責健康檢查,vrrp模塊是來實現VRRP協議的。

3、用keepalived配置高可用集羣(總結)

環境:有A[root@chy01 ~],B[root@chy ~]#
兩個服務器,A爲主服務器,B爲備服務器。首先兩臺服務器都需要安裝keepalived。具體配置如下:
配置主:

[root@chy01 ~]# yum install -y keepalived
(A機器安裝keepalived)
[root@chy ~]# yum install -y keepalived
(B機器安裝keepalived)
[root@chy01 ~]# ps aux |grep nginx
root       2485  0.0  0.0  45484  1280 ?        Ss   05:15   0:00 nginx: master process /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
nobody     2492  0.0  0.2  47972  4172 ?        S    05:15   0:00 nginx: worker process
nobody     2493  0.0  0.2  47972  3916 ?        S    05:15   0:00 nginx: worker process
root       3041  0.0  0.0 112664   976 pts/0    R+   05:28   0:00 grep --color=auto nginx
(A機器上安裝過nginx,需要用nginx來做爲負載均衡器)
[root@chy ~]# yum install -y nginx 
(B機器上用yum安裝的nginx,因爲之前沒有安裝過)
[root@chy01 ~]# >!$
>/etc/keepalived/keepalived.conf
(清空master的keepalived的配置文件)
[root@chy01 ~]# vim /etc/keepalived/keepalived.conf 
global_defs {
   notification_email {
     [email protected]
   }
   notification_email_from [email protected]
   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 chylinux>com
    }
    virtual_ipaddress {
        192.168.212.1
    }
    track_script {
        chk_nginx
    }
}
如上是主的配置文件:如下是詳解
1,全局定義(global definition)配置範例
global_defs {
   notification_email {
     [email protected]
   }
   notification_email_from [email protected]
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}global_defs全局配置標識,表面這個區域{}是全局配置,表示keepalived在發生諸如切換操作時需要發送email通知,以及email發送給哪些郵件地址,郵件地址可以多個,每行一個
notification_email_from 
表示發送通知郵件時郵件源地址是誰
smtp_server 127.0.0.1
表示發送email時使用的smtp服務器地址,這裏可以用本地的sendmail來實現
mtp_connect_timeout 30
連接smtp連接超時時間
router_id node1
機器標識
vrrp_script chk_nginx {
    script "/usr/local/sbin/check_ng.sh"
    interval 3
}
vrrp_instance VI_1 {
    state MASTER state 指定instance(Initial)的初始狀態,就是說在配置好後,這臺服務器的初始狀態就是這裏指定的,但這裏指定的不算,還是得要通過競選通過優 先級來確定,裏如果這裏設置爲master,但如若他的優先級不及另外一臺,那麼這臺在發送通告時,會發送自己的優先級,另外一臺發現優先級不如自己的 高,那麼他會就回搶佔爲master
    interface ens33 實例綁定的網卡,因爲在配置虛擬IP的時候必須是在已有的網卡上添加的
    virtual_router_id 51這裏設置VRID,這裏非常重要,相同的VRID爲一個組,他將決定多播的MAC地
    priority 100這裏設置VRID,這裏非常重要,相同的VRID爲一個組,他將決定多播的MAC地址
    advert_int 1檢查間隔,默認爲1秒
    authentication {這裏設置認證
        auth_type PASS認證方式,可以是PASS或AH兩種認證方式
        auth_pass chylinux>com
    }
    virtual_ipaddress {
        192.168.212.1
    }這裏設置的就是VIP,也就是虛擬IP地址,他隨着state的變化而增加刪除,當state爲master的時候就添加,當state爲backup的時候刪除,這裏主要是有優先級來決定的,和state設置的值沒有多大關係,這裏可以設置多個IP地址
    track_script {
        chk_nginx
    }
}
[root@chy01 ~]# 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
[root@chy01 ~]# chmod 755 /usr/local/sbin/check_ng.sh 
(增加腳本的權限)
[root@chy01 ~]# systemctl start keepalived
[root@chy01 ~]# ps aux |grep keep
root       3225  0.0  0.0 111708  1308 ?        Ss   06:13   0:00 /usr/sbin/keepalived -D
root       3226  0.0  0.1 111708  2560 ?        S    06:13   0:00 /usr/sbin/keepalived -D
root       3227  0.0  0.1 111708  1624 ?        S    06:13   0:00 /usr/sbin/keepalived -D
root       3254  0.0  0.0 112664   972 pts/0    S+   06:13   0:00 grep --color=auto keep
[root@chy01 ~]# ps aux |grep nginx
root       2485  0.0  0.0  45484  1280 ?        Ss   05:15   0:00 nginx: master process /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
nobody     2492  0.0  0.2  47972  4172 ?        S    05:15   0:00 nginx: worker process
nobody     2493  0.0  0.2  47972  3916 ?        S    05:15   0:00 nginx: worker process
root       3274  0.0  0.0 112668   972 pts/0    S+   06:13   0:00 grep --color=auto nginx
(啓動keepalive服務並且查看是否啓動)
[root@chy01 ~]# less /var/log/messages
(keepalive的log日誌)
[root@chy01 ~]# ip add 
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:13:b3:3b brd ff:ff:ff:ff:ff:ff
    inet 192.168.212.11/24 brd 192.168.212.255 scope global ens33
       valid_lft forever preferred_lft forever
    inet 192.168.100.1/32 scope global ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::243b:ddac:7a2b:a5b/64 scope link 
       valid_lft forever preferred_lft forever
(查看虛擬ip地址 ,需要用ipadd 查看)
(之後需要在主服務器,與備服務器上面都查看防火牆是否關閉,兩邊都需要關閉纔可以)

配置從服務器

[root@chy ~]# >/etc/keepalived/keepalived.conf 
(清空備的配置文件)

global_defs {
   notification_email {
     [email protected]
   notification_email_from [email protected]
   smtp_server 127.0.0.1
   notification_email {
     [email protected]
   smtp_server 127.0.0.1
}  
     [email protected]
   }
   notification_email_from [email protected]
   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 chylinux>com
    }
    virtual_ipaddress {
        192.168.212.1
    }
    track_script {
        chk_nginx
    }
}
(如上是備的配置文件)
[root@chy ~]# 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
[root@chy ~]# chmod 755 /usr/local/sbin/check_ng.sh 
[root@chy ~]# source /usr/local/sbin/check_ng.sh 
(使腳本生效)
[root@chy ~]# systemctl start keepalived
[root@chy ~]# ps aux |grep keepalived
root       4484  0.0  0.0 111728  1308 ?        Ss   06:58   0:00 /usr/sbin/keepalived -D
root       4485  0.0  0.1 111728  2560 ?        S    06:58   0:00 /usr/sbin/keepalived -D
root       4486  0.0  0.1 111728  1644 ?        S    06:58   0:00 /usr/sbin/keepalived -D
root       4503  0.0  0.0 112664   980 pts/0    R+   06:58   0:00 grep --color=auto keepalived
(啓動keepalived並且查看是否啓動)
[root@chy ~]# cat /usr/share/nginx/html/index.html 
(yum安裝的nginx的默認主機的位置)

測試高可用

[root@chy01 ~]# /etc/init.d/nginx stop
Stopping nginx (via systemctl):                            [  確定  ]
(測試1關閉nginx)
[root@chy01 ~]# ps aux |grep nginx
root      10942  0.0  0.0  45484  1276 ?        Ss   07:13   0:00 nginx: master process /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
nobody    10944  0.0  0.2  47972  3912 ?        S    07:13   0:00 nginx: worker process
nobody    10945  0.0  0.2  47972  3912 ?        S    07:13   0:00 nginx: worker process
root      10961  0.0  0.0 112664   976 pts/0    S+   07:13   0:00 grep --color=auto nginx
(之後查看會自動啓動這個是因爲寫的腳本check)
測試2:在master上增加iptabls規則 
[root@chy01 ~]# iptables -I OUTPUT -p vrrp -j DROP
[root@chy01 ~]# iptables -nvL
Chain INPUT (policy ACCEPT 58 packets, 3974 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 36 packets, 3394 bytes)
 pkts bytes target     prot opt in     out     source               destination         
   30  1200 DROP       112  --  *      *       0.0.0.0/0            0.0.0.0/0           
(查看已經iptables的規則)
測試2並不能測試出keepvalied的是否可以速度切換)
測試3:當停止主的keepvalied服務時,到從的服務器上可以迅速的看到切換的速度。
[root@chy ~]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:70:77:62 brd ff:ff:ff:ff:ff:ff
    inet 192.168.212.10/24 brd 192.168.212.255 scope global ens33
       valid_lft forever preferred_lft forever
    inet 192.168.212.100/32 scope global ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::338e:589c:fa07:65e5/64 scope link 
       valid_lft forever preferred_lft forever
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章