車聯網上雲最佳實踐(三)

雲上部署實踐詳解
上章節介紹完雲上應用架構及產品選型,接下來本章將重點介紹下上雲遷移的實踐過程。在實際遷移過程中甚至會更加具體。由於文章內容已經很多了,所以在接下來實踐遷移過程中會有部分內容會省略。先介紹一下整體遷移流程:

image013

遷移整個應用到阿里雲涉及到幾個階段,首先是數據庫配置和數據遷移,然後是基礎服務的部署,例如Dubbo服務和消息隊列服務以及存儲服務,其次是應用部署和配置,之後是功能測試以及集成測試,最後是流量切割和安全加固。

1、 數據庫準備和配置
前面章節提到我們將原來自建的MySQL數據庫改用雲上的RDS替換,針對性能要求特別高的數據庫(比如單臺高配物理服務器已經無法滿足性能要求的情況下),採用雲上DRDS分佈式關係數據庫替換。下面主要介紹雲上RDS數據庫的創建和配置。
1.1 RDS配置
a) 創建實例

登錄RDS管理控制檯;
在實例列表頁面,單擊新建實例,進入創建頁面;
選擇包年包月或按量付費;
選擇實例配置;
單擊立即購買;
b) 初始化配置
爲了數據庫的安全穩定,在開始使用RDS實例前,需要將訪問數據庫的IP地址或者IP段加到目標實例的白名單中。正確使用白名單可以讓RDS得到高級別的訪問安全保護,建議定期維護白名單。

登錄RDS管理控制檯。
選擇目標實例所在地域。
單擊目標實例的ID,進入基本信息頁面。
在左側導航欄中選擇數據安全性,進入數據安全性頁面。
在白名單設置標籤頁面中,單擊default白名單分組中的修改,如下圖所示。
image014
在修改白名單分組頁面,在組內白名單欄中填寫需要訪問該實例的IP地址或IP段。若需要添加ECS的內網IP,請單擊加載ECS內網IP,然後根據提示選擇IP。如下圖所示。
image015
單擊確定。
c) 創建初始賬號

登錄RDS管理控制檯。
選擇目標實例所在地域。
單擊目標實例的ID,進入基本信息頁面。
在左側導航欄中,選擇賬號管理,進入賬號管理頁面。
單擊創建初始賬號。
輸入要創建的賬號信息,如下圖所示。
image016
單擊確定。
d) 創建數據庫
通過DMS登錄RDS數據庫,https://dms.console.aliyun.com/#/dms/rsList
成功登錄數據庫後,在頁面上方的菜單欄中,選擇新建 > 數據庫。
填寫數據庫信息。
image017
單擊確定
e) 創建用戶

通過DMS登錄RDS數據庫,詳細步驟請參見通過DMS登錄RDS數據庫。
成功登錄數據庫後,在頁面上方的菜單欄中,選擇新建 > 數據庫用戶,進入新建用戶頁面。
選擇基本設置,填寫用戶的基本信息。
image018
選擇全局權限,設置該用戶對於該實例中所有數據庫的權限。
選擇對象權限,設置該用戶對某個數據庫及對該數據庫中的表和列的權限。
image019
單擊確定,進入SQL預覽頁面。
查看要創建用戶的SQL信息,若確認無誤,單擊確定。
f) 數據遷移
當數據庫、遷移賬號都創建完成後,就可以開始配置遷移任務了。同理將線下的數據以此方式遷移到雲上數據庫中。下面詳細介紹下具體的配置步驟。

進入數據傳輸DTS控制檯,點擊頁面右上角 創建遷移任務 開始任務配置。
配置遷移實例連接信息。
image020
在這個步驟中,主要配置遷移任務名稱,遷移源實例及目標實例連接信息。
遷移對象及遷移類型配置
預檢查。
如果預檢查失敗,那麼可以點擊具體檢查項後的按鈕,查看具體的失敗詳情,並根據失敗原因修復後,重新進行預檢查。
image021

當點擊查看後,可以查看到具體的預檢查失敗原因及修復方法:
image022

當修復完成後,可以在任務列表中,選擇這個任務,然後重新啓動預檢查。

啓動遷移任務。
當預檢查通過後,我們可以啓動遷移任務,任務啓動後,可以到任務列表中查看具體的遷移狀態及進度。
g) 其他

1.2 Redis配置
前面提到由於傳統自建Redis數據庫通常存在集羣節點擴容複雜,管理維護難等問題。所以我們改用雲上數據庫 Redis 版來替代,它具有性能卓越,彈性擴容,數據安全性高,可用性高,秒級監控,簡單易用等優勢。下面介紹雲數據庫Redis的創建和配置:
a) 創建實例

進入 雲數據庫 Redis 版產品首頁,單擊立即購買。或者進入 Redis 管理控制檯,單擊右上角的創建實例。
選擇按量付費或預付費模式,完成網絡類型、地域、可用區、架構類型等實例配置。兩種付費模式的填寫項基本一致。
image023
單擊立即購買,進入訂單確認頁面。閱讀接受《雲數據庫 Redis 版服務條款》並確認訂單信息無誤後,單擊去支付進行付款。
進入支付頁面,選擇支付方式,單擊確認支付按鈕。支付成功後會提示支付成功。等1-5分鐘後進入控制檯即可看見剛纔購買的實例。
b) 客戶端連接
由於雲數據庫 Redis 提供的數據庫服務與原生的數據庫服務完全兼容,連接數據庫的方式也基本類似。任何兼容 Redis 協議的客戶端都可以訪問雲數據庫 Redis 版服務,可以根據自身應用特點選用任何 Redis 客戶端。
注意:雲數據庫 Redis 版僅支持阿里雲內網訪問,不支持外網訪問,即只有在同節點的 ECS上安裝 Redis 客戶端才能與雲數據庫建立連接並進行數據操作。
Redis 的客戶端請參考 http://redis.io/clients
c) 數據遷移
將自建 Redis 中的數據遷移到雲 Redis 實例中
使用數據傳輸 DTS可以進行 Redis 實例間的數據遷移。如果源實例爲自建 Redis,那麼 Redis 遷移支持增量數據同步功能,可以實現在本地應用不停寫的情況下,平滑完成 Redis 數據遷移。
image024

d) 遷移前置條件
如果待遷移的 Redis 是通過專線接入阿里雲 VPC 的自建 Redis,或是專有網絡的雲 Redis 實例,那麼需要架設代理,進行數據轉發。下面介紹如何使用 nginx 進行 Redis 的轉發配置,讓 DTS 服務器可以訪問專有網絡內的 Redis 實例。

