最近,公司項目搭建了一套後端數據庫架構,不是在RDS,是在阿里雲的ECS服務器上搭建keepalived、mha、mysql5.六、gtid、一主兩從架構,目前尚未實現讀寫分離,之後架構升級,可能代碼裏會實現讀寫分離,或者加入入mycat等中間件,也可能進行分庫分表;架構不是最新,不少工具你們都見過,只是在不一樣的環境,不一樣的狀況下,趕上的問題不一樣,也踩了不少坑,若有些可能沒在阿里雲上,有的可能數據庫版本不同等,因此更你們分享一下經驗。html
一、mha必須是0.56版本才支持GTIDnode
二、阿里雲ECS不支持浮動IPmysql
三、阿里雲服務器上keepalived只能設置單播sql
四、keepalived配置文件里加腳本判斷mysql是否啓動須要首尾寫好配置文件數據庫
五、注意keepalived的配置文件,以防主庫恢復後IP漂移回去後端
主從複製一主兩從,用GTID特性,半同步複製能保證一致性好點,和主從複製方便點。服務器
a、配置每一個節點配置文件my.cnf 添加以下 log-bin=mysql-bin server-id=3 gtid_mode=ON log_slave_updates enforce_gtid_consistency (注:除了server-id每一個節點不同,其它都同樣,也必須加,以通常主從複製區別,多了下面的3個參數) b、主節點添加複製帳號 grant replication slave on *.* to 'backup'@'192.168.10.%'identified by'backup'; c、從節點執行 change master to master_host='192.168.10.142', master_user='backup', master_password='backup',master_port=3306,master_auto_position=1; start slave;
下載連接:連接:http://pan.baidu.com/s/1c2lKbOs 密碼:bfqd網絡
安裝方式參照:http://www.cnblogs.com/galengao/p/5764163.html架構
安裝方式參照:http://www.cnblogs.com/galengao/p/5764163.htmlide
能夠選擇安裝最新版本
安裝依賴包 yum install popt-static kernel-devel make gcc openssl-devel lftp libnl* popt* 安裝keepalived wget http://www.keepalived.org/software/keepalived-1.2.4.tar.gz tar zxvf keepalived-1.2.4.tar.gz cd keepalived-1.2.4 ./configure --prefix=/usr/local/keepalived make make install 將keepalived作成啓動服務,方便管理 cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/ cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/ mkdir /etc/keepalived/ cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/ cp /usr/local/keepalived/sbin/keepalived /usr/sbin/ service keepalived start
從我給的連接下載0.56的版本,或者網上找的來安裝
要注意:阿里雲的上ECS服務器跟咱們本身的虛擬機不同,它不支持浮動IP的
a、阿里雲上提工單,讓其開通havip,高可用虛擬ip
b、到專有VPC網絡的高可用虛擬IP,點擊建立高可用虛擬IP出現以下圖
如何在出現的虛擬ip點管理,把你要漂移的那兩臺服務器綁定在上面:
按照上面模式作了keepalived仍是不能正常運行,由於在阿里雲私有網絡裏只能設置單播,以下配置文件裏的紅字,畫了的是IP地址,從哪臺飄到哪臺,另一臺的配置IP是相反的:
由於咱們不可是服務器死了進行IP漂移,還要即便數據庫死了也要漂移,因此只能寫腳本去判斷,腳本在配置文件裏要注意格式:末尾還有一個模塊,那個模塊是在vrrp_instance VI_1的模塊裏的,及check_mysql和後面的花括號有一個空格:
我在配置文件裏改爲非搶佔模式nopreempt 和主備的state都改爲BACKUP,這樣當主庫掛了,IP漂移過去後從新啓動主庫,但數據庫還沒修復時不會漂移過來,若是須要漂移過來須要手動先關閉備庫的keepalived,讓其漂移過來。
問題形形色色,不一樣環境不一樣需求會趕上不一樣問題,慢慢摸索慢慢發掘。