2017-03-09 70 views
0

我試圖建立分佈式緩存,允許在2負載平衡的Apache服務器會話共享的工作 - 在我的php.ini我:PHP會話不memcached的

節點1

session.save_handler = memcached 
session.save_path = "tcp://NODE1_IP:11211" 

節點2

session.save_handler = memcached 
session.save_path = "tcp://NODE2_IP:11211" 

在/ etc/SYSCONFIG /分佈式緩存,我有:

PORT="11211" 
USER="memcached" 
MAXCONN="1024" 
CACHESIZE="64" 
OPTIONS="-l 127.0.0.1" 

在的phpinfo我:

session.save_handler memcached memcached 
session.save_path tcp://NODE1_IP:11211 tcp://NODE1_IP:11211 

當我登錄到我的應用程序已經在登錄頁面和檢查,如果用戶登錄頁面上的在session_start但是當我:

print_r($_SESSION); 

由於會話看起來沒有被設置,所以沒有顯示。值得注意的

的一件事是在的phpinfo我在會議部分,頂部看到這幾行:

Session Support enabled 
Registered save handlers files user 
Registered serializer handlers php_serialize php php_binary wddx 

登記保存處理程序列出了有關memcached的文件和用戶,但沒有 - 也許這可以解釋爲什麼這是不工作?我怎樣才能改變/添加到?

如若node1_ip是公共或私有IP或者沒有關係呢?

我可以telnet到本地主機11211而不是NODE1_IP 11211 - 獲得連接拒絕。端口11211已打開 - 嘗試將/ etc/sysconfig/memcached更改爲「-l NODE1_IP:11211」但仍然連接被拒絕

如果我將/ etc/sysconfig/memcached中的選項更改爲「可以telnet到NODE1_IP 11211,這樣看來我放入memcached config的格式是錯誤的?

還有什麼我需要做的嗎?我嘗試使用實際IP地址更改保存路徑,添加和刪除tcp,使用127.0.0.1,使用以逗號分隔的所有IP地址,但仍無法使其工作。

+0

如何在NODE1_IP和NODE2_IP上同步memcached? –

+0

已嘗試在兩個節點以及/ etc/sysconfig/memcached中的OPTIONS中設置session.save_path =「tcp:// NODE1_IP:11211,tcp:// NODE2_IP:11211」,但這似乎沒有任何區別 – bhttoan

+0

@bhttoan我有一個真正的噩夢讓memcached在我的負載均衡器後面工作,最終轉而使用redis。我有一個簡單的時間,因爲我的應用程序是用Laravel構建的。出於興趣,你是否在使用框架? – Spholt

回答

0

假設你正在使用負載均衡粘性會話,而不能來自同一個客戶擔保的請求是由同一個Apache服務。

OPTIONS="-l 127.0.0.1"告訴memcached來監聽本地迴環只,也就是說,它是無法訪問的,從任何地方,但本地主機。您需要更改該設置以便在專用網絡接口上進行收聽(確保它不能從互聯網上公開訪問)。

爲了保持會話都可用的Apache服務器上,你需要同步的memcached。最簡單的方法是通過指向save_path兩個服務器複製所有數據,並設置session_redundancy以3:

session.save_path = "tcp://NODE1_IP:11211, tcp://NODE2_IP:11211" 
memcache.allow_failover=1 
memcache.session_redundancy=3 

這樣的會議將被保存到兩個memcached的服務器。

如果您不想犧牲冗餘內存,只保留1個memcached運行,並指向兩個Apache服務器。

編輯:

php_memcache庫的安裝,例如Debian的發行版:

PHP 5.x的:apt-get install php5-memcache

PHP 7.x版:apt-get install php-memcache

+0

感謝您的答案 - 嘗試所有這些都無濟於事。仍然不會在我登錄時創建會話。在php.ini和/ etc/sysconfig/memcached中,我將IP設置爲專用網絡地址,是正確的還是應該將save_path設置爲公共IP地址? – bhttoan

+0

也在phpinfo中,我在「Sessions」下有「註冊的保存處理程序\t文件用戶」 - 是否需要任何其他選項來使用memcache? – bhttoan

+0

是的,如果安裝了php_memcache,則註冊的保存處理程序應該是「files user memcache」 –

0

如果您有:

session.save_handler = memcached 

這意味着你正在使用的memcache d延伸和不是memcache之一。

而在這種情況下,配置應寫入而不TCP://協議:

session.save_path NODE1_IP:11211 

的session.save_path = TCP:// NODE1_IP:11211是爲memcache擴展名,最後沒有「d」。