nginx 部署
首先在 ECS 服務器上,通過如下命令部署 nginx。
yum install nginx

nginx 轉發配置
安裝完 nginx,修改 nginx 配置文件 /etc/nginx/nginx.conf, 設置後端監聽 redis。 註釋掉配置文件中 http 的相關配置,添加 tcp 的配置內容。需要註釋掉的 http 配置內容如下:
image025

需要在配置文件中添加 tcp 配置內容:
image026

例如,需要訪問的 Redis 的連接地址爲:
r-bp1b294374634044.redis.rds.aliyuncs.com:6379, nginx 代理轉發端口爲3333,那麼 tcp 相關配置如下:
image027

如果是傳統IDC中自建redis,那麼將上面redis的地址爲內網地址。原理就是通過機房中具有公網IP 的nginx進行轉發。

通過轉發接口訪問 Redis
當完成上面的配置後,運行 nginx 即成功啓動 nginx 代理服務。假設 nginx 部署的 服務器的公網IP爲:114.55.89.152,那麼可以直接用 redis_cli 訪問 nginx 轉發端口,測試代理轉發是否正常。
image028

如上圖所示,可以通過訪問 nginx 代理轉發端口來訪問 Redis 實例。

e) 告警設置

登錄 Redis 管理控制檯,定位目標實例。
單擊實例 ID 或者管理進入實例信息頁面。
在左側導航欄中,選擇報警設置。
在報警設置頁面單擊報警設置,跳轉到雲監控控制檯。可以單擊刷新,手動刷新報警監控項當前狀態,如下圖所示。
image029
單擊報警規則>新建報警規則。
在批量設置報警規則頁面,添加報警規則。
單擊下一步,設置通知對象。 可以單擊快速創建聯繫人組去新建報警聯繫人或者報警聯繫組。
單擊確定,完成報警設置,單擊關閉。
注意:設置完成後,可以在雲監控控制檯的報警規則頁面修改、禁用、刪除報警規則,並查看報警歷史記錄。
1.3 HBase配置
前面提到我們改用雲上數據庫HBase版來替換原來的MongoDB集羣。HBase的高併發大數據量等特性非常適合海量數據存儲,業務大屏,安全風控,搜索等場景。下面介紹下HBase的創建和配置:
a) HBase集羣規格選型

選擇的邏輯
HBase支持的場景比較多,可以根據業務形態選擇。比例根據業務QPS、存儲量、讀寫請求、相應延遲,穩定性相關。在選擇 ApsaraDB for HBase 時,我們看到有SSD雲盤、高效雲盤、獨享規格、通用規格,還有4cpu8g 到 32cpu128g等等。
Master選擇
Master節點不帶存儲,默認是主備保障單點容災。
core數目 < 6,選擇 2cpu4g即可
6 <= core數目 <20 選擇4cpu8g即可
20 <= core數目 < 50 選擇8cpu16g即可
50 <= core數目 < 100 選擇 16cpu32g即可

Core存儲計算分離
磁盤維度:
SSD雲盤比高效雲盤,更加穩定,且對讀有更好的性能,特別是隨機讀
獨享通用規格:
獨享比通用更加穩定,也就是24個小時內,獨享這些資源,價格更加貴一些
規格大小:
4cpu8g屬於入門版本,規格大一些對於熱點有更好的支持。但是越大,GC的影響就越大。 推薦8cpu32g、16cpu64g的機型.

所以選擇就是:
 對於數據量多,響應延遲一般的:可以選擇 普通的4cpu16g + 高效雲盤,可以掛不少容量的磁盤
 對於響應延遲要求高的:可以選擇 獨享的8cpu32g或者16cpu64g的機型,再加SSD雲盤
 對於QPS不是很大的,比如1w~10w QPS可以選擇 4cpu8g、4cpu16g的
 對於讀要求高的選擇:1:4內存的機型,讀一般的1:2

Core存儲計算不分離(本地盤系統)
主要是爲滿足大規模的數據存儲的需求,基本要求20T起步:目前提供集羣:
4臺 8cpu32g 4*5.5T 不可添加節點,可以向16cpu升級
4臺 16cpu64g 8*5.5T 不可添加節點,可以向24cpu升級
4+n臺 24cpu96g 12*5.5T 可以添加節點
b) 創建HBase集羣

登錄HBase管理控制檯;
在實例列表頁面,單擊創建,進入創建集羣頁面;
選擇包年包月或按量付費;
選擇集羣配置;
image030
單擊立即購買;
c) 開源軟件訪問
當新建一個集羣以後,阿里雲提供了一種快捷的方式來訪問集羣上的開源組件,如HBase、Ganglia和HDFS,操作方式如下:

登錄HBase管理控制檯,並選擇目標實例,點擊管理。
在集羣詳情tab中,最上方的開源軟件欄會看到所有的快捷入口。
如果是第一次訪問,那麼需要初始化下訪問用戶名與密碼。
設置訪問的IP白名單,請參考IP白名單設置。
完成以後步驟以後,點擊開源軟件的鏈接,並輸入之前設置的用戶名密碼,就可以直接訪問對應組件的Web頁面了。
注意:目前採取的https認證,注意點擊 高級 確認通過。
image031

image032

d) 數據遷移
可通過數據集成工具建立數據同步任務來實現數據導入。方法請參考下面鏈接:
https://yq.aliyun.com/articles/165981?spm=a2c4g.11186623.2.9.yY4Noh

1.4 Elasticsearch配置
由於傳統自建Elasticsearch集羣存在性能不足,集羣節點擴容複雜,管理維護難度高等問題,因此我們改用雲上Elasticsearch服務,它具有豐富的預置插件(IK Analyzer,pinyin Analyzer,smart Chinese Analysis Plugin,Mapper Attachments Type plugin等等),還包括集成X-pack插件提供企業級權限管控,實時監控等強大功能。下面主要介紹如果創建和配置Elasticsearch集羣。
a) 購買ES集羣

通過阿里雲產品導航,尋找到阿里雲Elasticsearch的產品詳情頁面。
登錄阿里雲Elasticsearch控制檯
點擊創建,進入創建集羣頁面
選擇相應配置、VPC網絡、虛擬交換機,以及相應產品規格。注意購買阿里雲ES產品,對應區域下必須要有 VPC 和 虛擬交換機(區域必須相同)
點擊“立即購買”。
image033
image034

b) 基本配置

