負(fù)載均衡示例+mysql主從同步示例

環(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ù)。

web請求響應(yīng)流程

配置基于域名的虛擬主機(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
httpd_vhosts圖例

在 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>
webtest.conf圖例

在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

hosts圖例

站點后臺服務(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

redis圖例

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

cd /etc/redis.conf   
redis配置修改示例

在站點服務(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ā)配置

域名跳轉(zhuǎn)圖例
轉(zhuǎn)發(fā)服務(wù)器轉(zhuǎn)發(fā)配置

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

yum install git -y
git安裝成功示例

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ū)動配置

thinkphp3.2.3redis配置圖例
 '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的配置,存儲類型,以及存儲位置,等

thinkphp3.2.3添加redis驅(qū)動示例

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存儲詳情

session存儲圖例
站點服務(wù)響應(yīng)圖例1

站點服務(wù)響應(yīng)圖例2

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
從服務(wù)器圖示

注: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ù)即可同步


navicate連接示例
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容