永久黄网站色视频免费直播,yy6080三理论日本中文,亚洲无码免费在线观看视频,欧美日韩精品一区二区在线播放

Mysql雙機互備熱備,自動切換

作者:wdlinux http://www.fsowen.com QQ:12571192
我的Linux,開源技術(shù),應(yīng)用方案,集群架構(gòu),高可用,負載均衡,分流,性能優(yōu)化
歡迎轉(zhuǎn)載,轉(zhuǎn)載時請務(wù)必以超鏈接形式標(biāo)明文章原始出處和作者信息及本聲明.

Mysql雙機互備熱備
在實際的應(yīng)用中,數(shù)據(jù)庫是非常重要和關(guān)鍵的一個環(huán)節(jié)。在保障數(shù)據(jù)庫安全的同時,提高應(yīng)用性和縮短出故障后的恢復(fù)時間,也同等重要。特別是在一些持續(xù)性和實時性要求高的應(yīng)用中,故障一小時,可能會讓你損失幾千到幾萬甚至更高。
本方案致力于數(shù)據(jù)庫實時備份,并且在故障發(fā)生后以最短的時間恢復(fù)和修復(fù)
在mysql數(shù)據(jù)庫的備份應(yīng)用中,主從復(fù)制結(jié)構(gòu)是應(yīng)用的比較廣泛,數(shù)據(jù)同步和實時性都很高,基本上能滿足大部分的需求。
本方案基于主從復(fù)制結(jié)構(gòu)的基礎(chǔ)上,當(dāng)主庫出現(xiàn)故障時,從庫能自動接管主庫的功能,向外提供服務(wù),且將自身設(shè)置為主庫,將這個故障時間和影響縮短至最小,5秒內(nèi)可切換完成。待原主庫修復(fù)后,會自動進入從庫的備份角色,如此循環(huán)。
在本方案的實現(xiàn)中,有兩種方法且均基于mysql的主從結(jié)構(gòu)中
1 高可用(High Availability)HA集群,用heartbeat實現(xiàn)及增加了故障后的恢復(fù)功能
2 同樣是高可用,只是是自己編寫腳本程序來監(jiān)控,切換,恢復(fù)
在方法1中,使用穩(wěn)定的heartbeat開源軟件實現(xiàn),但此方法,需要多一個IP對外訪問,同時在監(jiān)控上,是監(jiān)控機器的狀態(tài)而不是mysql,有些情況下,機器是好的但mysql服務(wù)掛了,這種情況下就不準(zhǔn)確了。不過可以修改監(jiān)控方式或增加對mysql服務(wù)的監(jiān)控
方法2中,可以不用增加一個對外IP,同時在監(jiān)控上,可以直接監(jiān)控mysql的服務(wù),至于穩(wěn)定性,有待測試。此方法中還有一個問題,就是提供給客戶端的數(shù)據(jù)庫連接IP,因為切換后,IP也就變了。如果說更改程序,那不現(xiàn)實。所以,這里可以用域名,不過仍然需要修改域名的IP指向或是修改客戶機的hosts文件。本文使用的是修改DNS的方法,因為DNS是自己配置的,可以靈活操作。

本方分兩部分進行說明
第一部分 用 heartbeat 實現(xiàn)的高可用

1環(huán)境條件
兩個虛擬機(IP:192.168.1.91/92/93),
CentOS5.4,mysql-5.1.37,heartbeat-2.1.3-3

2 安裝前的準(zhǔn)備
Heartbeat 的工作原理:heartbeat最核心的包括兩個部分,心跳監(jiān)測部分和資源接管部分,心跳監(jiān)測可以通過網(wǎng)絡(luò)鏈路和串口進行,而且支持冗余鏈路,它們之間相互發(fā)送報文來告訴對方自己當(dāng)前的狀態(tài),如果在指定的時間內(nèi)未受到對方發(fā)送的報文,那么就認為對方失效,這時需啟動資源接管模塊來接管運行在對方主機上的資源或者服務(wù)。更多請看官網(wǎng) http://linux-ha.org/HomePage
基礎(chǔ)系統(tǒng)的安裝,mysql的安裝(略)
軟件下載
http://linux-ha.org/DownloadSoftware
Http://www.packetfactory.net/libnet
http://dev.mysql.com/downloads/mysql/5.1.html