進入阿里雲ES應用控制檯界面後,可看到剛購買的ES實例,等待實例激活成功(需要等待幾分鐘)。
在爲上面剛激活的ES實例,導入數據之前,需要先手動同時創建,索引和mapping。阿里雲默認關閉了“自動創建索引”,因此需先創建索引和mapping,否則直接導入數據會報錯。
c) 訪問測試
賬號密碼
username:默認爲 elastic
password:是在購買阿里雲ES界面中指定的密碼
注意:若創建的阿里雲Elasticsearch實例版本包含 with_X-Pack 信息,則訪問該阿里雲ES實例時,必須指定用戶名和密碼。否則不用指定用戶名和密碼。

基於ECS訪問前提
阿里雲Elasticsearch 與依賴的阿里雲ECS 必須處於同一個 VPC 下。
curl 測試
指定用戶名密碼訪問9200端口:
image035

響應如下:
image036

創建文檔
使用 HTTP POST方式創建:
image037

創建成功響應:
image038

d) 數據導入
離線數據導入Elasticsearch,請參考下面文章:
https://help.aliyun.com/document_detail/62584.html?spm=a2c4g.11186623.6.557.uwwFYu

e) 配置監控報警
阿里雲Elasticsearch已支持對實例進行監控,並允許通過短信報警。可根據需求,自定義報警閾值。
強烈建議配置如下監控報警:
 集羣狀態。(主要監控集羣狀態是否爲綠色或紅色)
 節點磁盤使用率(%)。(報警閥值控制在75%以下,不要超過80%)
 節點HeapMemory使用率(%)。(報警閥值控制在85%以下,不要超過90%)
 節點CPU使用率(%)。(報警閥值控制在95%以下,不要超過95%)
 節點load_1m。(以CPU核數的80%爲參考值)
 集羣查詢QPS(Count/Second)。
 集羣寫入QPS(Count/Second)。

兩種方式配置監控報警:
 登錄ES控制檯,進入ES實例基本信息界面,點擊集羣監控轉到ES雲監控。
image039

 或者使用賬號登錄阿里雲控制檯,選擇產品導航欄下的雲監控,再選擇雲服務監控菜單欄下的Elasticsearch。
image040

監控指標配置方法:

選擇需要查看的區域,點擊ES實例ID
image041
指標詳情頁面點擊創建報警規則
可在此頁面查看到集羣既往監控數據,目前只保留1月內的監控信息。通過創建報警規則,可對此實例配置報警監控。
image042

填寫相應的規則名稱及規則描述
以下配置主要以添加,磁盤報警監控、集羣狀態監控、節點HeapMemory使用率監控爲例。
image043
image044

選擇報警聯繫組
image045

點擊確認按鈕,保存報警配置
2、 基礎服務準備和配置
2.1 OSS對象存儲配置
由於傳統的自建NFS文件系統存在可靠性差,成本高,擴展要停機等問題,所以我們改用雲上的對象存儲OSS服務代替,下面簡單介紹下OSS對象存儲創建和配置方法:
a) 開通OSS服務

登錄阿里雲官網。
將鼠標移至產品找到並單擊對象存儲OSS打開OSS產品詳情頁面。
在OSS產品詳情頁中的單擊立即開通。
開通服務後,在OSS產品詳情頁面單擊管理控制檯直接進入OSS管理控制檯界面。
b) 購買OSS服務

開通 OSS 服務後,在OSS產品詳情頁單擊折扣套餐,進入資源包售賣頁。
選擇需要購買的資源包類型和規格。
選擇資源包購買時長。
選擇開通時間(支持支付後立即生效或指定時間生效)。
選擇資源包地域。
說明: 不同地域單價可能不一樣,如海外地區與中國大陸地區目前不一樣。
c) 創建存儲空間

進入 OSS 管理控制檯 界面。
單擊左側存儲空間列表中的新增按鈕 +,或者單擊頁面右上方的 新建 Bucket 按鈕,打開新建 Bucket 對話框。
image047
在 命名 框中,輸入存儲空間名稱。
在 所屬地域 框中,下拉選擇該存儲空間的數據中心。
在 存儲類型 框中,下拉選擇所需要的存儲類型。
在 讀寫權限 框中,下拉選擇對應的權限。
單擊 確定。
d) 上傳文件

登錄 OSS 管理控制檯。
在左側存儲空間列表中,單擊要向其中上傳文件的存儲空間。
單擊 文件管理 頁籤。
單擊 上傳文件,打開 上傳文件 對話框。
在 目錄地址 框中,設置文件上傳到OSS中的存儲路徑。
在 文件ACL 區域中,選擇文件的讀寫權限。默認爲繼承所在Bucket的讀寫權限。
在 上傳文件 框內,將要上傳的文件拖拽到此;或者單擊 直接上傳,選擇要上傳的文件。
在 手機驗證 對話框中,單擊 點擊獲取,輸入收到的校驗碼,單擊 確定,打開 上傳任務 對話框,顯示上傳進度。也可以單擊左側下方的 上傳任務 查看上傳進度。
說明:將原有的nfs文件系統裏的所有文件上傳到OSS系統中去,另外應用已經改造爲oss存儲,移動app的所有數據將會存儲在OSS。搭建一個基於OSS的移動應用數據直傳服務,具有以下優勢:
 上傳下載方式更加安全(臨時、靈活的賦權鑑權)。
 成本低,不需要準備很多服務器。移動應用直聯雲存儲,只有控制流走應用服務器。
 高併發,支持海量用戶(OSS有海量的上傳和下載帶寬)。
 彈性(OSS有無限擴容的存儲空間)。
 方便,可以方便的對接到媒體轉碼服務-視頻多端適配,圖片處理服務,CDN加速下載等。

2.2 消息隊列服務配置
傳統自建開源kafka消息隊列通常存在各版本bug多,得不到官方技術支持,遇到疑難問題只能抓瞎等問題。所以我們改用雲上消息隊列kafka,它針對開源kafka提供全託管服務,徹底解決開源產品長期以來的痛點,用戶只需專注於業務開發,無需部署運維,具有低成本,更彈性,更可靠等優勢。下面介紹消息隊列kafka的創建和配置。
a) 開通消息隊列kafka服務

登錄阿里雲主頁找到到產品 > 互聯網中間件,單擊消息隊列kafka進入消息隊列 Kafka 產品主頁。
單擊立即開通進入消息隊列 Kafka 服務開通頁面,根據提示完成服務開通。
b) 創建資源

使用消息隊列 Kafka 消息收發服務之前,先在消息隊列 Kafka 控制檯上創建資源否則將無法通過鑑權認證及使用相關的運維功能。創建資源的步驟如下:
 創建 Topic 資源

 創建 Consumer Group
 創建阿里雲 Access Key ID 和 Access Key Secret
