国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

hadoop HA高可用集群實戰(zhàn)

這篇具有很好參考價值的文章主要介紹了hadoop HA高可用集群實戰(zhàn)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

1 概述

  1. HA(high available),即高可用(24h不中斷服務)
  2. 實現高可用最關鍵的策略是消除單點故障。HA嚴格來說是應該分成各個組件的HA機制
  3. hadoop2.0之前,在HDFS集群中NamNode存在單點故障(SPOF)
  4. NameNode主要存在以下兩個方敏影響HDFS集群。
    • NameNode機器發(fā)生意外,如宕機,集群無法使用,直到管理員重啟。
    • NameNode機器需要升級,包括軟件,硬件升級,此時集群也將無法使用。

HDFS HA功能通過配置Active/Standby兩個nameNode實現在集群中對NameNode的熱備份來解決上述問題。如果機器出現故障,這是可通過此種方式將NameNode很快切換到另一臺機器。

2 HDFS-HA工作機制

通過雙NameNode消除單點故障

2.1 HDFS-HA工作要點

1、元數據管理方式需要改變

  • 內存中各自保存一份元數據;
  • Edits日志只有Active狀態(tài)的NameNode節(jié)點可以做寫操作。
  • 兩個NameNode都可以讀取Edits
  • 共享的Edit放在一個共享存儲中管理(qjournal和NFS兩個主流實現)

2、需要一個狀態(tài)管理功能模塊

  • 實現了一個zkfailover,常駐在每一個namenode所在的節(jié)點,每一個zkfailover負責監(jiān)控自己所在NameNode節(jié)點,利用zk進行狀態(tài)表示,當需要進行裝填切換時,由zkfaiover來負責切換,切換時需要防止brain split想想發(fā)生。

3、必須保證兩個 NameNode 之間能歐ssh無密碼登錄
4、隔離(Fence),即同一時刻僅僅有一個 NameNode對外提供服務。

2.2 HDFS 自動故障轉移工作

通過命令 hdfs haadmin -failover 進行手動故障轉移的模式下,即使現役 NameNode已經失效,系統(tǒng)也不會自動從現役 NameNode轉移到待機NameNode,因而下面介紹自動故障轉移。

自動故障顓臾為HDFS部署增加了兩個新組件:

  • ZooKeeper進程
  • ZKFailoverController(ZKFC)進程

其中ZK負責維護少量協(xié)調數據,通知客戶端這些數據的改變和客戶端故障的高可用服務。HA的自動故障轉移依賴于ZK以下功能:

1、故障檢測
集群中每個 NameNode 在Zookeeper 中維護了一個持久回話,如果機器崩潰,ZK中的會話將終止,ZK通知另一個NameNode需要除法故障轉移。

2、現役 NameNode選擇
ZooKeeper提供了一個簡單的機制用于唯一的選擇一個節(jié)點為 active 狀態(tài)。如果目前現役 NameNode崩潰,另一個節(jié)點可能從 ZK獲得特殊的排外鎖,以表名它應該稱為現役 NameNode。

ZKFC是自動故障轉移中的另一個新組建,是ZK的客戶端,也監(jiān)視和管理 NameNode的裝填

3、健康檢測
ZKFC使用一個健康檢查命令定期地ping與之在相同主機的NameNode,只要該NameNode及時回復健康狀態(tài),ZKFC認為該節(jié)點是健康的。如果該節(jié)點崩潰、凍結或進入不健康狀態(tài),健康檢測器標識該節(jié)點為非健康的。

4、ZooKeeper會話管理
當本地NameNode是將康的,ZKFC保持一個在ZooKeeper中打開的會話。如果本地NameNode處于active狀態(tài),ZKFC也保持一個特殊的znode鎖,該鎖使用了ZooKeeper對對該節(jié)點的支持,如果會話終止,鎖節(jié)點將自動刪除。