3 安裝過程(heartbeat)
一般的軟件源碼安裝是./configure –prefix=path;make;make install,本文使用yum安裝
yum install heartbeat
yum install heartbeat-ldirectord
有一點要注意:heartbeat的監(jiān)測,可以是網(wǎng)絡(luò)或串口,本文使用網(wǎng)絡(luò)也就是網(wǎng)卡

4 配置文檔及腳本
1) Heartbeat的三個配置文件ha.cf,authkeys,haresources
Cat Ha.cf
debugfile /var/log/ha-debug
logfile /var/log/ha-log
logfacility local0
keepalive 2
deadtime 5
warntime 10
initdead 10
udpport 694
bcast eth0
auto_failback off
node mysqlm
node mysqls
respawn hacluster /usr/lib/heartbeat/ipfail
apiauth ipfail gid=haclient uid=hacluster

Cat authkeys
auth 1
1 crc

Cat haresources
mysqlm mysql_start1.sh IPaddr::192.168.1.93/32/eth0

2) mysql_start1.sh腳本
#!/bin/sh
# author:wdlinux
# url:http://www.fsowen.com
# description: mysql start

local_ip=192.168.1.91
mip=192.168.1.92
vip=192.168.1.93
mysql_in=/usr/local/mysqlm
mysql_bin=${mysql_in}/bin/mysql
mysql_user=root
mysql_port=3306
mysql_pass=12345
mysqld_start=/etc/rc.d/init.d/mysqldm
. /etc/rc.d/init.d/functions
function slave_to_master() {
echo "mysql to master from slave..."
$mysql_bin -u"${mysql_user}" -p"${mysql_pass}" -e "slave stop;"
log_file=$(${mysql_bin} -u"${mysql_user}" -p"${mysql_pass}" -P"${mysql_port}" -e"show master status\G" | grep "File:" | a
wk -F ': ' '{printf $2}')
log_id=$(${mysql_bin} -u"${mysql_user}" -p"${mysql_pass}" -P"${mysql_port}" -e"show master status\G" | grep "Position:" |
awk -F ': ' '{printf $2}')
$mysql_bin -u"${mysql_user}" -p"${mysql_pass}" -P"${mysql_port}" -e "use ms_state;update ms_log set mlf='${log_file}',mlp
='${log_id}'"
echo "mysql server is master"
}

function master_to_slave {
echo "mysql to slave from master..."
if (${mysql_bin} -h"${vip}" -u"${mysql_user}" -p"${mysql_pass}" -P"${mysql_port}" -e"show slave status" > /dev/null 2>&1)
then
log_file=$(${mysql_bin} -h"${vip}" -u"${mysql_user}" -p"${mysql_pass}" -P"${mysql_port}" -e"use ms_state;select m
lf from ms_log\G" | grep "mlf:" | awk -F': ' '{printf $2}')
log_id=$(${mysql_bin} -h"${vip}" -u"${mysql_user}" -p"${mysql_pass}" -P"${mysql_port}" -e"use ms_state;select mlp
from ms_log\G" | grep "mlp:" | awk -F': ' '{printf $2}')
$mysql_bin -u"${mysql_user}" -p"${mysql_pass}" -P"${mysql_port}" -e "slave stop;CHANGE MASTER TO MASTER_LOG_FILE
= '${log_file}',MASTER_LOG_POS = ${log_id};slave start";
echo "mysql server is slave"
fi
}
case "$1" in
start)
slave_to_master
;;
stop)
master_to_slave
;;
*)
echo "Usage: mysql_start.sh {start|stop}"
echo "start is slave to master"
echo "stop is master to slave"
exit 1
esac

