部署LAMP+NFS實現雙Web伺服器負載均衡

来源:http://www.cnblogs.com/aubin/archive/2017/10/16/7674816.html
-Advertisement-
Play Games

一、需求分析 1.前端需支持更大的訪問量,單台Web伺服器已無法滿足需求了,則需擴容Web伺服器; 2.雖然動態內容可交由後端的PHP伺服器執行,但靜態頁面還需要Web伺服器自己解析,那是否意味著多台Web伺服器都需要在各自的系統中都存有一份靜態頁面數據呢?那麼如果能將靜態頁面集中存放,所有Web服 ...


一、需求分析

1.前端需支持更大的訪問量,單台Web伺服器已無法滿足需求了,則需擴容Web伺服器;
2.雖然動態內容可交由後端的PHP伺服器執行,但靜態頁面還需要Web伺服器自己解析,那是否意味著多台Web伺服器都需要在各自的系統中都存有一份靜態頁面數據呢?那麼如果能將靜態頁面集中存放,所有Web伺服器都來集中地取文件,對於文件的一致性就有了保障,這個集中地就叫做“文件共用伺服器”;

二、需求實現:

1.web1充當http伺服器和DNS解析伺服器,客戶端到web1和web2的請求,如果是靜態資源請求通過php主機的NFS服務掛載的存儲返回結果
2.web1和web2對於客戶端動態資源請求都反向代理到後端php伺服器進行執行後返回結果
3.web1和web2實現DNS輪詢,客戶端訪問博客網站是負載均衡的。
4.建立wordpress博客
5.資料庫存儲wordpress博客的各種數據

三、架構圖

四、步驟概述

1.部署LAMP環境、配置NFS伺服器
2.web1、web2、php伺服器全部掛載NFS共用目錄為網站根目錄
3.配置httpd實現動靜分離
4.配置DNS實現負載均衡

五、詳細過程

1.web1、web2伺服器編譯安裝Apache

# 安裝依賴包
yum groupinstall "development tools"
yum install openssl-devel expat-devel pcre-devel 
#
# 解壓文件
tar xvf apr-1.6.2.tar.gz 
tar xvf apr-util-1.6.0.tar.gz 
tar xvf httpd-2.4.27.tar.bz2 
cp -r apr-1.6.2 httpd-2.4.27/srclib/apr
cp -r apr-util-1.6.0 httpd-2.4.27/srclib/apr-util
#
# 編譯安裝
cd httpd-2.4.27/
./configure \
--prefix=/app/httpd24 \
--sysconfdir=/etc/httpd24 \
--enable-so --enable-ssl \
--enable-rewrite --with-zlib \
--with-pcre --with-included-apr \
--enable-modules=most \
--enable-mpms-shared=all \
--with-mpm=prefork
#
make && make install
#
#配置環境變數
vim /etc/profile.d/lamp.sh
    PATH=/app/httpd24/bin/:$PATH
. /etc/profile.d/lamp.sh
#
# 啟動服務
apachectl start

2.資料庫伺服器二進位安裝mariadb

# 解壓文件
tar xvf mariadb-10.2.8-linux-x86_64.tar.gz  -C /usr/local/
cd /usr/local
#
# 創建軟連接,mariadb在/usr/local下必須名為mysql,可以創建軟連接,可以改名
ln -s mariadb-10.2.8-linux-x86_64/ mysql
#
# 創建用戶
useradd -r -m -d /app/mysqldb -s /sbin/nologin mysql 
cd mysql/
#
# 初始化資料庫
scripts/mysql_install_db --datadir=/app/mysqldb --user=mysql
#
# 創建配置文件
mkdir /etc/mysql
cp support-files/my-large.cnf   /etc/mysql/my.cnf
#
# 修改配置文件,指定資料庫存放路徑
vim /etc/mysql/my.cnf
[mysqld]
datadir = /app/mysqldb             在mysqld下添加這三行
innodb_file_per_table = ON
skip_name_resolve = ON
#
# 複製啟動腳本,添加開機自動啟動
cp support-files/mysql.server /etc/init.d/mysqld
chkconfig --add mysqld
chkconfig --list 
service mysqld start
#
# 創建日誌目錄
mkdir /var/log/mariadb
chown mysql /var/log/mariadb/
#
#添加環境變數
vim /etc/profile.d/lamp.sh 
   PATH=/app/httpd24/bin/:/usr/local/mysql/bin/:$PATH
