使用HeartBeat實現高可用HA的配置。HA即(high available)高可用,又被叫做雙機熱備,用於關鍵性業務。簡單理解就是,有2臺機器 A 和 B,正常是 A 提供服務,B 待命閒置,當 A 宕機或服務宕掉,會切換至B機器繼續提供服務。常見的實現高可用的開源軟件有 heartbeat 和 keepalived。
一、準備實驗環境
服務器A:
主機名:Master01
操作系統:CentOS6.8 64位
eth0網卡地址:10.60.196.178
服務器B:
主機名:Slave01
操作系統:CentOS6.8 64位
eth0網卡地址:10.60.196.179
虛擬VIP:
VIP:10.60.196.180
二、設置主機名
master節點設置hostname
hostname Master01 vim /etc/sysconfig/network 編輯配置文件:HOSTNAME=Master01
vim /etc/hosts
編輯配置文件:
10.60.196.178 Master01
10.60.196.179 Slave01
# vim /etc/sysconfig/network 編輯配置文件:HOSTNAME=Master01
slave節點設置hostname
# hostname Slave01
vim /etc/hosts
編輯配置文件:
10.60.196.178 Master01
10.60.196.179 Slave01# vim /etc/sysconfig/network 編輯配置文件:HOSTNAME=Slave01
三、關閉2臺服務器的防火牆
關閉iptables
# iptables -F # service iptables save # service iptables stop
關閉selinux:
# setenforce 0 # sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
四、安裝heartbeat (2臺都操作)
# yum install -y epel-release
# yum install -y heartbeat* libnet
五、主Master01節點配置
1、拷貝配置文件:
# cd /usr/share/doc/heartbeat-3.0.4/ # cp authkeys ha.cf haresources /etc/ha.d/ # cd /etc/ha.d
2、修改authkeys:
# vim authkeys 更改或增加如下內容: auth 33 md5 Hello!然後修改其權限 # chmod 600 authkeys
3、編輯haresources文件:
# vim haresources加入下面一行:Master01 10.60.196.180/24/eth0:0 raysync
說明:master爲主節點hostname,10.60.196.180爲vip,/24爲掩碼爲24的網段,eth0:0爲vip的設備名,httpd爲heartbeat監控的服務,也是兩臺機器對外提供的核心服務。改行指定在啓動時,節點得到vip,並啓動httpd,在停止時heartbeat首先停止httpd,然後釋放vip。
4、編輯ha.cf:
# vim ha.cf 修改爲如下內容:
logfile /var/log/ha-log
logfacility local0
keepalive 2
deadtime 30
warntime 10
initdead 120
udpport 694
ucast eth0 10.60.196.179
auto_failback on
node Master01
node Slave01
ping 10.60.196.254
respawn hacluster /usr/lib64/heartbeat/ipfail
5、配置說明:
logfile /var/log/ha-log:heartbeat的日誌文件。
keepalive 2:心跳的時間間隔,默認時間單位爲秒s。
deadtime 30:超出該時間間隔未收到對方節點的心跳,則認爲對方已經死亡。
warntime 10:超出該時間間隔未收到對方節點的心跳,則發出警告並記錄到日誌中。
initdead 120:在某系統上,系統啓動或重啓之後需要經過一段時間網絡才能正常工作,該選項用於解決這種情況產生的時間間隔,取值至少爲deadtime的2倍。
udpport 694:設置廣播通信使用的端口,694爲默認使用的端口號。
ucast eth0 10.60.196.179:設置對方機器心跳檢測的網卡和IP。
auto_failback on:heartbeat的兩臺主機分別爲主節點和從節點。主節點在正常情況下佔用資源並運行所有的服務,遇到故障時把資源交給從節點由從節點運行服務。在該選項設爲on的情況下,一旦主節點恢復運行,則自動獲取資源並取代從節點,否則不取代從節點。
respawn heartbeat /usr/lib/heartbeat/ipfail:指定與heartbeat一同啓動和關閉的進程,該進程被自動監視,遇到故障則重新啓動。最常用的進程是ipfail,該進程用於檢測和處理網絡故障,需要配合ping語句指定的ping node來檢測網絡連接。如果你的系統是64bit,請注意該文件的路徑。
六、把主節點上的三個配置文件拷貝到從節點
# cd /etc/ha.d # scp authkeys ha.cf haresources root@Slave01:/etc/ha.d
七、從節點slave編輯ha.cf
# vim /etc/ha.d/ha.cf
只需要更改一個地方如下:ucast eth0 10.60.196.179改爲ucast eth0 10.60.196.180
八、啓動heartbeat服務
配置完畢後,先Master01啓動,後Slave01啓動。
# service heartbeat start
九、更改vip路由腳本
1、創建routecheck.sh腳本
vim /root/bin/routecheck.sh
#!/bin/bash
source /etc/profile
for((i=1;i<=30;i++))
do
ifconfig|grep eth0:0
a=$?
ip route show |grep 10.60.196.180
b=$?
ip route show|grep 10.60.196.254
c=$?
#vip存在,且vip沒有路由就更改路由
if [[ $a == 0 ]] && [[ $b != 0 ]];then
route del default gw 10.60.196.254 && ip route add 0.0.0.0/0 via 10.60.196.254 dev eth0 src 10.60.196.180
fi
#vip不存在,默認網關不存在就重啓網卡
if [[ $a != 0 ]] && [[ $c != 0 ]];then
ip route add 0.0.0.0/0 via 10.60.196.254 dev eth0
fi
sleep 2
done
2、定時運行
crontab -e
*/1 * * * * bash /root/bin/routecheck.sh > /dev/null
十、RaySync自啓動腳本
cat /etc/init.d/raysync
#!/bin/bash
#
# description: setup RaySync service
# Version: 0.1.0
# Date: 2018-02-06
# Author: lirou<[email protected]>
#
# chkconfig: - 87 17
source /etc/profile
. /etc/rc.d/init.d/functions
set -e
#set -x
export.UTF-8
export LC_ALL=en_US.UTF-8
if [ $# -ne 1 ];then
echo "Error Usage: service $(basename $0) [ start | stop | status | restart ]"
exit 3
fi
BASE_DIR=
PID_DIR=
if [[ "x$BASE_DIR" == "x" ]];then
BASE_DIR=/opt/RaySync
fi
RAYSYNC_CONF=$BASE_DIR/config/config.ini
if ! [ -d $(dirname $RAYSYNC_CONF) ];then
install -d -m 755 $(dirname $RAYSYNC_CONF)
fi
if [[ "x$PID_DIR" == "x" ]];then
PID_DIR=/var/run/raysync
mkdir -pv $PID_DIR &>/dev/null
fi
#MONITOR_PID=$PID_DIR/monitor.pid
MONITOR_LOCKFILE=$PID_DIR/monitor.lock
RAYSYNC_SERVER_LOCKFILE=$PID_DIR/raysync-server.lock
RAYSYNC_PROXY_SERVER_LOCKFILE=$PID_DIR/raysync-proxy.lock
MONITOR_BIN_NAME=
RAYSYNC_SERVER_BIN_NAME=
RAYSYNC_PROXY_SERVER_BIN_NAME=
if [[ "x$MONITOR_BIN_NAME" == "x" ]];then
MONITOR_BIN_NAME=monitor
fi
if [[ "x$RAYSYNC_SERVER" == "x" ]];then
RAYSYNC_SERVER_BIN_NAME=RaySyncServer
fi
if [[ "x$RAYSYNC_PROXY_SERVER" == "x" ]];then
RAYSYNC_PROXY_SERVER_BIN_NAME=RaySync-Proxy-Server
fi
start() {
if ! [ -s $RAYSYNC_CONF ];then
echo "Error: don't have configure file in $RAYSYNC_CONF path."
fi
if ! [ -f $MONITOR_LOCKFILE ]; then
# nohup ${BASE_DIR}/${MONITOR_BIN_NAME} &>/dev/null &
nohup ${BASE_DIR}/${MONITOR_BIN_NAME} >/dev/null 2>&1 &
sleep 1
if [[ "x$(ps aux | grep -i monitor | grep -v -i grep )" == "x" ]];then
echo -e "monitor setup fail" && failure
else
touch $MONITOR_LOCKFILE
fi
fi
echo -e " monitor is running: " && success
if ! [ -f $RAYSYNC_SERVER_LOCKFILE ];then
nohup $BASE_DIR/RaySyncServer >/dev/null 2&>1 &
sleep 1
if [[ "x$(ps aux | grep RaySyncServer | grep -v -i 'grep' )" == "x" ]];then
echo -e "RaySyncServer setup fail" && failure
else
touch $RAYSYNC_SERVER_LOCKFILE
fi
fi
echo -e " RaySyncServer is running" && success
if ! [ -f $RAYSYNC_PROXY_SERVER_LOCKFILE ];then
#nohup $BASE_DIR/proxy/$RAYSYNC_PROXY_SERVER_BIN_NAME >/dev/null 2&>1
#echo "nohup $BASE_DIR/proxy/$RAYSYNC_PROXY_SERVER_BIN_NAME >/dev/null 2&>1"
sleep 1
if [[ "x$(ps aux | grep RaySync-Proxy-Server )" == "x" ]];then
echo -e "RaySync-Proxy-Server setup fail" && failure
else
touch $RAYSYNC_PROXY_SERVER_LOCKFILE
fi
fi
echo -e " RaySync-Proxy-Server is running" && success
}
stop() {
if [ -f $MONITOR_LOCKFILE ];then
# killall $MONITOR_BIN_NAME
ps -ef|grep Ray|grep -v grep|awk '{print $2}'|xargs kill -9 >/dev/null 2&>1
rm -f $MONITOR_LOCKFILE
fi
echo -e "monitor stopped" && success
if [ -f $RAYSYNC_SERVER_LOCKFILE ];then
#kill $(echo $RAYSYNC_SERVER_PID)
# killall $RAYSYNC_SERVER_BIN_NAME
ps -ef|grep Ray|grep -v grep|awk '{print $2}'|xargs kill -9 >/dev/null 2&>1
rm -f $RAYSYNC_SERVER_LOCKFILE
fi
echo -e "RaySyncServer stopped" && success
# result_Proxy=`ps -ef|grep ${RAYSYNC_PROXY_SERVER_BIN_NAME}|grep -v grep`
# if [ -f $RAYSYNC_PROXY_SERVER_LOCKFILE ] || [ $result_Proxy != "" ];then
if [ -f $RAYSYNC_PROXY_SERVER_LOCKFILE ];then
ps -ef|grep Ray|grep -v grep|awk '{print $2}'|xargs kill -2 >/dev/null 2&>1
echo ${RAYSYNC_PROXY_SERVER_BIN_NAME}
rm -f $RAYSYNC_PROXY_SERVER_LOCKFILE
fi
echo -e "RaySync-Proxy-Server stopped" && success
}
status() {
if [ -f $MONITOR_LOCKFILE ];then
echo " monitor is running"
else
echo " monitor stopped"
fi
if [ -f $RAYSYNC_SERVER_LOCKFILE ];then
echo " RaySyncServer is running"
else
echo " RaySyncServer stopped"
fi
if [ -f $RAYSYNC_PROXY_SERVER_LOCKFILE ];then
echo " RaySync-Proxy-Server is running"
else
echo " RaySync-Proxy-Server stopped"
fi
}
case $1 in
start)
start
;;
stop)
stop
;;
status)
status
;;
restart)
stop
sleep 2
start
;;
*)
echo "Error Usage: service $(basename $0) [ start | stop | status | restart ]"
exit 3
esac
以上是關於鐳速(Raysync)文件傳輸軟件的高可用安裝部署詳細介紹!