使用Consul搭建數(shù)據(jù)中心

簡(jiǎn)介

下面兩個(gè)章節(jié)中的內(nèi)容,可以幫助用戶部署一個(gè)由consul打造的安全可靠的數(shù)據(jù)中心枝嘶。如果用戶希望將這個(gè)用戶中心投入生產(chǎn)環(huán)境使用乍构,建議從頭到尾仔細(xì)閱讀這份文檔,它們將幫助您成功建立和維護(hù)健康的數(shù)據(jù)中心柳譬,這篇文檔涵蓋以下幾個(gè)內(nèi)容:

  • 基礎(chǔ)架構(gòu)建議
  • 搭建數(shù)據(jù)中心
  • 備份數(shù)據(jù)中心狀態(tài)
  • 保護(hù)數(shù)據(jù)中心安全
  • 配置網(wǎng)絡(luò)
  • 多個(gè)數(shù)據(jù)中心配置

Consul 參考架構(gòu)

基礎(chǔ)設(shè)置要求

Consul 服務(wù)端

Consul服務(wù)端代理(Agent)維護(hù)集群狀態(tài)喳张,響應(yīng)RPC查詢,并處理所有寫入操作征绎。由于Consul服務(wù)端代理承擔(dān)了大部分繁重的工作蹲姐,因此服務(wù)器主機(jī)配置對(duì)于Consul集群的整體性能就比較關(guān)鍵了磨取,下面列舉了推薦的服務(wù)器配置:

規(guī)格 CPU 內(nèi)存 磁盤 典型的云示例配置
Small 2-4 core 8-16 GB RAM 50GB AWS: m5.large, m5.xlarge;Azure: Standard_D2_v3, Standard_D4_v3柴墩;GCP: n2-standard-2, n2-standard-4
Large 8-16 core 32-64 GB RAM 100GB AWS: m5.2xlarge, m5.4xlarge忙厌;Azure: Standard_D8_v3, Standard_D16_v3;GCP: n2-standard-8, n2-standard-16

硬件配置考量

  • 小規(guī)格配置適用于大多數(shù)小型生產(chǎn)環(huán)境或開發(fā)/測(cè)試環(huán)境
  • 大規(guī)格配置適用于負(fù)載較高的生產(chǎn)環(huán)境

此處需要注意江咳,對(duì)于大型工作負(fù)載逢净,請(qǐng)確保磁盤支持大量 IOPS,以跟上 Raft 日志的更新速度歼指。

基礎(chǔ)架構(gòu)圖

consul-arch.png

數(shù)據(jù)中心設(shè)計(jì)

用戶可以在單個(gè)物理數(shù)據(jù)中心爹土、或跨多個(gè)數(shù)據(jù)中心部署Consul集群(通常是3或5臺(tái)服務(wù)器,加上客戶端代理)踩身。對(duì)于運(yùn)行時(shí)高讀寫的大型集群胀茵,將服務(wù)器部署在同物理地址可以提高性能;在云環(huán)境中挟阻,用戶可以跨多個(gè)可用區(qū)域(zone)部署一個(gè)數(shù)據(jù)中心琼娘,例如每個(gè)可用區(qū)域?qū)?yīng)一臺(tái)單一的主機(jī)。Consul還可以通過WAN連接單獨(dú)的集群組成多數(shù)據(jù)中心附鸽。

單數(shù)據(jù)中心

對(duì)于部署在同一個(gè)數(shù)據(jù)中心中的應(yīng)用程序脱拼,我們建議使用一個(gè)Consul集群。Consul支持傳統(tǒng)的三層架構(gòu)應(yīng)用坷备,同樣也支持微服務(wù)熄浓,搭建一個(gè)集群通常是3或5臺(tái)機(jī)器,用戶可以在可用性和性能間尋找平衡省撑。
單個(gè)數(shù)據(jù)中心的節(jié)點(diǎn)(node)數(shù)建議不超過5000個(gè)赌蔑,對(duì)于讀寫頻繁的集群,可能需要進(jìn)一步減少最大節(jié)點(diǎn)數(shù)竟秫,這具體取決KV對(duì)的數(shù)量以及監(jiān)控?cái)?shù)據(jù)的數(shù)量惯雳。當(dāng)用戶添加更多的客戶端機(jī)器時(shí),Gossip協(xié)議執(zhí)行的時(shí)間會(huì)更長(zhǎng)鸿摇、
對(duì)于寫負(fù)載高的集群石景,推薦使用硬件升級(jí)垂直擴(kuò)展,并使用低延遲存儲(chǔ)拙吉。
服務(wù)標(biāo)簽(Service Tag)可幫助用戶對(duì)集群中的內(nèi)容進(jìn)行查詢

