1. 程式人生 > >Linux集群(keepalived介紹,Keepalived配置高可用集群,Keepa+mysql

Linux集群(keepalived介紹,Keepalived配置高可用集群,Keepa+mysql

開源軟件 adding aux 維護 fault etc 服務器 eve 之前

一、Linux集群概述

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

(1)高可用集群通常為兩臺服務器,臺工作,另外一臺作為準備,當提供服務的機器宕機,另外一臺將接替繼續提供服務。

實現高可用的開源軟件有:heartbeat,keepalived

(2)負載均衡集群:需要有一臺服務器作為分發器,它負責吧用戶的請求分發給後端的服務器處理,在這個集群裏,除了分發器外,就是給用戶提供服務的服務器了,這些服務器數量最少為2

實現負載均衡的開源軟件有LVS,keepalived,haproxy,nginx,商業的有F5,Netscaler


二、keepalived介紹

heartbeat在centos6上有一些bug,影響實驗效果。所以我們不介意使用heartbeat。


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協議的。



三、keepalived配置高可用集群

  1. 安裝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 { (出現問題發郵件的郵箱)

[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 { (檢測服務是否正常,還記得之前說過的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 {

[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 (這裏和主不一樣,角色為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


四、keeplived+MySQL

http://blog.51cto.com/lizhenliang/1362313

Linux集群(keepalived介紹,Keepalived配置高可用集群,Keepa+mysql