. /etc/profile.d/lamp.sh
#
#調用安全加固腳本,加固資料庫。漢字為每一項的翻譯
mysql_secure_installation
  是否設置root密碼
  輸入密碼
  確認密碼
  是否設置匿名用戶
  是否允許root遠程登錄
  刪除test資料庫
  現在是否生效

3.PHP應用伺服器編譯安裝PHP7

# 安裝依賴包
yum install libxml2-devel bzip2-devel libmcrypt-devel gcc openssl-devel
tar xvf  php-7.1.7.tar.bz2
#
#編譯安裝
cd php-7.1.7.tar.bz2
./configure \
--prefix=/app/php \
--enable-mysqlnd \                          #mysqlnd 指明Mysql不再本地
--with-mysqli=mysqlnd \
--with-pdo-mysql=mysqlnd \
--with-openssl \
--enable-mbstring \
--with-freetype-dir  \
--with-jpeg-dir \
--with-png-dir \
--with-zlib \
--with-libxml-dir=/usr \
--enable-xml \
--enable-sockets \
--enable-fpm \                              #用FPM模式
--with-mcrypt \
--with-config-file-path=/etc/php \
--with-config-file-scan-dir=/etc/php.d \
--with-bz2
#
# 創建PHP配置文件
mkdir /etc/php/
cp php.ini-production /etc/php/php.ini
#
# 複製服務腳本,添加開機自動啟動
cp   sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
chmod +x /etc/init.d/php-fpm
chkconfig --add php-fpm
chkconfig --list  php-fpm
#
# 創建fpm的配置文件
cd /app/php/etc
cp php-fpm.conf.default php-fpm.conf
cd /app/php/etc/php-fpm.d/
cp www.conf.default www.conf
vim www.conf
    listen = 172.18.68.23:9000              #設置監聽的IP,註釋監聽所有, 只寫埠監聽鄋
    ;listen.allowed_clients = 127.0.0.1.    #把這項註釋掉,分號為註釋
systemctl start php-fpm

4.配置NFS伺服器

NFS伺服器的配置特別簡單,最重要的時配置完後就趕緊將NFS共用目錄掛載至web1、web2、PHP伺服器的網站根目錄。

mkdir -pv /app/nfs/web    #創建共用目錄,此目錄為網站的根目錄,實現統一管理。
vim /etc/exports
  /app/nfs/web 172.18.0.0/16(ro,sync,root_squash,no_all_squash)
# 允許172.18.0.1網段掛載NFS共用,如果要提高安全性應該控制到主機
  • Web1伺服器

    mount 172.18.68.24:/app/nfs/web /app/httpd24/htdocs        #/app/httpd24/htdocs為httpd.conf中的根目錄
  • Web2伺服器

    mount 172.18.68.24:/app/nfs/web /app/httpd24/htdocs        #/app/httpd24/htdocs為httpd.conf中的根目錄
  • PHP應用伺服器

    mkdir /app/httpd24/htdocs                                  #PHP沒有根目錄,/app/httpd24/htdocs為NFS的掛載點。
    mount 172.18.68.24:/app/nfs/web /app/httpd24/htdocs        

5.配置Apache實現動靜分離

  • 載入模塊

    vim /etc/httpd24/httpd.conf
        LoadModule proxy_module modules/mod_proxy.so                       #取消兩行的註釋,載入兩模塊
        LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
  • 動靜分離
    在配置文件的末尾追加這四行,利用代理將所有以.php結尾的文件交給PHP伺服器處理,實現動靜分離

    vim /etc/httpd24/httpd.conf
      AddType application/x-httpd-php .php
      AddType application/x-httpd-php-source .phps
      ProxyRequests Off 關閉正向代理
      ProxyPassMatch  ^/(.*\.php)$ fcgi://127.0.0.1:9000/app/httpd24/htdocs/$1  
    #要確保PHP伺服器中有這個目錄,(在NFS中創建這個目錄,且將NFS掛載至此目錄。)
    apachectl restart

