1.基礎
memcache是一個高性能的分布式的內存對象緩存系統,通過在內存裡維護統一的巨大的hash表,它能夠用來存儲Sessio,當系統需要是從內存中讀取,從而大大提高讀取速度。OSSIM 4.1以後的所有系統中,采用了Memcached這個高性能的內存對象緩存系統,用於動態Web應用,主要對OSSIM各個數據庫讀寫進行緩存,以減輕MySQL數據庫的負載,配置文件讀者參考/usr/share/ossim/include/ossim_db.inc、/usr/share/ossim/include/php-ids.ini。用這種方式也是OSSIM的緩存方案之一。讀者或許會產生疑問,MySQL本身既有table_cache、query_cache機制,我們用以下命令在數據庫中查看:
mysql> show variables like '%query_cache%'
+------------------------------+----------+
| Variable_name | Value |
+------------------------------+----------+
| have_query_cache | YES |
| query_cache_limit | 1048576 |
| query_cache_min_res_unit | 4096 |
| query_cache_size | 16777216 |
| query_cache_strip_comments | OFF |
| query_cache_type | ON |
| query_cache_wlock_invalidate | OFF |
+------------------------------+----------+
7 rows in set (0.00 sec)
在查詢經常變化、表內容經常變化的場景中(OSSIM的存儲、查詢就是這樣一種狀態)這個樣一個簡單的緩存系統根本無法達到有效緩解數據庫壓力的目的。這就好比在Apache中提供的mod_disk_cache和mod_mem_cache無法真正為Web Server提供緩存樣,後面還需要Squid等緩存工具。
memcache通過在內存中緩存數據和對象來減少讀取數據庫的次數,所以為OSSIM系統提供更大的內存,有助於發揮memcache的作用,從而提高整體性能。另外為了能夠可視化的觀察緩存效果,大家可以使用phpMemcachedAdmin工具來查看,圖1、圖2、圖3是其監控效果。
配置memcached:
/etc/default/memcached /*控制開啟*/
/etc/memcached.conf /*配置memcached參數*/
Ossim調用memcache,端口11211的配置文件/usr/share/ossim/www/forensics/includes/base_db.inc.php
/usr/share/php/adodb/adodb.inc.php
/usr/share/php/adodb/adodb-memcache.lib.inc.php
2. 查看memcache狀態
下面我們采用telnet命令測試memcache工作狀態,首先輸入以下命令:
#telnet 127.0.0.1 11211
注意,Ossim Server默認沒有telnet需要自己安裝,後面的”11211”代表memcache通選端口。
然後,直接輸入“stats”命令就可以得到當前memcache狀態。如表1所示。
表1 memcache狀態信息
如果需要將緩存重置到干淨狀態則輸入“flush_all”命令。
4.使用memcache存儲Session
Apache服務器的PHP Session都給Memcached ,這樣無論把 IP連接分給哪個Web服務器都不會有問題,配置方法很簡單,就在PHP的配置文件內增加一條語句就可以了,不過前提需要裝好memcache模塊用memcache 來存儲 session 在讀寫速度上會比 files 時快很多,而且在多個服務器需要共用 session 時會比較方便,將這些服務器都配置成使用同一組 memcached 服務器就可以,減少了額外的工作量。缺點是 session 數據都保存在 memory 中,持久化方面有所欠缺,但對 session 數據來說也不是很大的問題。
注意,在OSSIM系統中采用memcache的目的是提高訪問速度,減小MySQL數據庫的壓力。通過修改/etc/default/memcached配置文件中ENABLE_MEMCACHED=yes/no控制其開關。