SuperMap 大數(shù)據(jù)基礎(chǔ)環(huán)境搭建

作者:Gerhard_楊光輝
Linux版本:CentOS 7.2

一、準(zhǔn)備

1.1軟件版本

  1. hadoop-2.6.5.tar.gz
  2. zookeeper.3.4.10.tar.gz
  3. hbase1.3.1.bin.tar.gz
  4. geomesa-hbase_2.11-2.0.1-bin.tar.gz
  5. jdk-8u181-linux-x64.tar.gz
  6. spark-2.1.0-bin-hadoop2.7.tgz
  7. supermap-iserver-10.0.1-linux64.tar.gz
    百度網(wǎng)盤(pán)軟件包
    提取碼:zxgr

1.2網(wǎng)絡(luò)規(guī)劃

規(guī)劃搭建3臺(tái)機(jī)器組成集群模式年局,IP與計(jì)算機(jī)名分別為

192.168.30.128 master
192.168.30.129 slave1
192.168.30.130 slave2

1.3 軟件包拷貝

可將上述1.1軟件包拷貝到 主節(jié)點(diǎn)的 opt 目錄下

1.4 SSH 設(shè)置

修改/etc/ssh/sshd_config 文件,將以下三項(xiàng)開(kāi)啟 yes 狀態(tài)

PermitRootLogin yes
PermitEmptyPasswords yes
PasswordAuthentication yes

重啟 ssh 服務(wù)

systemctl restart sshd.service

這樣 root 用戶可直接登陸舰蟆,以及為后續(xù) ssh 無(wú)密碼登錄做準(zhǔn)備讶凉。

scp -r /etc/ssh/sshd_config root@192.168.30.129:/etc/ssh/sshd_config
scp -r /etc/ssh/sshd_config root@192.168.30.130:/etc/ssh/sshd_config

將配置文件覆蓋到另外兩臺(tái)機(jī)器

1.5 綁定 IP 和修改計(jì)算機(jī)名

修改/etc/hosts,添加 IP 綁定注釋 127.0.1.1 綁定(不注釋會(huì)影響 hadoop集群)

192.168.30.128 master
192.168.30.129 slave1
192.168.30.130 slave2

修改/etc/hostname,為綁定計(jì)算機(jī)名辙谜。(計(jì)算機(jī)名和上面 hosts 綁定名必須一致)

1.6 SSH 無(wú)密碼登陸

  • 用 rsa 生成密鑰 (需提前安裝 ssh)
ssh keygen  t rsa  #一路回車(chē)。
chmod 600 ~/.ssh/authorized_keys
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys #無(wú)密碼登錄本地
  • 本機(jī)裝有 ssh-copy-id 命令肝匆,可以通過(guò)
ssh-copy-id root@192.168.30.129
ssh-copy-id root@192.168.30.130

然后輸入密碼粒蜈,在此之后可以直接 ssh[空格]機(jī)器名 進(jìn)行訪問(wèn),首次設(shè)置需要輸入密碼旗国,第二次之后不再需要輸入密碼枯怖。

1.7 JDK 安裝

  • 將jdk-安裝包解壓,將 JDK 環(huán)境變量配置到/etc/profile 中
export JAVA_HOME=/opt/jdk
export JRE_HOME=/opt/jdk/jre
export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib
export PATH=$JAVA_HOME/bin:$PATH
  • 檢查 JDK 是否配置好
source /etc/profile
java -version
  • 同步j(luò)dk與配置文件
scp -r /opt/jdk root@另一臺(tái)機(jī)器名:/opt/jdk
scp -r /etc/profile root@另一臺(tái)機(jī)器名:/etc/profile

二能曾、Hadoop 部署

2.1 Hadoop 安裝

解壓 tar -zxvf hadoop-2.6.5.tar.gz 度硝,并在主目錄下創(chuàng)建 tmp、dfs寿冕、dfs/name蕊程、
dfs/node、dfs/data

