haproxy實現discuz論壇的動靜分離和負載均衡

一、實驗拓撲圖

wKiom1kdoPKAMYzvAADq1jKhXWg197.png-wh_50

二、實驗步驟

A、實驗環境準備

1、在node2、node3、node4上安裝httpd

[root@localhost ~]# yum -y install httpd

2、在node3和node4上安裝php 、php-mysql

[root@localhost ~]# yum -y install php php-mysql

3、在172.18.250.193上安裝mariadb,並進行配置

[root@byq ~]#yum  -y install mariadb

啓動數據庫

[root@byq ~]#systemctl start mariadb

檢查端口

[root@byq ~]#ss -tnl
State      Recv-Q Send-Q Local Address:Port               Peer Address:Port              
LISTEN     0      50                *:3306                          *:*

配置數據庫相關內容

[root@byq ~]#mysql
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 2
Server version: 5.5.52-MariaDB MariaDB Server

Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> create database dz;
MariaDB [(none)]> grant all privileges on dz.* to 'dzadmin'@'%' identified by '123456';
MariaDB [(none)]> grant all privileges on dz.* to 'dzadmin'@'localhost' identified by '123456';
MariaDB [(none)]> flush privileges;
MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| dz                 |
| mysql              |
| performance_schema |
| test               |
+--------------------+
5 rows in set (0.00 sec)
MariaDB [(none)]> exit
Bye

遠程登陸測試創建的數據庫用戶是否正常連接

[root@BYQ ~]#mysql -udzadmin -p123456 -h172.18.250.193
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.5.52-MariaDB MariaDB Server

Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

4、編輯node2、node3、node4中httpd的配置文件httpd.conf

[root@localhost ~]# vim /etc/httpd/conf/httpd.conf

修改添加如下內容

ServerName node2.byq.com:80
DocumentRoot "/var/www/html/upload"

ServerName node3.byq.com:80
DocumentRoot "/var/www/html/upload"

ServerName node4.byq.com:80
DocumentRoot "/var/www/html/upload"


這裏配置完畢是無法啓動httpd服務的,因爲upload目錄還未生成,等下面配置完畢再啓動httpd服務


5、在node3上下載 Discuz安裝文件

[root@BYQ ~]#wget http://download.comsenz.com/DiscuzX/3.3/Discuz_X3.3_SC_UTF8.zip

解壓並安裝

[root@BYQ ~]#mkdir Discuz
[root@BYQ ~]#unzip -d /root/Discuz Discuz_X3.3_SC_UTF8.zip

將解壓後的所有文件拷貝至/var/www/html

[root@BYQ ~]#cp -a /root/Discuz/* /var/www/html/

給所有目錄及文件配置權限

[root@BYQ ~]#chmod -R 777 /var/www/html/upload/*

安裝 Discuz

這裏就做解釋了,安裝步驟就是確認,下一步即可


將配置好的文件分別scp到node3和node4的對應目錄下

[root@BYQ ~]#scp -r /var/www/html/* 172.18.249.57:/var/www/html/
[root@BYQ ~]#scp -r /var/www/html/* 172.18.10.11:/var/www/html/


6、將node3和node4的靜態文件存放目錄掛載到node2下

#/var/www/html/upload中需要掛載的目錄如下
/data   -----數據緩存及附件
/static -----靜態文件


將node2設置爲NFS服務器

[root@localhost ~]# yum install nfs-utils rpcbind
[root@localhost ~]# service rpcbind start

編輯共享文件配置

[root@localhost ~]# vim /etc/exports
#NFS輸出目錄爲data,可以訪問這個目錄的主機爲node3和node4,權限爲讀寫,訪問uid爲0(root),允許超過1024的端口號>連接
/var/www/html/upload/data/  172.18.10.10(rw,all_squash,anonuid=0,insecure)
/var/www/html/upload/data/  172.18.10.11(rw,all_squash,anonuid=0,insecure)
#NFS輸出目錄爲data,可以訪問這個目錄的主機爲node3和node 4,權限爲讀寫,訪問uid爲0(root),允許超過1024的端口號>連接
/var/www/html/upload/static/  172.18.10.10(rw,all_squash,anonuid=0,insecure)
/var/www/html/upload/static/  172.18.10.11(rw,all_squash,anonuid=0,insecure)

啓動nfs服務

[root@localhost ~]# service nfs start

查看共享文件目錄

[root@localhost ~]# showmount -e

Export list for localhost.localdomain:

/var/www/html/upload/static 172.18.10.11,172.18.10.10

/var/www/html/upload/data   172.18.10.11,172.18.10.10

啓動httpd服務

[root@localhost ~]# service httpd  start


7、在node3上掛載共享存儲目錄

