最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Docker Compose健康檢查實(shí)現(xiàn)零停機(jī)部署

 更新時(shí)間:2026年04月28日 09:42:17   作者:FuncWander  
本文主要介紹了Docker Compose健康檢查實(shí)現(xiàn)零停機(jī)部署,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

第一章:Docker Compose健康檢查的核心價(jià)值

在現(xiàn)代微服務(wù)架構(gòu)中,容器的啟動完成并不代表應(yīng)用已準(zhǔn)備好對外提供服務(wù)。網(wǎng)絡(luò)依賴、數(shù)據(jù)庫連接初始化、緩存加載等操作可能仍處于進(jìn)行中。Docker Compose 的健康檢查機(jī)制正是為解決這一問題而設(shè)計(jì),它能夠主動探測容器內(nèi)應(yīng)用的運(yùn)行狀態(tài),確保服務(wù)真正“就緒”后再納入調(diào)用鏈。

健康檢查的工作原理

Docker 通過執(zhí)行用戶定義的命令周期性檢測容器狀態(tài),將結(jié)果記錄為 startinghealthy 或 unhealthy。只有狀態(tài)為 healthy 的容器才會被視作可用,從而影響依賴服務(wù)的啟動順序或負(fù)載均衡策略。

定義健康檢查配置

在 docker-compose.yml 文件中,可通過 healthcheck 指令聲明檢測邏輯:

version: '3.8'
services:
  web:
    image: nginx
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost"]
      interval: 10s
      timeout: 3s
      retries: 3
      start_period: 30s

上述配置含義如下:

  • test:執(zhí)行的健康檢查命令,返回 0 表示健康
  • interval:檢查間隔時(shí)間
  • timeout:命令超時(shí)閾值
  • retries:連續(xù)失敗幾次后標(biāo)記為不健康
  • start_period:容器啟動后首次檢查前的等待時(shí)間

健康檢查的實(shí)際收益

優(yōu)勢說明
提升系統(tǒng)穩(wěn)定性避免請求發(fā)送到尚未準(zhǔn)備好的服務(wù)實(shí)例
優(yōu)化依賴啟動順序配合 depends_on 條件啟動,實(shí)現(xiàn)真正的就緒依賴
增強(qiáng)自愈能力與編排工具結(jié)合可觸發(fā)自動重啟或替換實(shí)例

第二章:健康檢查配置詳解與最佳實(shí)踐

2.1 健康檢查指令結(jié)構(gòu)與參數(shù)解析

健康檢查指令是保障服務(wù)高可用的核心機(jī)制,其結(jié)構(gòu)通常由檢查類型、執(zhí)行頻率、超時(shí)設(shè)置和判定閾值組成。通過合理配置參數(shù),系統(tǒng)可精準(zhǔn)識別實(shí)例的運(yùn)行狀態(tài)。

核心參數(shù)說明

  • interval:檢查間隔,如“30s”表示每30秒執(zhí)行一次
  • timeout:響應(yīng)超時(shí)時(shí)間,超過則視為失敗
  • retries:連續(xù)失敗重試次數(shù),達(dá)到閾值后標(biāo)記為不健康

典型配置示例

health_check:
  protocol: http
  path: /health
  interval: 30s
  timeout: 5s
  retries: 3

該配置表示每30秒對/health路徑發(fā)起HTTP請求,5秒內(nèi)未響應(yīng)計(jì)為一次失敗,連續(xù)失敗3次后判定服務(wù)異常。此機(jī)制有效避免偶發(fā)延遲導(dǎo)致的誤判,提升系統(tǒng)穩(wěn)定性。

2.2 如何編寫精準(zhǔn)的健康檢測命令

編寫高效的健康檢測命令是保障系統(tǒng)穩(wěn)定運(yùn)行的關(guān)鍵。一個(gè)精準(zhǔn)的檢測命令應(yīng)能快速判斷服務(wù)狀態(tài),并準(zhǔn)確反饋異常。