root@master:/opt/hadoop-2.6.5# mkdir tmp
root@master:/opt/hadoop-2.6.5# mkdir dfs
root@master:/opt/hadoop-2.6.5# mkdir dfs/name
root@master:/opt/hadoop-2.6.5# mkdir dfs/node
root@master:/opt/hadoop-2.6.5# mkdir dfs/data

2.2 Hadoop 配置

以下操作都在 hadoop-2.6.5/etc/hadoop 下進(jìn)行

2.2.1 編輯 hadoop-env.sh 文件

修改 JAVA_HOME 配置項(xiàng)為 JDK 安裝目錄

export JAVA_HOME=/opt/jdk
2.2.2 編輯 core-site.xml 文件

添加以下內(nèi)容驼唱,其中 master 為計(jì)算機(jī)名藻茂,/opt/hadoop-2.6.5/tmp 為手動(dòng)創(chuàng)建的目錄

<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
</property>
<property>
<name>io.file.buffer.size</name>
<value>131072</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/opt/hadoop-2.6.5/tmp</value>
<description>Abasefor other temporary directories.</description>
</property>
<property>
<name>hadoop.proxyuser.spark.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.spark.groups</name>
<value>*</value>
</property>
</configuration>
2.2.3 編輯hdfs-site.xml文件

添加以下內(nèi)容其中master為計(jì)算機(jī)名,file:/opt/hadoop-2.6.5/dfs/name和file:/opt/hadoop-2.6.5/dfs/data為手動(dòng)創(chuàng)建目錄

<configuration>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>master:9001</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/opt/hadoop-2.6.5/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/opt/hadoop-2.6.5/dfs/data</value>
</property>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
<property>
<name>dfs.namenode.http.address</name>
<value>master:50070</value>
</property>
</configuration>
2.2.4 編輯mapred-site.xml文件

復(fù)制mapred-site.xml.template并重命名為mapred-site.xml 添加以下內(nèi)容其中master為計(jì)算機(jī)名

<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>master:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>master:19888</value>
</property>
</configuration>
2.2.5 編輯yarn-site.xml文件

添加以下內(nèi)容其中master為計(jì)算機(jī)名

<configuration>
<!-- Site specific YARN configuration properties -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>master:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>master:8030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>master:8035</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>master:8033</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>master:8088</value>
</property>
</configuration>
2.2.6 修改slaves文件,添加本機(jī)作為集群節(jié)點(diǎn)
master
slave1
slave2

2.3Hadoop集群搭建

hadoop配置集群捌治,可以將hadoop內(nèi)容同步到其他機(jī)器上岗钩,既2.2.1-2.2.6無(wú)需
在一個(gè)個(gè)配置。

scp -r /opt/hadoop-2.6.5 root@另一臺(tái)機(jī)器名:/opt/hadoop-2.6.5/

2.4 Hadoop啟動(dòng)

  1. 格式化一個(gè)新的文件系統(tǒng)肖油,進(jìn)入到hadoop-2.6.5/bin下執(zhí)行:
./hadoop namenode -format
  1. 啟動(dòng)hadoop,進(jìn)入到hadoop-2.6.5/sbin下執(zhí)行:
./start-all.sh

看到如下內(nèi)容說(shuō)明啟動(dòng)成功


  1. 瀏覽器訪問(wèn)http://192.168.30.128:50070/ (其中192.168.30.128為master節(jié)點(diǎn)IP)
    能看到三個(gè)節(jié)點(diǎn)臂港,則表示HBase集群搭建成功


2.4 Hadoop集群檢查

檢查hadoop集群森枪,進(jìn)入hadoop-2.6.5/bin下執(zhí)行

./hdfs dfsadmin -report

三、ZooKeeper集群部署

3.1 ZooKeeper安裝

解壓zookeeper-3.4.10.tar.gz审孽,并將解壓后的目錄名進(jìn)行修改

tar -zxvf zookeeper-3.4.10.tar.gz
mv zookeeper-3.4.10 zookeeper

3.2 ZooKeeper配置

