WIKI使用導(dǎo)航
站長(zhǎng)百科導(dǎo)航
站長(zhǎng)專題
- 網(wǎng)站推廣
- 網(wǎng)站程序
- 網(wǎng)站賺錢
- 虛擬主機(jī)
- cPanel
- 網(wǎng)址導(dǎo)航專題
- 云計(jì)算
- 微博營(yíng)銷
- 虛擬主機(jī)管理系統(tǒng)
- 開放平臺(tái)
- WIKI程序與應(yīng)用
- 美國(guó)十大主機(jī)
EZ Publish/EZ Publish 集群的使用
EZ Publish | EZ Publish安裝與卸載 | EZ Publish的使用 | EZ Publish常見問題 | EZ Publish其他 |
集群概述[ ]
集群特性允許在多臺(tái)WEB 服務(wù)器上運(yùn)行同一個(gè)eZ Publish 站點(diǎn)。集群站點(diǎn)會(huì)有更好的性能也可以承受更多的訪問量。
可以將所有內(nèi)容相關(guān)的緩存,圖片和二進(jìn)制文件保存在數(shù)據(jù)庫(kù)中。數(shù)據(jù)庫(kù)事務(wù)被用來保證所有的集群節(jié)點(diǎn)使用相同的緩存文件并訪問相同的圖片和二進(jìn)制文件。換言之,當(dāng)內(nèi)容被上傳,變化會(huì)自動(dòng)對(duì)所有節(jié)點(diǎn)生效。這個(gè)特性在3.10 中得到了很大的改善。
注意:當(dāng)使用集群時(shí),建議使用虛擬主機(jī)模式運(yùn)行eZ Publish。
- 3.10 引入的變化
在3.10 版本以前,清除緩存會(huì)物理刪除緩存文件。這一操作可能非常耗時(shí)。
從3.10 版本開始,系統(tǒng)會(huì)將緩存標(biāo)記為不可用而不是從數(shù)據(jù)庫(kù)或文件系統(tǒng)中物理刪除。這可以標(biāo)記每個(gè)特別緩存文件為過期或設(shè)置全局過期時(shí)間(在需要很多變化時(shí),例如:當(dāng)清除特定類型的所有緩存,后者常被使用)。全局過期時(shí)間是一個(gè)時(shí)間戳,它可以被用來作為系統(tǒng)中所有緩存的過期時(shí)間。如果全局過期時(shí)間被設(shè)置為一個(gè)特定日期,所有比這個(gè)日期舊的緩存文件都不會(huì)被使用。注意,在重建緩存的時(shí)候,系統(tǒng)會(huì)重用舊的/過期的文件內(nèi)容。
如果要從數(shù)據(jù)庫(kù)中物理刪除緩存文件,需要添加"—purge"參數(shù)來執(zhí)行"bin/php/ezcache.php"。下例演示了如何刪除所有兩天前的內(nèi)容緩存。
php bin/php/ezcache.php --clear-id=content --purge --expiry='-2 days'
如果要了解更多信息,可以用"—help"參數(shù):
php bin/php/ezcache.php --help
注意:3.10 不支持基于PostgreSQL 和Oracle 數(shù)據(jù)庫(kù)的集群。代碼針對(duì)使用InnoDB 引擎的MySQL 數(shù)據(jù)庫(kù)做了性能優(yōu)化。MySQL 的數(shù)據(jù)庫(kù)連接數(shù)必須被增加30-50%。這樣做的原因是新的集群代碼在將內(nèi)容寫入數(shù)據(jù)庫(kù)時(shí)會(huì)建立另外一個(gè)連接(這個(gè)連接用于檢查得到寫入鎖后,文件是否被修改過)。如果持續(xù)連接被啟用,集群將不會(huì)與普通數(shù)據(jù)庫(kù)操作共用連接,所以之前的連接數(shù)將翻倍。
- 3.9 版本引入的修改
從3.9 版本開始,系統(tǒng)引入了一個(gè)附加的HTTP 頭"Served-by"。這一特性用于測(cè)試和調(diào)試目的。當(dāng)您需要在客戶端檢查內(nèi)容來源于哪個(gè)服務(wù)器時(shí),這一特性變得很有用。下例演示了服務(wù)器回應(yīng)的片段。
... Last-Modified: Fri, 29 Jun 2007 09:35:54 GMT Served-by: 62.70.12.230 Content-Language: en-GB ...
- 集群如何工作
需要在不同服務(wù)器見保持同步的數(shù)據(jù)被保存在數(shù)據(jù)庫(kù)中:
? 二進(jìn)制文件
? 圖片和圖片別名
? 內(nèi)容相關(guān)的緩存
其它文件在文件系統(tǒng)中保存,包括(但不限于):
? INI 文件
? 模板文件
? 編譯的模板
? PHP 文件
? 日志文件
? 與內(nèi)容無(wú)關(guān)的緩存
- 全局INI 緩存
- INI 緩存
- 代碼頁(yè)緩存
- 字符變換緩存
- 模板緩存
- 模板重設(shè)緩存
- 內(nèi)容視圖緩存
當(dāng)eZ Publish 顯示一個(gè)頁(yè)面(一個(gè)內(nèi)容節(jié)點(diǎn))時(shí),它會(huì)執(zhí)行"content"模塊的"view"視圖并在pagelayout 中包含視圖的輸出。如果視圖的輸出被緩存,緩存文件會(huì)被讀取并使用。否則,系統(tǒng)會(huì)從eZ Publish 數(shù)據(jù)庫(kù)中提取內(nèi)容,生成必要的模板,生成WEB 頁(yè)面并在返回結(jié)果前將生成的XHTML 保存在文件系統(tǒng)中。
如前說述,這些文件現(xiàn)在可以(從3.8 版本開始)被保存在數(shù)據(jù)庫(kù)中因而文件(以及改動(dòng))可以被簡(jiǎn)單迅速地在所有的服務(wù)器中共享。
- 圖片和圖片別名
上述解決方案也被用于圖片和圖片別名(圖片變種)。但是,解決方案有一點(diǎn)復(fù)雜因?yàn)橹钡阶罱?3.8),圖片都是被Apache 直接提供的。因?yàn)閃EB 服務(wù)器不能直接與數(shù)據(jù)庫(kù)溝通,圖片需要由一個(gè)稱為"index_image.php"的PHP 腳本來提供。這條規(guī)則應(yīng)用于所有與內(nèi)容有關(guān)的圖片,但是不適用于界面中的圖片。請(qǐng)注意,需要為Apache 添加新的rewrite 規(guī)則來要求Apache 在提供圖片的時(shí)候使用"index_image.php"。
- 集群文件處理器
在3.8 中引入了一種新的文件管理器機(jī)制。它允許在數(shù)據(jù)庫(kù)中對(duì)文件進(jìn)行保存,提取,重命名,刪除等操作。集群文件處理器在"kernel/classes/clusterfilehandlers"目錄中。以下為系統(tǒng)內(nèi)建的集群文件處理器:
? ezfs(eZFSFileHandler)
? ezdb(eZDBFileHandler)
eZFSFileHandler
這個(gè)處理器允許使用文件系統(tǒng)來處理文件。
- eZDBFileHandler
這個(gè)處理器允許使用數(shù)據(jù)庫(kù)處理文件(在集群環(huán)境中,這通常包括圖片,上傳的二進(jìn)制文件,內(nèi)容有關(guān)的緩存等等)。它被劃分為不同的后臺(tái)實(shí)現(xiàn)以支持不同的數(shù)據(jù)庫(kù)(注意:目前只有MySQL 被支持)。
- 自定義處理器
可以開發(fā)自己的處理器和/或后臺(tái)實(shí)現(xiàn)來擴(kuò)展系統(tǒng)。這可以通過擴(kuò)展系統(tǒng)實(shí)現(xiàn)(不是通過修改eZ Publish內(nèi)核文件)。
"file.ini"中的"[ClusteringSettings]"下的"[ExtensionDirectories[]"數(shù)組是eZ Publish 用來尋找附加集群文件處理器的位置。默認(rèn)情況下,eZ Publish 會(huì)在擴(kuò)展的"clusterfilehandlers"子目錄內(nèi)尋找。
例
如果有一個(gè)擴(kuò)展"myExtension",它包括一個(gè)集群文件處理器"cfh"。應(yīng)該在"file.ini.append.php"文件中的"[ClusteringSettings]"下添加如下配置:
FileHandler=cfh ExtensionDirectories[]=myExtension
這些配置會(huì)要求eZ Publish 使用位于"extension/myExtension/clusterfilehandlers/cfhfilehandler.php"的自定義集群文件處理器。
集群的配置[ ]
以下步驟演示了如何配置eZ Publish 在數(shù)據(jù)庫(kù)中保存圖片,二進(jìn)制文件和內(nèi)容相關(guān)的緩存。
- 1. 清除緩存(可選)
建議(但不是必須)在啟動(dòng)集群功能之前清除所有eZ Publish 緩存。步驟如下:
php bin/php/ezcache.php --clear-all -–purge
運(yùn)行緩存腳本之后,確保所有緩存文件已經(jīng)被清除(通常在"var/cache/"和"var/<站點(diǎn)入口名稱>/cache/")。如果還有殘留文件,手動(dòng)刪除它們。
- 2. 修改"file.ini"配置
在"file.ini"的重設(shè)文件中添加如下配置:
[ClusteringSettings] FileHandler=ezdb DBBackend=mysql DBHost=localhost DBPort=3306 DBSocket= DBName=name DBUser=user DBPassword=pass DBChunkSize=65535
用實(shí)際的數(shù)據(jù)庫(kù)連接信息替換"localhost","name","user"和"pass"(大部分情況下,這些設(shè)置與"[DatabaseSettings]"下的配置相同)。確保"DBSocket"的配置正確(如果在"site.ini"的重設(shè)文件中"[DatabaseSettings]"下的配置為"Socket=disabled",則設(shè)置為空)。
在"FileHandler"配置中指定"ezdb",這會(huì)要求eZ Publish 使用指定的數(shù)據(jù)庫(kù)保存圖片,二進(jìn)制文件和內(nèi)容相關(guān)的緩存。"DBBackend"配置指定"ezdb"文件處理器應(yīng)該使用何種數(shù)據(jù)庫(kù)后端(目前,只支持"MySQL")。"DBChunkSize"指定了從數(shù)據(jù)庫(kù)中提取文件時(shí),內(nèi)容塊的大?。ㄗ止?jié))。
- 3. 創(chuàng)建新腳本用來提供圖片
所有的圖片(除了界面圖片)將會(huì)由PHP 腳本提供。Apache 會(huì)被要求用特定的PHP 腳本"index_cluster.php"來處理圖片。這個(gè)腳本必須引入"index_image.php"以及一系列配置。這個(gè)技巧可以另圖片的處理更快因?yàn)橄到y(tǒng)不需要從數(shù)據(jù)庫(kù)讀取配置。在eZ Publish 的安裝目錄中創(chuàng)建"index_cluster.php"并輸入如下內(nèi)容:
<?php define( 'STORAGE_BACKEND', 'mysql' ); define( 'STORAGE_HOST', 'localhost' ); define( 'STORAGE_PORT', 3306 ); define( 'STORAGE_SOCKET', '' ); define( 'STORAGE_USER', 'user' ); define( 'STORAGE_PASS', 'pass' ); define( 'STORAGE_DB', 'name' ); define( 'STORAGE_CHUNK_SIZE', 65535 ); include_once( 'index_image.php' ); ?>
確保數(shù)據(jù)庫(kù)的配置與"file.ini.append.php"中的"[ClusterSettings]"配置相同。
- 4. 創(chuàng)建新的數(shù)據(jù)庫(kù)表
需要在數(shù)據(jù)庫(kù)中手動(dòng)創(chuàng)建一些表。可以在"kernel/classes/clusterfilehandlers/dbbackends/mysql.php"中找到表結(jié)構(gòu)。表結(jié)構(gòu)的定義在文件開頭的注釋中。
- 5. 將文件導(dǎo)入數(shù)據(jù)庫(kù)
需要將"var"目錄中的文件復(fù)制到數(shù)據(jù)庫(kù)。在"eZ Publish"的根目錄中執(zhí)行如下腳本(用實(shí)際的站點(diǎn)入口名替換"ezwebin_site"):
php bin/php/clusterize.php -s ezwebin_site
這個(gè)腳本會(huì)將"var"目錄中的文件,圖片,圖片別名復(fù)制到數(shù)據(jù)庫(kù)中。
- 6. 編譯模板(可選)
因?yàn)樗芯彺鏋榭?,需要重新編譯模板。注意,這一步可以省略,而模板會(huì)在被請(qǐng)求時(shí)被編譯。在eZ Publish 根目錄中執(zhí)行以下腳本:
php bin/php/eztc.php -s ezwebin_site
為每個(gè)站點(diǎn)入口執(zhí)行這個(gè)腳本
- 7. 更新Apache 配置文件
Apache 需要知道在提供圖片時(shí)應(yīng)該使用哪個(gè)PHP 腳本。這個(gè)腳本只是簡(jiǎn)單地從數(shù)據(jù)庫(kù)提取并提供圖片。將以下規(guī)則添加到.htaccess 文件中其它規(guī)則之上:
Rewriterule ^/var/([^/]+/)?storage/images-versioned/.* /index_cluster.php [L] Rewriterule ^/var/([^/]+/)?storage/images/.* /index_cluster.php [L]
如果".htaccess"文件不存在,在Apache 配置文件中添加以上規(guī)則。
- 8. 重啟Apache 并測(cè)試站點(diǎn)
重啟Apache。重啟Apache 之后,系統(tǒng)會(huì)以集群模式啟動(dòng)。確認(rèn)站點(diǎn)正常工作,內(nèi)容圖片可以被顯示且內(nèi)容二進(jìn)制文件可以被訪問(在瀏覽器中登錄到管理界面,試著點(diǎn)擊不同鏈接)。
- 9. 從文件系統(tǒng)中刪除導(dǎo)入的文件
如果站點(diǎn)正常工作,可以從文件系統(tǒng)中刪除原始的內(nèi)容圖片和二進(jìn)制文件(因?yàn)樗鼈円呀?jīng)被成功導(dǎo)入數(shù)據(jù)庫(kù))。需要調(diào)查"var"目錄(特別是"var/storage/"和"var/<name_of_siteaccess>/storage/"目錄)。如果這些目錄中有任何內(nèi)容圖片或二進(jìn)制文件,可以手動(dòng)刪除它們。
撤銷集群配置[ ]
總是可以將站點(diǎn)出集群模式切換回標(biāo)準(zhǔn)模式:在文件系統(tǒng)中保存圖片,二進(jìn)制文件和內(nèi)容相關(guān)的緩存。以下步驟解釋了如何切換。假設(shè)eZ Publish 站點(diǎn)現(xiàn)在使用MySQL 保存文件。
- 1. 清除緩存(可選)
建議(不是必須)在撤銷集群之前清除緩存。
php bin/php/ezcache.php --clear-all --purge
- 2. 撤銷圖片和文件的集群
需要將圖片,二進(jìn)制文件,內(nèi)容相關(guān)的緩存從數(shù)據(jù)庫(kù)復(fù)制回文件系統(tǒng)??梢杂?bin/php/clusterize.php-u"來實(shí)現(xiàn)。執(zhí)行之前確保有足夠的磁盤空間。
下例演示了如何運(yùn)行這個(gè)腳本(用實(shí)際的站點(diǎn)入口替換"ezwebin_site")。
php bin/php/clusterize.php -u -s ezwebin_site
以上腳本將會(huì)遍歷數(shù)據(jù)庫(kù)中保存的文件并將它們復(fù)制到"var"下面正確的子目錄中。
- 3. 修改"file.ini"配置
編輯"file.ini"的重設(shè)文件并注釋以下內(nèi)容:
[ClusteringSettings] #FileHandler=ezdb #DBBackend=mysql #DBHost=localhost #DBPort=3306 #DBSocket= #DBName=name #DBUser=user #DBPassword=pass #DBChunkSize=65535
注意,您也可以直接刪除以上配置。
- 4. 禁用提供圖片的腳本
重命名或刪除"index_cluster.php"。
- 5. 修改Apache 配置
注釋或刪除以下Apache 配置:
Rewriterule ^/var/([^/]+/)?storage/images-versioned/.* /index_cluster.php [L] Rewriterule ^/var/([^/]+/)?storage/images/.* /index_cluster.php [L]
- 6. 重啟Apache 并測(cè)試站點(diǎn)
重啟Apache 服務(wù)器。重啟之后,站點(diǎn)應(yīng)該可以使用"var"目錄下的圖片,文件和內(nèi)容相關(guān)的緩存。確保站點(diǎn)正常工作(在瀏覽器中登錄管理界面,試著點(diǎn)擊不同鏈接)。
- 7. 刪除數(shù)據(jù)庫(kù)中的集群表
如果站點(diǎn)正常工作,您可以從數(shù)據(jù)庫(kù)中刪除之前使用的圖片,文件和內(nèi)容緩存。
DROP TABLE ezdbfile; DROP TABLE ezdbfile_data;