5、基于 ZooKeeper的選擇
如果本地 NameNode是健康的,且ZKFC發(fā)現沒有其他節(jié)點持有znode鎖,它將為自己獲取該鎖。如果成功,則它已經贏得了選擇,并負責運行故障轉移進程以使它的本地 NameNode為Active。故障轉移進程與前面描述的手動付賬轉移相似,首先如果必要保護之前的嫌疑NameNode,然后本地NameNode轉換為Active狀態(tài)。

hadoop HA高可用集群實戰(zhàn)

3 HDFS-HA集群配置

3.1 環(huán)境準備

  • 映射主機ip、 安裝jdk、ssh免密、防火墻(按具體情況配置,安全第一)

  • 搭建 ZooKeeper集群

3.2 搭建ZooKeeper集群

詳細請閱讀ZK秘籍8.2節(jié):古傳送陣

啟動

$ZK_HOME/bin/zkServer.sh start $ZK_HOME/conf/zoo.cfg

3.3 配置 HDFS-HA集群

3.3.1 配置環(huán)境
# hadoop-HA
export $HADOOP_HA_HOME=/usr/local/hadoop-HA/hadoop-2.8.4
export PATH=$PATH:$HADOOP_HA_HOME/bin:$HADOOP_HA_HOME/sbin

# hadoop
#export HADOOP_HOME=/usr/local/hadoop-2.8.4
#export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
vim $HADOOP_HA_HOME/etc/hadoop/hadoop-env.sh
export JAVA_HOME=/usr/local/jdk1.8.0_151

export HADOOP_CONF_DIR=/usr/local/hadoop-HA/hadoop-2.8.4/etc/hadoop
scp -r $HADOOP_HA_HOME/etc/hadoop/hadoop-env.sh root@slave1:$HADOOP_HA_HOME/etc/hadoop/

scp -r $HADOOP_HA_HOME/etc/hadoop/hadoop-env.sh root@slave2:$HADOOP_HA_HOME/etc/hadoop/
3.3.2 配置core-site.xml
mkdir /usr/local/hadoop-HA/data
vim $HADOOP_HA_HOME/etc/hadoop/core-site.xml
<configuration> 

	<!-- 把兩個 NameNode 的地址組裝成一個集群 mycluster --> 
	<property> 
		<name>fs.defaultFS</name> 
		<value>hdfs://mycluster</value> 
	</property> 
	
	<!-- 指定 hadoop運行時產生文件的存儲目錄 --> 
	<property> 
		<name>hadoop.tmp.dir</name> 
		<value>/usr/local/hadoop-HA/data</value> 
	</property> 
	
</configuration>
3.3.3 配置 hdfs-site.xml

NameNode:master、slave1
DataNode:master、slave1、slave2

mkdir /usr/local/hadoop-HA/data/jn
vim $HADOOP_HA_HOME/etc/hadoop/hdfs-site.xml
<configuration> 
	<!-- 完全分布式集群名稱 --> 
	<property> 
		<name>dfs.nameservices</name> 
		<value>mycluster</value> 
	</property> 
	
	<!-- 集群中 NameNode節(jié)點都有哪些 --> 
	<property> 
		<name>dfs.ha.namenodes.mycluster</name> 
		<value>nn1,nn2</value> 
	</property> 
	
	<!-- nn1的 RPC通信地址 --> 
	<property> 
		<name>dfs.namenode.rpc-address.mycluster.nn1</name> 
		<value>master:9000</value> 
	</property> 
	
	<!-- nn2的 RPC通信地址 --> 
	<property> 
		<name>dfs.namenode.rpc-address.mycluster.nn2</name> 
		<value>slave1:9000</value> 
	</property> 
	
	<!-- nn1的 http 通信地址 --> 
	<property> 
		<name>dfs.namenode.http-address.mycluster.nn1</name> 
		<value>master:50070</value> 
	</property> 
	
	<!-- nn2的 http 通信地址 --> 
	<property> 
		<name>dfs.namenode.http-address.mycluster.nn2</name> 
		<value>slave1:50070</value> 
	</property> 
	
	<!-- 指定 NameNode元數據在 JournalNode上的存放位置 --> 
	<property> 
		<name>dfs.namenode.shared.edits.dir</name> 
		<value>qjournal://master:8485;slave1:8485;slave2:8485/mycluster</value> 
	</property> 
	
	<!-- 配置隔離機制,即同一時刻只能有一臺服務器對外響應 --> 
	<property> 
		<name>dfs.ha.fencing.methods</name> 
		<value>sshfence</value> 
	</property> 
	
	<!-- 使用隔離機制時需要 ssh無秘鑰登錄--> 
	<property> 
		<name>dfs.ha.fencing.ssh.private-key-files</name> 
		<value>~/.ssh/id_rsa</value> 
	</property> 
	
	<!-- 聲明 journalnode 服務器存儲目錄--> 
	<property> 
		<name>dfs.journalnode.edits.dir</name> 
		<value>/usr/local/hadoop-HA/data/jn</value> 
	</property> 
	
	<!-- 關閉權限檢查--> 
	<property> 
		<name>dfs.permissions.enable</name> 
		<value>false</value> 
	</property> 
	
	<!-- 訪問代理類:client,mycluster,active配置失敗自動切換實現方式--> 
	<property> 
		<name>dfs.client.failover.proxy.provider.mycluster</name> 
		<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value> 
	</property> 