核心設(shè)計(jì)原則

  • 響應(yīng)迅速:檢測邏輯應(yīng)在短時(shí)間內(nèi)完成,避免阻塞調(diào)用方
  • 輕量執(zhí)行:不依賴外部復(fù)雜組件,減少誤報(bào)風(fēng)險(xiǎn)
  • 明確輸出:成功返回0,失敗返回非0碼

典型實(shí)現(xiàn)示例

#!/bin/bash
# 檢測應(yīng)用端口是否可訪問
curl -f http://localhost:8080/health &> /dev/null
exit $?

該腳本通過 curl -f 發(fā)起HTTP請求,-f 參數(shù)確保HTTP錯誤碼返回非0值,&> /dev/null 屏蔽輸出,僅保留退出狀態(tài)碼,符合健康檢查的靜默高效要求。

2.3 超時(shí)、重試與間隔時(shí)間的合理設(shè)置

在分布式系統(tǒng)中,網(wǎng)絡(luò)請求不可避免地面臨延遲或中斷。合理設(shè)置超時(shí)、重試機(jī)制及間隔時(shí)間,是保障系統(tǒng)穩(wěn)定性的關(guān)鍵。

超時(shí)控制

為防止請求無限等待,必須設(shè)定合理的超時(shí)時(shí)間。例如,在Go語言中可通過 context 控制:

ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
resp, err := http.GetContext(ctx, "https://api.example.com/data")

上述代碼設(shè)置5秒超時(shí),超過則自動取消請求,避免資源堆積。

重試策略與退避機(jī)制

簡單的重試可能加劇系統(tǒng)負(fù)載,建議結(jié)合指數(shù)退避。以下為常見退避策略示例:

重試次數(shù)等待時(shí)間(秒)
11
22
34
48

每次重試間隔呈指數(shù)增長,減少服務(wù)端壓力。同時(shí)應(yīng)設(shè)置最大重試上限,防止無限循環(huán)。

2.4 依賴服務(wù)啟動順序控制實(shí)戰(zhàn)

在微服務(wù)架構(gòu)中,確保依賴服務(wù)按正確順序啟動是系統(tǒng)穩(wěn)定運(yùn)行的關(guān)鍵。例如,數(shù)據(jù)庫服務(wù)必須在API服務(wù)之前就緒。

使用 Docker Compose 控制啟動順序

version: '3.8'
services:
  db:
    image: postgres:13
    container_name: mydb
    environment:
      POSTGRES_DB: myapp
  api:
    image: myapp/api
    container_name: myapi
    depends_on:
      - db
    command: ["./wait-for-db.sh", "db:5432", "--", "npm", "start"]

上述配置中,depends_on 確保 db 在 api 之前啟動,但不等待其就緒。因此需配合腳本 wait-for-db.sh 主動探測數(shù)據(jù)庫可用性,實(shí)現(xiàn)真正的依賴等待。

健康檢查與重試機(jī)制

  • 通過定期健康檢查判斷服務(wù)是否就緒
  • 客戶端采用指數(shù)退避策略進(jìn)行連接重試
  • 結(jié)合服務(wù)注冊中心實(shí)現(xiàn)動態(tài)發(fā)現(xiàn)與狀態(tài)感知

2.5 常見配置陷阱與規(guī)避策略

環(huán)境變量覆蓋問題

在多環(huán)境部署中,未正確隔離開發(fā)、測試與生產(chǎn)環(huán)境的配置常導(dǎo)致服務(wù)異常。使用獨(dú)立配置文件并結(jié)合 CI/CD 變量注入可有效規(guī)避。

配置項(xiàng)默認(rèn)值缺失

  • 遺漏必填字段的默認(rèn)值會導(dǎo)致啟動失敗
  • 建議為所有可選參數(shù)設(shè)置合理默認(rèn)值
  • 利用配置校驗(yàn)工具提前發(fā)現(xiàn)問題
server:
  port: ${PORT:8080}  # 使用占位符設(shè)置默認(rèn)端口
  timeout: 30s

該 YAML 配置通過 ${VAR:default} 語法確保即使環(huán)境變量未設(shè)置,也能使用安全默認(rèn)值,避免空值引發(fā)運(yùn)行時(shí)錯誤。

