1. 程式人生 > >Linux叢集、Keepalived—Nginx高可用叢集架構搭建

Linux叢集、Keepalived—Nginx高可用叢集架構搭建

叢集介紹

Linux叢集根據功能劃分為兩大類:高可用和負載均衡。

高可用叢集

高可用叢集通常為2臺伺服器,一臺工作,另一臺作為冗餘,當提供服務的機器宕機時,冗餘將接替繼續提供服務。
實現高可用的開源軟體有:heartbeat、Keepalived,其中heartbeat已無人維護,所以今後使用Keepalived來搭建高可用叢集。

負載均衡叢集

負載均衡叢集,需要有1臺伺服器作為分發器,它負責把使用者的請求分發給後端的伺服器處理,在這個叢集裡,除了分發器外就是給使用者提供服務的伺服器了,這些伺服器數量至少為2臺,所以負載均衡叢集至少要3臺伺服器。
實現負載均衡的開源軟體有:LVS、Keepalived、haproxy、nginx;商業軟體有:F5、Netscaler。

 Keepalived介紹

Keepalived通過VRRP(virtual router redundancy protocol)虛擬路由冗餘協議來實現高可用。
在這個協議裡會將多臺功能相同的路由器組成一個小組,這個小組會有1個master角色和N(N≥1)個backup角色。

Keepalived有三個模組:core、check、vrrp。其中core模組為Keepalived的核心,負責主程序的啟動、維護以及全域性配置檔案的載入和解析;check模組負責健康檢查,vrrp負責實現vrrp協議。

用keepalived配置高可用叢集

  • 準備兩臺機器130和132,130作為master,132作為backup
  • 兩臺機器都執行yum install -y keepalived
  • 兩臺機器都安裝nginx,其中130上已經編譯安裝過nginx,132上需要yum安裝nginx: yum install -y nginx
  • 設定vip為100
  • 編輯130上keepalived配置檔案,內容獲取地址
  • 130編輯監控指令碼,內容獲取地址
  • 給指令碼755許可權
  • systemctl start keepalived 130啟動服務
  • 132上編輯配置檔案,內容獲取地址
  • 132上編輯監控指令碼,內容獲取地址
  • 給指令碼755許可權
  • 132上也啟動服務 systemctl start keepalived

keepalived配置高可用叢集

  1. 首先準備兩臺機器,都安裝keepalived
  • keepalived,實際是包含一個服務的,也就是說這個服務用來實現高可用
A機器,安裝keepalived
[[email protected] ~]# yum install -y keepalived

B機器,安裝keepalived
[[email protected] ~]# yum install -y keepalived
  1. 這裡使用 nginx ,把它作為一個高可用的物件——>使用nginx作為演示物件的原因,因為nginx在工作中,在生產環境中,很多企業把nginx做一個負載均衡器
  • 假設nginx一旦掛掉,那麼後端所有的web,即使說是正常的,那也無法訪問到
  1. 若是A、B機器沒有裝nginx服務,可以直接 yum安裝
  • 若是lnmp安裝過nginx,則不需要安裝了(原始碼包安裝的nginx)
  • 直接yum安裝的nginx,兩者很容易區分(PS:有時直接yum安裝不了,需要安裝yum擴充套件源——>yum install -y epel-release)
A機器原始碼安裝nginx
(PS:有時初始化的時候,會看到無法初始化,是因為缺少一些包yum install  -y gcc)

B機器yum安裝nginx
[[email protected] ~]# yum install -y epel-release
[[email protected] ~]# yum install -y nginx
[[email protected] ~]# systemctl start nginx
[[email protected] ~]# ps aux |grep nginx
root      2825  0.0  0.2 123300  2100 ?        Ss   11:40   0:00 nginx: master process /usr/sbin/nginx
nginx     2826  0.0  0.3 123764  3120 ?        S    11:40   0:00 nginx: worker process
root      2828  0.0  0.0 112656   992 pts/0    R+   11:40   0:00 grep --color=auto nginx
[[email protected] ~]# 
  1. 更改keepalived配置檔案了,內容地址
  • 預設的配置檔案路徑在/etc/keepalived/keepalived.conf
  • 清空檔案的快捷鍵方法 > !$