</configuration> 

配置發(fā)送到其他機器

scp -r /usr/local/hadoop-HA/ root@slave1:/usr/local/
scp -r /usr/local/hadoop-HA/ root@slave2:/usr/local/
3.3.4 啟動 HDFS-HA集群

在各個JournalNode節(jié)點商,輸入以下命令啟動journalnode服務

1、在各個 JournalNode 節(jié)點上,輸入以下命令啟動 journalnode 服務

$HADOOP_HA_HOME/sbin/hadoop-daemon.sh start journalnode

2、在[nn1]上,對其進行格式化,并啟動

# 格式化
$HADOOP_HA_HOME/bin/hdfs namenode -format
$HADOOP_HA_HOME/sbin/hadoop-daemon.sh start namenode

3、在[nn2]上,同步nn1的元數據信息

$HADOOP_HA_HOME/bin/hdfs namenode -bootstrapStandby

4、啟動[nn2]

$HADOOP_HA_HOME/sbin/hadoop-daemon.sh start namenode

5、查看web頁面(此時2個NameNode均為standby狀態(tài))

http://192.168.56.20:50070
http://192.168.56.21:50070

6、在 [nn1] 上,啟動所有 datanode

# 配置節(jié)點域名
vim $HADOOP_HA_HOME/etc/hadoop/slaves
master
slave1
slave2
$HADOOP_HA_HOME/sbin/hadoop-daemons.sh start datanode

7、將 [nn1] 切換為 Active

$HADOOP_HA_HOME/bin/hdfs haadmin -transitionToActive nn1

8、查看是否Active

$HADOOP_HA_HOME/bin/hdfs haadmin -getServiceState nn1
3.3.5 配置 HDFS-HA自動故障轉移
1 具體配置

在hdfs-site.xml 增加

vim $HADOOP_HA_HOME/etc/hadoop/hdfs-site.xml
<!-- 配置 HDFS-HA自動故障轉移 -->
<property> 
	<name>dfs.ha.automatic-failover.enabled</name> 
	<value>true</value> 
</property> 

在core-site.xml 增加

vim $HADOOP_HA_HOME/etc/hadoop/core-site.xml
<!-- 配置 HDFS-HA自動故障轉移 -->
<property> 
	<name>ha.zookeeper.quorum</name> 
	<value>master:2181,slave1:2181,slave2:2181</value> 
</property>
2 同步配置
scp -r $HADOOP_HA_HOME/etc/hadoop/hdfs-site.xml root@slave1:$HADOOP_HA_HOME/etc/hadoop/
scp -r $HADOOP_HA_HOME/etc/hadoop/core-site.xml root@slave1:$HADOOP_HA_HOME/etc/hadoop/
3 啟動

1、關閉所有 HDFS服務

$HADOOP_HA_HOME/sbin/stop-dfs.sh

hadoop HA高可用集群實戰(zhàn)
2、啟動 ZooKeeper集群

$ZK_HOME/bin/zkServer.sh start $ZK_HOME/conf/zoo.cfg

