zoukankan      html  css  js  c++  java
  • hadoop+HBase+ZooKeeper+Hive完全分布式集群部署安装

    本文源自:https://www.cnblogs.com/linxizhifeng/p/7207655.html

    1.        系统环境

    1.1.   软件版本

    下表为本系统环境所安装的软件的版本信息:

    软件类别

    版本

    下载地址

    Hadoop

    官网

    zookeeper

    官网

    hbase

    官网

    hive

    官网

    1.2.   网络配置

    总共7台服务器和一个VIP,详细信息如下:(主机名看下是否合法和能ping通,如果未配置dns强烈建议用IP,或者在每台机器hosts文件写上所有IP的主机名)

    主机名

    IP地址

    备注

    hadoop001

    192.168.63.201

    hadoop002

    192.168.63.202

    hadoop003

    192.168.63.203

    hadoop004

    192.168.63.204

    hadoop005

    192.168.63.205

    hadoop006

    192.168.63.206

    hadoop007

    192.168.63.207

    hadoop

    192.168.63.200

    设置Hadoop的VIP

    2.        目的

    掌握hadoop的安装和部署HDFS,Hbase,Hive等组件。

    3.        Hadoop简介

    Hadoopt是一个分布式系统基础架构,由Apache基金会开发。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力高速运算和存储。Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。HDFS有着高容错性的特点,并且设计用来部署在低廉的硬件上。而且它提供高传输率来访问应用程序的数据,适合那些有着超大数据集的应用程序。HDFS放宽了POSIX的要求,这样可以流的形式访问文件系统中的数据。详细介绍请参见:

    http://zh.wikipedia.org/wiki/Hadoop

    http://baike.baidu.com/view/908354.htm

    http://hadoop.apache.org/

    http://www.blogjava.net/killme2008/archive/2008/06/05/206043.html

    4.        HDFS安装部署。

    4.1.   安装准备

    4.1.1.            机器准备

    本例stage2环境如下:

    IP地址

    HDFS

    Zookeeper

    Hbase

    Hive

    192.168.63.201

    Namenode

    Hmaster

    hive

    192.168.63.202

    Namenode(second)

    Hmaster

    hive

    192.168.63.203

    Datanode1

    zookeeper

    HRegionServer

    hive

    192.168.63.204

    Datanode2

    zookeeper

    HRegionServer

    hive

    192.168.63.205

    Datanode3

    zookeeper

    HRegionServer

    hive

    192.168.63.206

    Datanode4

    HRegionServer

    hive

    192.168.63.207

    Datanode5

    HRegionServer

    hive

    NameNode:是Master节点,是大领导。管理数据块映射;处理客户端的读写请求;配置副本策略;管理HDFS的名称空间;

    SecondaryNameNode:是一个小弟,分担大哥namenode的工作量;是NameNode的冷备份;合并fsimage和fsedits然后再发给namenode。

    DataNode:Slave节点,奴隶,干活的。负责存储client发来的数据块block;执行数据块的读写操作。

    热备份:b是a的热备份,如果a坏掉。那么b马上运行代替a的工作。

    冷备份:b是a的冷备份,如果a坏掉。那么b不能马上代替a工作。但是b上存储a的一些信息,减少a坏掉之后的损失。

    另请根据需要配置hostname或dns。另外,zookeeper最好使用独立server。

    4.1.2.            Disable IPV6

    cat /proc/sys/net/ipv6/conf/all/disable_ipv6 为0 则启动 IPV6

    如果你的环境是启动IPV6的,请走以下3步:

    n  在各节点上修改/etc/sysctl.conf

    在文件末尾添加:

    # add for hadoop

    net.ipv6.conf.all.disable_ipv6 = 1

    net.ipv6.conf.default.disable_ipv6 = 1

    net.ipv6.conf.lo.disable_ipv6 = 1

    n  修改/etc/modprobe.conf (可略)

    确保文件中包括以下两条:

    alias net-pf-10 off

    alias ipv6 off

    n  修改/etc/ sysconfig/network

    确保NETWORKING_IPV6=no。

    n  修改完后需要重启机器

    重启后,通过命令:

    # cat /proc/sys/net/ipv6/conf/all/disable_ipv6

    查看是否已经disable。如果已经disable,结果是1。

    4.1.3.            Jdk安装

    4.1.4.            创建用户

    Hadoop需要统一用户,这使用的是oracle账号。

    4.2.   介质下载

    我们需要安装的组件是cloudera hadoop,下载网址:

    官网

    我们需要的组件是hadoop,zookeeper,hbase和hive。

    4.3.   安装HDFS Cluster

    4.3.1.            复制解压

    复制下载好的压缩包到需要安装的所有服务器指定目录,并解压修改目录名。我们的环境下的hadoop及相关组件解析后如下:

    [oracle@hadoop001 oracle]$ pwd

    /opt/oracle

    [oracle@hadoop001 oracle]$ ls

    hadoop  hbase  hive  zookeeper

    4.3.2.            SSH设置

    设置从两台namenode无密码登录到其它5台datanode。

    生成密钥

    执行生成rsa密钥的命令:

    [oracle@hadoop001]$ ssh-keygen -t rsa

    Generating public/private rsa key pair.

    Enter fi le in which to save the key (/home/oracle/.ssh/id_rsa):

    Enter passphrase (empty for no passphrase):

    Enter same passphrase again:

    Your identifi cation has been saved in /home/oracle/.ssh/id_rsa.

    Your public key has been saved in /home/oracle/.ssh/id_rsa.pub.

    这样就生成了一对公钥和私钥,私钥保留在NameNode上,公钥需要分发给其他各datanode节点。注意,不要输入密码,否则NameNode启动的时候连接每个节点都需要你输入密码,当DataNode很多时,这是个灾难。

    分发公钥

    由于两个NameNode节点都需要访问各datanode节点,因此我们这里上传到datanode的认证文件分别命名为authorized_keys和authorized_keys2。

    Hadoop001上执行:

    scp .ssh/id_rsa.pub hadoop003:/home/oracle/.ssh/authorized_keys

    scp .ssh/id_rsa.pub hadoop004:/home/oracle/.ssh/authorized_keys

    scp .ssh/id_rsa.pub hadoop005:/home/oracle/.ssh/authorized_keys

    scp .ssh/id_rsa.pub hadoop006:/home/oracle/.ssh/authorized_keys

    scp .ssh/id_rsa.pub hadoop007:/home/oracle/.ssh/authorized_keys

    Hadoop002上执行:

    scp .ssh/id_rsa.pub hadoop003:/home/oracle/.ssh/authorized2_keys

    scp .ssh/id_rsa.pub hadoop004:/home/oracle/.ssh/authorized2_keys

    scp .ssh/id_rsa.pub hadoop005:/home/oracle/.ssh/authorized2_keys

    scp .ssh/id_rsa.pub hadoop006:/home/oracle/.ssh/authorized2_keys

    scp .ssh/id_rsa.pub hadoop007:/home/oracle/.ssh/authorized2_keys

    此时,可以从两台namenode上使用oracle账号无密码登录到各datanode服务器。

    4.3.3.            环境变量设置:

    修改~/.bashrc增加如下内容:

    export HADOOP_HOME=/opt/oracle/hadoop

    export PATH=$PATH:$HADOOP_HOME/bin

    4.3.4.            HDFS配置

    HDFS可以在单机上部署进行模拟,本文不做该配置的介绍

    本文仅做cluster的配置介绍。

    HDFS的配置文件均放在$hadoop/conf目录下。(新版本可能在$hadoop/etc/hadoop/以下配置7台服务器都相同。

    hadoop-env.sh

    定义hadoop环境变量增加下面2行

    export HADOOP_HEAPSIZE=6000

    export JAVA_HOME=/opt/j2sdk1.6.29

    export HADOOP_DATANODE_OPTS="-server -XX:+UseParallelGC -XX:ParallelGCThreads=4 -XX:+AggressiveHeap -XX:+HeapDumpOnOutOfMemoryError"

     

    core-site.xml

    定义HDFS的NameNode地址和端口。

    <?xml version=”1.0”?>

    <?xml-stylesheet type=”text/xsl” href=”confi guration.xsl”?>

    <!-- Put site-specific property overrides in this file. -->

    <configuration>

        <property>

        <name>fs.default.name</name>

        <value>hdfs://hadoop:9000</value>       指定namenode 主机名跟端口

    </property>

    <property>

        <name>io.file.buffer.size</name>

        <value>16384</value>

      </property>

    </configuration>

    mapred-site.xml

    定义MapReduce的JobTracker的地址和端口。

    <?xml version=”1.0”?>

    <?xml-stylesheet type=”text/xsl” href=”confi guration.xsl”?>

    <!-- Put site-specific property overrides in this file. -->

    <configuration>

    <property>

        <name>mapred.job.tracker</name>

        <value>hadoop:9001</value>

    </property>

    </configuration>

    Map-reduce的参数配置,推荐值为(本部分暂时没有优化,这部分请略过):

    mapred.map.tasks = number of datanodes x 2
    mapred.reduce.tasks = number of atanodes x 2
    mapred.tasktracker.map.tasks.maximum = number of CPU Cores of the datanodes – 2
    mapred.tasktracker.reduce.tasks.maximum = number of CPU Cores of the datanodes – 2

    hdfs-site.xml

    定义文件复制份数。

    <?xml version=”1.0”?>

    <?xml-stylesheet type=”text/xsl” href=”confi guration.xsl”?>

    <!-- Put site-specific property overrides in this file. -->

    <configuration>

    <property>

        <name>dfs.replication</name>

        <value>3</value>

    </property>

    <property>
        <name>dfs.http.address</name>
        <value>192.168.63.200:50000</value>    

    </property

    <property>
        <name>dfs.secondary.http.address</name>
        <value>192.168.63.202:50090</value>         不配此行配了master2都不生效
    </property>

    <property>

        <name>dfs.data.dir</name>

        <value>/opt/hadoop/data/dfs</value>

    </property>

    <property>

        <name>dfs.name.dir</name>

        <value>/opt/hadoop/name</value>

    </property>

    <property>

        <name>dfs.datanode.handler.count</name>

        <value>300</value>

    </property>

    <property>

        <name>dfs.block.size</name>

        <value>33554432</value>

    </property>

    </configuration>

    <property>
    <name>dfs.http.address</name>
    <value>192.168.63.200:50000</value>    

    </property>     
    <property>
    <name>dfs.secondary.http.address</name>
    <value>192.168.63.202:51000</value>      
    </property>

    1. dfs.http.address:web管理监控端口,采用默认端口(namenode:50070,secondary:50090)时可以省略该配置

    注意:

    1)  在两台namenode上建立以下目录

    /opt/hadoop/name

    2)  在两台datanode上建立以下目录

    /opt/hadoop/data/dfs

    masters

    定义Secondary NameNode的地址

    注:masters文件用于指定secondary的主机而不是namenode,slaves用于指定datanode和tasktracker,

    namenode由core-site.xml fs.default.name指定,jobtracker由mapred-site.xml mapred.job.tracker指定

     hadoop002

    slaves

    定义DataNode的地址,可以是主机名或者IP。

    hadoop003

    hadoop004

    hadoop005

    hadoop006

    hadoop007

    配置同步

    将以上修改过的5个配置文件,复制到其它6台机器。

    4.3.5.            启动HDFS

    在NameNode的$hadoop安装目录下,执行如下命令:

    [oracle@hadoop001 hadoop]$ bin/hadoop namenode -format  格式化 

    [oracle@hadoop001 hadoop]$ sbin/start-all.sh

    可以在各个节点上运行jps命令查看是否启动成功:

    [oracle@hadoop003 ~]$ jps

    6160 TaskTracker

    6039 DataNode

    6879 Jps

    6357 HRegionServer

    同时可访问HDFS监控页面:http://192.168.63.200:50070/dfshealth.jsp查看各节点状况。

    5.        安装ZooKeeper

    在Hadoop的复制解压部分已经完成安装。这部分介绍zookeeper的配置。

    5.1.   配置ZooKeeper

    修改zookeepr/conf/zoo.cfg

    配置里面的server是zookeeper服务器的主机名。

    # The number of milliseconds of each tick

    tickTime=2000

    maxClientCnxns=0

    # The number of ticks that the initial

    # synchronization phase can take

    initLimit=50

    # The number of ticks that can pass between

    # sending a request and getting an acknowledgement

    syncLimit=5

    # the directory where the snapshot is stored.

    dataDir=/opt/hadoop/zookeeperdata

    # the port at which the clients will connect

    clientPort=2181

    server.1=hadoop003:2888:3888

    server.2=hadoop004:2888:3888

    server.3=hadoop005:2888:3888

    将zookeeper目录复制到各个zookeeper节点上

    我们的环境共3台zookeeper,复制到这3台即可。

    新建目录

    在各zookeeper服务器上新建dataDir中配置的目录,并添加myid文件,里面内容是该节点对应的server号,如上例hadoop003对应的myid文件内容就是:

    1

    echo "1" > /opt/hadoop/zookeeperdata/myid

    5.2.   启动zookeeper

    在各zookeeper节点上运行zkServer.sh start。

    cd /opt/oracle/zookeeper

    ./bin/zkServer.sh start

    tail zookeeper.out

    6.        Hbase的安装

    6.1.   安装Hbase

    安装Hbase需要先安装好hadoop和ZooKeeper。

    Hadoop的复制解压部分已经完成安装。这部分介绍Hbase的配置。

    6.2.   配置Hbase

    修改hbase/conf/hbase-site.xml

    <configuration>

    <property>

    <name>hbase.rootdir</name>

    <value>hdfs://hadoop:9000/hbase</value>

    <description>The directory shared by region servers.</description>

    </property>

    <property>

      <name>hbase.cluster.distributed</name>

      <value>true</value>

    </property>

    <property>

      <name>hbase.master.port</name>

      <value>60000</value>

    </property>

    <property>

      <name>hbase.zookeeper.quorum</name>

      <value>hadoop003,hadoop004,hadoop005</value>

    </property>

    <property>

      <name>hbase.regionserver.handler.count</name>

      <value>300</value>

    </property>

    <property>

      <name>hbase.hstore.blockingStoreFiles</name>

      <value>70</value>

    </property>

    <property>

      <name>zookeeper.session.timeout</name>

      <value>60000</value>

    </property>

    <property>

    <name>hbase.regionserver.restart.on.zk.expire</name>

    <value>true</value>

    <description>

    Zookeeper session expired will force regionserver exit.

    Enable this will make the regionserver restart.

    </description>

    </property>

    <property>

      <name>hbase.replication</name>

      <value>false</value>

    </property>

    <property>

      <name>hfile.block.cache.size</name>

      <value>0.4</value>

    </property>

    <property>

      <name>hbase.regionserver.global.memstore.upperLimit</name>

      <value>0.35</value>

    </property>

    <property>

      <name>hbase.hregion.memstore.block.multiplier</name>

      <value>8</value>

    </property>

    <property>

      <name>hbase.server.thread.wakefrequency</name>

      <value>100</value>

    </property>

    <property>

      <name>hbase.master.distributed.log.splitting</name>

      <value>false</value>

    </property>

    <property>

      <name>hbase.regionserver.hlog.splitlog.writer.threads</name>

      <value>3</value>

    </property>

    <property>

      <name>hbase.hstore.blockingStoreFiles</name>

      <value>20</value>

    </property>

    <property>

    <name>hbase.hregion.memstore.flush.size</name>

    <value>134217728</value>

    </property>

    <property>

      <name>hbase.hregion.memstore.mslab.enabled</name>

      <value>true</value>

    </property>

    </configuration>

    红色部分是可能需要修改的,更多配置项请参考:

    http://hbase.apache.org/book.html#configuration

    修改hbase/conf/hbase-env.sh

    添加如下4行内容:

    export HBASE_HEAPSIZE=4000

    export JAVA_HOME=/opt/j2sdk1.6.29

    export HBASE_OPTS="-Xmx8g -Xms8g -Xmn128m -XX:+UseParNewGC  -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=70 -verbose:gc  -XX:+PrintGCDetails -XX:+PrintGCTimeStamps  -Xloggc:$HBASE_HOME/logs/gc-$(hostname)-hbase.log"

    export HBASE_MANAGES_ZK=false

    export HBASE_CLASSPATH=/opt/oracle/hadoop/conf   hadoop配置文件位置

    n  修改hbase/conf/log4j.properties

    修改如下内容

    hbase.root.logger=WARN,console

    log4j.logger.org.apache.hadoop.hbase=WARN

    conf/regionservers中添加所有datanode的节点

    添加以下内容:

    hadooop003

    hadooop004

    hadooop005

    hadooop006

    hadooop007

     

    6.3.   启动Hbase

    通过Hbase的安装目录执行bin/start-hbase.sh和bin/stop-hbase.sh 脚本启动和停止HBase服务。

    启动方法:

    [oracle@hadoop003 ~]$ cd /opt/oracle/hbase

    [oracle@hadoop003 hbase]$ bin/start-hbase.sh

     报错 

    如果jdk没问题可能你下载的包不对 需要 -bin-tar.gz 而不是src

    7.        Hive的安装

    7.1.   安装Hive

    Hadoop的复制解压部分已经完成安装。这部分介绍Hive的配置。

    7.2.   创建hive的hdfs目录

    在namenode的hadoop安装目录下的bin目录下执行创建操作:

    [oracle@hadoop001 ~]$ cd /opt/oracle/hadoop/bin/

    [oracle@hadoop001 ~]$ ./hadoop fs -mkdir -p /user/hive/warehouse

    7.3.   配置conf下的hive-default.xml

    找到hive.zookeeper.quorum,配置为如下所示:

    # modify|以下修改红色部分

    <property>

      <name>hive.zookeeper.quorum</name>

      <value> hadoop003,hadoop004,hadoop005</value>

      <description></description>

    </property>

    # add|以下添加红色部分

    <property>  

       <name>hbase.zookeeper.quorum</name>  

       <value>hadoop003,hadoop004,hadoop005</value>

       <description>

       </description>

    </property>

    # default|以下默认即可

    <property>

      <name>hive.zookeeper.client.port</name>

      <value>2181</value>

      <description></description>

    </property>

    7.4.   复制jar包到Hadoop的lib下

    第一台服务器都要执行:

    cd /opt/oracle/hive/lib

    cp -a hbase-0.90.1-cdh3u0.jar zookeeper-3.3.1.jar hive-hbase-handler-0.7.0-cdh3u0.jar /opt/oracle/hadoop/lib

    创建hive表:

    cd /opt/oracle/hive/bin

    hive -auxpath ../lib/hive-hbase-handler-0.7.0-cdh3u0.jar,../lib/hbase-0.90.1-cdh3u0.jar,../lib/zookeeper-3.3.1.jar -hiveconf hbase.zookeeper.quorum=hadoop003

    在hive提示符下输入:

    CREATE TABLE app_log_rule(id STRING,app_code STRING,merchant_id STRING,order_type STRING,log_level STRING,log_location STRING,disabled STRING,param_map STRING)

    STORED BY

    'org.apache.hadoop.hive.hbase.HBaseStorageHandler'

    WITH SERDEPROPERTIES (

    "hbase.columns.mapping" =

    ":key,cf1:app_code,cf1:merchant_id,cf1:order_type,cf1:log_level,cf1:log_location,cf1:disabled,cf1:param_map")

    TBLPROPERTIES (

    "hbase.table.name" = "hbase_app_log_rule"

    );

    CREATE TABLE app_log_queue(id STRING,queue_name STRING,biz_line STRING,app_code STRING)

    STORED BY

    'org.apache.hadoop.hive.hbase.HBaseStorageHandler'

    WITH SERDEPROPERTIES (

    "hbase.columns.mapping" = ":key,cf1:queue_name,cf1:biz_line,cf1:app_code")

    TBLPROPERTIES (

    "hbase.table.name" = "hbase_app_log_queue"

    );

    7.5.   启动Hive JDBC server

    到Hive的安装目录,启动Hive服务。

    cd /opt/oracle/hive/

    bin/hive --service hiveserver &

    8.        Hadoop环境启动顺序

    8.1.   启动HDFS

    在NameNode的$hadoop安装目录下,执行如下命令:

    [oracle@hadoop001 hadoop]$ bin/hadoop namenode -format

    [oracle@hadoop001 hadoop]$ bin/start-all.sh

    可以在各个节点上运行jps命令查看是否启动成功:

    [oracle@hadoop003 ~]$ jps

    6160 TaskTracker

    6039 DataNode

    6879 Jps

    同时可访问HDFS监控页面:http://hadoop001:50070/dfshealth.jsp查看各节点状况。

    8.2.   启动zookeeper

    在各zookeeper节点上运行zkServer.sh start。

    cd /opt/oracle/zookeeper

    ./bin/zkServer.sh start

    tail zookeeper.out

    8.3.   启动Hbase

    通过Hbase的安装目录执行bin/start-hbase.sh和bin/stop-hbase.sh 脚本启动和停止HBase服务。

    启动方法:

    [oracle@hadoop003 ~]$ cd /opt/oracle/hbase

    [oracle@hadoop003 hbase]$ bin/start-hbase.sh

    可以在各个节点上运行jps命令查看是否启动成功,hadoop003~hadoop007上是否有HRegionServer,hadoop001上是否有HMaster:

    同时可访问HDFS监控页面:http://hadoop001:60010/ 查看是否所有的datanode和zookeeper都活着。

    8.4.   启动Hive JDBC server

    到Hive的安装目录,启动Hive服务。

    cd /opt/oracle/hive/

    bin/hive --service hiveserver &

    9.        Hadoop环境关闭顺序

    9.1.   关闭Hive JDBC Server

    用jps命令找到RunJar进程kill掉

    9.2.   关闭Hbase

    通过Hbase的安装目录执行bin/stop-hbase.sh停止HBase服务,会出现等待的提示符,等待结束才可以执行下一步

    9.3.   关闭zookeeper

    在各zookeeper节点上运行zkServer.sh stop

    cd /opt/oracle/zookeeper

    ./bin/zkServer.sh stop

    tail zookeeper.out

    9.4.   关闭HDFS

    在NameNode的$hadoop安装目录下,执行如下命令:

     [oracle@hadoop001 hadoop]$ bin/stop-all.sh

    可以在各个节点上运行jps命令查看是否关闭成功

    10.    常见问题

    10.1.             Namenode非正常关闭

    在所有的hadoop环境机器上用jps命令,把所有的进程列出,然后kill掉,再按照启动顺序启动

    10.2.             Datanode非正常关闭

    l  在namenode上启动HDFS

    运行hadoop/bin/start-all.sh

    l  如果Datanode同时是zookeeper,还需要启动zookeeper

    在该datanode上运行zookeeper/bin/zkServer.sh start。

    l  在namenode上启动Hbase

    运行hbase/bin/start-hbase.sh

    10.3.             停止一台非master的服务器

    l  在该台服务器上运行:

    hadoop/bin/hadoop-daemon.sh stop datanode

    hadoop/bin/hadoop-daemon.sh stop tasktracker

    hbase/bin/hbase-daemon.sh stop regionserver

    l  在http://hadoop001:50070/dfshealth.jsp 查看该节点是否已经变成dead nodes,变成dead nodes之后,就可以停止该台服务器

    在刚停止服务的时候,看到的截图如下:

    当停止服务成功,看到的截图如下:

    l  重启服务器以后,在hadoop001上运行,启动服务:

    hadoop/bin/start-all.sh

    hbase/bin/start-hbase.sh

    11.    监控端口

    11.1.             Namenode监控端口(hadoop001):

    60010,60000,50070,50030,9000,9001,10000

    11.2.             zookeeper监控端口(hadoop003,hadoop004,hadoop005)

    2181

    11.3.             Datanode监控端口(hadoop003,hadoop004,hadoop005,hadoop006,hadoop007)

    60030,50075

    坚持到无能为力,拼搏到感动自己

    Oracle & Mysql & Postgresql & MSSQL 调优 & 优化
    ----------------------------------------------------------
    《高性能SQL调优精要与案例解析》
    blog1:http://www.cnblogs.com/lhdz_bj
    blog2:http://blog.itpub.net/8484829
    blog3:http://blog.csdn.net/tuning_optmization
  • 相关阅读:
    Ajax ToolKit ModelPopupExtender报错:Sys.InvalidOperationException: Handler was not added through the Sys.UI.DomE
    C# 注释 类头部
    matlab练习程序(图像滤波时的边界处理2)
    更改chrome默认搜索引擎
    matlab练习程序(表面模糊)
    matlab练习程序(三阶张量TQR分解)
    linux命令行关机
    matlab练习程序(奇异值分解压缩图像)
    matlab练习程序(方框模糊)
    matlab练习程序(图像滤波时的边界处理)
  • 原文地址:https://www.cnblogs.com/lhdz_bj/p/14362926.html
Copyright © 2011-2022 走看看