A機器更改配置檔案
[[email protected] ~]# ls /etc/keepalived/keepalived.conf 
/etc/keepalived/keepalived.conf
[[email protected] ~]# > !$        //直接清空檔案內容了
> /etc/keepalived/keepalived.conf
[[email protected] ~]# cat /etc/keepalived/keepalived.conf
[[email protected] ~]# vim /etc/keepalived/keepalived.conf   //去檔案地址去下載內容
將拷貝的內容複製進去
只需要改網絡卡名字和飄逸IP為192.168.133.100
####################### #  全域性配置 #######################
global_defs {                            //global_defs 全域性配置標識
   notification_email {               //notification_email用於設定報警郵件地址
[email protected]163.com           //可以設定多個,每行一個
   }
   notification_email_from [email protected]    //設定郵件傳送地址  
   smtp_server 127.0.0.1                //設定郵件的smtp server地址
   smtp_connect_timeout 30            //設定連線smtp sever超時時間
   router_id LVS_DEVEL
}

###################### #  VRRP配置 ######################
vrrp_script chk_nginx {               
    script "/usr/local/sbin/check_ng.sh"   //檢查服務是否正常,通過寫指令碼實現,指令碼檢查服務健康狀態
    interval 3                      //檢查的時間間斷是3秒
}
vrrp_instance VI_1 {                        //VRRP配置標識 VI_1是例項名稱 
    state MASTER                           //定義master相關
    interface eno16777736                        //通過vrrp協議去通訊、去發廣播。配置時,需注意自己的網絡卡名稱
    virtual_router_id 51                   //定義路由器ID ,配置的時候和從機器一致
    priority 100                              //權重,主角色和從角色的權重是不同的
    advert_int 1                            //設定MASTER與BACKUP主機質檢同步檢查的時間間隔,單位為秒
    authentication {                       //認證相關資訊
        auth_type PASS                   //這裡認證的型別是PASS
        auth_pass aminglinux>com   //密碼的形式是一個字串
    }
    virtual_ipaddress {                  //設定虛擬IP地址 (VIP),又叫做漂移IP地址
        192.168.74.100   //更改為192.168.74.100
    }
    track_script {               //載入指令碼 
        chk_nginx            
    }
}

儲存退出
  • virtual_ipaddress:簡稱VIP,這個vip,兩臺機器,一個主,一個從,正常的情況是主在服務,主宕掉了,從起來了,從啟動服務,從啟動nginx以後,,啟動以後,訪問那個IP呢?把域名解析到那個IP上呢?假如解析到主上,主宕掉了,所以這個,需要定義一個公有IP(主上用的IP,從上也用的IP);這個IP是隨時可以夏掉,去配置的
  • 指令碼路徑在keepalived配置檔案中有定義,路徑為/usr/local/sbin/check_ng.sh
A機器定義監控指令碼
[[email protected] ~]# 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

儲存退出
  • “腦裂”,在高可用(HA)系統中,當聯絡2個節點的“心跳線”斷開時,本來為一整體、動作協調的HA系統,就分裂成為2個獨立的個體。由於相互失去了聯絡,都以為是對方出了故障。兩個節點上的HA軟體像“裂腦人”一樣,爭搶“共享資源”、爭起“應用服務”,就會發生嚴重後果——或者共享資源被瓜分、2邊“服務”都起不來了;或者2邊“服務”都起來了,但同時讀寫“共享儲存”,導致資料損壞
  • 如何判斷腦裂?
    • 分別在兩臺機檢視當前伺服器是否擁有虛擬IP,如果兩臺伺服器都擁有,則說明發生了腦裂,證明目前雙機通訊出現問題,產生此問題的原有在於 兩臺伺服器都探測不到組內其他伺服器的狀態(心跳請求無法正常響應),私自判定另一臺伺服器掛起,則搶佔虛擬IP,腦裂的出現是不被允許的,解決此問題的方法為檢查防火牆設定(關閉防火牆)或者使用串列埠通訊。
  1. 指令碼建立完之後,還需要改變指令碼的許可權(不更改許可權,就無法自動載入指令碼,那就無法啟動keepalived服務)
[[email protected] ~]# chmod 755 /usr/local/sbin/check_ng.sh
[[email protected] ~]# 
  1. 啟動keepalived服務,並檢視是否啟動成功(PS:啟動不成功,有可能是防火牆未關閉或者規則限制導致的)
  • systemctl stop firewalld 關閉firewalld
  • iptables -nvL
  • setenforce 0 臨時關閉selinux
  • getenforce命令檢視是否為Permissive
  • 這時再來啟動keepalived,就會看到keepalived程序服務了