3、初始化 HA 在 ZooKeeper 中狀態(tài)(NameNode節(jié)點)

$HADOOP_HA_HOME/bin/hdfs zkfc -formatZK

4、啟動 HDFS 服務

$HADOOP_HA_HOME/sbin/start-dfs.sh

5、在各個 NameNode節(jié)點上啟動 DFSZK Failover Controller,先在哪臺機器啟動,哪個機器的 NameNode就是Active NameNode

$HADOOP_HA_HOME/sbin/hadoop-daemon.sh start zkfc
4 驗證

1、將 Active NameNode 進程 kill

kill -9 (namenode進程id)

2、恢復NameNode

$HADOOP_HA_HOME/sbin/hadoop-daemon.sh start namenode
5 其他處理

1、Standby所在的namenode不會自動切換為active狀態(tài)。

檢查服務器時間是否同步,同步需要在root用戶下。

hdfs namenode -initializeSharedEdits

3.4 YARN-HA配置

工作機制
hadoop HA高可用集群實戰(zhàn)

hadoop HA高可用集群實戰(zhàn)

3.4.1 yarn-site.xml
vim $HADOOP_HA_HOME/etc/hadoop/yarn-site.xml
<configuration> 
	
	<property> 
		<name>yarn.nodemanager.aux-services</name> 
		<value>mapreduce_shuffle</value> 
	</property> 
	
	<!--啟用 resourcemanager ha--> 
	<property> 
		<name>yarn.resourcemanager.ha.enabled</name> 
		<value>true</value> 
	</property> 
	
	<!--聲明兩臺 resourcemanager 的地址--> 
	<property> 
		<name>yarn.resourcemanager.cluster-id</name> 
		<value>cluster-yarn1</value> 
	</property> 
	
	<property> 
		<name>yarn.resourcemanager.ha.rm-ids</name> 
		<value>rm1,rm2</value> 
	</property> 
	
	<property> 
		<name>yarn.resourcemanager.hostname.rm1</name> 
		<value>master</value> 
	</property> 
	
	<property> 
		<name>yarn.resourcemanager.hostname.rm2</name> 
		<value>slave1</value> 
	</property> 
	
	<!--指定 zookeeper 集群的地址--> 
	<property> 
		<name>yarn.resourcemanager.zk-address</name> 
		<value>master:2181,slave1:2181,slave2:2181</value> 
	</property> 
	
	<!--啟用自動恢復-->  
	<property> 
		<name>yarn.resourcemanager.recovery.enabled</name> 
		<value>true</value> 
	</property> 
	
	<!--指定 resourcemanager 的狀態(tài)信息存儲在 zookeeper集群--> 
	<property> 
		<name>yarn.resourcemanager.store.class</name>     
		<value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value> 
	</property> 

</configuration> 

同步更新其他節(jié)點的配置信息

scp -r $HADOOP_HA_HOME/etc/hadoop/yarn-site.xml root@slave1:$HADOOP_HA_HOME/etc/hadoop/

scp -r $HADOOP_HA_HOME/etc/hadoop/yarn-site.xml root@slave2:$HADOOP_HA_HOME/etc/hadoop/

3.4.2 啟動hdfs

1、關閉所有 HDFS服務

$HADOOP_HA_HOME/sbin/stop-dfs.sh

1、在各個 JournalNode節(jié)點上,輸入以下命令啟動 journalnode服務:

$HADOOP_HA_HOME/sbin/hadoop-daemon.sh start journalnode

2、在 [nn1] 上,對其進行格式化,并啟動

$HADOOP_HA_HOME/bin/hdfs namenode -format
$HADOOP_HA_HOME/sbin/hadoop-daemon.sh start namenode

3、在 [nn2] 上,同步 nn1 的元數據信息

$HADOOP_HA_HOME/bin/hdfs namenode -bootstrapStandby

4、啟動 [nn2]

$HADOOP_HA_HOME/sbin/hadoop-daemon.sh start namenode

5、啟動所有 DataNode

$HADOOP_HA_HOME/sbin/hadoop-daemons.sh start datanode

