Apache+Tomcat+JK實(shí)現(xiàn)負(fù)載均衡和群集的完整過程_第1頁
Apache+Tomcat+JK實(shí)現(xiàn)負(fù)載均衡和群集的完整過程_第2頁
Apache+Tomcat+JK實(shí)現(xiàn)負(fù)載均衡和群集的完整過程_第3頁
Apache+Tomcat+JK實(shí)現(xiàn)負(fù)載均衡和群集的完整過程_第4頁
Apache+Tomcat+JK實(shí)現(xiàn)負(fù)載均衡和群集的完整過程_第5頁
已閱讀5頁,還剩76頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、Linux中Apache+Tomcat+JK實(shí)現(xiàn)負(fù)載均衡和群集的完整過程 . 分類: Apache Tomcat server 2012-08-08 12:29 412人閱讀 評論(0) 收藏 舉報 轉(zhuǎn)載于:最近在開發(fā)的項(xiàng)目需要承受很高的并發(fā)量。綜合各種情況,決定使用Apache+Tomcat+JK的方式實(shí)現(xiàn)負(fù)載均衡,并且作為一個統(tǒng)一的服務(wù)還要實(shí)現(xiàn)群集(同步Session)。在網(wǎng)上找了很多資料,都是零零散散的,沒有一個完整的過程。通過幾天的努力,完成了從編譯、部署到配置的整個過程,期間也遇到了一些問題。在接下來的文字中將這些過程記錄下來,做個筆記同時也分享給大家。為了重新演示整個過程,我新搭建

2、了一個服務(wù)器,各項(xiàng)參數(shù)如下:CPU:Intel Xeon 5110內(nèi)存:DDR2 1G*4主機(jī)型號:ProLiant DL140 G3操作系統(tǒng):Red Hat Enterprise Linux Server release 5.4 x86_64版內(nèi)核版本:2.6.18gcc版本:4.1.2g+版本:4.1.2java版本:1.6.0_27plain view plaincopyprint?1. rootlxp2#cat/etc/redhat-release 2. RedHatEnterpriseLinuxServerrelease5.4(Tikanga) 3. rootlxp2#uname-a

3、 4. Linuxlxp22.6.18-164.el5xen#1SMPThuSep304:41:04EDT2009x86_64x86_64x86_64GNU/Linux 5. rootlxp2#gcc-version 6. gcc(GCC)4.1.220080704(RedHat4.1.2-46) 7. Copyright(C)2006FreeSoftwareFoundation,Inc. 8. Thisisfreesoftware;seethesourceforcopyingconditions.ThereisNO 9. warranty;notevenforMERCHANTABILITYo

4、rFITNESSFORAPARTICULARPURPOSE. 10. 11. rootlxp2#g+-version 12. g+(GCC)4.1.220080704(RedHat4.1.2-46) 13. Copyright(C)2006FreeSoftwareFoundation,Inc. 14. Thisisfreesoftware;seethesourceforcopyingconditions.ThereisNO 15. warranty;notevenforMERCHANTABILITYorFITNESSFORAPARTICULARPURPOSE. 16. 17. rootlxp2

5、#java-version 18. javaversion1.6.0_27 19. Java(TM)SERuntimeEnvironment(build1.6.0_27-b07) 20. JavaHotSpot(TM)64-BitServerVM(build20.2-b06,mixedmode) 21. rootlxp2#plain view plaincopyprint?1. rootlxp2#cat/etc/redhat-release2. RedHatEnterpriseLinuxServerrelease5.4(Tikanga)3. rootlxp2#uname-a4. Linuxlx

6、p22.6.18-164.el5xen#1SMPThuSep304:41:04EDT2009x86_64x86_64x86_64GNU/Linux5. rootlxp2#gcc-version6. gcc(GCC)4.1.220080704(RedHat4.1.2-46)7. Copyright(C)2006FreeSoftwareFoundation,Inc.8. Thisisfreesoftware;seethesourceforcopyingconditions.ThereisNO9. warranty;notevenforMERCHANTABILITYorFITNESSFORAPART

