AWSRDS多可用區+EC2例項跑mysql從庫的測試
RDS配置多可用區的時候,主庫有自動failover的功能,具體生效時間以例項大小和配置有關。線上有一個業務之前一主兩從都是用的RDS的例項,但是後來出於成本考慮想要把mysql從RDS遷移至EC2。由於不能停業務,最終決定主庫繼續放在RDS,在EC2上重做從庫。
既然決定實施,那就要測一下主庫failover的時候的對從庫的影響。
1,申請一個配置有多可用區的測試例項:masterfailovertest.cojn00n8zy2d.us-east-1.rds.amazonaws.com
2,授權複製帳號和測試帳號(sysbench做測試)
1
2
3
|
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO `repl` @ `172.31.%` IDENTIFIED BY `repl` ;
grant select , create , index , insert , update , delete , drop on *.* to hatest@ `172.31.%` identified by `123456` ;
flush privileges ;
|
3,得到主庫上的binlog位置
1
2
3
4
5
6
7
8
|
>show master statusG *************************** 1. row *************************** File: mysql-bin-changelog.000023
Position: 5768524
Binlog_Do_DB:
Binlog_Ignore_DB:
Executed_Gtid_Set: 1 row in set (0.01 sec)
|
4,在EC2準備一臺從庫,指定好主從關係
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
|
>CHANGE MASTER TO MASTER_HOST= `masterfailovertest.cojn00n8zy2d.us-east-1.rds.amazonaws.com` , MASTER_PORT=3306, MASTER_LOG_FILE= `mysql-bin-changelog.000023` , MASTER_LOG_POS=5768524, MASTER_USER= `repl` , MASTER_PASSWORD= `repl` ;
Query OK, 0 rows affected, 2 warnings (0.02 sec)
>start slave; Query OK, 0 rows affected (0.00 sec)
>show slave statusG *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event
Master_Host: masterfailovertest.cojn00n8zy2d.us-east-1.rds.amazonaws.com
Master_User: repl
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin-changelog.000023
Read_Master_Log_Pos: 5768524
Relay_Log_File: relay-log.000002
Relay_Log_Pos: 293
Relay_Master_Log_File: mysql-bin-changelog.000023
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB: mysql
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table: mysql.%
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 5768524
Relay_Log_Space: 460
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 459205842
Master_UUID: 46da27c8-007c-11e7-9b5b-06051bcfdaae
Master_Info_File: /data/dbdata/mysqldata/master.info
SQL_Delay: 0
SQL_Remaining_Delay: NULL
Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it
Master_Retry_Count: 86400
Master_Bind:
Last_IO_Error_Timestamp:
Last_SQL_Error_Timestamp:
Master_SSL_Crl:
Master_SSL_Crlpath:
Retrieved_Gtid_Set:
Executed_Gtid_Set:
Auto_Position: 0
1 row in set (0.00 sec)
|
5,用sysbench往RDS寫入資料的時候,通過重啟例項來模擬failover
1
|
/usr/local/sysbench/bin/sysbench --mysql-host=masterfailovertest.cojn00n8zy2d.us-east-1.rds.amazonaws.com --mysql-port=3306 --mysql-user=hatest --mysql-password=123456 --mysql-db=failovertest --oltp-tables-count=5 --oltp-table-size=6000000 --max-requests=100000000 -- test = /usr/local/sysbench/tests/db/select .lua prepare
|
6,此時連mysql的時候會報錯,管理後臺顯示該例項正在修復中
1
2
|
$ mysql -uroot -p -hmasterfailovertest.cojn00n8zy2d.us-east-1.rds.amazonaws.com ERROR 2003 (HY000): Can `t connect to MySQL server on ` masterfailovertest.cojn00n8zy2d.us-east-1.rds.amazonaws.com` (110)
|
7,檢視slave的複製狀態是否正常。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
|
>show slave statusG *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event
Master_Host: masterfailovertest.cojn00n8zy2d.us-east-1.rds.amazonaws.com
Master_User: repl
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin-changelog.000024
Read_Master_Log_Pos: 24121968
Relay_Log_File: relay-log.000004
Relay_Log_Pos: 24122141
Relay_Master_Log_File: mysql-bin-changelog.000024
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB: mysql
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table: mysql.%
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 24121968
Relay_Log_Space: 24122365
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 459205842
Master_UUID: 46da27c8-007c-11e7-9b5b-06051bcfdaae
Master_Info_File: /data/dbdata/mysqldata/master.info
SQL_Delay: 0
SQL_Remaining_Delay: NULL
Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it
Master_Retry_Count: 86400
Master_Bind:
Last_IO_Error_Timestamp:
Last_SQL_Error_Timestamp:
Master_SSL_Crl:
Master_SSL_Crlpath:
Retrieved_Gtid_Set:
Executed_Gtid_Set:
Auto_Position: 0
1 row in set (0.00 sec)
|
多次執行show slave statusG命令發現複製狀態都顯示正常,但是位置一直卡在mysql-bin-changelog.000024 24121968這裡不動,此時RDS上面的主庫一直有用sysbench寫資料進來。可以斷定雖然復現狀態顯示正常,但是其實連線已經失效。
8,我們在RDS主庫上面檢視一下binary log的資訊可以發現從庫已經執行完了mysql-bin-changelog.000024日誌的所有event,從日誌偏移量可以看出mysql-bin-changelog.000024是failover之前的日誌,mysql-bin-changelog.000025是failover之後的日誌。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
>show binary logs;
+ ----------------------------+-----------+
| Log_name | File_size | + ----------------------------+-----------+
| mysql-bin-changelog.000020 | 134243795 | | mysql-bin-changelog.000021 | 111694820 | | mysql-bin-changelog.000022 | 134243505 | | mysql-bin-changelog.000023 | 134244377 | | mysql-bin-changelog.000024 | 24121968 | | mysql-bin-changelog.000025 | 134244377 | | mysql-bin-changelog.000026 | 134243504 | | mysql-bin-changelog.000027 | 134243503 | | mysql-bin-changelog.000028 | 114316703 | + ----------------------------+-----------+
9 rows in set (0.01 sec)
|
9,怎樣才能讓從庫繼續從RDS主庫拉日誌呢,撓頭想了一下之後給你頓時有了思路,由於EC2的從庫連線RDS是用的域名,failover後這個域名已經指向了另外一個ip,而當前複製的連線一直沒有釋放,在是連的之前對應的ip。於是在從庫上面執行stop slave;start slave;再檢視複製狀態時,發現已經正常,從庫已經開始拉failover之後的日誌了。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
|
>show slave statusG *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event
Master_Host: masterfailovertest.cojn00n8zy2d.us-east-1.rds.amazonaws.com
Master_User: repl
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin-changelog.000025
Read_Master_Log_Pos: 86524981
Relay_Log_File: relay-log.000006
Relay_Log_Pos: 63976502
Relay_Master_Log_File: mysql-bin-changelog.000025
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB: mysql
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table: mysql.%
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 63976329
Relay_Log_Space: 86525494
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 191
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 459205842
Master_UUID: 46da27c8-007c-11e7-9b5b-06051bcfdaae
Master_Info_File: /data/dbdata/mysqldata/master.info
SQL_Delay: 0
SQL_Remaining_Delay: NULL
Slave_SQL_Running_State: update
Master_Retry_Count: 86400
Master_Bind:
Last_IO_Error_Timestamp:
Last_SQL_Error_Timestamp:
Master_SSL_Crl:
Master_SSL_Crlpath:
Retrieved_Gtid_Set:
Executed_Gtid_Set:
Auto_Position: 0
1 row in set (0.00 sec)
|
測試完畢,由此可見主庫放RDS,從庫放EC2這樣的形式是可行的,但是當檢測到主庫failover時需要馬上在從庫上面執行stop slave;start slave;命令,這樣從庫才不至於讓從庫落後太久。
相關文章
- 高可用架構例項:在多雲和多區域中穿行架構
- 亞馬遜雲科技宣佈Amazon EC2 P5e 例項正式可用亞馬遜
- Kafka效能測試例項Kafka
- MySQL 中主庫跑太快,從庫追不上咋整?MySql
- PHP+MySQL實現線上測試答題例項PHPMySql
- AWS EC2 例項型別命名規則型別
- MySQL 效能壓測工具,從入門到自定義測試項MySql
- Linux中執行多個MySQL例項LinuxMySql
- Jmeter介面測試例項-牛刀小試JMeter
- 手工測試用例與自動化測試用例的區別
- AWS釋出針對Amazon EC2的Apple macOS例項APPMac
- MySQL 效能壓測工具-sysbench,從入門到自定義測試項MySql
- 在Windows中執行多個MySQL例項WindowsMySql
- JDBC連線MySQL資料庫的方法和例項JDBCMySql資料庫
- FreeSWITCH測試撥號規則例項
- 巴西銀行聯合會進行多項區塊鏈測試區塊鏈
- 測試驅動開發(TDD)例項演示
- 測試用例設計的5大誤區
- MySQL高可用之MHA切換測試(switchover & failover)MySqlAI
- MySQL——MHA高可用群集部署及故障測試MySql
- MySQL高可用群集MHA部署及故障測試分析MySql
- 【DB寶19】MySQL高可用之MHA功能測試MySql
- 如何區分例項化網格中的每個例項
- MySQL製作具有千萬條測試資料的測試庫MySql
- 測試——水杯的測試用例
- 大型專案裡Flutter測試應用例項整合測試深度使用Flutter
- 基於ARM的AWS EC2例項上的PG跑起來效能怎麼樣?
- 亞馬遜雲科技宣佈由全新Amazon Graviton3支援的Amazon EC2 C7g例項正式可用亞馬遜
- TestNG測試用例重跑詳解及實踐最佳化
- 智慧掃描支援從MySQL例項線上抓取慢SQLMySql
- 東商專案mysql例項庫(dingding)增量備份的實現MySql
- docker redis 多個例項DockerRedis
- MySQL8.0 高可用叢集化 · mysql-shell · mysql-router · docker · 單主多從MySqlDocker
- pytest多程式/多執行緒執行測試用例執行緒
- MySQL8.0的MGR多主搭建與測試MySql
- 高德地圖多邊形圍欄例項:javaspringmvc+mysql地圖JavaSpringMVCMySql
- Go 單元測試之Mysql資料庫整合測試GoMySql資料庫
- TestNG測試框架之失敗測試重跑框架
- 可用性測試