第三章:實(shí)現(xiàn)零停機(jī)部署的關(guān)鍵機(jī)制

3.1 基于健康狀態(tài)的服務(wù)切換原理

在分布式系統(tǒng)中,服務(wù)實(shí)例的可用性可能因網(wǎng)絡(luò)波動、資源耗盡或程序異常而動態(tài)變化?;诮】禒顟B(tài)的服務(wù)切換機(jī)制通過實(shí)時(shí)監(jiān)控各節(jié)點(diǎn)的運(yùn)行狀況,自動將流量導(dǎo)向健康的實(shí)例,從而保障系統(tǒng)的高可用性。

健康檢查與狀態(tài)反饋

服務(wù)注冊中心定期對實(shí)例發(fā)起心跳探測,常見策略包括HTTP請求檢測和TCP連接探活。例如:

type HealthChecker struct {
    Endpoint string
    Timeout  time.Duration
}
func (h *HealthChecker) Check() bool {
    ctx, cancel := context.WithTimeout(context.Background(), h.Timeout)
    defer cancel()
    resp, err := http.GetWithContext(ctx, h.Endpoint+"/health")
    return err == nil && resp.StatusCode == http.StatusOK
}

該代碼定義了一個(gè)簡單的健康檢查結(jié)構(gòu)體,通過向/health端點(diǎn)發(fā)送HTTP請求判斷服務(wù)狀態(tài)。響應(yīng)碼為200時(shí)標(biāo)記為健康,否則觸發(fā)服務(wù)剔除流程。

切換決策邏輯

負(fù)載均衡器根據(jù)健康狀態(tài)列表動態(tài)更新路由表,僅將請求分發(fā)至健康節(jié)點(diǎn),實(shí)現(xiàn)無縫故障隔離。

3.2 部署過程中流量平滑遷移實(shí)踐

在應(yīng)用部署升級時(shí),確保線上服務(wù)不中斷的關(guān)鍵在于實(shí)現(xiàn)流量的平滑遷移。通過逐步將用戶請求從舊版本實(shí)例導(dǎo)向新版本,可有效降低發(fā)布風(fēng)險(xiǎn)。

金絲雀發(fā)布策略

采用漸進(jìn)式流量引入機(jī)制,先將少量請求路由至新版本進(jìn)行驗(yàn)證:

  • 初始階段:5% 流量進(jìn)入新版本,觀察錯誤率與響應(yīng)延遲
  • 中期驗(yàn)證:無異常后提升至 30%,進(jìn)行性能壓測
  • 全量切換:確認(rèn)穩(wěn)定后,完全切流并下線舊實(shí)例

Nginx 流量分流配置示例

upstream backend {
    server 10.0.1.10:8080 weight=95;  # 舊版本承擔(dān)95%流量
    server 10.0.1.11:8080 weight=5;   # 新版本承擔(dān)5%流量
}
server {
    location / {
        proxy_pass http://backend;
    }
}

上述配置利用 Nginx 的加權(quán)輪詢機(jī)制實(shí)現(xiàn)細(xì)粒度流量分配。weight 參數(shù)控制后端節(jié)點(diǎn)的請求比例,便于實(shí)施灰度發(fā)布。結(jié)合健康檢查機(jī)制,自動屏蔽異常實(shí)例,保障服務(wù)連續(xù)性。

3.3 結(jié)合反向代理實(shí)現(xiàn)無縫更新

在現(xiàn)代服務(wù)部署中,反向代理不僅是流量入口的樞紐,更是實(shí)現(xiàn)服務(wù)無縫更新的關(guān)鍵組件。通過動態(tài)路由與健康檢查機(jī)制,可在不中斷用戶請求的前提下完成版本迭代。

基于Nginx的流量切換策略

使用Nginx作為反向代理時(shí),可通過upstream模塊定義多組后端服務(wù):

upstream backend-v1 {
    server 192.168.1.10:8080 max_fails=3 fail_timeout=30s;
}
upstream backend-v2 {
    server 192.168.1.11:8080;
}
server {
    location / {
        proxy_pass http://backend-v1;
    }
}