7、ICULARPURPOSE.10. 11. rootlxp2#g+-version12. g+(GCC)4.1.220080704(RedHat4.1.2-46)13. Copyright(C)2006FreeSoftwareFoundation,Inc.14. Thisisfreesoftware;seethesourceforcopyingconditions.ThereisNO15. warranty;notevenforMERCHANTABILITYorFITNESSFORAPARTICULARPURPOSE.16. 17. rootlxp2#java-version18. javav

8、ersion1.6.0_2719. Java(TM)SERuntimeEnvironment(build1.6.0_27-b07)20. JavaHotSpot(TM)64-BitServerVM(build20.2-b06,mixedmode)21. rootlxp2#rootlxp2 # cat /etc/redhat-release Red Hat Enterprise Linux Server release 5.4 (Tikanga)rootlxp2 # uname -aLinux lxp2 2.6.18-164.el5xen #1 SMP Thu Sep 3 04:41:04 ED

9、T 2009 x86_64 x86_64 x86_64 GNU/Linuxrootlxp2 # gcc -versiongcc (GCC) 4.1.2 20080704 (Red Hat 4.1.2-46)Copyright (C) 2006 Free Software Foundation, Inc.This is free software; see the source for copying conditions. There is NOwarranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

10、rootlxp2 # g+ -versiong+ (GCC) 4.1.2 20080704 (Red Hat 4.1.2-46)Copyright (C) 2006 Free Software Foundation, Inc.This is free software; see the source for copying conditions. There is NOwarranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.rootlxp2 # java -versionjava version 1.

11、6.0_27Java(TM) SE Runtime Environment (build 1.6.0_27-b07)Java HotSpot(TM) 64-Bit Server VM (build 20.2-b06, mixed mode)rootlxp2 # gcc、g+和java是必須的,如果運(yùn)行上述命令提示command not found,則需要安裝。具體安裝方法這里不做介紹,請參閱相關(guān)文檔。接下來要準(zhǔn)備的是apache服務(wù)器、tomcat服務(wù)器和JK連接器1.下載apache服務(wù)器源碼包apache服務(wù)器官方?jīng)]有發(fā)布編譯好的linux二進(jìn)制包,只能通過下載源代碼,然后自己編譯。因此需

12、要先下載源碼。訪問網(wǎng)址/download.cgi,可以看到apache服務(wù)器目前放出的版本信息,推薦使用穩(wěn)定版的release。然后選擇Unix版源碼:2.下載tomcat服務(wù)器源碼包目前tomcat服務(wù)器個人還是覺得6.0比較穩(wěn)定。7.0畢竟是新出的東西,需要一定的生產(chǎn)實(shí)踐考驗(yàn)才能達(dá)到理想的狀態(tài)。因此這里選擇tomcat 6.0。訪問網(wǎng)址/download-60.cgi,可以看到目前穩(wěn)定的版本為6.0.33:這里強(qiáng)烈建議下載tar.gz格式的壓縮包。在Linux下,文件訪問有著嚴(yán)格的權(quán)限限制。一個文件是

13、否允許以二進(jìn)制或者腳本的形式執(zhí)行,完全取決于其是否擁有執(zhí)行缺陷,這與Windows識別文件后綴名(.exe、.bat)的方式不同。zip格式的壓縮包中是不保留文件的權(quán)限信息的,而tar.gz格式的壓縮包是保存有文件的權(quán)限信息的。3.下載JK連接器源碼包作為apache與tomcat連接的橋梁,JK連接器使用C語言編寫,與apache緊密結(jié)合,作為模塊裝載到apache服務(wù)器中,通過配置實(shí)現(xiàn)與特定的tomcat服務(wù)器進(jìn)行通信,從而實(shí)現(xiàn)負(fù)載均衡的功能。訪問網(wǎng)址/download-connectors.cgi,可以找到最新最穩(wěn)定的JK連接器版本:這里還是

