大型網站因爲大併發的問題會致使系統出現詭異的崩潰性問題這着實讓人非常蛋疼,首先考慮的就是負載均衡服務器來處理這個,固然數據庫的性能也是很是很是重要的,今天就說下在負載均衡狀況下對於session這個問題如何處理,說實話不處理session其實也是能夠的,可是在實際的狀況中會出現一些讓用戶體驗很是蛋疼的問題,好比購物下單的時候負載均衡調配服務器來回切換的過程當中session丟失了,這個時候就尷尬了,用戶就會鬱悶我擦這什麼鬼,因而乎各類擔憂就會出現,這破網站是否是有什麼安全問題等等。下面就來講說這個問題的解決方案,配置php結合redis來存儲session,假如我如今有2個(至少)服務器在作負載均衡:php
1,主服務器安裝php-redis 以及redis服務器端這個很少說去執行命令行yum或apt-get什麼的,輔服務器只須要安裝php-redis(這兩個服務器必須在一個內網中否則外網訪問着實不安全的)html
2,來吧騷年打開的你服務器上的php.ini文件:redis
先看看php extension=redis.so是否開啓 session.save_handler = redis session.save_path = "tcp://【redis主服務器的內網ip】:6379″
主和輔服務器的php-redis須要綁定一下ip(ip一致主服務器的redis-server)數據庫
redis.conf bind【redis主服務器的內網ip】
這個爲了安全起見設置一個redis連接的密碼:apache
打開 vim /etc/redis/redis.conf requirepass 通訊密碼(修改這裏)
ok配置好重啓redis :sudo service redis-server restartjson
3,測試Redis鏈接和驗證:vim
redis-cli -h 【redis主服務器內網ip】
若是設置了redis連接密碼,如今嘗試訪問數據,應該獲得一個AUTH錯誤接下來執行下安全
> redis-cli redis內網ip:6397> keys *
ok了到這步的時候已經完成99%了還差一步就是各類重啓額服務器
service apache2 restart service php5-fpm restart
4,測試session是否寫入redis:session
<?php session_start(); $_SESSION['bieanju'] = array('name' => '別安駒', 'num' => 'http://www.bieanju.com/'); //鏈接redis $redis = $this->connectRedis(); // //檢查session_id echo 'session_id:' . session_id() . '<br/>'; //redis存入的session(redis用session_id做爲key,以string的形式存儲) echo 'redis_session:' . $redis->get('PHPREDIS_SESSION:' . session_id()) . '<br/>'; echo 'php_session:' . json_encode($_SESSION['class']); print_r($_SESSION['bieanju']);
?>
速來圍觀,沒錯session寫入redis了能夠讀取了,ok至此對於負載均衡的session也就基本解決了,剩下的就是在項目如何應用那就看你本身的業務須要。
最後在說一下php是世界上最好的語言,呵呵……