通過修改proxy_pass指向新版本upstream,并配合熱加載配置(nginx -s reload),實(shí)現(xiàn)請求無感遷移。舊實(shí)例在連接自然終止后下線,避免連接突斷。

藍(lán)綠部署流程圖

階段流量目標(biāo)狀態(tài)
部署前v1全量在線
切換中v1 + v2并行運(yùn)行
切換后v2v1待回收

第四章:監(jiān)控與故障排查能力構(gòu)建

4.1 利用日志和狀態(tài)輸出診斷健康問題

在分布式系統(tǒng)中,服務(wù)的健康狀態(tài)往往通過日志和運(yùn)行時(shí)狀態(tài)輸出來反映。有效的診斷依賴于結(jié)構(gòu)化日志記錄與可訪問的狀態(tài)接口。

結(jié)構(gòu)化日志輸出

采用JSON格式輸出日志,便于解析與監(jiān)控系統(tǒng)采集:

{
  "level": "error",
  "timestamp": "2023-10-05T12:34:56Z",
  "service": "auth-service",
  "message": "failed to validate token",
  "trace_id": "abc123"
}

該格式包含關(guān)鍵字段如級別、時(shí)間戳和服務(wù)名,有助于快速定位異常源頭。

健康檢查端點(diǎn)設(shè)計(jì)

服務(wù)應(yīng)暴露/health端點(diǎn),返回當(dāng)前狀態(tài)及依賴組件情況:

字段說明
statusoverall health status (e.g., "healthy", "degraded")
dependenciesdatabase, cache, message queue status

4.2 集成外部監(jiān)控工具進(jìn)行告警通知

在現(xiàn)代系統(tǒng)運(yùn)維中,及時(shí)的告警通知是保障服務(wù)穩(wěn)定性的關(guān)鍵環(huán)節(jié)。通過集成外部監(jiān)控工具,可實(shí)現(xiàn)對系統(tǒng)狀態(tài)的實(shí)時(shí)感知與異常快速響應(yīng)。

常見監(jiān)控工具對接方式

主流監(jiān)控系統(tǒng)如 Prometheus、Zabbix 和 Datadog 支持通過 Webhook 或 API 接收自定義告警。以 Prometheus Alertmanager 為例,配置如下:

receivers:
  - name: 'webhook-notifier'
    webhook_configs:
      - url: 'https://your-api.example.com/alert'
        send_resolved: true

該配置將告警事件推送至指定 HTTPS 端點(diǎn),send_resolved 控制是否發(fā)送恢復(fù)通知,確保狀態(tài)閉環(huán)。

多通道通知策略

為提升通知可達(dá)性,建議采用多通道并行推送:

  • 企業(yè)微信機(jī)器人:適用于內(nèi)部團(tuán)隊(duì)即時(shí)通訊
  • SMTP 郵件:用于正式記錄和跨部門通報(bào)
  • SMS 短信:保障高優(yōu)先級事件的觸達(dá)率

4.3 模擬故障場景驗(yàn)證恢復(fù)能力

在高可用系統(tǒng)設(shè)計(jì)中,必須通過主動注入故障來驗(yàn)證系統(tǒng)的容錯與恢復(fù)機(jī)制。常見的故障類型包括網(wǎng)絡(luò)分區(qū)、服務(wù)宕機(jī)和磁盤滿載。

常見故障模擬方法

  • 使用 kill -9 模擬進(jìn)程崩潰
  • 通過 iptables 模擬網(wǎng)絡(luò)延遲或中斷
  • 掛載只讀文件系統(tǒng)模擬磁盤不可寫

代碼示例:檢測主從切換延遲

func measureFailoverLatency() {
    start := time.Now()
    for {
        db := connect("slave")
        if db.IsMaster() { // 檢測是否已升主
            break
        }
        time.Sleep(500 * time.Millisecond)
    }
    log.Printf("failover took %v", time.Since(start))
}

該函數(shù)通過輪詢從節(jié)點(diǎn)狀態(tài),測量主節(jié)點(diǎn)故障后新主選舉完成的時(shí)間,IsMaster() 方法用于判斷當(dāng)前實(shí)例是否已成為主庫。

