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配置高可用叢集
- 首先準備兩臺機器,都安裝keepalived
- keepalived,實際是包含一個服務的,也就是說這個服務用來實現高可用
A機器,安裝keepalived
[[email protected] ~]# yum install -y keepalived
B機器,安裝keepalived
[[email protected] ~]# yum install -y keepalived
- 這裡使用 nginx ,把它作為一個高可用的物件——>使用nginx作為演示物件的原因,因為nginx在工作中,在生產環境中,很多企業把nginx做一個負載均衡器
- 假設nginx一旦掛掉,那麼後端所有的web,即使說是正常的,那也無法訪問到
- 若是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] ~]#
- 更改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,腦裂的出現是不被允許的,解決此問題的方法為檢查防火牆設定(關閉防火牆)或者使用串列埠通訊。
- 指令碼建立完之後,還需要改變指令碼的許可權(不更改許可權,就無法自動載入指令碼,那就無法啟動keepalived服務)
[[email protected] ~]# chmod 755 /usr/local/sbin/check_ng.sh
[[email protected] ~]#
- 啟動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] ~]#
- 檢視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] ~]#
- 這時停止nginx服務
- /etc/init.d/nginx stop
[[email protected] ~]# /etc/init.d/nginx stop
Stopping nginx (via systemctl): [ 確定 ]
[[email protected] ~]#
- 再來檢視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] ~]#
- keepalived日誌檔案路徑
- /var/log/messages
- 檢視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] ~]#
- 檢查A、B 機器下防火牆和selinux是否關閉了,若沒有關閉,可能會導致實驗失敗
- systemctl stop firewalld 關閉firewalld
- iptables -nvL
- setenforce 0 臨時關閉selinux
- getenforce命令檢視是否為Permissive
以上就是主機器A的配置
backup 機器配置
- 在B機器yum安裝nginx和keepalived
[[email protected] ~]# yum install -y epel-release
[[email protected] ~]# yum install -y nginx
- 關閉B機器的防火牆和selinux
- iptables -F 清空規則
- setenforce 0 臨時關閉selinux
- 自定義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
}
}
儲存退出
- 定義監控指令碼,路徑再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
儲存退出
- 改動指令碼的許可權,設定為755許可權
[[email protected] ~]# chmod 755 /usr/local/sbin/check_ng.sh
[[email protected] ~]#
- 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叢集、Keepalived—Nginx高可用叢集架構搭建
叢集介紹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-01、hystrix與高可用系統架構:資源隔離+限流+熔斷+降級+運維監控
HA,HAProxy,主備服務間的切換,這就做到了高可用性,主備例項,多冗餘例項,高可用最最基礎的東西。 那麼,什麼樣的情況下,可能會導致系統的崩潰,以及系統不可用,針對各種各樣的一些情況,然後我們用什麼技術,去保護整個系統處於高可用的一個情況下? 1、hystrix是什麼? netfl