1. 程式人生 > >[bigdata-60]mysql的高可用主主同步複製及其在阿里雲上的實踐

[bigdata-60]mysql的高可用主主同步複製及其在阿里雲上的實踐

1. 技術資料

http://www.linuxidc.com/Linux/2015-06/118767.htm
http://blog.csdn.net/mchdba/article/details/51377989
http://blog.sina.com.cn/s/blog_4f9fc6e10102w6xy.html
推薦 http://www.cnblogs.com/lyhabc/p/3838764.html

2.
可靠的資料:資料不能丟失
可用的服務:伺服器不能宕機

可用性的技術方案和可用性概率:
    要達到99.9%:使用MYSQL複製技術
    要達到99.99%:使用MYSQL NDB 叢集和虛擬化技術
    要達到99.999%:使用shared-nothing架構的GEO-REPLICATION和NDB叢集技術


一年計不同可用性允許宕機時間:
    90% 36天
    99% 3.65天
    99.9% 8.76小時
    99.99% 52分鐘
    99.999% 5.26分鐘
    99.9999% 31.5秒

3. 各種高可用方案

3.1 mysql主從複製 單活
3.2 雙主 單活
3.3 雙主 配 SAN儲存 單活
3.4 DRBD雙主配DRBD 單活
3.5 NDB cluster
3.6 第三方Tungsten軟體
3.7 網易INNOSQL



4. MHA: Master High Availability Manager and Tools for MySQL
Perl語言寫的指令碼管理工具,僅適用MySQL Replicaiton二層環境,維持master高可用。
至少需要三臺機器來做。
http://www.2cto.com/database/201407/319748.html



5. 另一組解決方案
http://bbs.chinaunix.net/thread-3769165-1-1.html
5.1 lvs+keepalived+mysql 單點寫入主主同步
5.2 lvs+keepalived+mysql 單點寫入讀負載均衡主主同步
5.3 heartbeat高可用主主同步
5.4 heartbeat+drbd+mysql
5.5 mmm方案


6. 實戰5.1的解決方案
http://www.111cn.net/database/mysql/65579.htm

6.1 伺服器配置
    mysql1: ttt, 10.168.1.111
    mysql2: zzz, 10.168.1.222
    使用者名稱和密碼 root:tiigggg

6.2 在兩個資料都建立測試使用者和測試庫
create user 'usertest'@'%' identified by '123456';
create database testdb;
grant all privileges on testdb.* to 'usertest'@'%';
這帳號只能遠端登入。
create user 'usertest'@'localhost' identified by '123456';
grant all privileges on testdb.* to 'usertest'@'localhost';
這帳號只能本地登入。

需要建立內網ip登入賬戶
在ttt上執行
create user 'usertest'@'10.168.1.222' identified by '123456';
grant all privileges on testdb.* to 'usertest'@'10.168.1.222';
grant replication slave on *.* to 'usertest'@'10.168.1.222' identified by '123456';
flush privileges;

在zzz上執行
create user 'usertest'@'10.168.1.111' identified by '123456';
grant all privileges on testdb.* to 'usertest'@'10.168.1.111';
grant replication slave on *.* to 'usertest'@'10.168.1.111' identified by '123456';
flush privileges;


6.3 修改ttt的mysql配置/etc/my.cnf的[mysqld]的配置如下
#主主同步配置
log-bin=mysql-bin
server-id=1
expire-logs-days=100
replicate-do-db=testdb
binlog-ignore-db=mysql
binlog-ignore-db=infomation_schema
auto-increment-increment=2
auto-increment-offset=1

6.4 修改zzz的mysql配置/etc/my.cnf的[mysqld]的配置如下
#主主同步配置
log-bin=mysql-bin
server-id=2
expire-logs-days=100
replicate-do-db=testdb
binlog-ignore-db=mysql
binlog-ignore-db=infomation_schema
auto-increment-increment=2
auto-increment-offset=2

二都只有server-id不同和 auto-increment- offset不同
auto-increment-offset是用來設定資料庫中自動增長的起點的,這兩伺服器都設定了一次自動增長值2,所以它們的起點必須得不同,這樣才能避免兩臺伺服器資料同步時出現主鍵衝突
replicate-do-db 指定同步的資料庫,我們只在兩臺伺服器間同步usertest庫
另:auto-increment-increment的值應設為整個結構中伺服器的總數,本案例用到兩臺伺服器,所以值設為2


6.5 重啟這這兩個資料庫
service mysqld restart