3) 同保證和記錄當(dāng)主機由slave到master轉(zhuǎn)變時記錄當(dāng)前master的文件和位置,需要建一個數(shù)據(jù)庫和表來記錄
create database ms_state;
use ms_state;
create table ms_log(
id tinyint (1) unsigned not null auto_increment,
mlf varchar (20) not null default '',
mlp varchar (20) not null default '',
primary key (id)
);
insert into ms_log values (NULL,"test","123");

4) mysql的配置
在原本的配置里加上,文件my.cnf,主從一樣,ID要不同
log-bin=mysql-bin
binlog_format=mixed
server-id = 1
master-host = 192.168.1.92
master-user = msdata
master-password = pass
slave-skip-errors=all
replicate-do-db=test
replicate-ignore-db=mysql
replicate-ignore-db=ms_state
其它配置略

經(jīng)測試,91,92重起關(guān)機都能自動切換,接管93的IP,且故障機恢復(fù)后都能自動進入備份狀態(tài),且數(shù)據(jù)同步及時和一致

第二部分 自己編寫腳本實現(xiàn)的高可用
一 監(jiān)控實現(xiàn)原理
自己編寫腳本,實現(xiàn)的功能和heartbeat差不多,都是監(jiān)控,切換等
對于監(jiān)控,可以監(jiān)控系統(tǒng)的狀態(tài)如ping,也可以監(jiān)控mysql服務(wù)狀態(tài)(本文使用的方法)

二 實現(xiàn)腳本
除了用此腳本替換heartbeat外,其它的實現(xiàn)和配置同上
1 監(jiān)控腳本 mysql_monitor.sh
#!/bin/bash
# author:wdlinux
# url:http://www.fsowen.com
# description:monitor shell of mysql
local_ip=192.168.1.92
rip=192.168.1.91
mysql_in=/usr/local/mysqlm
mysql_bin=${mysql_in}/bin/mysql
mysql_user=root
mysql_pass=12345
mysql_port=3306

st=0
while true;do
if (${mysql_bin} -h"${rip}" -u"${mysql_user}" -p"${mysql_pass}" -P"${mysql_port}" -e "show master status" --connect_timeout=1 > /
dev/null 2>&1)
then
if (($st==0));then
/etc/rc.d/init.d/mysql_start1.sh stop
let st=$st+1
fi
else
for ((i=0;i<=3;i++));do
sleep 3
if (${mysql_bin} -h"${rip}" -u"${mysql_user}" -p"${mysql_pass}" -P"${mysql_port}" -e "show master status" --conne
ct_timeout=1 > /dev/null 2>&1)
then
break
else
if (($i==3));then
echo "slave to master"
/etc/rc.d/init.d/mysql_start1.sh start
###modify dns prg
exit
fi
fi
done
fi
sleep 3
done
將local_ip,rip作相應(yīng)的修改,local_ip代表本機IP,rip為另一臺機的IP

2 將監(jiān)控腳本加入自啟動,隨系統(tǒng)啟動,如
Echo “/etc/rc.d/init.d/mysql_monitor.sh &” >> /etc/rc.d/rc.local

此方法也可以增加一個對外服務(wù)IP,如ha實現(xiàn)的一樣,這樣就省去了修改域名IP等問題
但在腳本里,需要增加監(jiān)控,添加,刪除IP的實現(xiàn)和功能

歡迎轉(zhuǎn)載,但請保留此信息
[我的Linux,讓Linux更易用] CentOS精簡版,集成lamp,lnmp版,wdcp,wdcdn,wddns,一鍵安裝包,集群負載均衡LVS,智能DNS/CDN,性能優(yōu)化
本文連接:http://www.fsowen.com/old/mysql_replicate_ha

評論

Test, just a test

Hello. And Bye.

Test, just a test

Hello. And Bye.