創建消息主題(Topic)
消息主題(Topic)是消息隊列 Kafka 裏對消息進行的一級歸類,比如可以創建“Topic_Trade”這一主題用來識別交易類消息。 使用消息隊列 Kafka 的第一步就是先爲應用創建 Topic。
請按照以下步驟創建 Topic:

登錄消息隊列 Kafka 控制檯。
單擊左側菜單欄的Topic 管理。
在Topic 管理頁面的上方選擇相應的地域(例如“華東1”),然後單擊Topic 申請按鈕。
在Topic 申請頁面輸入 Topic 名稱和備註,單擊創建。
完成後,創建的 Topic 將出現在Topic 管理頁面的列表中。
c) 發送消息測試

添加 Maven 依賴
添加 Maven 依賴的示例代碼如下:
// 消息隊列 Kafka 服務端版本是 0.10.0.0,客戶端建議使用該版本
org.apache.kafka
kafka-clients
0.10.0.0
// SASL 鑑權使用的庫
com.aliyun.openservices
ons-sasl-client
0.1
配置 SASL
消息隊列 Kafka 利用 SASL 機制對客戶端進行身份驗證。
創建文本文件:kafka_client_jaas.conf
可以使用 Demo 庫中的文件進行修改,內容形式如下:

KafkaClient {
com.aliyun.openservices.ons.sasl.client.OnsLoginModule required
AccessKey=”*”
SecretKey=”*”;
};
說明:把 * 替換爲阿里雲賬號的 AccessKey 和 SecretKey。
設置 kafka_client_jaas.conf 的路徑
kafka_client_jaas.conf 的路徑是系統變量,有以下兩種辦法進行設置(這裏假設 kafka_client_jaas.conf 放在 /home/admin 下面,實際部署時請將其修改爲自己的路徑)。
程序啓動時,啓動 JVM 參數:
-Djava.security.auth.login.config=/home/admin/kafka_client_jaas.conf

在代碼中設置參數(需要保證在 Kafka Producer 和 Consumer 啓動之前):

System.setProperty(“java.security.auth.login.config”, “/home/admin/kafka_client_jaas.conf”);
配置 SSL
操作步驟如下:
 下載根證書。
 將根證書放入某個目錄下,並且其路徑直接配置在代碼中。

客戶端配置
準備配置文件:kafka.properties
請參考以下示例代碼進行修改:

接入點,通過控制檯獲取

您在控制檯獲取的接入點

bootstrap.servers=kafka-cn-internet.aliyun.com:8080
Topic,通過控制檯創建

您在控制檯創建的Topic

topic=alikafka-topic-demo
Consumer Grouo,通過控制檯創建

您在控制檯創建的 Consumer Group

group.id=CID-consumer-group-demo
ssl 根證書的路徑,demo中有,請拷貝到自己的某個目錄下,不能被打包到jar中

這裏假設您的目錄爲/home/admin,請記得修改爲自己的實際目錄

ssl.truststore.location=/home/admin/kafka.client.truststore.jks
sasl路徑,demo中有,請拷貝到自己的某個目錄下,不能被打包到jar中

這裏假設您的目錄爲/home/admin,請記得修改爲自己的實際目錄

java.security.auth.login.config=/home/admin/kafka_client_jaas.conf
加載配置文件
請參考以下示例代碼進行修改:

public class JavaKafkaConfigurer {
private static Properties properties;
public static void configureSasl() {
//如果用 -D 或者其它方式設置過,這裏不再設置
if (null == System.getProperty(“java.security.auth.login.config”)) {
// 請注意將 XXX 修改爲自己的路徑
// 這個路徑必須是一個文件系統可讀的路徑,不能被打包到 jar 中
System.setProperty(“java.security.auth.login.config”, getKafkaProperties().getProperty(“java.security.auth.login.config”));
}
}
public synchronized static Properties getKafkaProperties() {
if (null != properties) {
return properties;
}
//獲取配置文件 kafka.properties 的內容
Properties kafkaProperties = new Properties();
try {
kafkaProperties.load(KafkaProducerDemo.class.getClassLoader().getResourceAsStream(“kafka.properties”));
} catch (Exception e) {
// 沒加載到文件,程序要考慮退出
e.printStackTrace();
}
properties = kafkaProperties;
return kafkaProperties;26. }27. }
d) 發佈消息
使用 Java SDK 發送消息
示例代碼如下:

// 設置 sasl 文件的路徑
JavaKafkaConfigurer.configureSasl();
// 加載 kafka.properties
Properties kafkaProperties = JavaKafkaConfigurer.getKafkaProperties();
Properties props = new Properties();
// 設置接入點,請通過控制檯獲取對應 Topic 的接入點
props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, kafkaProperties.getProperty(“bootstrap.servers”));
// 設置SSL根證書的路徑,請記得將 XXX 修改爲自己的路徑
// 與 sasl 路徑類似,該文件也不能被打包到 jar 中
props.put(SslConfigs.SSL_TRUSTSTORE_LOCATION_CONFIG, kafkaProperties.getProperty(“ssl.truststore.location”));
// 根證書 store 的密碼,保持不變
props.put(SslConfigs.SSL_TRUSTSTORE_PASSWORD_CONFIG, “KafkaOnsClient”);
// 接入協議,目前支持使用 SASL_SSL 協議接入
props.put(CommonClientConfigs.SECURITY_PROTOCOL_CONFIG, “SASL_SSL”);
// SASL 鑑權方式,保持不變
props.put(SaslConfigs.SASL_MECHANISM, “ONS”);
// Kafka 消息的序列化方式
props.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, “org.apache.kafka.common.serialization.StringSerializer”);
props.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, “org.apache.kafka.common.serialization.StringSerializer”);
// 請求的最長等待時間
props.put(ProducerConfig.MAX_BLOCK_MS_CONFIG, 30 * 1000);
// 構造 Producer 對象,注意,該對象是線程安全的,一般來說,一個進程內一個 Producer 對象即可;
//如果想提高性能,可以多構造幾個對象,但不要太多,最好不要超過 5 個
KafkaProducer producer = new KafkaProducer(props);
// 構造一個 Kafka 消息
String topic = kafkaProperties.getProperty(“topic”); //消息所屬的 Topic,請在控制檯申請之後,填寫在這裏
String value = “this is the message’s value”; //消息的內容
ProducerRecord kafkaMessage = new ProducerRecord(topic, value);
try {
// 發送消息,並獲得一個 Future 對象
Future metadataFuture = producer.send(kafkaMessage);
// 同步獲得 Future 對象的結果
RecordMetadata recordMetadata = metadataFuture.get();
System.out.println(“Produce ok:” + recordMetadata.toString());
} catch (Exception e) {
// 要考慮重試
System.out.println(“error occurred”);
e.printStackTrace();39. }
e) 訂閱消息測試
使用 Java SDK 訂閱消息
示例代碼如下:

// 設置 sasl 文件的路徑
JavaKafkaConfigurer.configureSasl();
// 加載 kafka.properties
Properties kafkaProperties = JavaKafkaConfigurer.getKafkaProperties();
Properties props = new Properties();
// 設置接入點,請通過控制檯獲取對應 Topic 的接入點
props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, kafkaProperties.getProperty(“bootstrap.servers”));
// 設置 SSL 根證書的路徑,請記得將 XXX 修改爲自己的路徑
// 與 sasl 路徑類似,該文件也不能被打包到 jar 中
props.put(SslConfigs.SSL_TRUSTSTORE_LOCATION_CONFIG, kafkaProperties.getProperty(“ssl.truststore.location”));
// 根證書 store 的密碼,保持不變
props.put(SslConfigs.SSL_TRUSTSTORE_PASSWORD_CONFIG, “KafkaOnsClient”);
// 接入協議,目前支持使用 SASL_SSL 協議接入
props.put(CommonClientConfigs.SECURITY_PROTOCOL_CONFIG, “SASL_SSL”);
// SASL 鑑權方式,保持不變
props.put(SaslConfigs.SASL_MECHANISM, “ONS”);
// 兩次 poll 之間的最大允許間隔
// 請不要改得太大,服務器會掐掉空閒連接,不要超過 30000
props.put(ConsumerConfig.SESSION_TIMEOUT_MS_CONFIG, 25000);
// 每次 poll 的最大數量
// 注意該值不要改得太大,如果 poll 太多數據,而不能在下次 poll 之前消費完,則會觸發一次負載均衡,產生卡頓
props.put(ConsumerConfig.MAX_POLL_RECORDS_CONFIG, 30);
// 消息的反序列化方式
props.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, “org.apache.kafka.common.serialization.StringDeserializer”);
props.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, “org.apache.kafka.common.serialization.StringDeserializer”);
// 當前消費實例所屬的消費組,請在控制檯申請之後填寫
// 屬於同一個組的消費實例,會負載消費消息
props.put(ConsumerConfig.GROUP_ID_CONFIG, kafkaProperties.getProperty(“group.id”));
// 構造消息對象,也即生成一個消費實例
KafkaConsumer consumer = new org.apache.kafka.clients.consumer.KafkaConsumer(props);
// 設置消費組訂閱的 Topic,可以訂閱多個
// 如果 GROUP_ID_CONFIG 是一樣,則訂閱的 Topic 也建議設置成一樣
List subscribedTopics = new ArrayList();
// 如果需要訂閱多個 Topic,則在這裏 add 進去即可
// 每個 Topic 需要先在控制檯進行創建
subscribedTopics.add(kafkaProperties.getProperty(“topic”));
consumer.subscribe(subscribedTopics);
// 循環消費消息
while (true){
try {
ConsumerRecords records = consumer.poll(1000);
// 必須在下次 poll 之前消費完這些數據, 且總耗時不得超過 SESSION_TIMEOUT_MS_CONFIG
// 建議開一個單獨的線程池來消費消息,然後異步返回結果
for (ConsumerRecord record : records) {
System.out.println(String.format(“Consume partition:%d offset:%d”, record.partition(), record.offset()));
}
} catch (Exception e) {
try {
Thread.sleep(1000);
} catch (Throwable ignore) {
}
e.printStackTrace();53. }54. }

2.3 構建分佈式應用配置中心

在雲上我們改用阿里雲的應用配置管理ACM產品。雲上應用配置管理是一款在分佈式架構環境中對應用配置進行集中管理和推送的應用配置中心產品。基於該應用配置中心產品,可以在微服務、DevOps、大數據等場景下極大地減輕配置管理的工作量,增強配置管理的服務能力。下面介紹如何利用ACM創建配置中心:
操作步驟:
1) 在ACM 上創建命名空間
a) 登錄 ACM 控制檯
b) 在左側導航欄選擇 命名空間,單擊右上角的添加按鈕:
image048

c) 在新建命名空間對話框中輸入命名空間名生產環境;
image049

2) 在命名空間下創建配置
在配置列表中選擇對應環境,例如生產環境;
image050

點擊新建配置;
提供 JSON,XML 格式語法校驗能力。在配置格式中選擇不同的格式,會提供不同格式預發校驗,減少語法格式導致的問題。
image051

點擊發布
按照以上步驟完成所有應用配置的創建工作;
創建完配置後,就可以在代碼裏使用了。由於配置容易發生變化,因此經常需要在 ACM 控制檯編輯配置。ACM 控制檯提供了搜索、查看、編輯、刪除配置等功能。

3) 代碼使用API監聽配置
關於如何使用API監聽配置請參考阿里雲官網介紹
https://help.aliyun.com/document_detail/59964.html?spm=a2c4g.11186623.6.546.bpA9S0

2.4 大數據計算服務配置
雲上我們改用阿里雲MaxCompute作爲大數據離線計算服務,我們需要提前完成MaxCompute服務創建,初始化配置以及數據導入等工作,以便大數據開發人員快速展開大數據開發工作。下面介紹下MaxCompute創建和配置以及數據導入。
1) 開通MaxCompute
進入阿里雲MaxCompute產品首頁,單擊立即購買,進入購買頁面。可根據自身需求進行選擇、購買,MaxCompute有按CU預付費和按I/O後付費兩種付費方式。我們這裏選擇使用按量付費,我們剛開始使用還不知道需要會用多少量,所以等使用一段時間之後再根據情況改成包月形式。如下圖所示:
image052
image053
image054

2) 創建項目
登錄DataWorks管理控制檯,擊控制檯概覽頁面常用功能下的創建項目,如下圖所示:

image055

填寫創建項目彈出框中的各配置項,選擇Region及服務,如Region沒有購買相關的服務,會直接顯示該Region下暫無可用服務,數據開發、運維中心、數據管理默認是選中的。如下圖所示:
image056

配置新建項目的基本信息和高級設置
image057