6.5 互告bin-log資訊
在zzz上執行  show master status
在ttt上執行  show master status
能看到各自的master資訊。
在ttt上執行如下語句
change master to master_host='10.168.1.222',master_user='usertest',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=525;
也就是說,讓ttt的master指向了zzz的相關配置


在zzz上執行如下語句
change master to master_host='10.168.1.111',master_user='usertest',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=106;
也就是說,讓ttt的master指向了zzz的相關配置


然後,在兩臺伺服器上都執行statr slave
然後,在兩臺伺服器上都執行show slave status \G
如果在兩個mysql都看到兩個yes,則表明成功
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

6.6 測試同步效果

6.6.1 同步表
在zzz下執行
use testdb;
create table t1(
   id INT NOT NULL AUTO_INCREMENT,
   title VARCHAR(100) NOT NULL,
   PRIMARY KEY (id)
);

此時,在ttt的testdb下也出現了t1表,表明同步成功。

6.6.2 同步記錄
在zzz下插入記錄
insert into t1 (title) values('tom');
此時,去ttt檢查資料庫,能看到這個id為2的記錄。

然後,再去ttt插入記錄
insert into t1(title) values('sam');
然後就在zzz的t1表也出現了id為3的記錄。

這就表明記錄是可以同步了。
至此,主主同步設定成功。



6.7 vip的漂移問題

現在有了兩個mysql例項,兩個ip地址。對外,只能有一個ip地址,這個ip地址上綁定了keepalived和heartbeat等這樣的服務,當一臺mysql宕機是能自動切換到另一臺。
現在的問題是,阿里雲的內網地址是固定的,不能隨意在一個機器上再加一個虛擬的內網ip。

如果是自己的私有網路,這是沒問題的,因為內網ip地址隨便設定,但對阿里雲來說,不能隨便設定內網ip地址,可能會有衝突。

關於這一塊的文件有
https://bbs.aliyun.com/read/300778.html
https://yq.aliyun.com/articles/7596?spm=5176.bbsr300778.0.0.DfpiJ7
這裡都提到了需要使用私網高可用虛擬IP(Private High-Availability Virtual IP Address,簡稱HaVip)。

必需開通專有網路,才有havip,文件在此
https://yq.aliyun.com/articles/7603

開通專有網路了
https://help.aliyun.com/document_detail/27710.html
控制檯


這個文件描述如何在阿里雲用專有網路實現havip這個東西
http://www.cnhejia.cn/aliyun-vpc-keepalived-ha/

開通專有網路,搞兩臺機器搭建mysql,為了給web提供服務,為了速度,也需要把web後端也放在專有網路,總之,一切都放到專有網路解決。

7. 結論

如果自己配,需要lvs+keepalived+主主同步,比較繁瑣。

如果不是敏感資料,建議直接買阿里雲的rds雙機熱備。

相關推薦

MySQL 可用複製(雙複製

########################################################################################### linux: CentOS 5.6 mysql: 5.6.22

[bigdata-60]mysql可用同步複製及其阿里實踐

1. 技術資料 http://www.linuxidc.com/Linux/2015-06/118767.htm http://blog.csdn.net/mchdba/article/details/51377989 http://blog.sina.com.cn/s/b

MySQL可用(一)同步MySQL是如何保證備一致的

主備同步,也叫主從複製,是MySQL提供的一種高可用的解決方案,保證主備資料一致性的解決方案。 在生產環境中,會有很多不可控因素,例如資料庫服務掛了。為了保證應用的高可用,資料庫也必須要是高可用的。 因此在生產環境中,都會採用主備同步。在應用的規模不大的情況下,一般會採用一主一備。 除了上面提到的資料庫

MySQL可用(三)搭建同步實戰

### 目標 掌握如何搭建一主一備的主備架構 ### 實驗環境 - 系統:Ubuntu 18.04.1 LTS - MySQL版本:5.7.32 - 主庫IP:192.168.200.120 - 備庫IP:192.168.200.121 ### 操作步驟 #### 1.分別在兩臺伺服器上安裝MySQ

MySQL復制+LVS+Keepalived實現MySQL可用

reports with server 好的 進入 ring BE failed remote MySQL復制能夠保證數據的冗余的同時可以做讀寫分離來分擔系統壓力,如果是主主復制還可以很好的避免主節點的單點故障。但是MySQL主主復制存在一些問題無法滿足我們的實際需要:未提

MySQL可用之雙複製模式

MySQL雙主模式高可用實現   生產案例:VIP:10.105.98.211MASTERHOSTNAME IPADDR PORTmy-prod01.oracle.com 192.168.10.97 3306 my-prod02.oracle.com 192.168.10.5 3306 SL

MySQL 複製 + LVS + Keepalived 實現 MySQL 可用

MySQL複製能夠保證資料的冗餘的同時可以做讀寫分離來分擔系統壓力,如果是主主複製還可以很好的避免主節點的單點故障。但是MySQL主主複製存在一些問題無法滿足我們的實際需要:未提供統一訪問入口來實現負載均衡,如果其中master宕掉的話需要手動切換到另外一個mast

MySQL 可用之 keepalived+Mysql雙活。

環境描述:[[email protected] ~]# cat /etc/redhat-release CentOS Linux release 7.5.1804 (Core) [[email protected] ~]# cat /etc/redhat-release CentOS L

MySQL 可用性—keepalived+mysql(有詳細步驟和全部配置項解釋)

MySQL 高可用性—keepalived+mysql雙主(有詳細步驟和全部配置項解釋)  

02-keepalived實現對nginx服務的可用備)