多數(shù)據(jù)中心

用戶可以通過WAN鏈接加入在不同數(shù)據(jù)中心中運(yùn)行相同服務(wù)的Consul集群潮孽。集群間獨(dú)立運(yùn)行,僅通過8302端口上的WAN通信筷黔,除非通過命令行或者API明確配置往史,否則Consul服務(wù)器將僅從其本地?cái)?shù)據(jù)中心返回結(jié)果。Consul不會(huì)在多個(gè)數(shù)據(jù)中心之間復(fù)制數(shù)據(jù)佛舱,但是用戶可以使用consul-replicate工具定期同步KV數(shù)據(jù)椎例。
比較好的實(shí)踐是啟用TLS服務(wù)名稱檢查挨决,以避免代理意外交叉連接。
Consul的預(yù)查詢(prepared queries)允許客戶端在某一數(shù)據(jù)中心發(fā)生故障后订歪,去另一個(gè)數(shù)據(jù)中心發(fā)現(xiàn)服務(wù)脖祈。例如本地?cái)?shù)據(jù)中心dc1中的payment服務(wù)下線了,則預(yù)查詢使用戶能能訪問到離該數(shù)據(jù)中心地理位置最近的其他正常服務(wù)刷晋。
默認(rèn)情況下盖高,預(yù)查詢首先會(huì)在本地?cái)?shù)據(jù)中心解析。它們不支持查詢KV數(shù)據(jù)眼虱,但是可以使用ACLs喻奥。

網(wǎng)絡(luò)連接

局域網(wǎng)Gossip發(fā)生在單個(gè)數(shù)據(jù)中心中的所有代理之間,每個(gè)代理均向其成員列表中的隨機(jī)代理定期發(fā)送探測(cè)捏悬∽膊希客戶端和服務(wù)端代理都參與了Gossip協(xié)議。初識(shí)探測(cè)通過UDP每秒發(fā)送一次过牙,如果節(jié)點(diǎn)在200ms內(nèi)未確認(rèn)诈豌,代理將使用TCPping通,如果TCP探測(cè)失斒愫汀(10s超時(shí)),它會(huì)要求其他隨機(jī)節(jié)點(diǎn)向這個(gè)節(jié)點(diǎn)發(fā)送探測(cè)(稱為間接探測(cè))彤蔽,如果還是沒有獲得有關(guān)該節(jié)點(diǎn)的響應(yīng)摧莽,則會(huì)將該代理標(biāo)記為已關(guān)閉。
代理的狀態(tài)直接影響服務(wù)發(fā)現(xiàn)結(jié)果顿痪,如果代理關(guān)閉镊辕,則它正在監(jiān)控的服務(wù)也會(huì)標(biāo)記為關(guān)閉。
此外蚁袭,代理還通過TCP定期執(zhí)行完整狀態(tài)同步征懈,這將使每個(gè)代理了解其周圍的成員列表(包括節(jié)點(diǎn)名稱IP地址運(yùn)行狀況)揩悄,相對(duì)于上述標(biāo)準(zhǔn)Gossip協(xié)議卖哎,這些操作開銷比較昂貴,時(shí)間通常在30s到5m之間删性,具體時(shí)間根據(jù)集群大小而定亏娜。
Consul涉及到的服務(wù)和端口如下所示:

名稱 端口 標(biāo)志位 描述
Server RPC 8300 / 服務(wù)端接收其他代理的請(qǐng)求,僅TCP連接
Serf LAN 8301 / 用于處理局域網(wǎng)中的Gossip協(xié)議蹬挺,所有代理都需要维贺,TCP和UDP連接
Serf WAN 8302 -1禁用 服務(wù)端傳遞Gossip協(xié)議,TCP和UDP連接
HTTP API 8500 -1禁用 客戶端訪問Http請(qǐng)求巴帮,僅TCP連接
DNS Interface 8600 -1禁用 /

部署指南

這篇文章涵蓋了Consul安裝部署的細(xì)節(jié)溯泣,此章節(jié)與上一個(gè)章節(jié)關(guān)聯(lián)虐秋,此處強(qiáng)烈建議用戶先熟悉Consul的整體架構(gòu),為了提供高可用的單集群體系結(jié)構(gòu)垃沦,建議將Consul服務(wù)器代理部署在多臺(tái)主機(jī)上客给,Consul的參考體系架構(gòu)如下:


consul-arch-single.png

下載Consul

登錄Consul二進(jìn)制文件下載頁(yè)面,選擇對(duì)應(yīng)版本的Consul服務(wù):https://releases.hashicorp.com/consul/

安裝Consul

解壓zip包栏尚,將Consul二進(jìn)制文件移動(dòng)到/usr/local/bin/目錄下起愈,檢驗(yàn)一下Consul命令是否可用:

unzip consul_${CONSUL_VERSION}_linux_amd64.zip
sudo chown root:root consul
sudo mv consul /usr/local/bin/
consul --version

開啟Consul的命令補(bǔ)全功能:

consul -autocomplete-install
complete -C /usr/local/bin/consul consul

創(chuàng)建一個(gè)非特權(quán)系統(tǒng)用戶運(yùn)行Consul并創(chuàng)建其數(shù)據(jù)目錄:

sudo useradd --system --home /etc/consul.d --shell /bin/false consul
sudo mkdir --parents /opt/consul
sudo chown --recursive consul:consul /opt/consul

配置systemd(系統(tǒng)服務(wù)設(shè)置)

/etc/systemd/system/consul.service中創(chuàng)建Consul服務(wù)文件

sudo touch /etc/systemd/system/consul.service

在配置文件中添加配置:

[Unit]
Description="HashiCorp Consul - A service mesh solution"
Documentation=https://www.consul.io/
Requires=network-online.target
After=network-online.target
ConditionFileNotEmpty=/etc/consul.d/consul.hcl

[Service]
Type=notify
User=consul
Group=consul
ExecStart=/usr/local/bin/consul agent -config-dir=/etc/consul.d/
ExecReload=/usr/local/bin/consul reload
KillMode=process
Restart=on-failure
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target

systemd配置項(xiàng)詳解:

配置項(xiàng) 作用域 描述
Description Unit 自定義字符串描述Consul服務(wù)名
Document Unit 關(guān)聯(lián)到Consul文檔
Requires Unit 服務(wù)啟動(dòng)前依賴的其他服務(wù)
After Unit 服務(wù)啟動(dòng)完畢前依賴的其他服務(wù)
ConditionFileNotEmpty Unit 依賴的配置項(xiàng)文件
User、Group Service 啟動(dòng)Consul的服務(wù)和組
ExecStart Service 啟動(dòng)Consul指令
ExecReload Service 重啟Consul指令
KillMode Service 指定如何結(jié)束該進(jìn)程
Restart Service 重啟服務(wù)機(jī)制
LimitNOFILE Service 文件描述符上限
WantedBy Install /

配置Consul(服務(wù)端)

Consul有默認(rèn)配置項(xiàng)译仗,在配置文件中僅需設(shè)置需要自定義的配置項(xiàng)抬虽,配置項(xiàng)可以從多個(gè)配置文件中讀取,并順序加載纵菌。

整體配置

創(chuàng)建一個(gè)配置文件/etc/consul.d/consul.hcl

sudo mkdir --parents /etc/consul.d
sudo touch /etc/consul.d/consul.hcl
sudo chown --recursive consul:consul /etc/consul.d
sudo chmod 640 /etc/consul.d/consul.hcl

在配置文件中添加:

datacenter = "dc1"
data_dir = "/opt/consul"
encrypt = "Luj2FZWwlt8475wD1WtwUQ=="
配置項(xiàng) 描述
datacenter 運(yùn)行代理的數(shù)據(jù)中心
data_dir 代理存儲(chǔ)狀態(tài)的數(shù)據(jù)目錄
encrypt 對(duì)Consul網(wǎng)絡(luò)流量進(jìn)行加密的密鑰

自動(dòng)加入集群

retry_join參數(shù)允許用戶配置Consul代理阐污,通過DNS地址IP地址Cloud Auto-join自動(dòng)形成集群咱圆,這樣就無(wú)需手動(dòng)配置Consul節(jié)點(diǎn)加入集群笛辟。

retry_join = ["172.16.0.11"]
配置項(xiàng) 描述
retry_join 啟動(dòng)時(shí)需要加入的另一個(gè)代理的地址

性能配置

性能配置允許調(diào)整Consul中不同子系統(tǒng)的性能。

performance {
  raft_multiplier = 1
}

度量指標(biāo)(Telemetry)配置

度量指標(biāo)為Consul指定了各種配置序苏,將度量標(biāo)準(zhǔn)發(fā)布到上游系統(tǒng)手幢。

服務(wù)端配置