[[email protected] ~]# systemctl start keepalived
[[email protected] ~]# ps aux |grep keepalived
root      2970  0.0  0.1 121324  1404 ?        Ss   07:14   0:00 /usr/sbin/keepalived -D
root      2971  0.0  0.2 123396  2356 ?        S    07:14   0:00 /usr/sbin/keepalived -D
root      2972  0.0  0.2 123396  2384 ?        S    07:14   0:00 /usr/sbin/keepalived -D
root      2974  0.0  0.0 112672   988 pts/1    R+   07:14   0:00 grep --color=auto keepalived
[[email protected] ~]# 
  1. 檢視nginx服務程序
[[email protected] ~]# ps aux |grep nginx
root      3004  0.0  0.2 123372  2108 ?        Ss   07:18   0:00 nginx: master process /usr/sbin/nginx
nginx     3005  0.0  0.3 123836  3148 ?        S    07:18   0:00 nginx: worker process
root      3007  0.0  0.0 112672   984 pts/1    R+   07:19   0:00 grep --color=auto nginx
[[email protected] ~]# 
  1. 這時停止nginx服務
  • /etc/init.d/nginx stop
[[email protected] ~]# /etc/init.d/nginx stop
Stopping nginx (via systemctl):                            [  確定  ]
[[email protected] ~]#
  1. 再來檢視nginx服務程序,會看到自動載入了
[[email protected] ~]# ps aux |grep nginx
root      6238  0.0  0.0  20996   628 ?        Ss   08:07   0:00 nginx: master process /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
nobody    6242  0.0  0.3  23440  3212 ?        S    08:07   0:00 nginx: worker process
nobody    6243  0.0  0.3  23440  3212 ?        S    08:07   0:00 nginx: worker process
root      6263  0.0  0.0 112676   980 pts/0    R+   08:07   0:00 grep --color=auto nginx
[[email protected] ~]# 

  1. keepalived日誌檔案路徑
  • /var/log/messages
  1. 檢視ip地址,使用 ip add 命令,而不能使用ifconfig命令,因為 ifconfig命令 是無法檢視到vip192.168.133.100這個IP的
[[email protected] ~]# ip add
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 
    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: eno16777736: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:c7:05:28 brd ff:ff:ff:ff:ff:ff
    inet 192.168.74.130/24 brd 192.168.74.255 scope global dynamic eno16777736
       valid_lft 1158sec preferred_lft 1158sec
    inet 192.168.133.100/32 scope global eno16777736
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fec7:528/64 scope link 
       valid_lft forever preferred_lft forever
[[email protected] ~]# 
  1. 檢查A、B 機器下防火牆和selinux是否關閉了,若沒有關閉,可能會導致實驗失敗
  • systemctl stop firewalld 關閉firewalld
  • iptables -nvL
  • setenforce 0 臨時關閉selinux
  • getenforce命令檢視是否為Permissive

以上就是主機器A的配置

backup 機器配置

  1. 在B機器yum安裝nginx和keepalived
[[email protected] ~]# yum install -y epel-release
[[email protected] ~]# yum install -y nginx

  1. 關閉B機器的防火牆和selinux
  • iptables -F 清空規則
  • setenforce 0 臨時關閉selinux
  1. 自定義B機器keepalived配置檔案,內容獲取地址,更改虛擬IP和主一樣的
首先清空B機器keepalived裡面自帶的配置檔案
[[email protected] ~]# > /etc/keepalived/keepalived.conf 
[[email protected] ~]# cat !$
cat /etc/keepalived/keepalived.conf
[[email protected] ~]# 

然後複製配置檔案並貼上進去,更改虛擬IP和主一樣的
[[email protected] ~]# 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 BACKUP        //這裡 和master不一樣的名字
    interface eno16777736        //網絡卡和當前機器一致,否則無法啟動keepalived服務
    virtual_router_id 51        //和主機器 保持一致
    priority 90            //權重,要比主機器小的數值
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass aminglinux>com
    }
    virtual_ipaddress {
        192.168.74.100        //這裡更改為192.168.74.100
    }
    track_script {
        chk_nginx
    }
}

儲存退出
  1. 定義監控指令碼,路徑再keepalived裡面已定義過,指令碼內容地址
  • 這個指令碼和主上的指令碼有一點區別,啟動nginx的命令不同,因為一個是yum安裝,一個是原始碼包安裝
[[email protected] ~]# 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
儲存退出
  1. 改動指令碼的許可權,設定為755許可權