1.進(jìn)入解壓后的的zookeeper目錄县袱,創(chuàng)建存儲(chǔ)數(shù)據(jù)目錄zkdata

cd /opt/zookeeper
mkdir zkdata

2.進(jìn)入zookeeper/conf目錄,復(fù)制zoo_sample.cfg并重命名為zoo.cfg

cd /opt/zookeeper/conf
cp zoo_sample.cfg zoo.cfg

3.修改zoo.cfg文件佑力,修改dataDir為我們新創(chuàng)建地址式散,并增加其他zookeeper節(jié)點(diǎn)

dataDir=/opt/zookeeper/zkdata
server.1=192.168.20.122:2888:3888
server.2=192.168.20.123:2888:3888
server.3=192.168.20.124:2888:3888
  1. 進(jìn)入zkdata目錄,新建一個(gè)文件myid文件打颤,寫(xiě)入標(biāo)識(shí)ID即可暴拄,ID與上面server.X相匹配
cd /opt/zookeeper/zkdata
vi myid

注意:
比如我配置的三個(gè)server,myid里面寫(xiě)的X就是server.X=ip:2888:3888 中ip所對(duì)應(yīng)的X
server.1=192.168.20.122:2888:3888【192.168.20.122服務(wù)器上面的myid填寫(xiě)1】
server.2=192.168.20.123:2888:3888【192.168.20.123服務(wù)器上面的myid填寫(xiě)2】
server.3=192.168.20.124:2888:3888【192.168.20.124服務(wù)器上面的myid填寫(xiě)3】

3.3 ZooKeeper集群搭建

ZooKeeper配置集群编饺,可以將ZooKeeper內(nèi)容同步到其他機(jī)器上乖篷,既無(wú)需一個(gè)個(gè)安裝配置。

scp -r /opt/zookeeper root@另一臺(tái)機(jī)器名:/opt/zookeeper

3.4 ZooKeeper啟動(dòng)

在三臺(tái)機(jī)器上分別手動(dòng)一個(gè)個(gè)啟動(dòng)ZooKeeper透且,進(jìn)入/opt/zookeeper-/bin目錄

cd /opt/zookeeper/bin
./zkServer.sh start

是否啟動(dòng)成功撕蔼,執(zhí)行以下命令

./zkServer.sh status

主節(jié)點(diǎn)機(jī)器輸出

root@master:/opt/zookeeper/bin# ./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper/bin/../conf/zoo.cfg
Mode: leader

從節(jié)點(diǎn)機(jī)器輸出

root@master:/opt/zookeeper/bin# ./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper/bin/../conf/zoo.cfg
Mode: follower

啟動(dòng)過(guò)程命令:

./zkServer.sh start foreground

四、HBase部署

4.1 HBase安裝

解壓hbase-1.3.1-bin.tar.gz

tar -zxvf hbase-1.3.1-bin.tar.gz

4.2 HBase配置

  1. 進(jìn)入habase的conf目錄
cd /opt/hbase-1.3.1/conf
  1. 編輯hbase-env.sh文件秽誊,添加Java環(huán)境變量并關(guān)閉HBase自帶的Zookeeper
export JAVA_HOME=/opt/jdk/
export HBASE_MANAGES_ZK=false
  1. 編輯hbase-site.xml 文件鲸沮,添加配置
<configuration>
<property>
<name>hbase.rootdir</name>
<value>hdfs://master:9000/hbase</value>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<name>hbase.master</name>
<value>master:60000</value>
</property>
<property>
<name>hbase.regionserver.handler.count</name>
<value>100</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>master:2181,slave1:2181,slave2:2181</value>
</property>
<property>
<name>hbase.zoopkeeper.property.dataDir</name>
<value>/opt/zookeeper/zkdata</value>
</property>
</configuration>
  1. 編輯regionservers文件,將三臺(tái)機(jī)器名添加其中
root@master:/opt/hbase-1.3.1/conf# cat regionservers
master
slave1
slave2

4.3 第三方包導(dǎo)入