server = true
bootstrap_expect = 3
配置項(xiàng) 描述
server 用于表示該Consul服務(wù)是服務(wù)端模式還是客戶端模式
bootstrap_expect 用于表示數(shù)據(jù)中心預(yù)期的服務(wù)器數(shù)量

控制臺(tái)UI配置

Consul具有基于Web的控制臺(tái)界面,用戶可以通過圖形界面輕松查看所有服務(wù)忱详、節(jié)點(diǎn)和其他信息

ui = true

配置Consul(客戶端)

Consul客戶端代理配置是Consul服務(wù)端代理的子集围来,按實(shí)際需要配置。

啟動(dòng)Consul

使用systemctl命令控制systemd托管服務(wù)匈睁。

sudo systemctl enable consul
sudo systemctl start consul
sudo systemctl status consul

數(shù)據(jù)中心備份

在生產(chǎn)環(huán)境中創(chuàng)建服務(wù)器備份是非常重要的监透,備份為服務(wù)器提供了一種從故障(網(wǎng)絡(luò)問題、人員失誤或磁盤損壞)中恢復(fù)的機(jī)制航唆。所有服務(wù)器在提交寫請(qǐng)求之前胀蛮,都會(huì)先寫入-data-dir,客戶端代理也可以使用相同的路徑來(lái)保存本地狀態(tài)糯钙,但一般不太必要粪狼,通常情況僅需備份服務(wù)端的Raft存儲(chǔ)狀態(tài)。
Consul可以使用命令行或者API執(zhí)行快照(Snapshot)命令任岸,快照命名可以保存執(zhí)行時(shí)間點(diǎn)上的服務(wù)器狀態(tài)鸳玩,其中包含:

  • KV條目(KV entries)
  • 服務(wù)目錄(the service catalog)
  • 查詢語(yǔ)句(prepared queries)
  • 會(huì)話(sessions)
  • 訪問控制列表(ACLs)

默認(rèn)情況下,所有快照均使用一致性模式(consistent mode)拍攝演闭,在該模式下不跟,請(qǐng)求將轉(zhuǎn)發(fā)給領(lǐng)導(dǎo)者(leader),領(lǐng)導(dǎo)者在拍攝快照之前會(huì)驗(yàn)證服務(wù)是否仍在運(yùn)行米碰,如果數(shù)據(jù)中心降級(jí)或者沒有領(lǐng)導(dǎo)者窝革,則快照不會(huì)保存购城,為了減輕領(lǐng)導(dǎo)者的負(fù)載,可以使用弱一致性模式(stale consistency mode)虐译。
這將負(fù)載分散到各個(gè)節(jié)點(diǎn)上瘪板,會(huì)損失一部分一致性,微量的最近的寫入信息會(huì)遺漏漆诽,省略的寫操作通常限于從恢復(fù)點(diǎn)開始到最近100ms或更短時(shí)間內(nèi)的寫入數(shù)據(jù)侮攀,這通常適用于災(zāi)難恢復(fù)了。

創(chuàng)建數(shù)據(jù)備份

保存快照命令有許多配置選項(xiàng)厢拭,在生產(chǎn)環(huán)境中兰英,為了提高安全性,用戶需要配置ACL令牌和客戶端證書供鸠,使用默認(rèn)配置(包含一致性模式)保存快照命令如下:

consul snapshot save backup.snap

備份內(nèi)容會(huì)保存在執(zhí)行命令的目錄中畦贸,可以使用inspect子命令查看備份文件的元數(shù)據(jù):

$ consul snapshot inspect backup.snap
ID           2-1182-1542056499724
Size         4115
Index        1182
Term         2
Version      1

接下來(lái),使用弱一致性模式保存快照:

consul snapshot save -stale backup.snap

一旦配置了ACL或者代理證書楞捂,需要將它們作為環(huán)境變量或標(biāo)志傳遞:

export CONSUL_HTTP_TOKEN=<your ACL token>
consul snapshot save -stale -ca-file=</path/to/file> backup.snap

在上面的示例中薄坏,我們將令牌設(shè)置為環(huán)境變量,將證書文件設(shè)置為命令行標(biāo)志寨闹。
對(duì)于生產(chǎn)環(huán)境胶坠,應(yīng)該將快照命令或API編寫為腳本定期運(yùn)行,除了日常備份之外繁堡,還有幾種情況需要手動(dòng)執(zhí)行保存快照沈善。一個(gè)是在升級(jí)前執(zhí)行備份;另一個(gè)是在數(shù)據(jù)中心失去仲裁帖蔓,在服務(wù)器狀態(tài)發(fā)散前執(zhí)行備份。在實(shí)際操作過程中瞳脓,不需要為每臺(tái)服務(wù)器都執(zhí)行備份塑娇,備份的文件可以保存在掛載的文件系統(tǒng)或者使用云存儲(chǔ)(例如Amazon S3)。

