AWS RDS 的使用


AWS RDS 的使用
20180710 Chenxin

創建RDS
實例->啟動數據庫實例->開發/測試Mysql

指定數據庫詳細參數(生產實例最好選擇不低於m4.large的實例類型.因為AWS優化了IOPS等).
選擇多可用區部署(防止單區故障).
配置數據庫實例標識符(RDS標識符).
訪問RDS的用戶名/密碼(mysql的用戶名密碼).

配置高級設置
VPC選項(事前創建好的VPC,3個子網,分別在不同AZ,便於后期副本的恢復)
公網IP(選擇可以供外部直連的實例方式)
可用區AZ(一般是"無首選項")
VPC安全組-子網組里面的3個子網,最好是分別建在a,b,c三個AZ,以便副本可以在其他區.這一步是提前在VPC里進行操作.
DB-name
端口3306
加密選項(可以不用)
備份(自動):選擇保留1天的話,自動備份實際上會保留約3個快照(3天的).
監控
日志
維護窗口

備注:
在AZ的故障轉移中,要注意RDS對應的DNS有個TTL值,該值在RDS中,最好是30秒.這樣RDS對應IP發生變化的時候,只要30秒就可以生效了.否則默認的TTL可能會比較久(網上有看到24小時的DNS-TTL,不過目前比較少了,大多都是幾分鍾到幾十分鍾).關於TTL的說明,請參見本文靠后部分.

測試聯通性
等待數據庫實例的狀態變成"可用"后,才可以操作數據庫.

點開該RDS實例,查看詳情.

找到"終端節點"對應的域名,如:
終端節點 mydb-instance.ciwngvan3tg3.ap-southeast-1.rds.amazonaws.com
然后找到默認開通的一個EC2(帶EIP的)才有訪問該RDS3306端口的權限:
創建RDS的時候,會自動在EC2控制面板里創建1個安全組,比如
組名 rds-launch-wizard 組描述 Created from the RDS Management Console: 2018/07/10 10:44:20
組 ID sg-0d73e66da9b3c91c0 VPC ID vpc-0acbb5612cccc1132

RDS安全組
類型 規則
rds-launch-wizard (sg-0d73e66da9b3c91c0) CIDR/IP - Inbound 13.251.217.207/32 #這個IP是隨機抽取的該Region里的某個EC2.
rds-launch-wizard (sg-0d73e66da9b3c91c0) CIDR/IP - Outbound 0.0.0.0/0

測試3306的登陸,以及操作DB.
[admin@ip-10-0-1-22 ~]$ mysql -h mydb-instance.ciwngvan3tg3.ap-southeast-1.rds.amazonaws.com -u test -p

自動備份-快照
RDS快照.自動備份測試完成.
還原快照測試.還原快照是用快照來創建1個新的RDS實例(數據是一樣的,參數可以重新選).
能否將自動備份的快照保存到S3呢?目前還沒有找到辦法.

修改RDS的登陸密碼
創建的RDS中,輸入的用戶默認權限(相當於管理員權限):
mysql> select * from user \G;
*************************** 3. row ***************************
Host: %
User: test
Password: *630674627BAD0F0BF6BC2FFA91D3A87AC3E2A708
Select_priv: Y
Insert_priv: Y
Update_priv: Y
Delete_priv: Y
Create_priv: Y
Drop_priv: Y
Reload_priv: Y
Shutdown_priv: N
Process_priv: Y
File_priv: N
Super_priv: N
...

修改密碼:
1.通過控制台-詳細信息修改.
2.或者直接登陸數據庫手動修改都可以.
use mysql
update user set password=password('asd123456789we222') where user='mysqladmin' and host='%';
flush privileges;

其他
RDS字符集調整
默認編碼集:
mysql> show variables like 'character%';
+--------------------------+-------------------------------------------+
| Variable_name | Value |
+--------------------------+-------------------------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /rdsdbbin/mysql-5.6.39.R1/share/charsets/ |
+--------------------------+-------------------------------------------+
8 rows in set (0.00 sec)

