在ECS上輕鬆搭建RDS的從例項

卓見架構獅發表於2018-06-26

場景

由於一些特殊的原因,某燃氣公司線下ECS上需要在ECS上搭建一套從庫,需要同步RDS資料庫的資料(mysql5.7版本)。

實現RDS for mysql與線下ECS上自建資料庫資料實時同步,阿里雲官方推薦使用DTS方式進行。原因有兩個:

1、mysql-bin正常情況下,RDS在本地只儲存18個小時

2、當RDS例項切換時,會影響自建ECS資料同步(這個經過測試可以排除)

一方面考慮到使用DTS工具會產生不少的費用(長期使用),另一方面,在資料庫中一個地區對應一個庫,後續業務無法事先規劃好庫名,此時如果使用dts可能需要購買多個通道,進行配置,比較費時費力且費錢。基於這兩個原因的考慮,某燃氣公司決定使用搭建主從複製方式來實現資料同步。以下是搭建RDS與ECS主從複製過程

操作步驟

配置RDS主例項

  1. 登入 RDS 控制檯,選擇目標例項。

    .    配置從例項讀取資料使用的只讀賬號和授權資料庫。
    .    將ECS的從例項的 IP 地址加入主例項的 IP 白名單中
    .    登入主例項
    .    查詢主例項的 server-id。
    
# show variables like `server_id`;

系統返回如下資訊:
+-------------------------+-----------------+
| Variable_name           | Value           |
+-------------------------+-----------------+
| server_id               |678888899909      |
| server_id_bits          | 32              |
+-------------------------+-----------------+

配置ECS上從例項

  1. 安裝 MySQL 從例項。
    MySQL 安裝包和安裝方法,這裡略,這裡建議安裝percona版本的mysql。

停止從例項 mysql 服務。

.    修改從例項 mysql 配置檔案。

1)開啟從例項 MySQL 配置檔案。
vim /etc/my.cnf

.    配置從例項的 server-id 和要同步的資料庫。
server-id               =  123456789              
log_bin=/data/dbdata/mysql-bin 
expire_logs_days        =  7
max_binlog_size         =  100M
replicate-ignore-db     =  mysql                  #不需要同步的資料庫
replicate-ignore-db     =  information_schema     #不需要同步的資料庫
replicate-ignore-db     =  performance_schema     #不需要同步的資料庫
replicate-ignore-db     =  sys     #不需要同步的資料庫
  1. 配置 GTID 同步模式,binlog 格式為 row,以相容主例項。
#GTID
gtid_mode=on
enforce_gtid_consistency=on
binlog_format=row                             #設定 binlog 為 row
log-slave-updates=1
  1. 執行如下命令,檢視 binlog 配置結果。
# show variables like `%binlog_format%`;
系統返回如下資訊:
+-------------------------+-----------------+
| Variable_name           | Value           |
+-------------------------+-----------------+
| binlog_format           | ROW             |
+-------------------------+-----------------+
  1. 將主例項資料全量同步到從例項。
    方式一:通過dts進行資料實時同步

方式二:通過mysqldump進行匯出資料庫及匯入資料
注:這裡大家應該比較熟悉,就不詳細介紹

.    登入資料庫,設定同步選項。
mysql>change master to master_host = `rds服務地扯`, master_port = 3306, master_user = `root`, master_password=`masterpassword`, master_auto_position = 1;
  1. 啟動從例項。
mysql>slave start;
  1. 檢查同步結果。
mysql>show slave statusG
檢視系統返回資訊中 Slave_IO_Running 和 Slave_SQL_Running 的狀態是否為 Yes,如下所示。
 Slave_IO_Running: Yes
 Slave_SQL_Running: Yes

注: Slave_IO_Running、Slave_SQL_Running兩個引數均為yes,表示IO程式及SQL程式都正常,表示配置RDS主從例項成功。

郵件告警功能

由於mysql-binlog在RDS上正常情況下只儲存18個小時,此時必須要對從庫及主庫狀態進行控制,防止從庫沒有應用日誌,RDS主庫上的日誌就已經刪除,這節內容會在下一篇文章中描述。下面會配合lepus監控軟體實現郵件告警的功能。

via 卓見雲技術服務團隊


相關文章