【2018.07.03學習筆記】【linux高級知識 18.1-18.5】

18.1 Linux集羣介紹

linux集羣功能能夠分爲:HA高可用、負載均衡。mysql

高可用是:有兩臺機器,一臺做爲主用工做,一臺做爲冗餘備份。當主用機器宕機後,冗餘機器將接替,繼續提供服務。linux

開源的高可用軟件有:heartbeat、keepalived,如今基本上都使用keepalived。

負載均衡是:一臺機器做爲分發器,負責把用戶的請求分發給後端真正的處理服務器,除了分發器以外,其餘都是給用戶提供服務的後端機器,後端機器至少有2臺。nginx

開源的負載均衡軟件有:LVS、keepalived、haproxy、nginx等。

商業的負載均衡有:F五、Netscaler,優勢是穩定,支持高併發,可是價格昂貴。sql

18.2 keepalived介紹

HA高可用咱們重點學習keepalived。heartbeat因爲在Centos6上會有一些問題,偶爾會切換不及時,已經比較少使用。vim

keepalived:是使用VRRP(虛擬路由冗餘協議)實現的。後端

HA高可用:相似是多臺功能相同的路由器組成的一個小組,小組中有一臺master角色,N>=1個backup角色。centos

master會組播vrrp數據包給backup,當backup收不到master發送的數據包時,就認爲master宕機了,使用backup來充當新的master(經過backup的優先級來判斷哪一個backup成功新的master)bash

keepalived包含有3個模塊:
一、core:核心模塊,是主進程啓動和維護,全局配置文件加載解析等做用。

二、check:檢查模塊,負責健康檢查。

三、vrrp:實現vrrp協議的模塊。

18.3/18.4/18.5 用keepalived配置高可用集羣

準備兩臺機器:A和B。A爲:master角色(128)、B爲:backup角色(130)服務器

一、爲兩臺機器都安裝上keepalived:實現高可用的工具架構

[root@nginx ~]# yum install -y keepalived
已加載插件:fastestmirror
Could not retrieve mirrorlist http://mirrorlist.centos.org/?release=7&arch=x86_64&repo=os&infra=stock error was
12: Timeout on http://mirrorlist.centos.org/?release=7&arch=x86_64&repo=os&infra=stock: (28, 'Operation too slow. Less than 1000 bytes/sec transferred the last 30 seconds')
base                                                                                                                            | 3.6 kB  00:00:00     
epel/x86_64/metalink                                                                                                            | 7.9 kB  00:00:00     
epel                                                                                                                            | 3.2 kB  00:00:00     
extras                                                                                                                          | 3.4 kB  00:00:00     
updates                                                                                                                         | 3.4 kB  00:00:00     
(1/3): epel/x86_64/updateinfo                                                                                                   | 925 kB  00:00:01     
(2/3): updates/7/x86_64/primary_db                                                                                              | 2.7 MB  00:00:10     
(3/3): epel/x86_64/primary                                                                                                      | 3.5 MB  00:00:11     
Determining fastest mirrors
 * base: mirror.lzu.edu.cn
 * epel: mirrors.ustc.edu.cn
 * extras: mirrors.cqu.edu.cn
 * updates: centos.ustc.edu.cn
epel                                                                                                                                       12607/12607
正在解決依賴關係
--> 正在檢查事務
---> 軟件包 keepalived.x86_64.0.1.3.5-6.el7 將被 安裝
--> 正在處理依賴關係 libnetsnmpmibs.so.31()(64bit),它被軟件包 keepalived-1.3.5-6.el7.x86_64 須要
--> 正在處理依賴關係 libnetsnmpagent.so.31()(64bit),它被軟件包 keepalived-1.3.5-6.el7.x86_64 須要
--> 正在處理依賴關係 libnetsnmp.so.31()(64bit),它被軟件包 keepalived-1.3.5-6.el7.x86_64 須要
--> 正在檢查事務
---> 軟件包 net-snmp-agent-libs.x86_64.1.5.7.2-33.el7_5.2 將被 安裝
---> 軟件包 net-snmp-libs.x86_64.1.5.7.2-33.el7_5.2 將被 安裝
--> 解決依賴關係完成

依賴關係解決

=======================================================================================================================================================
 Package                                   架構                         版本                                       源                             大小
=======================================================================================================================================================
正在安裝:
 keepalived                                x86_64                       1.3.5-6.el7                                base                          329 k
爲依賴而安裝:
 net-snmp-agent-libs                       x86_64                       1:5.7.2-33.el7_5.2                         updates                       705 k
 net-snmp-libs                             x86_64                       1:5.7.2-33.el7_5.2                         updates                       749 k