需要修改為utf8mb4:
修改"參數組",將character_set開頭的所有項修改為utf8mb4.
然后選擇RDS實例,將實例的參數組選項修改為剛自建的那組(通過默認參數組進行一定修改后形成的新的).
修改時,最后一步,選擇"立即應用".
"參數組"狀態會發生變化"適用"或"等待重啟"(需手動重啟),直到變成"同步"狀態才行.
因為是靜態參數的修改,會提示"等待重啟",所以需要手動重啟數據庫實例.重啟的時候,不用選擇"故障轉移".
重啟RDS后,檢查:
mysql> show variables like 'character%';
ERROR 2006 (HY000): MySQL server has gone away #這里因為重啟了,所以連接丟失,客戶端重建了一個連接.
No connection. Trying to reconnect...
Connection id: 3
Current database: *** NONE ***

+--------------------------+-------------------------------------------+
| Variable_name | Value |
+--------------------------+-------------------------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8mb4 |
| character_set_filesystem | utf8mb4 |
| character_set_results | utf8 |
| character_set_server | utf8mb4 |
| character_set_system | utf8 |
| character_sets_dir | /rdsdbbin/mysql-5.6.39.R1/share/charsets/ |
+--------------------------+-------------------------------------------+
8 rows in set (0.24 sec)

監控報警 是否啟用"增強監控"
默認監控
可以點開RDS實例,能看到監控的默認二十多個項目.
另外,在實例控制台靠下方(日志框上面),有創建報警.在cloudwatch-報警中可以設置對應的觸發警報.
報警可以結合autoscling執行對應的操作.

需要添加的額外報警
磁盤剩余空間
無法提供服務的數據庫容量(?)
內存,CPU可以考慮添加.