[[email protected] ~]# chmod 755 /usr/local/sbin/check_ng.sh
[[email protected] ~]# 

  1. B機器啟動keepalived服務
  • systemctl start keepalived
[[email protected] ~]# systemctl start keepalived
[[email protected]~]# ps aux |grep keep
root      2814  0.0  0.1 121324  1396 ?        Ss   07:10   0:00 /usr/sbin/keepalived -D
root      2815  0.0  0.2 121324  2740 ?        S    07:10   0:00 /usr/sbin/keepalived -D
root      2816  0.0  0.2 121324  2324 ?        S    07:10   0:00 /usr/sbin/keepalived -D
root      2827  0.0  0.0 112672   980 pts/0    R+   07:10   0:00 grep --color=auto keep
[[email protected] ~]# 

如何區分主和從上的nginx?

  • A機器,是原始碼包安裝的nginx(PS:這是lnmp配置好的環境虛擬主機內容)
[[email protected] ~]# cat /usr/local/nginx/conf/vhost/aaa.com.conf
server
{
    listen 80 default_server; 
    server_name aaa.com;
    index index.html index.htm index.php;
    root /data/wwwroot/default;
 location ~ \.php$
    {
        include fastcgi_params;
        fastcgi_pass unix:/tmp/champ.sock;
       #fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME /data/wwwroot/default$fastcgi_script_name;
    }

}

[[email protected] ~]# cat /data/wwwroot/default/index.html 
This is the default sete.
[[email protected] ~]# vim /data/wwwroot/default/index.html 
master This is the default sete.
[[email protected] ~]# 

相關推薦

Linux叢集KeepalivedNginx可用叢集架構搭建

叢集介紹Linux叢集根據功能劃分為兩大類:高可用和負載均衡。高可用叢集高可用叢集通常為2臺伺服器,一臺工作,另一臺作為冗餘,當提供服務的機器宕機時,冗餘將接替繼續提供服務。實現高可用的開源軟體有:heartbeat、Keepalived,其中heartbeat已無人維護,所

搭建LVS-DR負載均衡叢集Keepalived-LVS可用負載均衡叢集

LVS DR模式搭建準備工作三臺機器, 三臺機器均有公網IP。排程器(director)IP:192.168.8.133real server1(real1)IP:192.168.8.134real server2(real2)IP:192.168.8.135VIP:192.

叢集概述keepalived介紹keepalived配置可用叢集

根據功能劃分為兩大類:高可用和負載均衡 高可用叢集通常為兩臺伺服器,一臺工作,另外一臺作為冗餘,當提供服務的機器宕機,冗餘將接替繼續提供服務 實現高可用的開源軟體有:heartbeat、keepalived 負載均衡叢集,需要有一臺伺服器作為分發器,它負責把使用者的請求分發給

叢集介紹keepalived介紹keepalived配置可用叢集負載均衡叢集介紹LVS介紹 LVS排程演算法LVS NAT模式搭建

一、叢集介紹 Linux叢集根據功能劃分為兩大類:高可用和負載均衡。 高可用叢集 高可用叢集通常為2臺伺服器,一臺工作,另一臺作為冗餘,當提供服務的機器宕機時,冗餘將接替繼續提供服務。 實現高可用的開源軟體有:heartbeat、Keepalived,其中hea

十五週一次課 2018.01.26 叢集介紹keepalived介紹keepalived配置可用叢集

18.1 叢集介紹18.2 keepalived介紹18.345 用keepalived配置高可用叢集1.準備兩臺機器,一個作為master,一個作為backup。兩臺都要裝上keepalived,2.然後我們把nginx作為實現高可用的物件。所以兩臺機器上都要裝nginx。

Keepalived+nginx可用及+Tomcat負載均衡叢集以及動靜分離

概括:主要是利用keepalived做nginx的高可用 再用nginx做tomcat Web的負載均衡。總體拓撲圖如下: 高可用部分第一步:安裝部署nginx[[email protected] ~]# useradd nginx -s /sbin/nologin

Keepalived+LVS+nginx搭建nginx可用叢集

       nginx是一款非常優秀的反向代理工具,支援請求分發,負載均衡,以及快取等等非常實用的功能。在請求處理上,nginx

LVS健康檢查及keepalived實現可用叢集