事務概要
=======================================================================================================================================================
安裝  1 軟件包 (+2 依賴軟件包)

總下載量:1.7 M
安裝大小:6.0 M
Downloading packages:
(1/3): keepalived-1.3.5-6.el7.x86_64.rpm                                                                                        | 329 kB  00:00:01     
(2/3): net-snmp-agent-libs-5.7.2-33.el7_5.2.x86_64.rpm                                                                          | 705 kB  00:00:02     
(3/3): net-snmp-libs-5.7.2-33.el7_5.2.x86_64.rpm                                                                                | 749 kB  00:00:02     
-------------------------------------------------------------------------------------------------------------------------------------------------------
總計                                                                                                                   659 kB/s | 1.7 MB  00:00:02     
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  正在安裝    : 1:net-snmp-libs-5.7.2-33.el7_5.2.x86_64                                                                                            1/3 
  正在安裝    : 1:net-snmp-agent-libs-5.7.2-33.el7_5.2.x86_64                                                                                      2/3 
  正在安裝    : keepalived-1.3.5-6.el7.x86_64                                                                                                      3/3 
  驗證中      : 1:net-snmp-agent-libs-5.7.2-33.el7_5.2.x86_64                                                                                      1/3 
  驗證中      : keepalived-1.3.5-6.el7.x86_64                                                                                                      2/3 
  驗證中      : 1:net-snmp-libs-5.7.2-33.el7_5.2.x86_64                                                                                            3/3 

已安裝:
  keepalived.x86_64 0:1.3.5-6.el7                                                                                                                      

做爲依賴被安裝:
  net-snmp-agent-libs.x86_64 1:5.7.2-33.el7_5.2                                 net-snmp-libs.x86_64 1:5.7.2-33.el7_5.2                                

完畢!

二、爲兩臺機器都安裝上nginx:高可用的服務對象,能夠直接yum安裝用作試驗。

yum install -y nginx

三、master上修改keepalived的配置文件:

[root@nginx keepalived]# vim /etc/keepalived/keepalived.conf

global_defs {
   notification_email {
     scause@163.com   #定義接收告警的郵箱
   }
   notification_email_from scause@163.com    #定義發送郵件的地址
   smtp_server 127.0.0.1           #定義發郵件地址,若爲127.0.0.1則使用本機自帶郵件服務器進行發送
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}

vrrp_script chk_nginx {   #自定義檢查模塊名字
    script "/usr/local/sbin/check_ng.sh"        #自定義腳本,監控nginx服務的腳本
    interval 3            #每3秒執行一次腳本
}

vrrp_instance VI_1 {
    state MASTER       #角色是master
    interface ens33      #指定發送vrrp的網卡,針對哪一個網卡監控VIP
    virtual_router_id 51
    priority 100         #權重,master的要比backup的權重大
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 123456   #定義驗證密碼
    }
    virtual_ipaddress {
        192.168.87.100    //指定虛擬ip
    }

    track_script {
        chk_nginx     #指定上面定義的監控模塊
    }

}

[root@nginx keepalived]# ip addr    //vip虛擬ip用ip addr才能看到,ifconfig看不到
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:7c:0b:e2 brd ff:ff:ff:ff:ff:ff
    inet 192.168.87.128/24 brd 192.168.87.255 scope global ens33
       valid_lft forever preferred_lft forever
    inet 192.168.87.100/32 scope global ens33     //虛擬ip已經綁定在ens33網卡上了
       valid_lft forever preferred_lft forever
    inet6 fe80::2350:6934:56c7:a6c0/64 scope link 
       valid_lft forever preferred_lft forever

四、編寫chk_nginx.sh監控腳本:修改權限

[root@nginx keepalived]# 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   //中止keepalived服務,不發送vrrp包給backup了
        fi
fi

[root@nginx keepalived]# chmod 755 /usr/local/sbin/check_ng.sh

五、開啓keepalived服務:開啓監控的服務對象nginx

[root@nginx keepalived]# systemctl start keepalived
[root@nginx keepalived]# ps aux|grep keepalived   //查看keepalived是否啓動
root       1388  0.0  0.0 118652  1396 ?        Ss   20:53   0:00 /usr/sbin/keepalived -D
root       1389  0.0  0.1 122852  2392 ?        S    20:53   0:00 /usr/sbin/keepalived -D
root       1390  0.0  0.1 122852  2448 ?        S    20:53   0:00 /usr/sbin/keepalived -D
root       1396  0.0  0.0 112720   972 pts/0    S+   20:53   0:00 grep --color=auto keepalived