6.部署wordpress博客

因為web1、web2、PHP伺服器都使用NFS共用的目錄作為根目錄,所以只需要將wordpress博客系統部署在NFS伺服器上即可讓所有伺服器得到同樣的數據。

  • 安裝博客程式

    # 解壓博客程式
    tar xvf wordpress-4.8.1-zh_CN.tar.gz  -C /app/httpd24/htdocs
    cd /app/httpd24/htdocs
    mv wordpress/ blog/
    # 創建配置文件
    cd /app/httpd24/htdocs/blog/
    cp wp-config-sample.php  wp-config.php
  • 配置資料庫
    wordpress需要資料庫,所以在此先創建一個wordpress專用的資料庫,且創建授權用戶。

    mysql -uroot -pcentos
    create datebase wpdb;
    grant all on wpdb.* to wpuser@'172.18.68.%' identified by 'centos';
  • 配置wordpress連接資料庫

    # 編輯配置文件,寫入創建的IP、資料庫、與用戶性
    vim wp-config.php
    define('DB_NAME', 'wpdb');
    #
    /** MySQL資料庫用戶名 */
    define('DB_USER', 'wpuser');
    #
    /** MySQL資料庫密碼 */
    define('DB_PASSWORD', 'centos');
    #
    /** MySQL主機 */
    define('DB_HOST', 'localhost');

7.登錄測試

8.配置DNS負載均衡

購買了單獨功能變數名稱後,在後臺控制面板中添加兩條A記錄,就可以達到負載均衡。

到這裡基於LAMP+NFS架構的雙Web伺服器、動靜分離網站就搭建完成了。
雙WEB伺服器架構的好處在於如果有一臺伺服器宕機不會是整個網站癱瘓。
NFS共用存儲的好處在於,DNS負載均衡後,不論用戶被分配到哪台主機上,都能看到相同的頁面得到相同的結果。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1》DRBD介紹 1>數據鏡像軟體DRBD介紹 分散式塊設備複製(Distributed Relicated Block Deivce,DRBD),是一種基於軟體、基於網路的塊複製存儲解決方案,主要用於對伺服器之間的磁碟分 區、邏輯捲等進行數據鏡像,當用戶將數據寫入本地磁碟時,還會將數據發送到網路中 ...
  • ...
  • ...
  • 【代碼】 輸出格式為:時間 記憶體使用大小 ...
  • 參考文檔: 本文涉及rabbitmq的基本安裝,基本的集群配置。 一.環境 1. 操作系統 CentOS-7-x86_64-Everything-1511 2. 版本 haproxu版本:1.7.7 erlang版本:20.0 rabbitmq版本:rabbitmq-server-3.6.10 ht ...
  • 小生接觸 Linux 系統時間不長,想解決linux系統ftp安裝及部署問題,折騰了大半天,終於弄出來了,將各路高手的配置方法綜合了一下,如有不對之處,歡迎各位看客指正,感謝! 一、聲明: 本文采用操作系統版本: Centos 7 Linux系統 版本源:CentOS-7-x86_64-DVD-17 ...
  • Linux grep命令 1、簡介 grep是Linux下的一種強大的文本搜索工具,使用正則表達式進行文本搜索,並把匹配的行列印出來。 2、用法 用法: grep [選項]... PATTERN [FILE]...在每個 FILE 或是標準輸入中查找 PATTERN。預設的 PATTERN 是一個基 ...
  • zabbix3.0安裝註意: 1、PHP要5.4版本以上 2、防火牆關閉 3、selinux關閉 臨時關閉selinux: setenforce 0 //設置SELinux 成為permissive模式 徹底禁用selinux: 使用root用戶,vim /etc/sysconfig/selinux ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...