[root@BYQ ~]# yum install nfs-utils rpcbind
[root@BYQ ~]# service rpcbind start
[root@BYQ ~]# service nfs start
[root@BYQ ~]#mount 172.18.249.57:/var/www/html/upload/data/ /var/www/html/upload/data/
[root@BYQ ~]#mount 172.18.249.57:/var/www/html/upload/static/ /var/www/html/upload/static/
[root@BYQ ~]#showmount -e 172.18.249.57
Export list for 172.18.249.57:
/var/www/html/upload/static 172.18.10.11,172.18.10.10
/var/www/html/upload/data   172.18.10.11,172.18.10.10


8、在node4上掛載共享存儲目錄

[root@localhost ~]# yum install nfs-utils rpcbind
[root@localhost ~]# service rpcbind start
[root@localhost ~]# service nfs start
[root@localhost ~]# yum install nfs-utils rpcbind
[root@localhost ~]# service rpcbind start
[root@localhost ~]# service nfs start
[root@localhost ~]#mount 172.18.249.57:/var/www/html/upload/data/ /var/www/html/upload/data/
[root@localhost ~]#mount 172.18.249.57:/var/www/html/upload/static/ /var/www/html/upload/static/
[root@localhost ~]#showmount -e 172.18.249.57
Export list for 172.18.249.57:
/var/www/html/upload/static 172.18.10.11,172.18.10.10
/var/www/html/upload/data   172.18.10.11,172.18.10.10


9、在node上安裝haproxy

開啓日誌功能

[root@localhost ~]# vim /etc/rsyslog.conf
#打開或增加一下幾行,讓udp514端口處於監聽狀態,並將日誌紀錄到指定文件中
$ModLoad imudp
$UDPServerRun 514
local2.*                                                /var/log/haproxy.log
[root@localhost ~]# systemctl restart rsyslog.service
[root@localhost ~]# ss -unl | grep 514
UNCONN     0      0            *:514                      *:*                  
UNCONN     0      0           :::514                     :::*


配置haproxy

[root@localhost ~]#yum install haproxy
[root@localhost ~]#cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.bak 
[root@localhost ~]#vim /etc/haproxy/haproxy.cfg
global    #全局配置

    log         127.0.0.1 local2    #日誌紀錄位置

    chroot      /var/lib/haproxy    #haproxy的工作目錄
    pidfile     /var/run/haproxy.pid    #pid文件位置
    maxconn     4000                    #最大連接數
    user        haproxy                #運行時使用的用戶身份
    group       haproxy                #運行時使用的組身份
    daemon                            #啓動爲守護進程,不加此處運行在前臺
    
    stats socket /var/lib/haproxy/stats    #本地訪問stats統計信息時以套接字方式通信
    
defaults    #默認配置
    mode                    http    #已http模式運行
    log                     global    #默認日誌爲全局配置中日誌的設置
    option                  httplog
    option                  dontlognull
    option http-server-close
    option forwardfor       except 127.0.0.0/8    #除本機外所有發往服務器的請求首部中加入“X-Forwarded-For”首部
    option                  redispatch
    retries                 3
    timeout http-request    10s
    timeout queue           1m
    timeout connect         10s
    timeout client          1m
    timeout server          1m
    timeout http-keep-alive 10s
    timeout check           10s
    maxconn                 3000    #前端最大併發連接數
    
listen static    #設置統計報告頁面
        bind *:9000    #監聽在本機9000端口
        stats enable    #打開
    stats hide-version    #隱藏haproxy版本
    stats uri /haadmin?admin  #統計頁面路徑
    stats realm "HAProxy\ Static"    #打開統計頁面的認證功能
    stats auth byq:byq123         #進入統計頁面所使用的賬號byq和密碼byq123
    stats auth administrator:administrator
    stats admin if TRUE            #條件滿足時進入管理級別
    
frontend  dz    #前端設置
        bind *:80    #監聽在80端口
        acl url_static  path_beg  -i  /data /static /p_w_picpaths /javascript /stylesheets    #url開頭爲這些的靜態內容
        acl url_static  path_end  -i  .jpg .gif .png .css .js .html .ico    #url結尾帶爲這些的靜態內容
        use_backend staser  if url_static    #如果靜態內容符合url_static的條件,就調度到staser中的服務器
        default_backend             dyser    #其他默認調度到dyser中的服務器
    
backend dyser    #後端動態內容服務器設置
   cookie srv insert nocache
        balance     roundrobin
        server      node3       172.18.10.10:80 check
        server      node4       172.18.10.11:80 check

backend staser    #後端靜態內容服務器設置
    balance     roundrobin
        server      node2       172.18.249.57:80 check

    
[root@localhost ~]# service haproxy start

修改node2、node3、node4的http配置文件,讓他們能收到真實訪問的ip

[root@localhost ~]# vim /etc/httpd/conf/httpd.conf
#修改一下內容
    LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
[root@localhost ~]# service httpd restart
#node3和node4執行同樣的操作


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章