從備份中恢復(fù)

執(zhí)行下述操作劫侧,Raft協(xié)議可確保所有服務(wù)器恢復(fù)到相同狀態(tài):

consul snapshot restore backup.snap

save子命令一樣埋酬,restore子命令也有許多配置項(xiàng)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末烧栋,一起剝皮案震驚了整個(gè)濱河市写妥,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌审姓,老刑警劉巖珍特,帶你破解...
    沈念sama閱讀 218,284評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異魔吐,居然都是意外死亡扎筒,警方通過查閱死者的電腦和手機(jī)莱找,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)嗜桌,“玉大人奥溺,你說我怎么就攤上這事」浅瑁” “怎么了浮定?”我有些...
    開封第一講書人閱讀 164,614評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)层亿。 經(jīng)常有香客問我桦卒,道長(zhǎng),這世上最難降的妖魔是什么棕所? 我笑而不...
    開封第一講書人閱讀 58,671評(píng)論 1 293
  • 正文 為了忘掉前任闸盔,我火速辦了婚禮,結(jié)果婚禮上琳省,老公的妹妹穿的比我還像新娘迎吵。我一直安慰自己,他們只是感情好针贬,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,699評(píng)論 6 392
  • 文/花漫 我一把揭開白布击费。 她就那樣靜靜地躺著,像睡著了一般桦他。 火紅的嫁衣襯著肌膚如雪蔫巩。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,562評(píng)論 1 305
  • 那天快压,我揣著相機(jī)與錄音圆仔,去河邊找鬼。 笑死蔫劣,一個(gè)胖子當(dāng)著我的面吹牛坪郭,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播脉幢,決...
    沈念sama閱讀 40,309評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼歪沃,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了嫌松?” 一聲冷哼從身側(cè)響起沪曙,我...
    開封第一講書人閱讀 39,223評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎萎羔,沒想到半個(gè)月后液走,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,668評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,859評(píng)論 3 336
  • 正文 我和宋清朗相戀三年育灸,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了腻窒。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,981評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡磅崭,死狀恐怖儿子,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情砸喻,我是刑警寧澤柔逼,帶...
    沈念sama閱讀 35,705評(píng)論 5 347
  • 正文 年R本政府宣布,位于F島的核電站割岛,受9級(jí)特大地震影響愉适,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜癣漆,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,310評(píng)論 3 330
  • 文/蒙蒙 一维咸、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧惠爽,春花似錦癌蓖、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至较性,卻和暖如春用僧,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背赞咙。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工责循, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人攀操。 一個(gè)月前我還...
    沈念sama閱讀 48,146評(píng)論 3 370
  • 正文 我出身青樓院仿,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親崔赌。 傳聞我的和親對(duì)象是個(gè)殘疾皇子意蛀,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,933評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 1.啟動(dòng)一個(gè)帶ACL 控制的Agent 首先耸别,從這個(gè)網(wǎng)址下載consul健芭,解壓后發(fā)現(xiàn)就是個(gè)可執(zhí)行文件,如果不可以執(zhí)...
    YellowStar5_閱讀 8,108評(píng)論 0 1
  • consul概念解析秀姐,集群搭建及作為配置中心與spring cloud集成 Consul是什么? Consul 官...
    暴走的初號(hào)機(jī)閱讀 7,578評(píng)論 0 14
  • feisky云計(jì)算慈迈、虛擬化與Linux技術(shù)筆記posts - 1014, comments - 298, trac...
    不排版閱讀 3,851評(píng)論 0 5
  • 一、Consul簡(jiǎn)介 Consul 是一套開源的分布式服務(wù)發(fā)現(xiàn)和配置管理系統(tǒng),由 HashiCorp 公司用 Go...
    QIQIHAL閱讀 4,923評(píng)論 0 11
  • 挖掘機(jī)哥 沒記錯(cuò)的話,應(yīng)該是在2010年伸头,你在臨沂實(shí)習(xí)的那一年匾效,有一天你跟我說,有一個(gè)你護(hù)理的病人恤磷,說喜歡你面哼,想和...
    風(fēng)雪是你_閱讀 351評(píng)論 0 1