基本配置:
項目名:項目名長度需要在3到27個字符之間。
顯示名:顯示名不能超過27個字符。
高級配置:
啓用調度週期:控制當前項目是否啓用調度系統,如果關閉則無法週期性調度任務。
允許在本項目中直接編輯任務和代碼:當前項目成員在本項目中新建/編輯代碼文件的權限,如果關閉則無法新建/編輯代碼文件。
本項目中能下載select結果:控制數據開發中select出的數據結果是否能夠下載,如果關閉無法下載select的數據查詢結果。
MaxCompute項目名稱:創建項目過程中可以創建MaxCompute相同的名稱項目。
MaxCompute訪問身份:個人賬號,系統賬號。推薦安全要求高的企業用戶使用個人賬號。
Quota組切換:Quota用來實現磁盤配額。
3) 創建表
由於在MaxCompute中的操作對象(輸入、輸出)都是表,所以在處理數據之前,首先要創建表、分區。在和大數據開發人員確定好表名,分區等信息之後就可以開始創建表的工作了。
創建/刪除表的方式有以下幾種:
 通過MaxCompute Studio實現可視化創建/修改/刪除表。
 通過DataWorks實現創建表和刪除表。
 通過客戶端常用命令實現創建表和刪除表。
這裏我們通過DataWorks實現創建表和刪除表。
進入用車報告項目點擊新建表:
image058

輸入建表語句
image059

按照以上步驟創建所有需要的表即可。
4) 導入數據
在 DataWorks中,使用數據集成功能,將系統中產生的業務數據導入到工作區,通過工作流任務的計算後,再將計算結果定期導出到指定的數據源中。目前數據集成功能支持從以下數據源中將數據導入工作空間或將數據從工作空間導出:RDS、MySQL、SQL Server、PostgreSQL、MaxCompute、OCS、DRDS、OSS、Oracle、FTP、 dm、Hdfs、MongoDB 等。操作步驟如下:
新增數據源

以項目管理員身份進入DataWorks管理控制檯,單擊項目列表下對應項目操、欄中的進入工作區。
單擊頂部菜單欄中的數據集成,導航至數據源頁面。
單擊新增數據源。
image060
在新增數據源彈出框中填寫相關配置項。
image061
單擊測試連通性。
若測試連通性成功,單擊保存即可。
通過數據集成導入數據
可以通過嚮導模式和腳本模式兩種方式配置同步任務,這裏介紹如何將MySQL的數據通過嚮導模式導入到MaxCompute中。

新建嚮導模式的同步任務
image062
選擇來源
選擇MySQL數據源及源頭表person,數據瀏覽默認是收起的,選擇後單擊 下一步。
image063

選擇目標
目標即MaxCompute(原ODPS),表可以是提前創建,也可以在此處單擊 快速建表。
image064

配置項說明:
 分區信息:必須指定到最後一級分區。例如把數據寫入一個三級分區表,必須配置到最後一級分區,例如pt=20150101,type=1,biz=2。非分區表無此項配置。
 清理規則:
 寫入前清理已有數據:導數據之前,清空表或者分區的所有數據,相當於insert overwrite。
 寫入前保留已有數據:導數據之前不清理任何數據,每次運行數據都是追加進去的,相當於insert into。

映射字段
選擇字段的映射關係。需對字段映射關係進行配置,左側 源頭表字段和右側 目標表字段爲一一對應的關係。
image065

通道控制
單擊下一步,配置作業速率上限和髒數據檢查規則。
image066

配置項說明如下:
 作業速率上限:是指數據同步作業可能達到的最高速率,其最終實際速率受網絡環境、數據庫配置等的影響。
 作業併發數:從單同步作業來看,作業併發數*單併發的傳輸速率=作業傳輸總速率。

預覽保存
完成上述配置後,上下滾動鼠標可查看任務配置,如若無誤單擊保存。
image067

運行同步任務
同步任務保存後,直接單擊運行同步任務並查看運行同步任務日誌情況,如下圖所示:
image068

5) 授權給開發人員
當數據導入工作完成之後,我們需要給開發人員配置角色以及授權,以便開發人員登錄平臺進行數據開發工作。

準備RAM子賬號
主賬號導航至 訪問控制 > 用戶管理 頁面。如下圖所示:
image069

單擊右上角的 新建用戶,如下圖所示:
image070

填寫彈出框的各配置項,如下圖所示:
image071

單擊 確定,即可創建子賬號。

允許子賬號登錄
成功創建子賬號後,主賬號進入 訪問控制 > 用戶管理 頁面,單擊對應子賬號後的 管理,進入用戶詳情頁面。單擊 啓用控制檯登錄 並重置密碼,填寫該子賬號用於登錄的密碼。如下圖所示:

image072

創建子賬號的運行祕鑰
運行密鑰對於DataWorks中創建的任務的順利運行非常重要,因此主賬號需要爲子賬號創建 AK,或者允許子賬號用戶自行創建和管理自己的 AK 信息。具體操作如下:
主賬號進入 訪問控制 > 用戶管理 頁面,單擊對應子賬號後的 管理,進入用戶詳情頁面。單擊 創建 Accesskey,填寫手機收到的驗證碼,即可爲子賬號創建新的 AK。
image073

主賬號進入訪問控制 > 設置 頁面,單擊 子用戶安全設置。勾選子用戶安全設置 頁面中的 允許自主管理 AccessKey,單擊 保存修改 即可生效。如下圖所示:
image074

主賬號進入訪問控制 > 設置頁面,單擊企業別名設置,即可看到自己的企業別名,並可編輯進行修改。如下圖所示:

image075

添加用戶
主賬號進入dataworks控制檯>用車報告項目>單擊項目管理>項目成員管理,單擊添加成員。勾選賬號,並設置角色爲開發,點擊確定。
image076

交付子賬號給開發人員
等我們完成添加dataworks項目成員之後,就可以將子賬號交付給開發人員使用,讓他們使用子賬號登錄dataworks控制檯進行大數據開發工作。
交付子賬號給其他用戶使用時,需要提供如下信息:
 RAM 用戶登錄鏈接。
 所屬主賬號的企業別名。
 該子賬號的用戶名和密碼。
 該子賬號的 Access Key ID 和 Access Key Secret。
 確認已經允許子賬號 啓用控制檯登錄。
 確認已經 允許子賬號自主管理 accesskeys。

3、 應用部署和配置
由於我們希望到雲上可以Jenkins+docker方式構建持續集成,所以改用雲上CodePipeline,阿里雲CodePipeline是一款提供持續集成/持續交付能力,並完全兼容Jenkins的能力和使用習慣的SAAS化產品。它無需運維,開箱即用,全量兼容Jenkins插件,支持ECS,容器服務持續部署,快速上手。下面介紹利用codepipeline+kubernetes部署應用。
使用 CodePipeline 之前,需要先開通產品,下面介紹利用codepipeline構建Java應用並部署到kubernetes。
操作步驟如下:
1) 登錄 CodePipeline 控制檯。
2) 同意 RAM 的 CodePipeline 角色的授權。
image077