trac code lob back ddr then 密碼 rtu alt 實驗環境:controller3,controller4為後端web服務器,controller1,controller2為nginx負載均衡服務器,用keepalived實現主備模式的高可用 c

實戰:Keepalived 可用LVS-備模式

keepalived lvs dr hearthcheck關於LVS基礎不多介紹直接操練起來。1.環境準備首先準備4臺機器(VM,Vbox...) node1 --> Director1 192.168.137.31 vip=192.168.137.10 node2 --> Director2

部署mysql可用集群(第三方軟件 + 主從同步mysql-mmm

nginx zxvf c-c++ 部署 GC mysql主主復制 tar -xvf 數據 star 部署mysql高可用集群(第三方軟件 + 主從同步) mysql-mmm 集群:使用多臺服務器提供

keepalived可用配置文件

高可用###########################lb01cat /etc/keepalived/keepalived.conf! Configuration File for keepalived_lb01global_defs {# notification_email {# 9183916

MySQL可用方案 MHA之四 keepalived 半同步複製

    [[email protected] ~]# cat /etc/mysql_mha/app1.cnf [server default]manager_log=/data/mysql_mha/app1-manager.logmanager_workdir=/data/m

MySQL可用介紹4-Mysql主從同步+DRBD+heartbeat

介紹 MySQL一主多從,可以保證資料庫叢集高可用,由於是多從,所以掛掉一個從庫對叢集沒影響;如果掛了一個主庫我們可以把從庫轉換成主庫,但是由於網路延遲問題主從角色切換會造成資料丟失,為了解決這個問題,解決主機單節點執行使用heartbeat做主節點高可用,主

塗抹mysql筆記-搭建mysql可用體系

argument 並且 ren enum 記錄 ica 操作系統 ner 一份 mysql的高可用體系<>追求更高穩定性的服務體系 可擴展性:橫向擴展(增加節點)、縱向擴展(增加節點的硬件配置) 高可用性<>Slave+LVS+Keepalived實

MySQL 可用集群架構 MHA

mha 集群MHA(Master HighAvailability)目前在MySQL高可用方面是一個相對成熟的解決方案,它由日本DeNA公司youshimaton(現就職於Facebook公司)開發,是一套優秀的作為MySQL高可用性環境下故障切換和主從提升的高可用軟件。在MySQL故障切換過程中,MHA能做

keepalived+mysql 可用集群

spa pan etc persist mask int src ipa att mysql 為主主模式參考 https://my.oschina.net/sanmuyan/blog/877373 192.168.100.129 mysql 主節點/keepaliv

MySQL可用架構之MHA

mysql1、關於MHAMHA(Master HA)是一款開源的MySQL的高可用程序,它為MySQL主從復制架構提供了automating master failover功能。MHA在監控到master節點故障時,會提升其中擁有的最新數據的slave節點成為新的master節點,在此期間,MHA會通過其它從

MySQL-可用MHA+Atlas讀寫分離

逗哥 mysql 主從 mha atals讀寫分離 公司最近為新的MySQL架構進行調整,要求給出方案,我這邊提出使用MHA+Atlas做高可用集群讀寫分離架構,就多方討論最終確認方案,進行實施;一、簡單說下MHA的工作原理1個管理節點可以管理多套mysql架構,可以不裝在mysql主機上