6、將 [nn1]切換為 Active

$HADOOP_HA_HOME/bin/hdfs haadmin -transitionToActive nn1
3.4.3 啟動 YARN

進程:ResourceManager、NodeManager、NodeManager

$HADOOP_HA_HOME/sbin/start-yarn.sh 

slave2執(zhí)行(非NameNode節(jié)點)

$HADOOP_HA_HOME/sbin/yarn-daemon.sh start resourcemanager

3、查看服務狀態(tài)

$HADOOP_HA_HOME/bin/yarn rmadmin -getServiceState rm1 

3.5 查看集群

http://192.168.56.20:8088/cluster

hadoop HA高可用集群實戰(zhàn)

報錯處理

重新格式化

1、查看hdfs-site.xml:

<!-- 指定 hadoop運行時產生文件的存儲目錄 --> 
<property> 
	<name>hadoop.tmp.dir</name> 
	<value>/usr/local/hadoop-HA/data</value> 
</property> 

將 dfs.name.dir所指定的目錄刪除、dfs.data.dir所指定的目錄刪除

rm -rf /usr/local/hadoop-HA/data/dfs/name/*
rm -rf /usr/local/hadoop-HA/data/dfs/data/*

2、查看core-site.xml:

<property> 
    <name>hadoop.tmp.dir</name> 
    <value>/usr/local/hadoop-HA/data</value> 
    <description>namenode上本地的hadoop臨時文件夾</description> 
</property> 

將Hadoop.tmp.dir所指定的目錄刪除。

rm -rf /usr/local/hadoop-HA/data/jn/*

致謝:
感謝尚硅谷教程文章來源地址http://www.zghlxwxcb.cn/news/detail-428790.html

到了這里,關于hadoop HA高可用集群實戰(zhàn)的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯(lián)網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 【大數據之Hadoop】三十七、Hadoop HA高可用

    【大數據之Hadoop】三十七、Hadoop HA高可用

    ??實現高可用最關鍵的策略是消除單點故障。HA分成各個組件的HA機制:HDFS的HA和YARN的HA。 ??Hadoop2.0之前,在HDFS集群中NameNode存在單點故障(SPOF)。 NameNode主要在以下兩個方面影響HDFS集群: (1)NameNode機器發(fā)生意外,如宕機,集群將無法使用,直到管理員重啟。 (2)

    2024年02月12日
    瀏覽(28)
  • HA高可用集群部署

    HA高可用集群部署

    注意:需要安裝jdk,但jdk已經在第4章裝過,這里直接裝zookeeper 注意:ssh免密登錄在第4章已經配過,這里直接配HA 配置密鑰加幾條: 將masterr創(chuàng)建的公鑰發(fā)給slave1 將slave1的私鑰加到公鑰里 將公鑰發(fā)給slave2,master master:50070 slave1:50070 master:8088 master:50070 slave1:50070

    2024年02月06日
    瀏覽(19)
  • (十二)大數據實戰(zhàn)——hadoop集群之HDFS高可用自動故障轉移

    (十二)大數據實戰(zhàn)——hadoop集群之HDFS高可用自動故障轉移

    本節(jié)內容主要介紹一下hadoop集群下實現HDFS高可用的自動故障轉移,HDFS高可用的自動故障轉移主要通過zookeeper實現故障的監(jiān)控和主節(jié)點的切換。自動故障轉移為 HDFS 部署增加了兩個新組件:ZooKeeper 和 ZKFailoverController (ZKFC)進程。ZooKeeper 是維護少量協(xié)調數據,通知客戶端這些

    2024年02月13日
    瀏覽(29)
  • (十三)大數據實戰(zhàn)——hadoop集群之YARN高可用實現自動故障轉移

    (十三)大數據實戰(zhàn)——hadoop集群之YARN高可用實現自動故障轉移

    本節(jié)內容是關于hadoop集群下yarn服務的高可用搭建,以及其發(fā)生故障轉移的處理,同樣需要依賴zookeeper集群的實現,實現該集群搭建時,我們要預先保證zookeeper集群是啟動狀態(tài)。yarn的高可用同樣依賴zookeeper的臨時節(jié)點及監(jiān)控,實現服務的故障轉移。其ResourceManager的節(jié)點任務同

    2024年02月14日
    瀏覽(19)
  • 【Hadoop】HA高可用搭建保姆級教程(大二學長的萬字筆記)

    【Hadoop】HA高可用搭建保姆級教程(大二學長的萬字筆記)

    大家好!我是初心,今天給大家?guī)淼氖荋adoop HA搭建保姆級教程,來自大二學長的萬字長文自述和筆記! 相信很多人看到這個標題時,可能會產生一種疑問:博主你之前不是出過一期關于Hadoop HA高可用集群搭建的教程了嗎,這次怎么還出一篇?是有什么改進的地方嗎? 沒錯

    2024年02月15日
    瀏覽(20)
  • (十四)大數據實戰(zhàn)——hadoop集群一鍵式高可用實現自動故障轉移與故障初始化恢復

    本節(jié)內容延續(xù)前面幾節(jié)內容,綜合性的實現hadoop集群的高可用以及hadoop集群故障初始化的恢復,通過一個腳本,實現整個集群的高可用啟停與狀態(tài)觀測。主要是zookeeper、hdfs、yarn等服務的高可用集群的一鍵式啟停。 hadoop高可用集群整體規(guī)劃 hadoop高可用集群服務規(guī)劃 hadoop101

    2024年02月13日
    瀏覽(22)
  • 大數據 | Hadoop HA高可用搭建保姆級教程(大二學長的萬字筆記)

    大數據 | Hadoop HA高可用搭建保姆級教程(大二學長的萬字筆記)

    大家好!我是初心,今天給大家?guī)淼氖荋adoop HA搭建保姆級教程,來自大二學長的萬字長文自述和筆記! 相信很多人看到這個標題時,可能會產生一種疑問:博主你之前不是出過一期關于Hadoop HA高可用集群搭建的教程了嗎,這次怎么還出一篇?是有什么改進的地方嗎? 沒錯

    2024年02月06日
    瀏覽(24)
  • 大數據平臺運維(hadoop入門(保姆篇))----概述及基本環(huán)境配置(HA-1)

    大數據平臺運維(hadoop入門(保姆篇))----概述及基本環(huán)境配置(HA-1)

    2022.12.4? 大數據運維基礎篇 本章主要是基礎壞境配置 目錄 前言 ?一、hadoop是什么? 1.1 Hadoop 是什么 1.2 Hadoop 優(yōu)勢 1.3 Hadoop 組成 ?二、大數據技術體系 ? ? ? ? ? ? ? ? ??2.1 HDFS 架構概述Hadoop Distributed File System,簡稱HDFS,是一個分布式文件系統(tǒng)。 2.2 YARN 架構概述 2.3 MapRed

    2024年02月08日
    瀏覽(27)
  • Hadoop YARN HA 集群安裝部署詳細圖文教程

    Hadoop YARN HA 集群安裝部署詳細圖文教程

    目錄 一、YARN 集群角色、部署規(guī)劃 1.1?集群角色--概述 1.2?集群角色--ResourceManager(RM)? 1.3?集群角色--NodeManager(NM)? 1.4 HA?集群部署規(guī)劃 二、YARN RM?重啟機制 2.1 概述? 2.2 演示? 2.2.1?不開啟?RM?重啟機制現象? 2.3 兩種實現方案與區(qū)別? 2.3.1?Non-work-preserving RM restart 2.3.2?

    2024年02月04日
    瀏覽(53)
  • PostgreSQL-HA 高可用集群在 Rainbond 上的部署方案

    PostgreSQL 是一種流行的開源關系型數據庫管理系統(tǒng)。它提供了標準的SQL語言接口用于操作數據庫。 repmgr 是一個用于 PostgreSQL 數據庫復制管理的開源工具。它提供了自動化的復制管理,包括: 故障檢測和自動故障切換:repmgr 可以檢測到主服務器故障并自動切換到備用服務器。

    2024年02月03日
    瀏覽(24)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包