單擊 新建,輸入項目名稱,選擇 構建一個Java的軟件項目 ,單擊 下一步。
代碼構建配置。
Repository 中配置的是倉庫地址和證書,默認值是CodePipeline公開的Code倉庫地址。
image078

Branches to build 中配置的是代碼分支,默認值是master分支。
image079
構建 中配置的是代碼構建命令,默認值是
mvn package -B –DskipTests
image080

測試 中配置的是單元測試命令,默認值是mvn test。如果不需要做單元測試,可以不填寫測試命令。
image081

3) 選擇部署方式,單擊 部署到Kubernetes。
配置 鏡像構建和發佈
鏡像倉庫名稱。鏡像倉庫名格式爲namespace/鏡像倉庫名。
image082

鏡像版本號。如果爲空,則默認是latest。
image083

Registry地址。Registry地址 用來配置docker registry地址,如果爲空,默認使用Docker hub registry ,https://index.docker.io/v1/;如果使用阿里雲registry, 請填寫https://registry.cn-beijing.aliyuncs.com/v2/,其中地域cn-beijing根據用戶實際的鏡像倉庫地域來修改。
image084

Registry證書。用來添加授權信息,請添加Registry授權類型的證書。
image085

Dockerfile路徑。填寫Dockerfile文件在該項目工作空間的相對路徑。如果該配置爲空,則默認使用工作空間目錄下命名爲Dockerfile的文件。
image086

配置 部署Kubernetes。
選擇 認證方式。
CodePipeline目前支持 證書認證,用戶名密碼認證 和 Token認證 三種認證方式。如果是 阿里雲容器服務Kubernetes集羣,默認都是 證書認證。
image087

填寫 API服務器地址。
請輸入Kubernetes API 服務器地址,您可以在阿里雲容器服務控制檯查看Kubernetes集羣 API Server 公網連接端點,
例如https://1.12.123.134:6443
image088

添加 證書。
根據上文選擇的 認證方式,決定添加的證書類型。
證書認證 的認證方式,添加 Docker授權 類型的證書。
image089

如果是 阿里雲容器服務Kubernetes集羣,在集羣 基本信息 頁面,找到 配置集羣憑據 中提供的 KubeConfig。
image090

把 client-key-data 的內容(冒號後面的字符串)填入 客戶端Key 對話框。
把 client-certificate-data 的內容(冒號後面的字符串)填入 客戶端證書 對話框。
用戶名密碼認證 的認證方式,添加 用戶名和密碼 類型的證書。
image091

Token認證 的認證方式,添加 用戶名和密碼 類型的證書。
image092

添加 部署配置文件。
輸入yaml格式的Kubernetes部署配置文件。如果文件在當前項目的workspace下,請直接輸入文件名,如果在項目workspace的子目錄中,請輸入 ..子目錄/文件名。不支持位於當前項目的workspace之外的文件。
image093

添加 狀態檢查配置。
支持檢驗的 Kubernetes Kind:
pods,daemonsets,deployments,replicasets,replicationcontrollers,statefulsets。如果檢驗的不是 default namespace 下的資源,請在首行填寫 namespace 名稱。請用 “:” 分隔 Kubernetes Kind 和 Kind name, 用 “,” 分隔多個 Kind name。每一行描述一種 Kubernetes Kind。示例配置:
namespace:default

pods:pods1,pods2
deployments:ds1,ds2
注意:請嚴格按照說明填寫單詞,不要刪減字母;請勿填寫多餘的空格或者換行。
添加 變量申明配置
支持系統環境變量,可以通過 JENKINSURL/env−vars.html/查看。如果使用了多個變量,請用”,”分隔。您可以在上文的部署配置文件中使用變量,請以
{BUILD_NUMBER} 格式嚴格填寫,其他格式插件將忽略。示例:BUILD_NUMBER,JOB_NAME
單擊 下一步。
檢查所有配置信息,單擊 提交。

4) 執行構建
完成項目的任務配置後,可以單擊左側導航欄中的 立即構建,開始執行配置中的構建及部署命令。
image094

可以在構建隊列及構建歷史中查看構建狀態。單擊 構建序號,進入該次構建具體信息頁面。
image095

然後在側導航中,單擊 控制檯輸出,可以查看該次構建日誌。

image096

4、 負載均衡配置
4.1 創建負載均衡實例

登錄負載均衡管理控制檯。
在實例管理頁面,單擊創建負載均衡。
在購買頁面選擇一種付費方式。
參考負載均衡配置,配置負載均衡實例。
image097
單擊立即購買,完成創建。
創建成功後,返回負載均衡管理控制檯。
在實例管理頁面, 將光標移至剛創建的負載均衡實例名稱區域,單擊出現的鉛筆圖標,輸入SLB1作爲負載均衡實例的名稱,單擊確定。
4.2 配置負載均衡實例
登錄負載均衡管理控制檯。
在實例管理頁面,找到目標實例,然後單擊實例ID鏈接進入詳情頁面。
在左側導航欄,單擊監聽,然後單擊添加監聽。
根據如下信息,配置監聽規則,其它配置保持默認選項。
單擊下一步,配置健康檢查。選擇TCP健康檢查,使用默認配置,然後單擊確認。
在配置成功頁面,單擊確認完成監聽的配置。
在左側導航欄,單擊服務器 > 後端服務器。
在負載均衡服務器池頁面,單擊未添加的服務器頁籤,勾選之前創建的ECS01和ECS02實例,然後單擊批量添加。
在添加後端服務器對話框,保持默認的ECS權重設置,單擊確認。
返回實例管理頁面,單擊刷新。當後端ECS的健康檢查狀態爲正常時,表示後端ECS可以正常處理負載均衡轉發的請求了。
4.3 域名解析
負載均衡配置完成後,需要將域名解析到負載均衡實例的公網服務地址上。例如,網站的域名爲www.abc.com,運行在公網IP地址爲1.1.1.1的ECS實例上。創建負載均衡實例後,系統分配的負載均衡實例的公網IP地址爲2.2.2.2。需要要將ECS實例添加到負載均衡實例的後端服務器池,並將域名www.abc.com解析到2.2.2.2。通常情況下,建議使用A記錄解析(即將域名解析到一個IP地址)即可。