第三方包锅论,我們只需要geomesa-hbase中的一個(gè)jar文件讼溺,將該jar包復(fù)制到hbase中的lib目錄。
geomesa-hbase下載地址:https://github.com/locationtech/geomesa/releases
此次我們使用2.11-2.0.1版本棍厌,下載后完整包名為:geomesa-hbase_2.11-2.0.1-bin.tar.gz
所使用的jar包位于geomesa-hbase_2.11-2.0.1/dist/hbase/geomesa-hbase-distributed-runtime_2.11-2.0.1.jar

cd /opt/hbase-1.3.1/lib
cp /opt/geomesa-hbase-distributed-runtime_2.11-2.0.1.jar .

4.4 Hbase集群搭建

cd /opt
scp -r hbase-1.3.1 root@slave1:/opt
scp -r hbase-1.3.1 root@slave2:/opt

4.5 HBase啟動(dòng)

進(jìn)入HBase中bin目錄下肾胯,執(zhí)行以下命令,完成HBase集群?jiǎn)?dòng)

./start-hbase.sh

4.6 檢查HBase集群

瀏覽器訪問(wèn)http://192.168.30.128:16010/ (其中192.168.30.128為master節(jié)點(diǎn)IP)
能看到三個(gè)節(jié)點(diǎn)耘纱,則表示HBase集群搭建成功


五敬肚、Spark&iObjectsForSpark&objectsjava集群安裝和配置

5.1安裝配置

5.1.1 準(zhǔn)備超圖大數(shù)據(jù)依賴庫(kù)

將【iServer目錄】/support/objectsjava拷貝到/opt/objectsjava
將【iServer目錄】/support/iObjectsForSpark拷貝到/opt/iObjectsForSpark

5.1.2 解壓安裝包
tar –xzvf spark-2.1.0-bin-hadoop2.7.tgz
mv spark-2.1.0-bin-hadoop2.7 spark
cd spark
5.1.3創(chuàng)建設(shè)置環(huán)境變量腳本spark-env.sh
cp conf/spark-env.sh.template conf/spark-env.sh
vim conf/spark-env.sh

增加一下配置信息:

export JAVA_HOME=/opt/jdk1.8.0_181
export UGO_HOME=/opt/objectjava
export PATH=$JAVA_HOME/bin:$PATH
export LD_LIBRARY_PATH=$UGO_HOME/bin:$LD_LIBRARY_PATH
export SPARK_CLASS_PATH=/opt/iObjectsForSpark
5.1.4 配置Slaves
cp conf/slaves.template conf/slaves
vim conf/slaves

內(nèi)容如下

master
slave1
slave2

5.2集群部署

cd /opt
scp -r spark root@機(jī)器名:/opt/
scp -r objectsjava root@機(jī)器名:/opt/
scp -r iObjectsForSpark root@機(jī)器名:/opt/

5.3啟動(dòng)Spark集群

cd /opt/spark/sbin/
./start-all.sh

5.4 集群檢查

瀏覽器訪問(wèn)http://192.168.30.128:8080/ (其中192.168.30.128為master節(jié)點(diǎn)IP)
能看到三個(gè)節(jié)點(diǎn),則表示HBase集群搭建成功


六束析、附錄

6.1 Hadoop配置正確艳馒,節(jié)點(diǎn)顯示不全