14、推薦下載tar.gz格式的源碼。原因同上。4.解壓apache服務(wù)器、tomcat服務(wù)器和JK連接器都已經(jīng)下載好了,如下圖所示:然后將這三個包都解壓出來:5.編譯apache服務(wù)器首先編譯apache服務(wù)器。在編譯之前需要執(zhí)行其自帶的檢測配置腳本。對于不同發(fā)行版本的Linux,默認(rèn)安裝的庫都有所差別,即便是同一個發(fā)行版本,由于用戶安裝軟件的軟件不同,也會導(dǎo)致系統(tǒng)內(nèi)包含的庫有所區(qū)別。因此apache作為開源服務(wù)器,在編譯前需要了解系統(tǒng)的庫安裝情況,某些模塊需要依賴于特定的庫,如果這些庫不存在,配置腳本將自動忽略這些庫的編譯。經(jīng)過檢測時候會生成合適的MakeFile文件。這里特別提醒一句,如果直接

15、執(zhí)行配置腳本,是不會編譯額外的模塊的,我們希望使用額外模塊時,需要在運(yùn)行配置腳本命令后加入?yún)?shù),讓其盡最大可能編譯可用的庫。關(guān)于這方面的介紹可以參閱我的另外一篇文章“Linux下編譯apache服務(wù)器modules文件夾缺少模塊(.so)的問題”(plain view plaincopyprint?1. rootlxp2Downloads#cdhttpd-2.2.21 2. rootlxp2httpd-2.2.21#./configure-enable-so-enable-mods-shared=most-with-mpm=workerplain view plaincopyprint?1.

16、rootlxp2Downloads#cdhttpd-2.2.212. rootlxp2httpd-2.2.21#./configure-enable-so-enable-mods-shared=most-with-mpm=workerrootlxp2 Downloads# cd httpd-2.2.21rootlxp2 httpd-2.2.21# ./configure -enable-so -enable-mods-shared=most -with-mpm=worker加入-with-mpm=worker是修改apache服務(wù)器的工作模式。默認(rèn)模式是prefork。prefork采用預(yù)派生

17、子進(jìn)程方式,用單獨(dú)的子進(jìn)程來處理 不同的請求,進(jìn)程之間彼此獨(dú)立。相對于prefork,worker是全新的支持多線程和多進(jìn)程混合模型的MPM(多路處理模塊)。由于使用線程來處理,所以可以處理相對海量的請求,而系統(tǒng)資源的開銷要小于基于進(jìn)程的服務(wù)器。但是,worker也使用了多進(jìn)程,每個進(jìn)程又生成多個線程,以獲得基于進(jìn)程服務(wù)器的穩(wěn)定性。如果配置過程中出現(xiàn)plain view plaincopyprint?1. configure:error:CannotuseanexternalAPRwiththebundledAPR-utilplain view plaincopyprint?1. config

18、ure:error:CannotuseanexternalAPRwiththebundledAPR-utilconfigure: error: Cannot use an external APR with the bundled APR-util這樣的錯誤信息,說明本機(jī)沒有安裝apr運(yùn)行庫,需要下載并安裝。訪問網(wǎng)址:/download.cgi,下載apr和apr-util:解壓apr和apr-utilplain view plaincopyprint?1. rootlxp2Downloads#tar-xfapr-1.4.5.tar.gz 2. root

19、lxp2Downloads#tar-xfapr-util-1.3.12.tar.gzplain view plaincopyprint?1. rootlxp2Downloads#tar-xfapr-1.4.5.tar.gz2. rootlxp2Downloads#tar-xfapr-util-1.3.12.tar.gzrootlxp2 Downloads# tar -xf apr-1.4.5.tar.gz rootlxp2 Downloads# tar -xf apr-util-1.3.12.tar.gz 進(jìn)入apr,并編譯plain view plaincopyprint?1. rootlx

20、p2Downloads#cdapr-1.4.5 2. rootlxp2apr-1.4.5#ls 3. apr-config.inbuild.confhelpersmemoryshmem 4. apr.depbuild-outputs.mkincludemiscstrings 5. apr.dspCHANGESlibapr.depmmapsupport 6. apr.dswconfig.layoutlibapr.dspnetwork_iotables 7. apr.makconfigurelibapr.makNOTICEtest 8. apr.pc.inconfigure.inlibapr.rc

21、NWGNUmakefilethreadproc 9. apr.specdocsLICENSEpasswdtime 10. atomicdsolockspolluser 11. buildemacs-modeMakefile.inrandom 12. buildconffile_ioMakefile.winREADME 13. rootlxp2apr-1.4.5#./configureplain view plaincopyprint?1. rootlxp2Downloads#cdapr-1.4.52. rootlxp2apr-1.4.5#ls3. apr-config.inbuild.conf

22、helpersmemoryshmem4. apr.depbuild-outputs.mkincludemiscstrings5. apr.dspCHANGESlibapr.depmmapsupport6. apr.dswconfig.layoutlibapr.dspnetwork_iotables7. apr.makconfigurelibapr.makNOTICEtest8. apr.pc.inconfigure.inlibapr.rcNWGNUmakefilethreadproc9. apr.specdocsLICENSEpasswdtime10. atomicdsolockspollus

23、er11. buildemacs-modeMakefile.inrandom12. buildconffile_ioMakefile.winREADME13. rootlxp2apr-1.4.5#./configurerootlxp2 Downloads# cd apr-1.4.5rootlxp2 apr-1.4.5# lsapr-config.in build.conf helpers memory shmemapr.dep build-outputs.mk include misc stringsapr.dsp CHANGES libapr.dep mmap supportapr.dsw

24、config.layout libapr.dsp network_io tablesapr.mak configure libapr.mak NOTICE testapr.pc.in configure.in libapr.rc NWGNUmakefile threadprocapr.spec docs LICENSE passwd timeatomic dso locks poll userbuild emacs-mode Makefile.in randombuildconf file_io Makefile.win READMErootlxp2 apr-1.4.5# ./configur

25、e生成了MakeFile后直接編譯plain view plaincopyprint?1. rootlxp2apr-1.4.5#ls 2. apr-1-configbuildconfdsolockspoll 3. apr-config.inbuild.confemacs-modeMakefilerandom 4. apr.depbuild-outputs.mkfile_ioMakefile.inREADME 5. apr.dspCHANGEShelpersMakefile.winshmem 6. apr.dswconfig.layoutincludememorystrings 7. apr.m

26、akconfig.loglibapr.depmiscsupport 8. apr.pcconfig.nicelibapr.dspmmaptables 9. apr.pc.inconfig.statuslibapr.maknetwork_iotest 10. apr.specconfigurelibapr.rcNOTICEthreadproc 11. atomicconfigure.inlibtoolNWGNUmakefiletime 12. builddocsLICENSEpasswduser 13. rootlxp2apr-1.4.5#makeplain view plaincopyprin

27、t?1. rootlxp2apr-1.4.5#ls2. apr-1-configbuildconfdsolockspoll3. apr-config.inbuild.confemacs-modeMakefilerandom4. apr.depbuild-outputs.mkfile_ioMakefile.inREADME5. apr.dspCHANGEShelpersMakefile.winshmem6. apr.dswconfig.layoutincludememorystrings7. apr.makconfig.loglibapr.depmiscsupport8. apr.pcconfi

28、g.nicelibapr.dspmmaptables9. apr.pc.inconfig.statuslibapr.maknetwork_iotest10. apr.specconfigurelibapr.rcNOTICEthreadproc11. atomicconfigure.inlibtoolNWGNUmakefiletime12. builddocsLICENSEpasswduser13. rootlxp2apr-1.4.5#makerootlxp2 apr-1.4.5# lsapr-1-config buildconf dso locks pollapr-config.in buil

29、d.conf emacs-mode Makefile randomapr.dep build-outputs.mk file_io Makefile.in READMEapr.dsp CHANGES helpers Makefile.win shmemapr.dsw config.layout include memory stringsapr.mak config.log libapr.dep misc supportapr.pc config.nice libapr.dsp mmap tablesapr.pc.in config.status libapr.mak network_io t

30、estapr.spec configure libapr.rc NOTICE threadprocatomic configure.in libtool NWGNUmakefile timebuild docs LICENSE passwd userrootlxp2 apr-1.4.5# make編譯好之后使用root權(quán)限安裝:plain view plaincopyprint?1. rootlxp2apr-1.4.5#sudomakeinstallplain view plaincopyprint?1. rootlxp2apr-1.4.5#sudomakeinstallrootlxp2 ap

31、r-1.4.5# sudo make install然后使用類似的方法配置apr-util:plain view plaincopyprint?1. rootlxp2Downloads#cdapr-util-1.3.12 2. rootlxp2apr-util-1.3.12#./configure-with-apr=/usr/local/aprplain view plaincopyprint?1. rootlxp2Downloads#cdapr-util-1.3.122. rootlxp2apr-util-1.3.12#./configure-with-apr=/usr/local/aprr

32、ootlxp2 Downloads# cd apr-util-1.3.12rootlxp2 apr-util-1.3.12# ./configure -with-apr=/usr/local/apr編譯apr-util: plain view plaincopyprint?1. rootlxp2apr-util-1.3.12#makeplain view plaincopyprint?1. rootlxp2apr-util-1.3.12#makerootlxp2 apr-util-1.3.12# make編譯好之后使用root權(quán)限安裝:plain view plaincopyprint?1.

33、rootlxp2apr-util-1.3.12#sudomakeinstallplain view plaincopyprint?1. rootlxp2apr-util-1.3.12#sudomakeinstallrootlxp2 apr-util-1.3.12# sudo make install當(dāng)然如果你在配置apache服務(wù)器編譯的時候沒有提示缺少“APR”,請忽略上面關(guān)于APR編譯的幾步。回到apache服務(wù)器源碼所在目錄,開始編譯:plain view plaincopyprint?1. rootlxp2httpd-2.2.21#makeplain view plaincopypri

34、nt?1. rootlxp2httpd-2.2.21#makerootlxp2 httpd-2.2.21# make編譯過程大概不到十分鐘,完成之后使用root權(quán)限進(jìn)行安裝plain view plaincopyprint?1. rootlxp2httpd-2.2.21#sudomakeinstallplain view plaincopyprint?1. rootlxp2httpd-2.2.21#sudomakeinstallrootlxp2 httpd-2.2.21# sudo make install如果不出意外,至此apache就安裝成功了。來測試一下:進(jìn)入apache服務(wù)器的bin目

35、錄,并啟動服務(wù)器:plain view plaincopyprint?1. rootlxp2httpd-2.2.21#cd/usr/local/apache2/bin/ 2. rootlxp2bin#sudo./apachectlstart 3. httpd:Couldnotreliablydeterminetheserversfullyqualifieddomainname,usingforServerNameplain view plaincopyprint?1. rootlxp2httpd-2.2.21#cd/usr/local/apache2/bin/2. rootl

36、xp2bin#sudo./apachectlstart3. httpd:Couldnotreliablydeterminetheserversfullyqualifieddomainname,usingforServerNamerootlxp2 httpd-2.2.21# cd /usr/local/apache2/bin/rootlxp2 bin# sudo ./apachectl starthttpd: Could not reliably determine the servers fully qualified domain name, using

37、 for ServerName在本地打開瀏覽器,訪問如果出現(xiàn)“It Works!”則表示啟動成功了這里要注意一點(diǎn)就是Linux的防火墻問題。如果你的Linux服務(wù)器啟動了防火墻,本地訪問上面的網(wǎng)址是沒有問題的,但如果其它計(jì)算機(jī)訪問你的服務(wù)器有可能會連接失敗。出現(xiàn)這種情況的原因是防火墻將入站80端口封鎖了。解決方法是將80端口加入到允許列表中:進(jìn)入防火墻設(shè)置后,如果發(fā)現(xiàn)Firewall狀態(tài)為Enabled,表示防火墻已啟用,需要將WWW(HTTP)服務(wù)標(biāo)記為信任,如果需要使用hhtps協(xié)議,還要將Secure WWW(HTTPS)服務(wù)也標(biāo)記為信任。如下圖所示:另外,

38、此時如果有其他程序占用80端口也是會影響到apache服務(wù)器的,需要確保這個端口沒有被占用。還有我還要補(bǔ)充一點(diǎn),在Mac OS中按照上述方法安裝apache服務(wù)器是不行的。開始的時候我不想搭建Linux服務(wù)器,想到Mac OS也是類Unix的系統(tǒng),操作命令什么的都一樣,就先在Mac上實(shí)驗(yàn)了。結(jié)果安裝上apache服務(wù)器后啟動了,每次訪問都提示505錯誤,service temporarily unavailable。經(jīng)過查閱很多資料和嘗試才發(fā)現(xiàn),原來Mac系統(tǒng)中已經(jīng)自帶了apache服務(wù)器。具體應(yīng)用是在“系統(tǒng)設(shè)置”中的“共享”功能。這個功能里有“Web共享”方式。其實(shí)現(xiàn)時使用的服務(wù)器就是apa

39、che。它采用的配置文件在/etc/httpd/目錄中。這里的配置文件和自己安裝的apache服務(wù)器配置文件沖突了,因此造成505錯誤。這一點(diǎn)需要注意。(注:我是用的Mac系統(tǒng)為Mac OS X Lion 10.7.2)2011年11月23日補(bǔ)充:如果你希望把a(bǔ)pache服務(wù)器注冊為系統(tǒng)服務(wù),讓它隨著系統(tǒng)啟動而啟動,則需要在/etc/init.d/目錄中建立服務(wù)管理腳本,我們將其命名為httpd:python view plaincopyprint?1. #!/bin/bash 2. #chkconfig:3456161 3. #description:Thisisapachehttpserv

40、ice 4. #processname:httpd 5. pidfile=/usr/local/apache2/logs/httpd.pid 6. httpd_process_name=httpd 7. httpd_path=/usr/local/apache2/bin/apachectl 8. 9. RETVAL=0 10. start() 11. echoStartingApacheHttpdService. 12. httpd_pid_list=pidof$httpd_process_name 13. iftest-n$httpd_pid_list 14. then 15. echoFa

41、ilToLaunchHttpd,SinceItHasAlreadyStarted 16. RETVAL=1 17. else 18. echoLaunchingApacheHttpdServer 19. $httpd_pathstart 20. RETVAL=$? 21. echoLaunchHttpdSuccessfully 22. fi; 23. 24. 25. stop() 26. echoStoppingApacheHttpdService. 27. httpd_pid_list=pidof$httpd_process_name 28. iftest-n$httpd_pid_list

42、29. then 30. echoFindHttpdProcess,StartToEndThem 31. $httpd_pathstop 32. iftest$?=0 33. then 34. echoSuccesstoTerminateHttpdService 35. RETVAL=0 36. else 37. echoCanNotTerminateHttpdService 38. RETVAL=1 39. fi; 40. else 41. echoCanNotFindAnyHttpdProcess,FailToStopService 42. RETVAL=0 43. fi; 44. 45.

43、 46. restart() 47. stop 48. iftest$?=0 49. then 50. #sleep3secondstowaitforprocessexit 51. sleep3 52. start 53. RETVAL=$? 54. else 55. RETVAL=$? 56. fi; 57. 58. 59. status() 60. iftest-f$pidfile 61. then 62. pid_list=cat$pidfile 63. echo$httpd_process_name(pid:$pid_list)isrunning 64. else 65. echo$httpd_process_nameisstopped 66. fi; 67. 68. 69. case$1in 70. start) 71. start 72. RETVAL=$? 73. ; 74. stop) 75. stop 76. RETVAL=$? 77. ; 78. restart) 79. restart 80. RETVAL=$? 81. ; 82. status) 83. status 84. ; 85. *) 86. echo1quot;Usage:$0start|stop|restartasdfasdfasdfasdf 87. RETVAL=2 88.

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論