多主機虛拟化
虛拟化需求
某校園大資料實驗室有少量幾台高性能伺服器,供20多名學生使用,每個學生占用機器的時間不同,需要安裝的環境不同,經常發生環境沖突及無機器可用的情況。實驗室導師迫切需要将幾台伺服器統籌管理,從中劃分出部分資源供學生獨立使用互不幹擾,使用完之後及時釋放。
根據以上描述,需要使用到多主機虛拟化技術,得出以下虛拟化需求:
- 有若幹台實體主控端,在主控端上建立客戶機(虛拟機);
- 統一入口管理客戶機;
- 客戶機互相獨立互不幹擾,可動态的建立與銷毀;
- 客戶機作業系統為常見linux或windows,友善學生上手及安裝應用程式。
常見的虛拟化架構
由于我們個人一般使用windows作業系統,但很多系統運作時需要部署到linux,是以大多數人在windows上使用過VMware workstation、VirtualBox虛拟機。按實作結構分類目前流行的虛拟化架構包括
寄居虛拟化
寄居虛拟化如圖所示,最底層是實體硬體,實體硬體之上是主機的作業系統,作業系統之上是VMM(virtual machine monitor,虛拟機管理器),再往上就是虛拟機了。
在這種技術裡面,虛拟機對各種實體裝置(cpu、記憶體、硬碟等)的調用,都是通過VMM層和主控端的作業系統一起協調才完成的。VMvare workstation和Oracle VirtualBox都是基于這種方式實作的。
優點:簡單容易實作。可以充分利用現有作業系統的裝置驅動程式,VMM無須為各類I/O裝置重新實作驅動程式,可以專注于實體資源的虛拟化
缺點:系統損耗大,效率比較低。由于實體資源由主控端作業系統控制,VMM得要調用主控端作業系統的服務來擷取資源進行虛拟化,而那些系統服務在設計開發之初并沒有考慮虛拟化的支援,是以,VMM虛拟化的效率和功能會受到一定影響
裸機虛拟化
裸機虛拟化指的是,直接将VMM安裝在硬體裝置與實體硬體之間,如圖所示。VMM在這種模式下又叫做Hypervisor,虛拟機有指令要執行時,Hypervisor會接管該指令,模拟相應的操作。
其虛拟機管理器即可作為一個“作業系統”,同為虛拟機管理器。實作這類虛拟化的廠商國外比較出名的有VMware Vsphere,國産自主化的有雲宏CNware等。
優點:效率高。由于VMM同時具備實體資源的管理功能和虛拟化功能,是以,實體資源虛拟化的效率會更高一些
缺點:實作複雜。裝置驅動開發的工作量是很大的。是以,對于Hypervisor模型來說這是個很大的挑戰
混合虛拟化
混合模型是上述兩種模式的彙合體。VMM依然位于最低層,擁有所有的實體資源。與Hypervisor模式不同的是,VMM 會主動讓出大部分I/O裝置的控制權,将它們交由一個運作在特權虛拟機中的特權作業系統控制。相應地,VMM 虛拟化的職責也被分擔.處理器和記憶體的虛拟化依然由VMM來完成,而I/O的虛拟化則由VMM和特權作業系統共同合作來完成。
采用這種模型的典型是Xen。與Xen經常被同時提起的還有一種技術KVM(Kernel-based Virtual Machine 基于核心的虛拟機),其已經被寫入Linux核心。這兩種都是開源的虛拟化解決方案,而KVM社群活躍度更強。
KVM在“形式”上,屬于寄居虛拟化,KVM是一種虛拟機監控器,又為“虛拟機管理器”(VMM),負責管理虛拟機(又稱客戶機)的建立、啟動、關閉和銷毀(即管理生命周期),安裝在主機(即實體機)上,通過主機作業系統通路實體機的資源。
寄居虛拟化是将VMM安裝在已有的主機作業系統上,而另一種虛拟化結構——裸機虛拟化,是直接把VMM安裝在伺服器 的硬體裝置中,相當于一個作業系統。KVM是安裝在Linux(作業系統)的核心中,無法絕對劃歸于哪一類。
思考:
工業上常用的docker容器屬性哪一種虛拟化架構?
由于docker需要安裝在作業系統中,然後再運作各個docker容器(小型linux作業系統),筆者認為其屬于寄居虛拟化。
虛拟技術選型
- 根據前述虛拟化架構優缺點,結合實驗室的多主機虛拟化需求。先排除寄居虛拟化(VirtualBox、VMware workstation),其無法實作多主控端上的客戶機管理。
- 優先考慮VMware Vsphere方案,但該方案需要高價付費授權(免費試用期60天)且安裝部署複雜。
- 其次考慮開源的混合模型,因Xen部署更複雜(如果你需要更新Xen的版本,你需要重新編譯整個核心)且Xen活躍度在下降,最終選擇了寫入了Linux核心、更輕量的KVM。
為什麼不考慮Kubernetes (k8s)?
K8s可很友善的進行多主機叢集,客戶機(容器)管理,看起來很适合。
- 使用者使用虛拟機時,會安裝各種各樣的應用程式、上傳資料,以緻于虛拟機的狀态不斷更新。k8s的docker容器更适合無狀态的虛拟機。
- 容器不便操作,正常的容器指令行操作要通過主控端指令行,不符合目前的使用需求。
叢集管理
要實作一個可運作、可運維的KVM虛拟化解決方案,需要解決兩個問題,
第一個是虛拟化技術實作問題,
第二個是叢集虛拟機管理問題。
前面所介紹的内容隻是解決了虛拟化技術問題,還有叢集虛拟機管理問題沒有解決,是以我們需要有一套KVM管理工具實作對KVM虛拟化的管理和運維。到目前為止,KVM擁有從virsh指令行工具到OpenStack雲管理平台工具等一整套的開源KVM管理工具,這些工具的能力層次各有不同。
- 初級,“KVM+virsh”虛拟化解決方案主要是通過在/etc/libvirtd/qemu裡面的“.xml”配置檔案去描述每一台虛拟機的配置,然後用virsh指令行管理虛拟機,最後用VNC/SPICE按照配置好的端口連結過去,模拟終端操作。基于單機管理模式。
- 中級,“KVM+virt-manager”虛拟化解決方案主要是通過桌面圖形化工具virt-manager直接建立、編譯和管理虛拟機。使用桌面版本的 VNC/SPICE連接配接到KVM主機,輸入“virt-manager”指令之後,自動彈出虛拟系統管理器視窗來進行建立、編譯和管理虛拟機工作。這種方式仍然屬于基于單機管理模式。
- 進階,“KVM+Web管理工具”虛拟化解決方案主要是通過Proxmox VE、WebVirtMgr、Kimchi以及oVirt等各種輕量級的Web GUI工具進行中小規模級别的虛拟機叢集管理。Web GUI工具簡單易用易了解,尤其是傻瓜化的Proxmox VE,更是受小白們歡迎。“KVM+Web管理工具”這種方式可以實作中小規模化的虛拟機叢集管理。
- 超級段位,“KVM+雲管理平台工具”虛拟化解決方案主要通過OpenStack、ZStack等雲管理平台來管理一個或多個資料中心的所有計算資源池、存儲資源池、網絡資源池等硬體資源,可以實作大規模/超大規模的KVM主機管理。
第1、2套無法管理叢集,第4套OpenStack 又基本需要一個 DevOps 團隊才玩得轉。是以作為個人或者中小團隊,買了幾台硬體過來,想把它變成一套小型的阿裡雲,騰訊雲的系統,可以在 web 上建立/配置虛拟機,裝系統,管理硬體資源,進行遷移備份等,基本就是第3套解決方案。
Proxmox VE
Proxmox VE(Virtual Environment)的使用很簡單,很傻瓜化,深受小白們的歡迎。管理操作可以通過内嵌的Web GUI完成,不需要專門安裝管理工具或基于大型資料庫的管理伺服器節點。多主叢集架構能夠讓你通過任意節點管理整個叢集。基于JavaScript架構(ExtJS)開發的集中Web管理界面不僅能夠讓你通過GUI 界面控制一切功能,而且可以浏覽每個節點的曆史活動和syslog日志,例如虛拟機備份恢複日志、虛拟機線上遷移日志、HA活動日志等。
WebVirtMgr
WebVirtMgr是一個基于libvirt開發的KVM管理平台,提供對主控端和虛機的統一管理,它有别于KVM自帶的圖形管理工具(virtual machine manager),讓KVM的管理變得更為可視化,比較合适用于小型的KVM應用場景,比如對于虛拟機在10-200之間的叢集來說,采用WebvirtMgr是一種不錯的選擇。
Kimchi
Kimchi是一款基于HTML5的KVM管理工具,它被設計成盡可能容易使用KVM并建立虛拟機的Web工具,它通過libvirt管理KVM虛拟機。
oVirt
oVirt是Red Hat虛拟化管理平台RHEV的開源版本,利用oVirt管理KVM虛拟機和網絡,企業可以快速地搭建一個私有雲環境,oVirt基于Web方式進行管理,管理界面非常友好,oVirt比較适合較中小叢集規模,比如虛拟機上千的叢集,使用oVirt是一種不錯的選擇。
為快速上線,筆者選擇了Proxmox VE方案。
Proxmox VE 虛拟機叢集管理
為驗證方案可行性,現在一台伺服器上用幾台VMware虛拟伺服器進行測試。
proxmox伺服器安裝
下載下傳
下載下傳proxmox 最新的ISO鏡像檔案,
下載下傳位址https://www.proxmox.com/en/downloads/category/iso-images-pve選擇bt種子下載下傳Proxmox VE 7.3 ISO Installer (BitTorrent),點選download按鈕,種子下載下傳後使用迅雷建立任務,添加BT任務
安裝系統
- 建立VMware虛拟機
- 建立其他 Linux 5.x 核心 64 位空白虛拟機
- 編輯虛拟機設定,記憶體4g;處理器2核心
- 勾選虛拟化引擎(虛拟化Intel VT-x或AMD-V,重要,否則Proxmox無法建立虛拟機);
- CD/DVD使用ISO鏡像檔案(選擇下載下傳的Proxmox VE鏡像);
- 網絡擴充卡選擇自定義 特定虛拟網絡 VMnet1 (僅主機模式),該模式友善ip專用,避免ip沖突;
- 安裝Proxmox VE系統
- 前面步驟較為簡單,選擇install proxmoxve、點選下一步、設定密碼郵箱等。
- 網絡設定需要注意,此處隻用了一張網卡。三個伺服器配置為
主機名:pve1.認證域~pve3.認證域
IP:192.168.29.11~192.168.29.13
網關:192.168.29.1
DNS預設
Hostname設定為pve1.local-pve3.local。網關192.168.29.1 ip為VMnet1虛拟網卡的ip
- 确認之後點選install, proxmox ve系統開始安裝,安裝完成後自動重新開機
叢集建立及配置
建立并加入叢集
VMware中proxmox ve虛拟機啟動後,輸入使用者名root及安裝時設定的密碼進入指令行
- 不指定網卡
- 建立叢集
在任一proxmox ve伺服器(這裡以192.168.29.11為例)指令行輸入pvecm create clust1即可建立叢集clust1
pvecm create clust1
檢視叢集狀态
pvecm status
- 加入叢集
分别登入其他節點,執行指令:pvecm add 192.168.29.11 。如果叢集中已有多台伺服器,這裡ip可以改成叢集中任一伺服器ip
pvecm add 192.168.29.11
- 指定網卡
proxmox ve伺服器有多張網卡,可指定網卡對應的ip來建立叢集
- 建立叢集
若proxmox ve伺服器有兩張網卡,網卡1 ip 192.168.29.11、網卡2 ip 172.10.10.11,可指定網卡2建立叢集
pvecm create clust1 --link0 172.10.10.11
- 加入叢集
分别登入其他節點,執行指令:pvecm add 172.10.10.11 --link0 172.10.10.12,即加上各個節點網卡2的位址。
pvecm add 172.10.10.11 --link0 172.10.10.12
在浏覽器輸入https://192.168.29.11:8006,使用者名root,輸入安裝時設定的密碼即可登入叢集管理界面。最終效果如下圖
退出叢集
- 在需要退出叢集的node例如pve3上停止pve-cluster 服務
systemctl stop pve-cluster.service
systemctl stop corosync.service
- node pve3上叢集系統檔案設定未本地模式
pmxcfs -l
- 删除 pve3 corosync 和節點配置檔案
rm /etc/pve/corosync.conf
rm -rf /etc/corosync/*
rm -rf /etc/pve/nodes/*
- 重新啟動pve3的叢集檔案系統服務
killall pmxcfs
systemctl start pve-cluster.service
- 安全删除節點:
- 登陸其它正常節點pve1或pve2,檢視所有的節點:
pvecm nodes
- 删除目标節點
pvecm delnode pve3
建立虛拟機
接下來我們将在Proxmox VE伺服器上安裝虛拟機
虛拟機安裝
先實作最簡單的虛拟機安裝方式,直接通過Proxmox VE伺服器的本地存儲的ISO鏡像安裝虛拟機。
- 下載下傳Linux的安裝鏡像檔案,此處以Centos7為例,下載下傳位址 清華大學開源軟體鏡像站 | https://mirrors4.tuna.tsinghua.edu.cn/centos/7.9.2009/isos/x86_64/CentOS-7-x86_64-DVD-2009.iso
- 上傳iso鏡像到proxmox ve某個節點的local存儲
- 浏覽器輸入https://192.168.29.11:8006 賬号root,輸入安裝時設定的密碼登入
- 選擇節點下的local樹形節點——點選ISO鏡像菜單——點選上傳按鈕——點選選擇檔案,選擇剛下載下傳好的centos鏡像
- 上傳完iso鏡像後點選右上角“建立虛拟機”
正常——輸入虛拟機名稱,其他保持預設
作業系統——存儲預設local、類别Linux、ISO鏡像選擇剛上傳的Centos7 iso鏡像、版本選擇5.x - 2.6 Kernel
系統——保持預設
磁盤——保持預設
CPU——保持預設
記憶體——保持預設
網絡——保持預設
确認——勾選建立後啟動,點選完成按鈕
- 安裝虛拟機作業系統
- 點選centos7虛拟機——選擇控制台——進入控制台後按向上光标選擇“Install CentOS 7” 啟動安裝引導程式
- 啟動安裝引導後等待一段時間,選擇安裝語言中文-簡體中文
- 安裝資訊摘要設定
必須:選擇安裝位置
可選:軟體選擇,此次安裝為加快速度采用最小安裝
點選安裝位置進入安裝目标位置選擇界面,保持預設直接點選完成即可
回到安裝摘要資訊,點選開始安裝按鈕即可開始安裝
- 開始安裝後,點選ROOT密碼設定,為ROOT使用者設定密碼
設定密碼,點選完成按鈕,若密碼過于簡單則多點選幾次完成按鈕
- 等待虛拟機安裝完成
- 重新開機虛拟機,等待一段時間,虛拟機重新開機後在控制台輸入賬号root、密碼進入虛拟機指令行即可開始操作虛拟機
虛拟機網絡配置
虛拟機自動橋接了proxmox ve伺服器的網卡,預設自動擷取ip,改成靜态ip
- 編輯網卡配置,在虛拟指令行輸入
vi /etc/sysconfig/network-scripts/ifcfg-eth0
修改BOOTPROTO-擷取ip方式dhcp改成static,ONBOOT-自啟動no改成yes,增加靜态ip、網關(同proxmox ve伺服器的網關一樣——VMnet1的ip)、DNS的配置,最終配置如下
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=eth0
UUID=e486fd6c-e8c4-424d-9584-8d8bbec01c2f
DEVICE=eth0
ONBOOT=yes
IPADDR=192.168.29.111
NETMASK=255.255.255.0
GATEWAY=192.168.29.1
DNS1=8.8.8.8
:wq儲存
- 重新開機虛拟機網卡
systemctl restart network
叢集外機器即可通過虛拟機ip通路虛拟機。也可通過xshell等工具直接ssh連接配接虛拟機。
擴充安裝(可選)
多伺服器共享目錄NFS(可選)
NFS 網絡檔案系統,英文Network File System,多個Proxmox VE伺服器組建叢集後,ISO鏡像、備份檔案等需在各個伺服器間共享,前述虛拟機安裝的local iso隻能在目前伺服器上使用,叢集中其他伺服器不可使用,是以可以建立NFS服務,NFS可安裝到單獨的伺服器也可安裝在叢集中的某個節點上,此處以安裝到pve3節點舉例。
- 配置安裝源
- 修改/etc/apt/sources.list.d/pve-enterprise.list檔案,注釋其中的配置
#deb https://enterprise.proxmox.com/debian/pve bullseye pve-enterprise
- 修改/etc/apt/sources.list檔案,注釋原來的配置,增加中科大的安裝源
# 中科大源
deb http://mirrors.ustc.edu.cn/debian bullseye main contrib non-free
deb http://mirrors.ustc.edu.cn/debian bullseye-updates main contrib non-free
#deb http://ftp.debian.org/debian bullseye main contrib
#deb http://ftp.debian.org/debian bullseye-updates main contrib
# security updates
#deb http://security.debian.org bullseye-security main contrib
- 應用源的更新
apt-get update
- 安裝nfs服務
apt-get install nfs-common nfs-kernel-server -y
- 建立共享目錄
mkdir -p /data/share/pve
chmod 777 /data/share
chmod 777 /data/share/pve
- 修改/etc/exports檔案,增加共享的目錄内容
/data/share *(rw,sync,insecure,no_root_squash)
- 啟動nfs服務
systemctl restart nfs-server.service
- 檢查nfs是否成功
showmount -e
輸出以下結果
Export list for pve3:
/data/share *
- 叢集中添加NFS
- 選中資料中心——存儲——添加按鈕——NFS
- 添加NFS,輸入ID、伺服器192.168.29.13、選擇Export,點選添加按鈕完成NFS建立
- 建立後效果如下
- 可在NFS中上傳ISO鏡像,建立虛拟機時除了從local選擇ISO鏡像,也可從NFS選擇鏡像
選中share——ISO鏡像——上傳按鈕——選擇檔案——點選上傳
上傳完ISO到NFS後,建立虛拟機時可以從NFS選擇ISO鏡像
Ceph分布式檔案系統安裝(可選)
Ceph以其先進的去中心化設計,成為了分布式塊存儲領域的佼佼者,它可以将多台伺服器中的硬碟聚合成一個叢集,對外可提供檔案存儲、塊存儲、對象存儲等多種形式,Ceph的另一個特點是資料采用多副本方式存儲,避免由于單點故障造成的業務中斷和資料丢失。
一個 ceph 叢集的組成部分:若幹的 Ceph OSD(對象存儲守護程式) 至少需要一個 Ceph Monitors 螢幕(1,3,5,7…) 兩個或以上的 Ceph 管理器 managers,運作 Ceph 檔案系統用戶端是 還需要高可用的 Ceph Metadata Server(檔案系統中繼資料伺服器)。
- RADOS cluster:由多台 host 存儲伺服器組成的 ceph 叢集
- OSD(Object Storage Daemon):每台存儲伺服器的磁盤組成的存儲空間
- Mon(Monitor):ceph 的螢幕,維護 OSD 和 PG 的叢集狀态,一個 ceph 叢集至少要有一個 mon,可以是一三五七等等這樣的奇數個。
- Mgr(Manager):負責跟蹤運作時名額和 Ceph 叢集的目前狀态,包括存儲使用率,目前性 能名額和系統負載等。
這裡我們通過Proxmox VE的管理WEB界面叢集管理進行Ceph建立,要在每個節點上安裝ceph。
- 增加Ceph源
修改所有proxmox VE伺服器 /etc/apt/sources.list,增加ceph源
#ceph更新源
deb https://mirrors.ustc.edu.cn/proxmox/debian/pve buster pve-no-subscription
deb https://mirrors.ustc.edu.cn/proxmox/debian/ceph-quincy bullseye main
注意:ceph-quincy為ceph的版本,由proxmox ve中ceph安裝的版本确定,proxmox ve 7.3 版本對應的是ceph-quincy
最終,所有proxmox ve伺服器的源配置如下:
/etc/apt/sources.list
# 中科大源
deb http://mirrors.ustc.edu.cn/debian bullseye main contrib non-free
# deb-src http://mirrors.ustc.edu.cn/debian bullseye main contrib non-free
deb http://mirrors.ustc.edu.cn/debian bullseye-updates main contrib non-free
# deb-src http://mirrors.ustc.edu.cn/debian bullseye-updates main contrib non-free
#ceph更新源
deb https://mirrors.ustc.edu.cn/proxmox/debian/pve buster pve-no-subscription
deb https://mirrors.ustc.edu.cn/proxmox/debian/ceph-quincy bullseye main
#deb http://ftp.debian.org/debian bullseye main contrib
#deb http://ftp.debian.org/debian bullseye-updates main contrib
# security updates
#deb http://security.debian.org bullseye-security main contrib
/etc/apt/sources.list.d/pve-enterprise.list
#deb https://enterprise.proxmox.com/debian/pve bullseye pve-enterprise
- proxmox ve web界面選中節點——ceph——安裝ceph
點選開始quincy安裝按鈕
輸入y繼續
- 等待ceph-quincy安裝完成
- 點選下一步進入ceph網絡配置
一般proxmox ve伺服器要求多張網卡,叢集内部網絡通信量大,公網通路和叢集内部互聯通路采用不同網卡,此處隻有一張網卡,是以設成相同ip。
點選下一步——完成Ceph的建立
- Ceph螢幕
提示 'OSD count 0 < osd_pool_default_size 3',接下來建立OSD
- 配置Ceph的OSD
在pve1中,選擇“Ceph→OSD→建立:OSD”
提示沒有未使用的磁盤,因為我們的proxmox ve伺服器隻有一塊盤,需要給proxmox ve所有伺服器再加一塊磁盤,如果伺服器有多塊磁盤則可忽略。
停止proxmox ve伺服器——編輯設定——在硬體中選擇磁盤——點選添加
前面按照預設設定,指定磁盤容量時,設定為合适大小
重新開機各proxmox ve伺服器之後,再回到叢集管理界面,再次建立OSD,有可選擇磁盤
選擇磁盤,點選建立即可完成 OSD建立,結果如下:
建立其他節點的OSD與pve1類似,這裡不做詳述。最終效果如下:
- 配置CephFS(可選)
選擇“資料中心-pve1→Ceph→CephFS→中繼資料伺服器→建立,建立中繼資料伺服器
将pve1添加到中繼資料伺服器。
點選建立CephFS
彈框中保持預設,點選建立
等待cephfs建立完成
然後,再用同樣的方法将pve2、pve3添加到中繼資料伺服器之中去。
可以在Ceph監控界面看到中繼資料伺服器的監控資訊,如圖中繼資料伺服器監控界面
- 配置Pools資源池
- 建立ssd_storage存儲
選擇“資料中心→ pve1→Ceph→Pools→建立”,點選“建立”按鈕,建立名稱為“ssd_storage”的存儲
根據官方的文檔,pg_num這個數值比較關鍵,如果不合适的話,Ceph會告警,官方建議:
若少于5個OSD, 設定pg_num為128。
5~10個OSD,設定pg_num為512。
10~50個OSD,設定pg_num為4096。
我們這裡3個OSD,采用預設值128
建立之後如圖所示。
pve2、pve3的Pools資源池配置會同步pve1資源池配置是以無需在單獨配置(7.0特性)。
之後我們可以在cephfs中上傳鏡像,一個節點上傳,其他節點都可見
cephfs中的鏡像可用于虛拟機安裝ISO鏡像
ceph - pools中的ssd_storage可作為虛拟機安裝的目标磁盤
參考文獻
- 虛拟化技術基礎 (http://t.zoukankan.com/VicLiu-p-12111792.html)
- 虛拟化的三種類型是什麼?每一種類型都用于什麼?(https://www.zhihu.com/question/499997261/answer/2639022818)
- 案例為王 | 解剖虛拟化技術(KVM&Xen)(https://zhuanlan.zhihu.com/p/371651990)
- KVM虛拟化解決方案系列之KVM架構篇(https://blog.csdn.net/aniu411/article/details/123582919)
- KVM 虛拟化環境搭建 - ProxmoxVE(https://blog.csdn.net/chuixue24/article/details/109647156)
- KVM虛拟化解決方案系列之KVM管理工具-緒論篇(https://www.ngui.cc/51cto/show-723493.html?action=onClick)
- 群集加入失敗 此主機已包含虛拟客戶機(https://blog.csdn.net/tabwo/article/details/122032662)
- proxmox退出叢集(https://www.cnblogs.com/d9394/p/15949252.html )