[root@nginx keepalived]# ps aux |grep nginx  //查看nginx是否啓動
root        863  0.0  0.0  46040  1276 ?        Ss   20:08   0:00 nginx: master process /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
nobody      868  0.0  0.2  48528  3912 ?        S    20:08   0:00 nginx: worker process
nobody      869  0.0  0.2  48528  3912 ?        S    20:08   0:00 nginx: worker process
root        896  0.0  0.0 115432  1712 ?        S    20:08   0:00 /bin/sh /usr/local/mysql//bin/mysqld_safe --datadir=/data/mysql/ --pid-file=/data/mysql//nginx.pid
mysql      1119  0.3 24.5 1300896 458628 ?      Sl   20:08   0:09 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/data/mysql --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/data/mysql/nginx.err --pid-file=/data/mysql//nginx.pid
root       1418  0.0  0.0 112724   972 pts/0    S+   20:53   0:00 grep --color=auto nginx

六、關閉nginx,查看是否會自動從新啓動nginx服務:由於keepalived會3秒執行檢查腳本,若是nginx沒進程就會自動啓動。

[root@nginx keepalived]# /etc/init.d/nginx stop
Stopping nginx (via systemctl):                            [  肯定  ]

[root@nginx keepalived]# ps aux |grep nginx  //3秒後再ps一下,nginx又被啓動了,證實keepalived生效了。
root        896  0.0  0.0 115432  1712 ?        S    20:08   0:00 /bin/sh /usr/local/mysql//bin/mysqld_safe --datadir=/data/mysql/ --pid-file=/data/mysql//nginx.pid
mysql      1119  0.3 24.5 1300896 458628 ?      Sl   20:08   0:09 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/data/mysql --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/data/mysql/nginx.err --pid-file=/data/mysql//nginx.pid
root       1567  0.0  0.0  46040  1276 ?        Ss   20:54   0:00 nginx: master process /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
nobody     1569  0.0  0.2  48528  3912 ?        S    20:54   0:00 nginx: worker process
nobody     1570  0.0  0.2  48528  3912 ?        S    20:54   0:00 nginx: worker process
root       1598  0.0  0.0 112720   972 pts/0    R+   20:55   0:00 grep --color=auto nginx

七、配置backup機器的keepalived配置文件:檢查主和從上的selinux和iptables都要關閉。

[root@lgs keepalived]# vim keepalived.conf
global_defs {
   notification_email {
     scause@163.com
   }
   notification_email_from scause@163.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"   //監控nginx服務的腳本
    interval 3
}   

vrrp_instance VI_1 {
    state BACKUP   //backup角色
    interface ens33   //指定
    virtual_router_id 51   //虛擬路由id,與master必須同樣
    priority 90   //權重比master小
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 123456
    }   
    virtual_ipaddress {
        192.168.87.100   //虛擬ip
    }   
    
    track_script {
        chk_nginx   //指定監控模塊
    }

}

八、定義監控腳本:並改文件權限

[root@lgs keepalived]# vim /usr/local/sbin/check_ng.sh

#時間變量,用於記錄日誌
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@lgs keepalived]# chmod 755 /usr/local/sbin/check_ng.sh

九、啓動keepalived服務:

[root@lgs keepalived]# systemctl start keepalived
[root@lgs keepalived]# ps aux|grep keepalived
root       1522  0.0  0.0 118608  1384 ?        Ss   21:12   0:00 /usr/sbin/keepalived -D
root       1523  0.4  0.1 127468  3296 ?        S    21:12   0:00 /usr/sbin/keepalived -D
root       1524  0.1  0.1 127408  2820 ?        S    21:12   0:00 /usr/sbin/keepalived -D
root       1556  0.0  0.0 112676   988 pts/0    R+   21:12   0:00 grep --color=auto keepalived

[root@lgs keepalived]# ps aux|grep nginx
root        906  0.0  0.0  20504   628 ?        Ss   20:08   0:00 nginx: master process /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
nobody      910  0.0  0.1  22948  3468 ?        S    20:08   0:00 nginx: worker process
nobody      911  0.0  0.1  22948  3220 ?        S    20:08   0:00 nginx: worker process
root       1598  0.0  0.0 112676   988 pts/0    R+   21:12   0:00 grep --color=auto nginx

十、驗證高可用是否生效:

一、單獨訪問master:192.168.87.128的nginx頁面,顯示:"This is HA master !"

二、單獨訪問backup:192.168.87.130的nginx頁面,顯示:This is HA backup !

三、訪問VIP:192.168.87.100,默認是訪問到master上,顯示:This is master!

四、把master的keepalived關閉,模擬master宕機

[root@nginx conf]# systemctl stop keepalived
五、master宕機後,訪問VIP:192.168.87.100,則backup接替了原來的master。成爲新的master,顯示:This is HA backup !

相關文章
相關標籤/搜索