Nginx反向代理、動靜分離、負載均衡及rewrite隱藏路徑詳解
(Nginx Apache MySQL Redis)
楓城浪子原創,轉載請標明出處!
更多技術博文請見個人博客:https://fengchenglangzi.000webhostapp.com
微信bh19890922
QQ445718526、490425557
一、實驗簡述
1.1 基本環境介紹
以下實驗使用5臺虛擬機,均爲centos 6.8,發佈Discuz論壇。
Nginx(192.168.8.134)
LAP-1(192.168.8.135)
LAP-2(192.168.8.136)
MYSQL-Master(192.168.8.137)
MYSQL-Slave(192.168.8.138)
Redis-Master(192.168.8.139)
Redis-Slave(192.168.8.140)
1.2 拓撲結構
二、環境搭建
2.1 源碼安裝LAP
2.1.1 編譯安裝Apache
LAP(Linux Apache PHP)使用源碼安裝,當然亦可YUM安裝
1 | [root@localhost ~]# yum install apr-devel apr-util-devel -y |
注:安裝編譯Apache需要的依賴包,若沒有gcc 請安裝gcc gcc-c++
1 | [root@localhost ~]# cd /usr/local/src/ |
注:下載apache源碼包進行編譯安裝,其中–enable-module=so參數一定要加上,不然後面不能進行模塊添加
2.1.2 編譯安裝PHP
1 | [root@localhost php-5.3.28]# yum -y install libxml2 libxml2-devel |
注:安裝PHP依賴包,不然編譯會報錯
1 | [root@localhost src]# wget http://mirrors.sohu.com/php/php-5.3.28.tar.bz2 |
注:編譯安裝PHP
1 | [root@localhost php-5.3.28]# cp php.ini-production /usr/local/php5/lib/php.ini |
注:把安裝包中的php.ini-production複製到/usr/local/php5/lib/並重命名爲php.ini
2.1.3 集成Apache與PHP
1 | [root@localhost php-5.3.28]# sed -i 's/DirectoryIndex/DirectoryIndex index.php/g' /usr/local/apache2/conf/httpd.conf |
注:默認情況下安裝PHP後會默認生產LoadModule php5_module modules/libphp5.so這句話,所以需要在此局下面添加
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
1 | [root@localhost php-5.3.28]# cd /usr/local/apache2/htdocs/ |
注:在發佈目錄新加index.php 並加入以上代碼,刷新瀏覽器,出現如下圖界面,說明apache與php集成成功
2.2 MySQL主從搭建
2.2.1 Mysql主從原理
MySQL 主從複製原理剖析
Mysql主從同步其實是一個異步複製的過程,要實現複製首先需要在master上開啓bin-log日誌功能,整個過程需要開啓3個線程,分別是Master開啓IO線程,slave開啓IO線程和SQL線程。
在從服務器執行slave start,從服務器上IO線程會通過授權的用戶連接上master,並請求master從指定的文件和位置之後發送bin-log日誌內容。
Master服務器接收到來自slave服務器的IO線程的請求後,master服務器上的IO線程根據slave服務器發送的指定bin-log日誌之後的內容,然後返回給slave端的IO線程。(返回的信息中除了bin-log日誌內容外,還有本次返回日誌內容後在master服務器端的新的binlog文件名以及在binlog中的下一個指定更新位置。)
Slave的IO線程接收到信息後,將接收到的日誌內容依次添加到Slave端的relay-log文件的最末端,並將讀取到的Master端的 bin-log的文件名和位置記錄到master.info文件中,以便在下一次讀取的時候能夠清楚的告訴Master”我需要從某個bin-log的哪 個位置開始往後的日誌內容,請發給我”;
Slave的Sql線程檢測到relay-log中新增加了內容後,會馬上解析relay-log的內容成爲在Master端真實執行時候的那些可執行的內容,並在自身執行。
2.2.2安裝mysql
安裝mysql環境,master和slave都執行
1 | [root@localhost ~]# yum install mysql-server mysql-devel mysql-libs –y |
啓動mysql數據庫,此時數據會自動初始化
1
2
3</div></li>
</ol>
[root@localhost ~]# service mysqld restart1
[root@localhost ~]# vim /etc/my.cnf
在文件[mysqld]中添加如下內容:
log-bin=mysql-bin 開啓binlog功能
server-id = 137 指定服務器的id,通常id指定爲ip地址的最後一位
若需要指定數據目錄請修改datadir=/var/lib/mysql,創建目錄後需要給mysql授權,最好是把用戶和組指定給mysql,本實驗不指定。
1
mysql> grant all on *.* to slave@"%" identified by "123456";
其中all代表所有權限
%代表除本機外所有ip的主機均可連接,若本機連接需要把%改爲localhost
此處的用戶名slave亦可在安裝discuz時使用,當然也可以針對數據庫單獨創建
1
mysql> flush privileges;
刷新權限
在master上執行
1
mysql> show master status;
記錄file及position
1
mysql> change master to master_host='192.168.8.137',master_user='slave',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=106;
注意以上必須按照實際填寫
1
mysql> slave start;
1
mysql> show slave status\G
如果如下兩行爲yes,代表主從同步成功。
1
mysql> create database discuz;
注:創建discuz數據庫
master修改my.cnf文件
在master上面給slave授權
slave修改my.cnf文件
查看mysql-bin及Position
重啓master及slave
在slave上查看同步狀態
啓動slave
在slave服務器指定master IP和同步的mysql-bin及pos點