環(huán)境準(zhǔn)備
centos6.9, apache 2.2.15 , redis 3.2.12,php 7.3.13,mysql 5.1.73,thinkphp3.2.3
http是無狀態(tài)協(xié)議,web應(yīng)用中瀏覽器向服務(wù)器發(fā)送請求時,服務(wù)器通過識別客戶端傳遞的cookie(header頭信息發(fā)送)與服務(wù)器端存儲的session進(jìn)行識別驗證,session默認(rèn)存儲提供服務(wù)的本機(jī)中,在負(fù)載均衡服務(wù)架構(gòu)中,假如對session存儲不作處理,客戶端第一次請求由192.168.3.21提供服務(wù),cookie與192.168.3.21服務(wù)器建立對應(yīng),客戶端第二次請求時,由192.168.3.20提供服務(wù),此時該服務(wù)器不存在session,就出現(xiàn)客戶端登錄的情況。所以,在web應(yīng)用中實現(xiàn)負(fù)載均衡實現(xiàn)的思路就是解決session共享,本文使用的是apache轉(zhuǎn)發(fā)服務(wù)。

配置基于域名的虛擬主機(jī)提供站點服務(wù)
apache版本: 2.2.15
在etc/httpd/conf 新建文件夾 extra vhosts
clipboard.png
在站點服務(wù)器192.168.3.21,一鍵安裝apache
yum install httpd -y
cd /etc/httpd/conf
vim httpd.conf
在主配置文件httpd.conf中 添加
Include conf/extra/httpd_vhosts.conf
在 extra 創(chuàng)建 httpd_vhosts.conf
vim httpd_vhosts.conf
在httpd_vhosts.conf 添加如下內(nèi)容
NameVirtualHost *:80
Include /etc/httpd/conf/vhosts/*.conf

在 etc/httpd/conf/vhosts 新建以.conf結(jié)尾的配置文件
注: 文件名 建議見名知意,實際開發(fā)中有多個虛擬域名
vim webtest.conf
在文件 webtest.conf中添加如下代碼
<VirtualHost *:80>
ServerAdmin webtest.com
DocumentRoot /www/html/webtest
ServerName webtest.com
</VirtualHost>

在Apache的網(wǎng)站目錄下新建 文件夾 webtest 添加文件 index.php 測試
mkdir /www/html/webtest -pv
重啟apache
在windows系統(tǒng) 的hosts文件中添加
192.168.3.21 webtest.com
模仿DNS服務(wù)器
在瀏覽器 訪問 webtest.com

站點后臺服務(wù)器安裝 php-redis 擴(kuò)展 ,192.168.3.24安裝redis
在服務(wù)器192.168.3.24中 yum安裝redis
yum install -y redis
啟動redis服務(wù):
service redis start
終端:cd /usr/bin

2.2 配置 redis.conf 修改 bind 192.168.3.24 當(dāng)前虛擬主機(jī)的ip
cd /etc/redis.conf

在站點服務(wù)器192.168.3.21和192.168.3.20中安裝 php-redis 擴(kuò)展
yum install php-redis
注意:安裝時 注意 php版本與c++編譯環(huán)境
2.4 在站點服務(wù)器192.168.3.21和192.168.3.20編寫測試代碼

瀏覽器訪問 測試

轉(zhuǎn)發(fā)服務(wù)器apache配置
實際測試中可以通過域名直接轉(zhuǎn)發(fā)配置


git搭建 以及 遠(yuǎn)端 與 站點目錄自動同步
yum install git -y

git 與站點 www 目錄同步 配置過程
cd /home/git
git init --bare test.git
進(jìn)入站點目錄clone空倉庫并更改權(quán)限
cd /www/html/webtest
git clone /home/git/test.git
chown -R git:git test
配置git鉤子同步功能使其代碼提交自動同步到站點目錄
cd /home/git/test.git/hook
vim post-receive
添加
GIT_WORK_TREE=/www/html/test git checkout -f
更改文件的執(zhí)行權(quán)限
chmod +x post-receive
注意整個test.git 用戶權(quán)限
在windows 本地進(jìn)行客戶端 測試
git clone ssh://root@192.168.3.21/home/git/test.git
git add -A
git commit -m ''測試"
git pull
在服務(wù)器站點目錄下查看 代碼 同步
實際部署項目測試
下載thinkphp3.2.3核心包 編輯簡單的賬號 密碼 session 登入退出驗證
修改配置文件 添加session 驅(qū)動配置,添加緩存session驅(qū)動配置

'DATA_CACHE_TYPE' => 'redis',
'REDIS_HOST'=>'192.168.3.29',
'REDIS_PORT'=>6379,
'REDIS_DB'=>1,
'SESSION_TYPE' => 'Redis', //session保存類型
'SESSION_REDIS_DB' =>0, //session保存到redis 那個類型
'SESSION_PREFIX' => 'sess_', //session前綴
'SESSION_EXPIRE' => 180, //SESSION過期時間
添加session 驅(qū)動文件 Redis.class.php作用:相當(dāng)于更改php.ini配置文件中有關(guān)session的配置,存儲類型,以及存儲位置,等

Redis.class.php 示例 :
<?php
namespace Think\Session\Driver;
class Redis {
// Redis連接對象
private $redis;
// Session過期時間
private $expire;
//操作哪一個數(shù)據(jù)庫
private $db;
/**
* 打開方法
* @param type $path
* @param type $name
* @return type
*/
public function open($path, $name) {
$this->expire = C('SESSION_EXPIRE') ? C('SESSION_EXPIRE') : ini_get('session.gc_maxLifetime');
$this->db=C('SESSION_REDIS_DB')?C('SESSION_REDIS_DB'):0;
$this->redis = new \Redis();
$handle= $this->redis->connect(C('REDIS_HOST'), C('REDIS_PORT'));
if ($this->db) $this->redis->select($this->db); #已改寫可以靈活設(shè)置session位置
return $handle;
}
/**
* 關(guān)閉
* @return type
*/
public function close() {
return $this->redis->close();
}
/**
* 讀取
* @param string $id
* @return type
*/
public function read($id) {
$id = C('SESSION_PREFIX') . $id;
$data = $this->redis->get($id);
return $data ? $data : '';
}
/**
* 寫入
* @param string $id
* @param type $data
* @return type
*/
public function write($id, $data) {
$id = C('SESSION_PREFIX') . $id;
return $this->redis->set($id, $data, $this->expire);
}
/**
* 銷毀
* @param string $id
*/
public function destroy($id) {
$id = C('SESSION_PREFIX') . $id;
$this->redis->delete($id);
}
/**
* 垃圾回收
* @param type $maxLifeTime
* @return boolean
*/
public function gc($maxLifeTime) {
return true;
}
}
將上述做好的試驗項目上傳到 后端站點服務(wù)器 192.168.3.20 192.1683.21分別 開啟 apache服務(wù) 開啟轉(zhuǎn)發(fā)服務(wù)器 的 apache 服務(wù)及redis服務(wù)器, 在不同的瀏覽器 分別訪問 192.168.3.29, 在redis 服務(wù)里可以查看不同的瀏覽器 對應(yīng)的 session_id信息,在同一瀏覽器 重復(fù)刷新 不會出現(xiàn) 掉線的情況
配置文件設(shè)置的seesion 有效期,過期后刷新瀏覽器,
會重新提示登入

redis查看session存儲詳情



mysql 主從復(fù)制
mysql 版本 5.1.73
刷新權(quán)限列表,設(shè)置 用戶登入密碼 以及權(quán)限
flush privileges;
use mysql;
update user set password=password('123456') where user='root';
GRANT REPLICATION SLAVE ON *.* to 'root'@'%' identified by '123456';

查看主服務(wù)器的狀態(tài) 日志文件 以及 記入位置
sercice mysqld restart
mysql -uroot -p123456
show master status;

從服務(wù)器 設(shè)置 從服務(wù)器的參數(shù) 監(jiān)聽的主服務(wù)器 ip 以及 日志的位置 ```
start/stop slave;
show slave status\G

注:Slave_IO及Slave_SQL進(jìn)程必須正常運(yùn)行,即YES狀態(tài),否則都是錯誤的狀態(tài)(如:其中一個NO均屬錯誤)。
啟動失敗排錯
日志位置 log-error=/var/log/mysqld.log

主庫數(shù)據(jù)表CRUD 操作時從庫數(shù)據(jù)即可同步