恢復(fù)能力評估指標(biāo)

指標(biāo)目標(biāo)值
故障檢測時(shí)間<10s
主從切換耗時(shí)<30s
數(shù)據(jù)丟失量0

4.4 健康檢查失敗后的容器行為調(diào)優(yōu)

當(dāng)容器健康檢查失敗時(shí),合理調(diào)優(yōu)其行為可顯著提升系統(tǒng)穩(wěn)定性與自愈能力。Kubernetes 默認(rèn)會在存活探針連續(xù)失敗后重啟容器,但需結(jié)合業(yè)務(wù)特性調(diào)整策略。

配置就緒與存活探針參數(shù)

通過設(shè)置合理的 `initialDelaySeconds`、`failureThreshold` 等參數(shù),避免容器因啟動慢被誤殺:

livenessProbe:
  httpGet:
    path: /health
    port: 8080
  initialDelaySeconds: 30
  periodSeconds: 10
  failureThreshold: 3

上述配置表示容器啟動 30 秒后開始探測,每 10 秒一次,連續(xù) 3 次失敗才觸發(fā)重啟,有效防止短暫波動引發(fā)的誤判。

結(jié)合就緒探針保護(hù)流量

使用就緒探針隔離不健康實(shí)例,防止流量進(jìn)入:

  • 就緒探針失敗時(shí),Pod 從 Service 的 Endpoints 中移除
  • 存活探針失敗則觸發(fā)容器重啟
  • 兩者配合實(shí)現(xiàn)“先摘流,再重啟”的安全升級路徑

第五章:未來運(yùn)維自動化的發(fā)展方向

智能化故障預(yù)測與自愈系統(tǒng)

現(xiàn)代運(yùn)維正從“響應(yīng)式”向“預(yù)測式”演進(jìn)。通過引入機(jī)器學(xué)習(xí)模型分析歷史監(jiān)控?cái)?shù)據(jù),系統(tǒng)可提前識別潛在故障。例如,利用LSTM模型對服務(wù)器CPU、內(nèi)存趨勢建模,當(dāng)預(yù)測值偏離閾值時(shí)觸發(fā)自動擴(kuò)縮容。

  • 采集指標(biāo):Prometheus 抓取節(jié)點(diǎn)負(fù)載、I/O延遲等10+維度數(shù)據(jù)
  • 訓(xùn)練模型:使用PyTorch構(gòu)建時(shí)間序列預(yù)測 網(wǎng)絡(luò)
  • 執(zhí)行動作:Kubernetes Operator 自動重建異常Pod并通知SRE團(tuán)隊(duì)

基于策略的自動化治理

GitOps模式結(jié)合OPA(Open Policy Agent)實(shí)現(xiàn)配置合規(guī)性自動校驗(yàn)。每次Pull Request提交YAML清單時(shí),CI流水線調(diào)用OPA評估是否符合安全基線。

package k8s
deny_privileged {
    input.spec.containers[_].securityContext.privileged
}

該策略阻止任何特權(quán)容器部署,確保最小權(quán)限原則落地。

邊緣環(huán)境的輕量化自動化

在IoT場景中,數(shù)千邊緣節(jié)點(diǎn)需低開銷運(yùn)維方案。采用輕量代理配合MQTT協(xié)議實(shí)現(xiàn)批量配置下發(fā)。以下為資源消耗對比:

方案CPU占用內(nèi)存(MB)適用規(guī)模
Ansible + SSH15%80<500節(jié)點(diǎn)
EdgeAgent + MQTT3%12>5000節(jié)點(diǎn)

