搭建mysql負(fù)載均衡及高可用環(huán)境
摘要:使用 rhel5.8,mysql,keepalived,haproxy 搭建一個(gè)集高可用、負(fù)載均衡的集群; 也有使用到 mysql 的二進(jìn)制復(fù)制來保持?jǐn)?shù)據(jù)一致性; 避免了單節(jié)點(diǎn)故障,也提供設(shè)備的利用率; 雖然這個(gè)實(shí)驗(yàn)只有兩臺(tái)設(shè)備,但可以此為例,理解概念后再放大到其它環(huán)境也可以;
目標(biāo):使用兩臺(tái)主機(jī)實(shí)現(xiàn) Mysql 的負(fù)載均衡及冗余,并做到雙主互備;
環(huán)境:rhel5.8,mysql-5.0.77,keepalived-1.2.7,haproxy-1.4.20;
說明:
keepalived 實(shí)現(xiàn)通過 vrrp協(xié)議,通過使一個(gè)虛擬IP地址(或稱浮動(dòng)IP)在主備設(shè)備間的切換來達(dá)到主機(jī)冗余;
而客戶機(jī)通過訪問這個(gè)虛擬IP 來獲取服務(wù);
haproxy 是一款負(fù)載均衡軟件,用于將請(qǐng)求按策略轉(zhuǎn)發(fā)給不同主機(jī),達(dá)到負(fù)載均衡的效果;
可以實(shí)現(xiàn)網(wǎng)絡(luò)層或應(yīng)用層上的判斷分配;
mysql 開啟二進(jìn)制日志,做到數(shù)據(jù)庫之間的雙向復(fù)制,保持?jǐn)?shù)據(jù)一致性;
#提醒一下,實(shí)際生產(chǎn)環(huán)境沒人會(huì)這樣搭建的,僅通過這個(gè)實(shí)驗(yàn)來理解這些概念,希望閱者能有所獲;
server1_ip=192.168.5.11
server2_ip=192.168.5.12
server_vip=192.168.5.111
================================================
#此處關(guān)閉了防火墻,開啟則另配置相應(yīng)規(guī)則
service iptables stop
chkconfig iptables off
ls /opt/soft/ #提取準(zhǔn)備軟件到此處
haproxy-1.4.20.tar.gz keepalived-1.2.7.tar.gz
mkdir /opt/keepalived
mkdir /opt/scripts/ #此實(shí)驗(yàn)用到腳本目錄
mkdir /opt/log/ #此實(shí)驗(yàn)日志文件夾
=================================================
[install_mysql]
#在兩臺(tái)主機(jī)上安裝 mysql ,此處使用 rpm 包安裝,yum環(huán)境可以搭本地源;
yum install -y mysql-server
service mysqld start
=======================================================
[create_mysql_test_table]
#分別創(chuàng)建一張相同名稱和字段的表,插入不同的值,方便中途測(cè)試 ha 和輪詢是否成功;
#還有分別創(chuàng)建一個(gè)相同的用戶
#server1
mysql
>use test;
>create table mywait(name char(9),phone char(14));
>insert into mywait(name,phone) values('wait',15000000000);
#server2
>use test;
>create table mywait(name char(9),phone char(14));
>insert into mywait(name,phone) values('chen',15611111111);
[new_mysql_test_user]
>mysql
>grant all on test.* to diaosi@'%' identified by '123456';
>flush privileges;
=======================================================
#從客戶機(jī)上測(cè)試一下;
mysql -udiaosi -p123456 -h 192.168.5.11 -e "select * from test.mywait;"
mysql -udiaosi -p123456 -h 192.168.5.12 -e "select * from test.mywait;"
#至此,mysql 基礎(chǔ)環(huán)境搭建完成;
=======================================================
[install_keepalived]
yum install -y libnl-devel #解決依賴關(guān)系
tar xf /opt/soft/keepalived-1.2.7.tar.gz -C /opt/soft
cd /opt/soft/keepalived-1.2.7/
#with-kernel 指定內(nèi)核版本時(shí),根據(jù)本機(jī)情況使用TAB鍵補(bǔ)全
./configure --prefix=/opt/keepalived --with-kernel-dir=/usr/src/kernels/2.6.18-308.el5-i686/
make && make install
[keepalived_config]
#因?yàn)闆]有安裝在 / 目錄下,所以這些啟動(dòng)和配置文件都需要再 copy 一下;
cp /opt/keepalived/sbin/keepalived /usr/sbin/
cp /opt/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
cp /opt/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
mkdir /etc/keepalived
cp /opt/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
chkconfig keepalived on #設(shè)置開機(jī)啟動(dòng)
=======================================================
vim /etc/keepalived/keepalived.conf #keepalived 主配文件
#以下的配置適合 keepalived 本身便是服務(wù)提供者的情況;01
!
Configuration File
for
keepalived
02
03
#簡(jiǎn)單的頭部,這里主要可以做郵件通知報(bào)警等的設(shè)置,此處就暫不配置了;
04
global_defs
{
05
notificationd
LVS_DEVEL
06
}
07
08
#預(yù)先定義一個(gè)腳本,方便后面調(diào)用,也可以定義多個(gè),方便選擇;
09
vrrp_script
mysql_chk {
10
script
"/opt/scripts/mysql_chke.sh"
11
interval
2
#腳本循環(huán)運(yùn)行間隔
12
weight
2
#腳本的結(jié)果導(dǎo)致優(yōu)先級(jí)變更,成功+2
13
}
14
#VRRP虛擬路由冗余協(xié)議配置
15
vrrp_instance
VI_1 {
#VI_1
是自定義的名稱;
16
state
MASTER
#表明這是一臺(tái)主設(shè)備,備用設(shè)備為
BACKUP
17
interface
eth0
<code class="comments" style="word-break:break-all; padding:0px!important; margin:0px!important; border:0px!important; outline:0px!important; float:none!important; vertical-align:baseline!important; position:static!important; left:auto!important; top:auto!important; right:auto!important; bottom:auto!important; hei