爲了減輕對數據庫的運維壓力,將自建的mysql數據庫轉爲RDS數據庫。mysql
IP 服務器類別 類別 外網IP 10.10.3.10 應用服務器 應用服務器-A 183.44.79.28 10.10.3.11 自建mysql 自建數據庫-B * 172.10.10.11 阿里雲RDS RDS-C * 172.10.10.12 (新購)阿里雲ECS-應用服務器 新購VPS服務器-D 183.44.79.27
咱們須要將應用從A遷移到D;將數據庫從B遷移到D
sql
1.先在服務器D中搭建好相關的應用運行環境———APR-Tomcat、JDK、Nginx數據庫
2.使用阿里雲提供的ClassicLink將經典網絡與專有網絡互通。也就是上面的四臺服務器都能相互ping通,目的是讓D服務器能連接上B的數據庫。緩存
3.將應用從A服務器中複製到D服務器中去,啓動D中的應用,觀察應用是否能正常啓動。服務器
4.在D服務器中的應用能正常啓動後,需修改A的Nginx配置,配置一份代理,類型是backup,目的是在A應用stop後,此backup會將請求轉發到D服務器的應用中去。網絡
5.中止A服務的應用,觀察A中的Nginx是否能將請求都轉發到D的應用中去。若是正常,則說明咱們應用已成功遷移到D服務器中。運維
6.最後修改域名指向的外網IP,將183.44.79.28修改成183.44.79.27。因CDN有緩存,故修改後,從域名進來的請求並不會馬上請求到183.44.79.27的IP上,還需保留A服務器的Nginx應用正常服務一到兩天。目的是爲了保持全部請求都會轉發到D服務器中。工具
到此,咱們已經遷移好了應用了。可是數據庫這塊還須要遷移。
post
7.爲了能正常快速遷移,咱們並無使用阿里雲提供的自建Mysql遷移到RDS上的工具。阿里雲
此處須要提一下咱們的業務:天貓的充值業務;整個過程比較簡單,將天貓請求的數據,保存至數據庫後,再發送充值到充值系統,而後等待充值系統的結果通知,根據結果業務閉環
8.最初的想法是在D中啓動多一份應用,可是此引用連接的是RDS數據庫;在天貓請求過來的充值數據用新的線程post一份至此應用中。可是仔細想了一下,這樣會硬氣引發自建數據庫與RDS自增主鍵不一致的問題。若是天貓同時推送3筆充值數據過來,那麼就有可能訂單A的主鍵ID在自建mysql是10001,而在RDS的自增主鍵卻有多是10002
9.最後的方法是在訂單請求充值後,查詢一次訂單,而後將訂單的信息post到新的應用(鏈接到RDS),在此post的接口處理的邏輯僅僅是將數據插入到數據庫中(此處用了Nutz Dao簡單而方便
)。
10.而後在接收通知結果的接口中,直接將接收到的數據,啓用新的線程post一份至鏈接到RDS應用中。
這樣咱們就能將今後刻起的數據,在自建數據庫同步至RDS數據庫
。
11.觀察一段時間的訂單,對比訂單的數據,若是沒有差別,則說明上述的步驟是支持咱們的邏輯,並且對天貓來講是透明,不須要停機就能完成遷移了。