登錄雲解析DNS管理控制檯。
單擊添加域名,添加需要配置的域名。
在域名解析列表頁面,單擊目標域名操作列下的解析設置, 根據設置域名解析中的步驟完成域名解析設置。
5、 測試驗證
當我們的應用都已經部署完成並且正常啓動之後,需要對應用做必要的測試驗證工作,例如功能測試、集成測試,由於這部分工作主要集中在測試團隊,所以暫時省略。
6、 流量割接
如果功能測試,集成測試,性能測試等相關測試都已經通過,沒有任何問題的情況,下一步可以開始上線割,但需要提前做好客戶及公司內部的維護通告(重大維護公告需至少提前一週通知用戶和客戶,並提前準備好各種預案)。正式遷移的時候,由於系統、代碼、文件及數據庫都已遷移過去。維護期間停止數據新的數據寫入,開啓數據庫只讀模式,這樣可以減少用戶的影響。等待數據庫同步一致之後,開始遷移的最後一步是將域名解析至阿里雲,這裏需要特別提醒一下,域名需要提前備案的。
雖然域名已經解析到最新的ip,當前萬網的刷新最新的解析記錄的時間週期最短也僅僅10分鐘。但是我們沒法把控的客戶端本地的DNS緩存,即還會有部分客戶還是訪問到老的站點。針對那些依舊訪問IDC機房應用的客戶,我們在IDC機房前端nginx上做302重定向跳轉,將依舊還訪問IDC的客戶引流到阿里雲。值得注意的是,由於nginx是七層負載均衡,需要匹配域名。這裏nginx的server_name和跳轉的鏈接配置的域名都是同一個,爲了確保跳轉的域名解析的地址爲阿里雲,我們可以在nginx所在服務器的hosts配置中強制將域名的解析ip設置爲阿里雲對應的IP。最後還要觀察下一段時間,直到所有流量都平穩的切到阿里雲上,但仍然建議老應用保留一段時間,以防不測。萬一遇到任何問題還可以修改DNS解析快速恢復到原來的業務。如下圖所示:
image098

關於RollBack 計劃稍微多說兩句,企業都要根據自身業務來制定詳細的rollback計劃,例如業務很重要,不能出現一絲數據錯誤,那麼建議在切到雲上的時候,保持線下與線上數據庫同步,雲上可以設置爲master,線下設置爲從庫,開啓主從同步,保障數據的一致性。當然操作過程會很複雜,但是絕對有必要提前考慮到出現各種問題的風險,以及應對措施。針對比較重要的業務和數據,一定要做好詳細的切割計劃以及回滾計劃。但也有人說我的業務是不太重要的,業務影響較小,回滾代價反而比較大,這種情況就需要靈活考慮。

7、 安全加固
7.1 DDOS高防IP配置
智能終端上報數據的地址爲公網地址,爲防止汽車上報的地址被他人惡意攻擊,因此需要對該地址進行重點防護。可以通過配置DDoS高防IP,將攻擊流量引流到高防IP,確保數據上報地址的穩定可靠。操作步驟如下:
a) 購買實例

登錄雲盾管理控制檯
點擊新購實例
配置實例
image099
點擊購買
b) 啓用高防實例
購買高防實例後,需要啓用該實例纔可將業務接入高防進行防護。操作步驟如下:

登錄雲盾DDoS防護管理控制檯。
定位到高防IP>實例列表,選擇地域,找到想要啓用的高防實例。
單擊立刻啓用。
選擇線路,單擊立即啓用。
c) 配置四層轉發
登錄雲盾管理控制檯,定位到DDoS防護>高防IP,單擊非網站。在非網站頁面,可選擇高防實例和高防IP。
image100
選擇需要配置規則的高防IP後,單擊添加規則。
選擇轉發協議(目前支持TCP和UDP),設置轉發端口(需要通過高防IP的哪個端口來訪問,一般情況選擇跟源站相同端口)。然後,填寫源站端口(源站提供業務服務的真實端口)和源站IP。
image101
單擊確定。
d) 放行回源IP段
登錄雲盾DDoS防護管理控制檯,定位到實例列表,單擊高防回源IP段,查看詳細的高防IP回源地址段。
image102
關閉源站上的防火牆和其他任何安全類的軟件,確保高防的回源IP不受源站安全策略的影響。
e) 驗證配置生效
在雲盾DDoS防護管理控制檯配置完成後,DDoS高防預期可以把請求高防IP對應端口的報文轉發到源站(真實服務器)的對應端口。爲了最大程度保證業務的穩定,我們建議在全面切換業務之前先進行本地的測試。可以直接本地通過telnet命令訪問高防IP的後端業務端口,telnet命令能連通則說明轉發成功。

7.2 web應用防火牆配置
a) 購買web應用防火牆服務

登錄雲盾控制檯,點擊進入web應用防火牆頁面
開通web應用防火牆
購買web應用防火牆
單擊確定
b) 添加網站域名配置。
登錄雲盾Web應用防火牆管理控制檯。
定位到管理>網站配置頁面,根據WAF實例所在的地區,選擇中國大陸或海外地區。
單擊添加網站。
image103
c) 放行WAF回源IP段。
回源IP是WAF用來代理客戶端請求服務器時用的源IP,在服務器看來,接入WAF後所有源IP都會變成WAF的回源IP,而真實的客戶端地址會被加在HTTP頭部的XFF字段中。接入WAF後,WAF作爲一個反向代理存在於客戶端和服務器之間,服務器的真實IP被隱藏起來,客戶端只能看到WAF,而看不到源站。如下圖所示(origin爲源站):

image104

d) 驗證域名轉發配置是否生效。
在把業務流量切到WAF上之前,建議先通過本地驗證的方式確保一切配置正常,WAF轉發正常。首先需要修改本地hosts文件,使本地對於被防護站點的請求先經過WAF。修改hosts文件後保存。然後本地ping一下被防護的域名,預期此時解析到的IP地址應該是剛纔綁定的WAF IP地址。如果依然是源站地址,可嘗試刷新本地的DNS緩存(Windows的cmd下可以使用ipconfig/flushdns命令)。確認hosts綁定已經生效(域名已經本地解析爲WAF的IP)後,打開瀏覽器,輸入該域名進行訪問,如果WAF的配置正確,網站預期能夠正常打開。
e) 修改網站域名DNS解析記錄將業務流量切換至WAF。

   通過修改DNS將網站域名解析到WAF,完成業務正式接入。

登錄萬網控制檯,定位到對應域名的域名解析>解析設置頁面。正常情況下,網站域名已經存在一些解析記錄。
image105
選擇所需解析的主機記錄,單擊修改,將記錄類型修改爲CNAME,記錄值修改爲WAF所分配的CNAME。
image106
DNS配置檢查
將網站域名的DNS解析切換至WAF後,網站域名即接入WAF進行防護。解析記錄配置完成後,可以通過Ping網站域名的方式其他工具觀察DNS解析生效情況。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章