1、Linux集羣概述html
根據功能劃分爲兩大類:高可用和負載均衡linux
(1)高可用集羣一般爲兩臺服務器,臺工做,另一臺做爲準備,當提供服務的機器宕機,另一臺將接替繼續提供服務。nginx
實現高可用的開源軟件有:heartbeat,keepalivedweb
(2)負載均衡集羣:須要有一臺服務器做爲分發器,它負責吧用戶的請求分發給後端的服務器處理,在這個集羣裏,除了分發器外,就是給用戶提供服務的服務器了,這些服務器數量最少爲2vim
實現負載均衡的開源軟件有LVS,keepalived,haproxy,nginx,商業的有F5,Netscaler後端
2、keepalived介紹centos
heartbeat在centos6上有一些bug,影響實驗效果。因此咱們不介意使用heartbeat。bash
keepalived經過VRRP(虛擬路由冗餘協議)來實現高可用。服務器
在這個協議裏會將多臺功能相同的路由器組成一個小組,這個小組裏會有一個master角色和N(N>=1)個backup角色。
負載均衡
工做原理:mster會經過組播的形式向各個backup發送VRRP協議的數據包,當backup收不到master發來的VRRP數據包時,就會認爲master宕機了,此時就須要根據哥哥backup的優先級來決定誰成爲新的mater。
keepalived要有三個模塊,分別是core,check,vrrp。其中core模塊爲keepalived的核心,負責主進程的啓動,維護以及全局配置文件的加載和解析,check模塊負責健康檢查,vrrp模塊是用來實現VRRP協議的。
3、keepalived配置高可用集羣
安裝keepalived,配置環境
master:192.168.52.101
backip:192.168.52.100
master和backip上都要安裝keepalived
yum install keepalived -y
2.keepalived+nginx實現web高可用
Keepalived的做用是檢測服務器的狀態,若是有一臺web服務器宕機,或工做出現故障,Keepalived將檢測到,並將有故障的服務器從系統中剔除,同時使用其餘服務器代替該服務器的工做,當服務器工做正常後Keepalived自動將服務器加入到服務器羣中,這些工做所有自動完成,不須要人工干涉,須要人工作的只是修復故障的服務器。
(一)咱們用nginx來搭建高可用平臺。
(1)101的機器以前咱們已經搭建Lnmp,安裝過nginx,100的機器咱們須要安裝Nginx。yum install keepalived -y
(2)配置master上的keepalived配置文件
[root@zhuji ~]# vim /etc/keepalived/keepalived.conf
global_defs {
notification_email { (出現問題發郵件的郵箱)
463993488@qq.com
}
notification_email_from root@aminglinux.com (由哪個郵箱地址發出,能夠引用第三方)
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_script chk_nginx { (檢測服務是否正常,還記得以前說過的keepalived的check模塊嗎?)
script "/usr/local/sbin/check_ng.sh" (須要寫一個檢測腳本,能夠自定義)
interval 3 (檢測間斷3秒)
}
vrrp_instance VI_1 {
state MASTER (定義角色,是master仍是backup)
interface ens33 (經過哪個網卡想backup發送VRRP協議數據包)
virtual_router_id 51 (定義路由器的id,master要和backup保持一致)
priority 100 (權重,master和backup的權重是不同的)
advert_int 1
authentication { (認證相關的配置)
auth_type PASS (認證的類型是PASS密碼)
auth_pass litongyao123 (定義密碼是多少)
}
virtual_ipaddress { (定義VIP,也就是虛擬IP,這個IP是由keepalived給服務器配置的,服務器靠這個VIP對外提供服務)
192.168.52.200
}
track_script { (加載檢查腳本)
chk_nginx
}
}
(3)配置keepalived檢查腳本,路徑就是在上面配置文件裏寫的。
[root@zhuji ~]# 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@zhuji ~]# chmod 755 /usr/local/sbin/check_ng.sh (給執行腳本755的權限)
[root@zhuji ~]# ll !$
ll /usr/local/sbin/check_ng.sh
-rwxr-xr-x. 1 root root 567 1月 1 15:28 /usr/local/sbin/check_ng.sh
從新啓動keepalived,關閉Nginx,看看Keeplived是否會執行腳本,重啓Nginx。
[root@zhuji ~]# systemctl restart keepalived
[root@zhuji ~]# ps aux |grep nginx
root 22598 0.0 0.1 45852 1248 ? Ss 15:44 0:00 nginx: master process /usr/local/nginx/sbin/nginx -c /usr/local/ngin/conf/nginx.conf
............
[root@zhuji ~]# /etc/init.d/nginx stop
Stopping nginx (via systemctl): [ 肯定 ]
[root@zhuji ~]# ps aux |grep nginx
root 22809 0.0 0.1 45852 1244 ? Ss 15:45 0:00 nginx: master process /usr/local/nginx/sbin/nginx -c /usr/local/ngin/conf/nginx.conf
..........
結果是能夠,在這裏咱們要注意,若是有問題。他的錯誤日誌在/var/log/messages裏。要關閉防火牆和selinux,或者更改規則。
配置從機backup:(檢查主從機子的防火牆和selinux的規則。虛擬環境下咱們就關閉它)
[root@congji ~]# vim /etc/keepalived/keepalived.conf
global_defs {
notification_email {
aming@aminglinux.com
}
notification_email_from root@aminglinux.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"
interval 3
}
vrrp_instance VI_1 {
state BACKUP (這裏和主不同,角色爲backup)
interface ens33
virtual_router_id 51 (這裏要和主保持同樣)
priority 90 (權重要比主低)
advert_int 1
authentication {
auth_type PASS
auth_pass litongyao123 (密碼要和主同樣)
}
virtual_ipaddress {
192.168.52.99 (虛擬vip要和主同樣)
}
track_script {
chk_nginx
}
}
編寫監控nginx服務的腳本:
[root@congji ~]# 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 (這裏和主的區別,由於咱們從機是Yum安裝的)
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@congji ~]# chmod 755 !$
chmod 755 /usr/local/sbin/check_ng.sh
檢查Keeplived是否會監控Nginx的狀態:
[root@congji ~]# systemctl start keepalived
[root@congji ~]# ps aux |grep nginx
root 4112 0.0 0.2 122908 2108 ? Ss 16:19 0:00 nginx: master process /usr/sbin/nginx
....
[root@congji ~]# systemctl stop nginx
[root@congji ~]# ps aux |grep nginx
root 4226 0.0 0.2 122908 2112 ? Ss 16:19 0:00 nginx: master process /usr/sbin/nginx
....
修改兩臺機子的訪問主頁,爲後面的實驗作基礎:
master:
[root@zhuji ~]# echo master.master > /data/wwwroot/default/index.html
backup:
[root@congji ~]# echo backup.backup > /usr/share/nginx/html/index.html (由於backup的Nginx是yum安裝,他的默認路徑如此)
測試keepalived高可用
關閉master上的keepalived服務。觀察vip100和主頁的變化。
主機Master: (ip addr咱們發現99的vip不見了)
[root@zhuji ~]# systemctl stop keepalived
[root@zhuji ~]# ip addr
ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:95:aa:42 brd ff:ff:ff:ff:ff:ff
inet 192.168.52.101/24 brd 192.168.52.255 scope global ens33
valid_lft forever preferred_lft forever
inet6 fe80::f8ec:e89c:1608:bfc5/64 scope link
valid_lft forever preferred_lft forever
從機(backup):
[root@zhuji ~]# ip addr (vip99已經到了從機上)
ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:83:d1:17 brd ff:ff:ff:ff:ff:ff
inet 192.168.52.100/24 brd 192.168.52.255 scope global ens33
valid_lft forever preferred_lft forever
inet 192.168.52.99/32 scope global ens33
valid_lft forever preferred_lft forever
4、keeplived+MySQL