LVS健康檢查 我們前面做的那些LVS的各種模式部署,都沒有健康檢查這一功能,就是說在我們搭建的負載均衡叢集中,如果後端伺服器RS全部宕掉了,客戶端就無法訪問到服務端的資料,這時我們應該給客戶端一些提示,說明伺服器暫時無法訪問。 配置(搭建好LVS-DR模式負載均衡的前提下) 在

利用RHCS套件實現nginx可用叢集

RHCS 簡介 RHCS即 RedHat Cluster Suite ,中文意思即紅帽叢集套件。 紅帽叢集套件(RedHat Cluter Suite, RHCS)是一套綜合的軟體元件,可以通過在部署時採用不同的配置,以滿足你的對高可用性,負載均衡,可擴充套件性,檔案共享和節約成本的

Linux系統——MHA-Atlas-MySQL可用叢集

MHA MHA介紹MHA(Master High Availability)目前在MySQL高可用方面是一個相對成熟的解決方案,是一套優秀的作為MySQL高可用性環境下故障切換和主從提升的高可用軟體。在MySQL故障切換過程中,MHA能做到0~30秒之內自動完成資料庫的故障切換操作,並且在進行故障切換過程中

RabbitMQ 高階指南:從配置使用到可用叢集搭建

博主說:在專案中,通過 RabbitMQ,咱們可以將一些無需即時返回且耗時的操作提取出來,進行非同步處理,而這種非同步處理的方式大大的節省了伺服器的請求響應時間,從而提高了系統的吞吐量。 正文 1 RabbitMQ 簡介 1.1 介紹   RabbitMQ

CentOS7 haproxy+keepalived實現可用叢集搭建

一、搭建環境   CentOS7 64位         Keepalived  1.3.5         Haproxy 1.5.18   後端負載主機:192.168.166.21   192.168.166.22   兩臺節點上安裝rabbitmq服務      

LVS+keepalived+httpd可用叢集

環境:主keepalived伺服器:192.168.80.100從keepalived伺服器: 192.168.80.101 Web伺服器:192.168.80.102192.168.80.103 在80.100虛擬機器上systemctl stop firewalld //關閉防火牆setenfor

rabbitmq+haproxy+keepalived實現可用叢集搭建

  專案需要搭建rabbitmq的高可用叢集,最近在學習搭建過程,在這裡記錄下可以跟大家一起互相交流(這裡只是記錄了學習之後自己的搭建過程,許多原理的東西沒有細說)。 搭建環境   CentOS7 64位   RabbitMQ 3.6.2   Keepalived 1.2.21   主機:192.1

【Web 叢集實戰】20_Keepalived 可用叢集

【Web 叢集實戰】20_Keepalived 高可用叢集 標籤(空格分隔): Web叢集實戰 文章目錄 【Web 叢集實戰】20_Keepalived 高可用叢集 1. Keepalived 高可用故障切換原理 2. Keep

搭建PXC叢集,實現MySQL可用叢集

Percona XtraDB Cluster(下文簡稱PXC叢集)提供了MySQL高可用的一種實現方法。PXC叢集以節點組成(推薦至少3節點,便於故障恢復),每個節點都是基於常規的 MySQL/Percona Server,意味著你可以從叢集中分離出某節點單獨使用。叢集中每個

keepalived+nginx可用環境搭建

MASTER:192.168.101.132 BACKUP:192.168.101.133 真實主機zabbix:192.168.101.131 虛IP:192.168.101.138 1、安裝nginx和keepalived,需要安裝依賴 yum -y install

keepAlived+Nginx 可用性(非搶佔)負載均衡

前言 一直以來都想自己來做一個完整的應用,從網路架構到技術架構,最近一段時間覺得生活不能再窮困了,於是,趁現在還有時間,決定自己來搭一個完整的專案。千里之行,始於足下。 正題 - 負載均衡設計 Nginx+keepAlived方案:負載層

Linux】LVS+Keepalived實現可用負載均衡(Web群集)

一、Keepalived概述 keepalived是一個類似於layer3,4,5交換機制的軟體,也就是我們平時說的第3層、第4層和第5層交換。Keepalived的作用是檢測web伺服器的狀態,

47-01hystrix與可用系統架構:資源隔離+限流+熔斷+降級+運維監控

HA,HAProxy,主備服務間的切換,這就做到了高可用性,主備例項,多冗餘例項,高可用最最基礎的東西。 那麼,什麼樣的情況下,可能會導致系統的崩潰,以及系統不可用,針對各種各樣的一些情況,然後我們用什麼技術,去保護整個系統處於高可用的一個情況下? 1、hystrix是什麼? netfl