增強監控
對RDS實例啟用"增強監控"后(默認60秒檢測1次),每分鍾會發送1個報告到cloudwatch的日志組->RDSOSMetrics 的日志流->XXX里.默認保持時間為30天(可以在cloudwatch->日志->"事件過期時間"修改具體過期刪除時間(1天,7天,XXX).

關於RDS在故障遷移中,DNS重新解析時間的說明(TTL)
系統級別DNS的TTL說明

因RDS是通過域名指定到后端DB服務的IP,當后端機器故障后,IP可能會發生變化.那么在故障遷移的過渡期中,DNS解析的域名對應的IP發生波動的時間,跟這個域名解析服務器配置的TTL值有關.官方文檔建議30秒(這里有疑問的是這個TTL是AWS自己的DNS配置的,用戶咋改TTL值?奇葩).
以下是在EC2上執行nslookup確認這個TTL默認值:
RDS終端節點域名: mydb-instance.ciwngvan3tg3.ap-southeast-1.rds.amazonaws.com
[root@ip-10-0-1-22 ~]# nslookup

set debug #設置成debug模式,才能看到具體輪詢過程以及對應的TTL,如果取消,則是 "set nodebug".還有個模式是set d2,輸出更加具體(到函數級).
mydb-instance.ciwngvan3tg3.ap-southeast-1.rds.amazonaws.com
Server: 10.0.0.2
Address: 10.0.0.2#53
------------ #以下都是輪詢
QUESTIONS:
mydb-instance.ciwngvan3tg3.ap-southeast-1.rds.amazonaws.com, type = A, class = IN #(IN指的是internet類,目前另外2個CH和HS都廢了).
ANSWERS:
-> mydb-instance.ciwngvan3tg3.ap-southeast-1.rds.amazonaws.com
canonical name = ec2-13-251-220-111.ap-southeast-1.compute.amazonaws.com.
ttl = 5
-> ec2-13-251-220-111.ap-southeast-1.compute.amazonaws.com
internet address = 13.251.220.111
ttl = 60
AUTHORITY RECORDS:
ADDITIONAL RECORDS:
------------#以下是非debug模式的僅有的幾行輸出
Non-authoritative answer:
mydb-instance.ciwngvan3tg3.ap-southeast-1.rds.amazonaws.com canonical name = ec2-13-251-220-111.ap-southeast-1.compute.amazonaws.com.
Name: ec2-13-251-220-111.ap-southeast-1.compute.amazonaws.com
Address: 13.251.220.111

知識:
set type=[value] 也可以寫成set querytype=[value],用於更改信息查詢類型.
目前常用的type值如下:(小寫和大寫都支持)
A:查看主機的IPv4地址 AAAA:查看主機的IPv6地址 CNAME:查找與別名對應的正式名字 MX:查找郵件交換信息 ANY:查看關於主機域的所有信息
HINFO:查找主機的CPU與操作系統類型 MINFO:查找郵箱信息 NS:查找主機域的域名服務器
PTR:查找與給定IP地址匹配的主機名 RP:查找域負責人記錄 SOA:查找域內的SOA地址 UINFO:查找用戶信息

應用程序JVM級別的DNS-TTL配置(JVM)
參考: https://docs.aws.amazon.com/zh_cn/sdk-for-java/v1/developer-guide/java-dg-jvm-ttl.html
如何設置 JVM TTL
要修改 JVM 的 TTL,請設置 networkaddress.cache.ttl 屬性值。根據您的需求,使用下列方法之一:

  • 全局 (針對所有使用 JVM 的應用程序)。在 $JAVA_HOME/jre/lib/security/java.security 文件中設置 networkaddress.cache.ttl:
    networkaddress.cache.ttl=60 #這里默認值是-1,也就是永久緩存
  • 僅針對應用程序,在應用程序的初始化代碼中設置 networkaddress.cache.ttl:
    java.security.Security.setProperty("networkaddress.cache.ttl" , "60");

故障轉移
擁有多可用區的RDS實例,在重啟的時候,才會有"故障轉移"的選項提供.
在擁有多個可用區的RDS實例,同VPC(新加坡VPC-02)的EC2訪問,會直接解析為內網IP.其他訪問會解析為公網IP.如下測試.

重啟前:

新加坡同VPC內的EC2訪問: ->解析成內網IP了.
[root@ip-10-1-0-200 ~]# ping mydb-instance.ciwngvan3tg3.ap-southeast-1.rds.amazonaws.com
PING ec2-13-251-220-111.ap-southeast-1.compute.amazonaws.com (10.1.1.53) 56(84) bytes of data.

美東通過VPC對等連接(有內網路由):->解析成公網IP了.
[root@ip-10-16-0-200 ~]# ping mydb-instance.ciwngvan3tg3.ap-southeast-1.rds.amazonaws.com
PING ec2-13-251-220-111.ap-southeast-1.compute.amazonaws.com (13.251.220.111) 56(84) bytes of data.

重啟后(勾選故障轉移):
因多可用區子網都不同,所以IP肯定不同了.對等VPC內的EC2訪問的DNS服務器是自己子網內的,拿到的IP肯定就是公網的了.

測試確認了內網IP,外網IP,均發生了變化.

新加坡同VPC(新加坡VPC-02)內的EC2主機訪問:
[root@ip-10-1-0-200 ~]# ping mydb-instance.ciwngvan3tg3.ap-southeast-1.rds.amazonaws.com
PING ec2-13-251-193-255.ap-southeast-1.compute.amazonaws.com (10.1.2.120) 56(84) bytes of data.

美東對等VPC(美東VPC-02)EC2主機訪問:
[root@ip-10-16-0-200 ~]# ping mydb-instance.ciwngvan3tg3.ap-southeast-1.rds.amazonaws.com
PING ec2-13-251-193-255.ap-southeast-1.compute.amazonaws.com (13.251.193.255) 56(84) bytes of data.

創建只讀副本(讀寫分離,降低主實例壓力)
以下是xbzj的情況
RDS-mysql是沒有讀寫分離的,只能手動創建一個"只讀副本".主副本和只讀副本對應的域名不同,楊維自己去實現讀寫分離.
只讀副本與主副本存在秒級的數據差異(繁忙的時候就看情況了)(異步復制).
如果想通過1個DNS訪問讀寫分離的RDS,請使用AWS自己的數據庫類型

參考:
https://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/USER_ReadRepl.html
蒙維AWS西南蒙老師:
如果是普通的rds mysql,本身是沒有只讀副本實例的,需要單獨創建,即時你啟用了多可用區部署,也只是實現了一個主從高可用集群,這里從數據庫只是切換用,無法用於只讀.
蒙維AWS西南蒙老師:
如果考慮使用aurora,那么"主從高可用"和"只讀副本"功能就可以合並了,你只需要創建一個主一從兩個節點的aurora集群就可以了,不需要單獨啟用多可用區部署

RDS 申請資源列表:
RDS(Mysql)db.t2.small 0 0 100 1
選擇的是無預置IOPS的通用SSD方式,存儲100GB,多可用區,公開可用性,可用區a,自動備份僅支持InnoDB,備份保留7天
實例名稱: xlogin (目前創建的是集群模式,副本只是作為災備用的,並不是用於讀寫分離).
DB: xlogin
user: xbzj
pw: sjErbN29h7heU8sg 已同步至密碼表
端口: 10306
備份窗口: 10:00-10:30 (UTC)
維護窗口: 周三 11:00-11:30(UTC)
URL: xlogin.cyp7d7zwyhrc.us-east-1.rds.amazonaws.com 內網訪問會被解析為內網IP
安全組: xbzj-taihe-bei-vpc-01-secgp-03-rds 10.0.0.0/8 允許
數據庫字符集編碼: utf8mb4
寫入警報: xbzj-taihe-bei-vpc-01-RDS-xlogin-WriteLatency-200ms 寫入延遲超過200ms則報警(超過和恢復均報警)
空間報警: xbzj-taihe-bei-vpc-01-RDS-xlogin-Disk-Low-20percent 磁盤空間剩余小於20GB(20%)(超過和恢復均報警)
故障轉移測試: a->b,b->a 正常

RDS 只讀副本(源庫異步復制到只讀副本):
實例名稱: xlogin-read
URL: xlogin-read.cyp7d7zwyhrc.us-east-1.rds.amazonaws.com 內網訪問會被解析為內網IP

其他說明:
如果復制連續 30 天停止,不論是手動還是由於復制錯誤,Amazon RDS 將終止主數據庫實例與所有只讀副本之間的復制。這樣做是為了防止主數據庫實例上的存儲需求增長以及長故障轉移時間。只讀副本數據庫實例仍可用。但是無法恢復復制,因為在終止復制后,已從主數據庫實例中刪除只讀副本所需的二進制日志。您可以為主數據庫實例創建新的只讀副本來重新建立復制.
讀寫副本和對應的只讀副本的實例類型可以不同,比如讀寫是t2.large,只讀可以是t2.small.

參數調整
sort_buffer_size 默認RDS的參數
sort_buffer_size 262144
調整為
sort_buffer_size 8388608
調整此參數不會重啟實例
檢查
show variables like 'sort_buffer_size';

RDS當前實例允許最大連接數
您可以通過對數據庫實例執行以下查詢來檢索 Amazon RDS MySQL 數據庫實例允許的最大連接數:
SELECT @@max_connections;

您可以通過對數據庫實例執行以下查詢來檢索與 Amazon RDS MySQL 數據庫實例的活動連接的數量:
SHOW STATUS WHERE variable_name = 'Threads_connected';

iops調整
RDS升級iops確認(通用SSD->預置iops的SSD,在轉換過程中,實例訪問延遲會增加,初始iops會清零.無需重啟實例)

修改時區
參數組創建
time_zone 將默認修改為 Asia/Shanghai


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM