您好,登錄后才能下訂單哦!
根據功能劃分為兩大類:高可用和負載均衡
高可用集群通常為兩臺服務器,一臺工作,另外一臺作為冗余,當提供服務的機器宕機,冗余將接替繼續提供服務
高可用集群,英文原文為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
在這里我們使用keepalived來實現高可用集群,因為heartbeat在centos6上有一些問題,影響實驗效果
keepalived通過VRRP(Virtual Router Redundancy Protocl)來實現高可用。
Keepalived要有三個模塊,分別是core、check和vrrp。中core模塊為keepalived的核心,負責主進程的啟動、維護以及全局配置文件的加載和解析,check模塊負責健康檢查,vrrp模塊是來實現VRRP協議的。
環境:有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 {
chy@chy.com
}
notification_email_from root@chy.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 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 {
chy@chy.com
}
notification_email_from root@chy.com
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 {
aming@aminglinux.com
notification_email_from root@aminglinux.com
smtp_server 127.0.0.1
notification_email {
aming@aminglinux.com
smtp_server 127.0.0.1
}
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
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
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。