到此這篇關(guān)于Docker Compose健康檢查實(shí)現(xiàn)零停機(jī)部署的文章就介紹到這了,更多相關(guān)Docker Compose 零停機(jī)部署內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 基于Docker安裝與部署Zabbix

    基于Docker安裝與部署Zabbix

    zabbix是一個(gè)基于WEB界面的提供分布式系統(tǒng)監(jiān)視以及網(wǎng)絡(luò)監(jiān)視功能的企業(yè)級的開源解決方案。zabbix能監(jiān)視各種網(wǎng)絡(luò)參數(shù),保證服務(wù)器系統(tǒng)的安全運(yùn)營;并提供柔軟的通知機(jī)制以讓系統(tǒng)管理員快速定位/解決存在的各種問題。
    2018-04-04
  • 解決Docker安裝錯誤failure:repodata/repomd.xml from docker-ce-stable

    解決Docker安裝錯誤failure:repodata/repomd.xml from docke

    在使用yum命令安裝docker或其他工具時(shí)可能會遇到failure_repodata_repomd.xmlfromdocker-ce-stable_[Errno256]Nomoremirrorstotry的錯誤,原因可能是yum源配置問題,解決方法包括重置yum源,刪除多余的repo文件
    2024-11-11
  • Docker容器數(shù)據(jù)卷介紹及操作示例

    Docker容器數(shù)據(jù)卷介紹及操作示例

    這篇文章主要為大家介紹了Docker容器數(shù)據(jù)卷介紹及操作示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪
    2022-04-04
  • docker-compose安裝部署NebulaGraph圖數(shù)據(jù)庫的詳細(xì)過程

    docker-compose安裝部署NebulaGraph圖數(shù)據(jù)庫的詳細(xì)過程

    NebulaGraph Studio是一款可以通過Web訪問的開源圖數(shù)據(jù)庫可視化工具,搭配NebulaGraph內(nèi)核使用,提供構(gòu)圖、數(shù)據(jù)導(dǎo)入、編寫nGQL查詢等一站式服務(wù),這篇文章主要介紹了docker-compose安裝部署NebulaGraph圖數(shù)據(jù)庫的詳細(xì)過程,感興趣的朋友一起看看吧
    2023-12-12
  • 快速修改docker容器的啟動參數(shù)等信息

    快速修改docker容器的啟動參數(shù)等信息

    這篇文章主要介紹了快速修改docker容器的啟動參數(shù)等信息,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-03-03
  • 在Docker上安裝配置Oracle教程

    在Docker上安裝配置Oracle教程

    本篇文章主要介紹了在 Docker 上配置 Oracle教程,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-04-04
  • docker啟動elasticsearch時(shí)內(nèi)存不足問題及解決方法

    docker啟動elasticsearch時(shí)內(nèi)存不足問題及解決方法

    這篇文章主要介紹了docker啟動elasticsearch時(shí)內(nèi)存不足問題,本文給大家分享安裝過程及解決方法,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-07-07
  • 手把手教你實(shí)現(xiàn)Docker 部署 vue 項(xiàng)目

    手把手教你實(shí)現(xiàn)Docker 部署 vue 項(xiàng)目

    這篇文章主要介紹了手把手教你實(shí)現(xiàn)Docker 部署 vue 項(xiàng)目,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • docker compose部署主從復(fù)制的實(shí)現(xiàn)

    docker compose部署主從復(fù)制的實(shí)現(xiàn)

    本文記錄了通過 docker compose 搭建一主雙從的 Redis 服務(wù)。文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • Docker中搭建配置Git環(huán)境的過程

    Docker中搭建配置Git環(huán)境的過程

    工作中遇到了需要在Docker環(huán)境中操作GitLab倉庫的場景,需要事先在Docker中搭好Git環(huán)境,但是很多朋友不是很清楚Docker配置Git環(huán)境的過程,今天通過本文給大家詳細(xì)介紹下,需要的朋友參考下吧
    2021-08-08

最新評論

乌审旗| 博兴县| 浠水县| 凤山市| 水城县| 玛曲县| 大石桥市| 衡山县| 台江县| 梅河口市| 宁南县| 阳朔县| 三穗县| 旺苍县| 聂拉木县| 三都| 张家口市| 海安县| 新民市| 阳曲县| 平安县| 玛纳斯县| 双辽市| 宁蒗| 九龙县| 枣庄市| 顺平县| 宾川县| 平舆县| 张家港市| 四平市| 中阳县| 瑞丽市| 康定县| 西和县| 卓尼县| 肇东市| 乌恰县| 旬阳县| 永兴县| 广宗县|