解決辦法:
1.先停止Hadoop,bin/stop-all.sh
2.三臺(tái)機(jī)器都把hadoop1.2.1/tmp下所有文件刪除,rm -rf tmp/*
3.重新格式化DFS bin/hadoop namenode -format
4.再重啟bin/start-all.sh
5.查看各節(jié)點(diǎn)jps弄慰,就有DataNode和TaskTracker了

6.2 修改dns

方法一 通過(guò)/etc/network/interfaces第美,在它的最后增加一句:
dns-nameservers 222.246.129.80
222.246.129.80是電信提供的DNS服務(wù),這里只是舉一個(gè)例子陆爽。重啟后DNS就生效了什往,這時(shí)候再看/etc/resolv.conf,最下面就多了一行:

Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 222.246.129.80

方法二 通過(guò)修改:
/etc/resolvconf/resolv.conf.d/base(這個(gè)文件默認(rèn)是空的)
在里面插入:
nameserver 222.246.129.80

6.3 修改時(shí)區(qū)時(shí)間

查看時(shí)區(qū)

timedatectl

修改時(shí)區(qū)

 ln -sf /usr/share/zoneinfo/Asia/Shanghai    /etc/localtime

6.4 時(shí)間同步

Hbase默認(rèn)的是30s這個(gè)時(shí)間差慌闭,在部署過(guò)程中時(shí)間不同步别威,導(dǎo)致集群無(wú)法啟動(dòng)
1.安裝ntpdate工具

sudo yum -y install ntp ntpdate

2.設(shè)置系統(tǒng)時(shí)間與網(wǎng)絡(luò)時(shí)間同步

sudo ntpdate cn.pool.ntp.org

3.將系統(tǒng)時(shí)間寫(xiě)入硬件時(shí)間

 sudo hwclock --systohc

4.查看系統(tǒng)時(shí)間

timedatectl

輸出信息如下:

Universal time: 四 2017-09-21 05:54:09 UTC
RTC time: 四 2017-09-21 13:54:09
Time zone: Asia/Shanghai (CST, +0800)
NTP enabled: no
NTP synchronized: no
RTC in local TZ: yes
如果沒(méi)有執(zhí)行步驟3,則Local time與RTC time顯示的值可能不一樣

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末驴剔,一起剝皮案震驚了整個(gè)濱河市省古,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌丧失,老刑警劉巖豺妓,帶你破解...
    沈念sama閱讀 221,331評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異布讹,居然都是意外死亡琳拭,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,372評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門(mén)炒事,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)臀栈,“玉大人,你說(shuō)我怎么就攤上這事挠乳∪ㄊ恚” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 167,755評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵睡扬,是天一觀的道長(zhǎng)盟蚣。 經(jīng)常有香客問(wèn)我,道長(zhǎng)卖怜,這世上最難降的妖魔是什么屎开? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,528評(píng)論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮马靠,結(jié)果婚禮上奄抽,老公的妹妹穿的比我還像新娘。我一直安慰自己甩鳄,他們只是感情好逞度,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,526評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著妙啃,像睡著了一般档泽。 火紅的嫁衣襯著肌膚如雪俊戳。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,166評(píng)論 1 308
  • 那天馆匿,我揣著相機(jī)與錄音抑胎,去河邊找鬼。 笑死渐北,一個(gè)胖子當(dāng)著我的面吹牛阿逃,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播腔稀,決...
    沈念sama閱讀 40,768評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼盆昙,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了焊虏?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,664評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤秕磷,失蹤者是張志新(化名)和其女友劉穎诵闭,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體澎嚣,經(jīng)...
    沈念sama閱讀 46,205評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡疏尿,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,290評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了易桃。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片褥琐。...
    茶點(diǎn)故事閱讀 40,435評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖晤郑,靈堂內(nèi)的尸體忽然破棺而出敌呈,到底是詐尸還是另有隱情,我是刑警寧澤造寝,帶...
    沈念sama閱讀 36,126評(píng)論 5 349
  • 正文 年R本政府宣布磕洪,位于F島的核電站,受9級(jí)特大地震影響诫龙,放射性物質(zhì)發(fā)生泄漏析显。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,804評(píng)論 3 333
  • 文/蒙蒙 一签赃、第九天 我趴在偏房一處隱蔽的房頂上張望谷异。 院中可真熱鬧,春花似錦锦聊、人聲如沸歹嘹。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,276評(píng)論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)荞下。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間尖昏,已是汗流浹背仰税。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,393評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留抽诉,地道東北人陨簇。 一個(gè)月前我還...
    沈念sama閱讀 48,818評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像迹淌,于是被迫代替她去往敵國(guó)和親河绽。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,442評(píng)論 2 359