您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關ZooKeeper怎么啟動,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
ZooKeeper 是 Apache 軟件基金會的一個軟件項目,它為大型分布式計算提供開源的分布式配置服務、同步服務和命名注冊ZooKeeper 的架構通過冗余服務實現高可用性。Zookeeper 的設計目標是將那些復雜且容易出錯的分布式一致性服務封裝起來,構成一個高效可靠的原語集,并以一系列簡單易用的接口提供給用戶使用。
ZooKeeper服務的啟動方式分為三種,即單機模式、偽分布式模式、分布式模式,這里針對三種模式均做逐一講解。
Tips
調試過程建議盡量使用分布式模式,單機模式不推薦在生產環境下使用,偽分布式模式實質上是在一個進程內派生多個線程模擬分布式形態,由于操作系統的內部結構設計,容易造成一些問題,建議與其解決問題不如切換到分布式模式。生產環境下建議一定采用分布式模式,如果機器不夠,推薦采用虛擬機方式。
采用單機模式,意味著只有一臺機器或者一個節點,因此流程較為簡單。首先,在conf目錄下面可以通過自己創建zoo.cfg文件的方式完成ZooKeeper的配置,如清單1-7所示,ZooKeeper服務會讀取該配置文件,具體的讀取代碼會在第四章介紹。
注意,ZooKeeper自帶了zoo_sample.cfg文件,這個是配置文件的模板文件,可以打開看看具體的內容,也可以作為zoo.cfg的創建內容范例。
清單1-7 ZooKeeper配置文件
[root@localhost zookeeper-3.4.7]# cd conf[root@localhost conf]# ls -rlttotal 12 -rw-rw-r--. 1 1000 1000 922 Nov 1022:32 zoo_sample.cfg -rw-rw-r--. 1 1000 1000 2161 Nov 10 22:32 log4j.properties -rw-rw-r--. 1 1000 1000 535 Nov 1022:32 configuration.xsl [root@localhost conf]# cat zoo_sample.cfg# The number of milliseconds of each ticktickTime=2000# The number of ticks that the initial# synchronization phase can takeinitLimit=10# The number of ticks that can pass between# sending a request and getting an acknowledgementsyncLimit=5# the directory where the snapshot is stored.# do not use /tmp for storage, /tmp here is just# example sakes.dataDir=/tmp/zookeeper# the port at which the clients will connectclientPort=2181# the maximum number of client connections.# increase this if you need to handle more clients#maxClientCnxns=60## Be sure to read the maintenance section of the# administrator guide before turning on autopurge.##http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance## The number of snapshots to retain in dataDir#autopurge.snapRetainCount=3# Purge task interval in hours# Set to "0" to disable auto purge feature#autopurge.purgeInterval=1
上面是自帶的示例配置,與我們相關的三個配置項是tickTime、dataDir和clientPort。
tickTime:這個參數主要是用來針對ZooKeeper服務端和客戶端的會話控制,包括心跳控制,一般來說,會話超時時間是該值的兩倍,它的單位是毫秒,我們設置為2000毫秒。
dataDir:這個目錄用來存放數據庫的鏡像和操作數據庫的日志。注意,如果這個文件夾不存在,需要手動創建一個并賦予讀寫權限,我們設置為/tmp/zookeeper,不用手動創建這個文件夾,系統運行后會自動創建或覆蓋。
clientPort:ZooKeeper服務端監聽客戶端的端口,默認是2181,這里沿用默認設置。
接下來通過bin目錄下面的zkServer.sh腳本啟動ZooKeeper服務,如果不清楚具體參數,可以直接調用腳本查看輸出,如清單1-8所示。
Tips
ZooKeeper采用的是Bourne Shell。Shell基本上是一個命令解釋器,類似于DOS下的command。它接收用戶命令(如ls等),然后調用相應的應用程序。較為通用的shell有標準的Bourne shell、C shell和Korn shell。
清單1-8 調用zkServer.sh腳本
[root@localhost bin]# ./zkServer.shZooKeeper JMX enabled by default Using config: /home/zhoumingyao/zookeeper/zookeeper-3.4.7/bin/../conf/zoo.cfg Usage: ./zkServer.sh{start|start-foreground|stop|restart|status|upgrade|print-cmd}
輸出中可以看到有start等選項,具體每個選項的意義我們放在第四章解釋,這里先啟動ZooKeeper服務,如清單1-9所示。
清單1-9 啟動ZooKeeper
[root@localhost bin]# ./zkServer.sh startZooKeeper JMX enabled by default Using config:/home/zhoumingyao/zookeeper/zookeeper-3.4.7/bin/../conf/zoo.cfg Starting zookeeper ... STARTED
ZooKeeper服務是否啟動成功,可以通過ps或者jps命令查看,如清單1-10所示。
清單1-10 查看ZooKeeper服務
[root@localhost bin]# jps2737 QuorumPeerMain 2751 Jps [root@localhost bin]# ps -ef | grep zookeeper | grep -v grep | awk '{print$2}'2608
這里我們看到的進程號為2737的進程QuorumPeerMain代表了ZooKeeper服務。我們也可以通過ZooKeeper啟動腳本自帶的參數“Status”來查看ZooKeeper進程狀態,如清單1-11所示。
清單1-11 查看ZooKeeper進程狀態
[root@localhost bin]# ./zkServer.sh statusZooKeeper JMX enabled by default Using config:/home/zhoumingyao/zookeeper/zookeeper-3.4.7/bin/../conf/zoo.cfg Mode: standalone
ZooKeeper服務運行以后我們可以通過命令行工具去訪問它,默認是Java命令行腳本。我們可以通過以下命令方式啟動ZooKeeper命令行Shell,運行輸出如清單1-12所示。
清單1-12 ZKCli運行輸出
[root@localhost bin]# ./zkCli.sh -server localhost:2181Connecting to localhost:2181 2015-12-20 23:22:10,620 [myid:] - INFO [main:Environment@100] - Clientenvironment:zookeeper.version=3.4.7-1713338, built on 11/09/2015 04:32 GMT 2015-12-20 23:22:10,645 [myid:] - INFO [main:Environment@100] - Client environment:host.name=localhost 2015-12-20 23:22:10,645 [myid:] - INFO [main:Environment@100] - Client environment:java.version=1.8.0_51 2015-12-20 23:22:10,657 [myid:] - INFO [main:Environment@100] - Client environment:java.vendor=OracleCorporation 2015-12-20 23:22:10,658 [myid:] - INFO [main:Environment@100] - Clientenvironment:java.home=/usr/lib/jdk1.8.0_51/jre 2015-12-20 23:22:10,658 [myid:] - INFO [main:Environment@100] - Client environment:java.class.path=/home/zhoumingyao/zookeeper/zookeeper-3.4.7/bin/../build/classes:/home/zhoumingyao/zookeeper/zookeeper-3.4.7/bin/../build/lib/*.jar:/home/zhoumingyao/zookeeper/zookeeper-3.4.7/bin/../lib/slf4j-log4j12-1.6.1.jar:/home/zhoumingyao/zookeeper/zookeeper-3.4.7/bin/../lib/slf4j-api-1.6.1.jar:/home/zhoumingyao/zookeeper/zookeeper-3.4.7/bin/../lib/netty-3.7.0.Final.jar:/home/zhoumingyao/zookeeper/zookeeper-3.4.7/bin/../lib/log4j-1.2.16.jar:/home/zhoumingyao/zookeeper/zookeeper-3.4.7/bin/../lib/jline-0.9.94.jar:/home/zhoumingyao/zookeeper/zookeeper-3.4.7/bin/../zookeeper-3.4.7.jar:/home/zhoumingyao/zookeeper/zookeeper-3.4.7/bin/../src/java/lib/*.jar:/home/zhoumingyao/zookeeper/zookeeper-3.4.7/bin/../conf: 2015-12-20 23:22:10,660 [myid:] - INFO [main:Environment@100] - Clientenvironment:java.library.path=/usr/java/packages/lib/i386:/lib:/usr/lib 2015-12-20 23:22:10,665 [myid:] - INFO [main:Environment@100] - Client environment:java.io.tmpdir=/tmp 2015-12-20 23:22:10,665 [myid:] - INFO [main:Environment@100] - Client environment:java.compiler=2015-12-20 23:22:10,666 [myid:] - INFO [main:Environment@100] - Client environment:os.name=Linux 2015-12-20 23:22:10,666 [myid:] - INFO [main:Environment@100] - Client environment:os.arch=i386 2015-12-20 23:22:10,667 [myid:] - INFO [main:Environment@100] - Clientenvironment:os.version=2.6.32-504.el6.i686 2015-12-20 23:22:10,668 [myid:] - INFO [main:Environment@100] - Client environment:user.name=root 2015-12-20 23:22:10,668 [myid:] - INFO [main:Environment@100] - Client environment:user.home=/root 2015-12-20 23:22:10,668 [myid:] - INFO [main:Environment@100] - Clientenvironment:user.dir=/home/zhoumingyao/zookeeper/zookeeper-3.4.7/bin 2015-12-20 23:22:10,693 [myid:] - INFO [main:ZooKeeper@438] - Initiating client connection,connectString=localhost:2181 sessionTimeout=30000watcher=org.apache.zookeeper.ZooKeeperMain$MyWatcher@b07fd3 Welcome to ZooKeeper! 2015-12-20 23:22:10,953 [myid:] - INFO [main-SendThread(localhost:2181):ClientCnxn$SendThread@1032] - Openingsocket connection to server localhost/0:0:0:0:0:0:0:1:2181. Will not attempt toauthenticate using SASL (unknown error) JLine support is enabled 2015-12-20 23:22:11,342 [myid:] - INFO [main-SendThread(localhost:2181):ClientCnxn$SendThread@876] - Socketconnection established to localhost/0:0:0:0:0:0:0:1:2181, initiating session 2015-12-20 23:22:11,672 [myid:] - INFO [main-SendThread(localhost:2181):ClientCnxn$SendThread@1299] - Sessionestablishment complete on server localhost/0:0:0:0:0:0:0:1:2181, sessionid =0x151c241c15b0000, negotiated timeout = 30000 WATCHER:: WatchedEvent state:SyncConnected type:None path:null [zk: localhost:2181(CONNECTED) 0]
光標停留在[zk: localhost:2181(CONNECTED) 0]這一行,我們可以通過help請求來查看所有的支持命令,如清單1-13所示。
清單1-13 ZKCli help命令
[zk: localhost:2181(CONNECTED) 0] helpZooKeeper -server host:port cmd args stat path [watch] set path data [version] ls path [watch] delquota [-n|-b] path ls2 path [watch] setAcl path acl setquota -n|-b val path history redo cmdno printwatches on|off delete path [version] sync path listquota path rmr path get path [watch] create [-s] [-e] path dataacl addauth scheme auth quit getAcl path close connect host:port
關于ZKCli命令我們會在后續章節詳細解釋,這里只做一個簡單的演示,我們可以使用類似于Linux的ls命令打印ZooKeeper內部ZNode列表,如清單1-14所示。 清單1-14 打印ZNode列表
[zk: localhost:2181(CONNECTED) 1] ls / [zookeeper]
上面示例返回一個字符串zookeeper,這是一個ZooKeeper的ZNode(ZooKeeper術語),我們可以通過腳本創建一個ZNode,如清單1-15所示。
清單1-15 創建一個ZNode
[zk: localhost:2181(CONNECTED) 3] create /HelloWorld ""Created /HelloWorld [zk: localhost:2181(CONNECTED) 4] ls / [zookeeper, HelloWorld]
上面演示了如何啟動單機模式,現在我們來演示設置偽分布式模式。
我們可以在一臺機器上創建模擬的ZooKeeper集群服務,假如我們需要3個節點,需要創建3個cfg文件,分別命名為zoo1.cfg,zoo2.cfg,zoo3.cfg,此外我們還需要創建3個不同的數據文件夾,分別是zoo1,zoo2和zoo3,目錄位于/var/lib/zookeeper,如1-16、1-17和1-18三個配置清單所示。
清單1-16 配置文件zoo1內容
[root@localhost conf]# cat zoo1.cfg# The number of milliseconds of each ticktickTime=2000# The number of ticks that the initial# synchronization phase can takeinitLimit=10# The number of ticks that can pass between# sending a request and getting an acknowledgementsyncLimit=5# the directory where the snapshot is stored.# do not use /tmp for storage, /tmp here is just# example sakes.dataDir=/var/lib/zookeeper/zoo1# the port at which the clients will connectclientPort=2181# the maximum number of client connections.# increase this if you need to handle more clients#maxClientCnxns=60## Be sure to read the maintenance section of the# administrator guide before turning on autopurge.##http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance## The number of snapshots to retain in dataDir#autopurge.snapRetainCount=3# Purge task interval in hours# Set to "0" to disable auto purge feature#autopurge.purgeInterval=1server.1=localhost:2666:3666 server.2=localhost:2667:3667 server.3=localhost:2668:3668
清單1-17 配置文件zoo2內容
[root@localhost conf]# cat zoo2.cfg# The number of milliseconds of each ticktickTime=2000# The number of ticks that the initial# synchronization phase can takeinitLimit=10# The number of ticks that can pass between# sending a request and getting an acknowledgementsyncLimit=5# the directory where the snapshot is stored.# do not use /tmp for storage, /tmp here is just# example sakes.dataDir=dataDir=/var/lib/zookeeper/zoo2# the port at which the clients will connectclientPort=2182# the maximum number of client connections.# increase this if you need to handle more clients#maxClientCnxns=60## Be sure to read the maintenance section of the# administrator guide before turning on autopurge.##http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance## The number of snapshots to retain in dataDir#autopurge.snapRetainCount=3# Purge task interval in hours# Set to "0" to disable auto purge feature#autopurge.purgeInterval=1server.1=localhost:2666:3666 server.2=localhost:2667:3667 server.3=localhost:2668:3668
清單1-18 配置文件zoo3內容
[root@localhost conf]# cat zoo3.cfg# The number of milliseconds of each ticktickTime=2000# The number of ticks that the initial# synchronization phase can takeinitLimit=10# The number of ticks that can pass between# sending a request and getting an acknowledgementsyncLimit=5# the directory where the snapshot is stored.# do not use /tmp for storage, /tmp here is just# example sakes.dataDir=/var/lib/zookeeper/zoo3# the port at which the clients will connectclientPort=2183# the maximum number of client connections.# increase this if you need to handle more clients#maxClientCnxns=60## Be sure to read the maintenance section of the# administrator guide before turning on autopurge.##http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance## The number of snapshots to retain in dataDir#autopurge.snapRetainCount=3# Purge task interval in hours# Set to "0" to disable auto purge feature#autopurge.purgeInterval=1server.1=localhost:2666:3666 server.2=localhost:2667:3667 server.3=localhost:2668:3668
注意,每一個虛擬機器都對應一個自己的zoo{$}.cfg,其中的{$}需要通過清單1-19所示命令來進行設置。
Tips
由于采用的是“>”,所以命令會創建文件,如果采用“>>”,則Linux會在原有文件基礎上新增內容。
清單1-19 設置myid
[root@localhost conf]# echo 1 > /var/lib/zookeeper/zoo1/myid[root@localhost conf]# echo 2 > /var/lib/zookeeper/zoo2/myid[root@localhost conf]# echo 3 > /var/lib/zookeeper/zoo3/myid
接下來我們開始啟動ZooKeeper的3個實例(虛擬的3臺機器),需要調用三次zkServer.sh的Start命令,采用不同的配置文件,如清單1-20所示命令及輸出。
清單1-20 啟動偽分布式集群服務
[root@localhost bin]# ./zkServer.sh start/home/zhoumingyao/zookeeper/zookeeper-3.4.7/conf/zoo1.cfgZooKeeper JMX enabled by default Using config: /home/zhoumingyao/zookeeper/zookeeper-3.4.7/conf/zoo1.cfg Starting zookeeper ... STARTED [root@localhost bin]# ./zkServer.sh start/home/zhoumingyao/zookeeper/zookeeper-3.4.7/conf/zoo2.cfgZooKeeper JMX enabled by default Using config: /home/zhoumingyao/zookeeper/zookeeper-3.4.7/conf/zoo2.cfg Starting zookeeper ... STARTED [root@localhost bin]# ./zkServer.sh start/home/zhoumingyao/zookeeper/zookeeper-3.4.7/conf/zoo3.cfgZooKeeper JMX enabled by default Using config: /home/zhoumingyao/zookeeper/zookeeper-3.4.7/conf/zoo3.cfg Starting zookeeper ... STARTED
清單1-21 查看服務
[root@localhost bin]# jps5537 QuorumPeerMain 5617 Jps 5585 QuorumPeerMain
確認服務都正常啟動,我們就可以通過zkCli.sh腳本方式連接到ZooKeeper集群,命令為./zkCli.sh -server localhost:2181,localhost:2182,localhost:2183,效果和單機模式一樣。
由于ZooKeeper單機模式不支持單點失敗保護,所以不推薦在生產環境下使用。
ZooKeeper有另外一種支持多臺機器的模式,即真正的分布式模式,這多臺包含在一個應用體內的集群機器被稱為quorum,這些機器最小配置為3臺,最佳配置為5臺,其中包含1臺Leader(領導者)機器,由5臺機器內部選舉產生,另外4臺機器就立即成為Follower(跟隨者)機器,一旦Leader宕機,剩余的Follower就會重新選舉出Leader。
從配置文件內部的字段定義上來說,分布式模式的ZooKeeper與單機模式的ZooKeeper有一些差距,例如下面三個字段:
Ø initLimit:follower對于Leader的初始化連接timeout時間; Ø syncLimit:follower對于Leader的同步timeout時間; Ø timeout的計算公式是initLimit*tickTime,syncLimit*tickTime。
此外,我們需要把組成quorum的所有機器也都列在這個配置文件里面。假設我們有兩個端口,第一個端口2889用于Follower和Leader之間的通信,通信方式是采用TCP方式,第二個端口3889是為選舉Leader用的,用于quorum內部的Leader選舉響應。那么我們配置文件如清單1-22所示。
清單1-22 分布式模式配置文件
server.1=node1:2889:3889 server.2=node2:2889:3889 server.3=node3:2889:3889
注意,分布式模式也需要設置myid,這個和偽分布式模式基本一樣,只需要在每一臺機器上實現一個myid,例如第一臺機器是1,第二臺機器上設置為2,第三臺機器上設置為3,以此類推。
分布式模式的啟動方式和單機唯一的差距是每一臺機器上都需要啟動ZooKeeper服務,即運行命令./zkServer.sh start。
ZooKeeper服務端運行后,我們可以通過在每臺機器上運行./zkServer.sh status來查看選舉結果,其中Follower節點的運行結果如清單所示,Leader節點的運行結果如清單1-23所示。
清單1-23 Follower節點的運行結果
[root@node3 bin]# ./zkServer.sh statusJMX enabled by default Using config: /usr/lib/zookeeper-3.4.6/bin/../conf/zoo.cfg Mode: follower
清單1-24 Leader節點的運行結果
[root@node2 bin]# ./zkServer.sh statusJMX enabled by default Using config: /usr/lib/zookeeper-3.4.6/bin/../conf/zoo.cfg Mode: leader
差距就在于Mode這一欄。接下來可以通過zkCli命令行訪問ZooKeeper服務,假如我們訪問node2節點,如清單1-25所示。
清單1-25 訪問ZooKeeper服務及輸出
[root@localhost bin]# ./zkCli.sh -server node2:2182Connecting to node2:2182 2016-01-19 16:15:06,702 [myid:] - INFO [main:Environment@100] - Clientenvironment:zookeeper.version=3.4.7-1713338, built on 11/09/2015 04:32 GMT 2016-01-19 16:15:06,710 [myid:] - INFO [main:Environment@100] - Client environment:host.name=node2 2016-01-19 16:15:06,710 [myid:] - INFO [main:Environment@100] - Client environment:java.version=1.7.0_79 2016-01-19 16:15:06,714 [myid:] - INFO [main:Environment@100] - Client environment:java.vendor=OracleCorporation 2016-01-19 16:15:06,714 [myid:] - INFO [main:Environment@100] - Client environment:java.home=/usr/lib/jdk1.7.0_79/jre 2016-01-19 16:15:06,715 [myid:] - INFO [main:Environment@100] - Clientenvironment:java.class.path=/home/zhoumingyao/zookeeper-3.4.7/bin/../build/classes:/home/zhoumingyao/zookeeper-3.4.7/bin/../build/lib/*.jar:/home/zhoumingyao/zookeeper-3.4.7/bin/../lib/slf4j-log4j12-1.6.1.jar:/home/zhoumingyao/zookeeper-3.4.7/bin/../lib/slf4j-api-1.6.1.jar:/home/zhoumingyao/zookeeper-3.4.7/bin/../lib/netty-3.7.0.Final.jar:/home/zhoumingyao/zookeeper-3.4.7/bin/../lib/log4j-1.2.16.jar:/home/zhoumingyao/zookeeper-3.4.7/bin/../lib/jline-0.9.94.jar:/home/zhoumingyao/zookeeper-3.4.7/bin/../zookeeper-3.4.7.jar:/home/zhoumingyao/zookeeper-3.4.7/bin/../src/java/lib/*.jar:/home/zhoumingyao/zookeeper-3.4.7/bin/../conf:.:/usr/lib/jdk1.7.0_79/lib:/usr/lib/jdk1.7.0_79/jre/lib: 2016-01-19 16:15:06,715 [myid:] - INFO [main:Environment@100] - Clientenvironment:java.library.path=/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib 2016-01-19 16:15:06,715 [myid:] - INFO [main:Environment@100] - Client environment:java.io.tmpdir=/tmp 2016-01-19 16:15:06,715 [myid:] - INFO [main:Environment@100] - Client environment:java.compiler=2016-01-19 16:15:06,716 [myid:] - INFO [main:Environment@100] - Client environment:os.name=Linux 2016-01-19 16:15:06,716 [myid:] - INFO [main:Environment@100] - Client environment:os.arch=amd64 2016-01-19 16:15:06,716 [myid:] - INFO [main:Environment@100] - Clientenvironment:os.version=3.10.0-123.el7.x86_64 2016-01-19 16:15:06,716 [myid:] - INFO [main:Environment@100] - Client environment:user.name=root 2016-01-19 16:15:06,717 [myid:] - INFO [main:Environment@100] - Client environment:user.home=/root 2016-01-19 16:15:06,717 [myid:] - INFO [main:Environment@100] - Client environment:user.dir=/home/zhoumingyao/zookeeper-3.4.7/bin 2016-01-19 16:15:06,720 [myid:] - INFO [main:ZooKeeper@438] - Initiating client connection,connectString=node2:2182 sessionTimeout=30000watcher=org.apache.zookeeper.ZooKeeperMain$MyWatcher@5dc6bb75 Welcome to ZooKeeper! 2016-01-19 16:15:06,774 [myid:] - INFO [main-SendThread(node2:2182):ClientCnxn$SendThread@1032] - Openingsocket connection to server node2/172.10.201.56:2182. Will not attempt toauthenticate using SASL (unknown error) 2016-01-19 16:15:06,783 [myid:] - INFO [main-SendThread(node2:2182):ClientCnxn$SendThread@876] - Socketconnection established to node2/172.10.201.56:2182, initiating session JLine support is enabled 2016-01-19 16:15:06,820 [myid:] - INFO [main-SendThread(node2:2182):ClientCnxn$SendThread@1299] - Sessionestablishment complete on server node2/172.10.201.56:2182, sessionid =0x25258f06e1f0000, negotiated timeout = 30000 WATCHER:: WatchedEvent state:SyncConnected type:None path:null [zk: node2:2182(CONNECTED) 0] helpZooKeeper -server host:port cmd args connect host:port get path [watch] ls path [watch] set path data [version] rmr path delquota [-n|-b] path quit printwatches on|off create [-s] [-e] path dataacl stat path [watch] close ls2 path [watch] history listquota path setAcl path acl getAcl path sync path redo cmdno addauth scheme auth delete path [version] setquota -n|-b val path [zk: node2:2182(CONNECTED) 1]
關于“ZooKeeper怎么啟動”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。