天天看點

lvs 負載均衡兩台提供Discuz!論壇服務的伺服器

規劃:

   1、使用lvs的nat模型,負載均衡兩台 Discuz 伺服器。

   2、Discuz 伺服器的資料共享解決方案:

       部署 Discuz! 論壇程式要解決兩大問題:

       (1)、使用者上傳的附件屬于非結構化的資料要儲存在檔案系統中。

          要解決兩台提供Discuz!論壇服務的附件共享問題:

  (A)、當使用者上傳附件時通過位址重寫機制把它定向到一台Discuz!伺服器,再通過

                rsync+innotify實時資料同步方式把附件同步到另一台Discuz!伺服器。

  (B)、使用rsync推、拉資料的方式,實作使用者上傳的附件同步,這樣無論使用者把附件上傳

               到那台伺服器都可以附件同享。

       (2)、論壇結構化的資料儲存在共享資料庫伺服器。

   3、Discuz!論壇程式是.php格式的。意思是:這裡選擇使用:lamp 平台運作論壇程式。php 以子產品的方式與 httpd 伺服器互動。

整個 Discuz! 論壇系統的結構如下圖所示:

<a href="http://s3.51cto.com/wyfs02/M01/49/19/wKiom1QO5bKjT3m-AAH2n1hQEeI365.jpg" target="_blank"></a>

一、建構LAMP平台,用來運作:Discuz! 論壇程式

 在 real1.9527du.com(192.168.60.99) 和 real2.9527du.com(192.168.60.40 兩台主機部署 LAMP 平台中的:httpd 和 php.php 以子產品的方式與 httpd 互動

 MySQL 資料庫安裝在 DataServer.9527du.com(192.168.60.88)主機,作為兩台 Discuz! 伺服器的共享資料庫伺服器

LAMP 平台使用的軟體:

1

2

3

<code>httpd-2.4.1.</code><code>tar</code><code>.bz2</code>

<code>php-5.4.26.</code><code>tar</code><code>.bz2</code>

<code>mariadb-5.5.36-linux-i686.</code><code>tar</code><code>.gz</code>

在  real1.9527du.com(192.168.60.99) 編譯安裝 httpd和php

1、編譯安裝 httpd 

解壓

<code>[root@real1 lamp]</code><code># tar -xf httpd-2.4.1.tar.bz2</code>

<code>[root@real1 lamp]</code><code># cd httpd-2.4.1</code>

編譯配置

4

5

6

7

8

9

10

11

12

13

14

15

<code>[root@real1 httpd-2.4.1]</code><code># ./configure \ </code>

<code>--prefix=</code><code>/usr/local/httpd-2</code><code>.4.1 \       指定程式的安裝位置</code>

<code>--sysconfdir=</code><code>/etc/httpd-2</code><code>.4.1 \         指定配置檔案的存放位置</code>

<code>--</code><code>enable</code><code>-so \                           使用動态裝載子產品的功能,</code>

<code>--</code><code>enable</code><code>-mods-shared=all \               編譯所有的子產品</code>

<code>--</code><code>enable</code><code>-ssl  \                         支援 https 加密資料傳輸</code>

<code>--</code><code>enable</code><code>-mpms-shared=all  \             安裝所有的mpm</code>

<code>--with-mpm=prefork  \                   設定預設使用的MPM</code>

<code>--</code><code>enable</code><code>-info \                         開啟httpd的狀态資訊功能</code>

<code>--</code><code>enable</code><code>-cgi  \                         支援cgi</code>

<code>--</code><code>enable</code><code>-rewrite \                      支援位址重定向功能</code>

<code>--with-apr=</code><code>/usr/local/apr-1</code><code>.4/ \        指定依賴的apr位置,</code>

<code>--with-apr-util=</code><code>/usr/local/apr-util-1</code><code>.4/ \</code>

<code>--with-pcre \</code>

<code>--with-z                                支援壓縮傳輸,節省帶寬但消耗CPU時間周期</code>

編譯

<code>[root@real1 httpd-2.4.1]</code><code>#make &amp;&amp; make install</code>

2、安裝 php

<code>[root@real1 admin]</code><code># tar -xf php-5.4.26.tar.bz2</code>

<code>[root@real1 admin]</code><code># cd php-5.4.26</code>

16

17

18

19

20

21

22

<code>[root@real1 php-5.4.26]</code><code># ./configure \</code>

<code>--prefix=</code><code>/usr/local/php-6</code><code>.4 \                             指定程式的安裝位置</code>

<code>--with-apxs2filter=</code><code>/usr/local/httpd-2</code><code>.4.1</code><code>/bin/apxs</code> <code>\      把php編譯成httpd的子產品</code>

<code>--</code><code>enable</code><code>-mod-charset  \                                   支援更多的字元集</code>

<code>--with-config-</code><code>file</code><code>-path=</code><code>/etc</code> <code>\                            配置檔案的路徑</code>

<code>--with-config-</code><code>file</code><code>-scan-</code><code>dir</code><code>=</code><code>/etc/php</code><code>.d \            php一般會到php.d 找它子產品的配置檔案</code>

<code>--with-libxml-</code><code>dir</code> <code>\                                       支援xml</code>

<code>--with-openssl \                                          支援openssl 加密傳輸</code>

<code>--with-zlib \                                             支援zlib壓縮</code>

<code>--with-bz2 \                                              支援bz2壓縮</code>

<code>--with-pcre-</code><code>dir</code> <code>\                                         </code>

<code>--with-gd \                                               圖形庫顯示圖形必需的</code>

<code>--with-jpeg-</code><code>dir</code> <code>\                                         支援jpeg格式的圖檔</code>

<code>--with-png-</code><code>dir</code> <code>\                                           支援png格式的圖檔</code>

<code>--with-zlib-</code><code>dir</code> <code>\</code>

<code>--with-freetype-</code><code>dir</code> <code>\                                      </code>

<code>--</code><code>enable</code><code>-mbstring  \                                      支援中文</code>

<code>--</code><code>enable</code><code>-sockets \                                        支援UNIX SOCK</code>

<code>--</code><code>enable</code><code>-maintainer-zts  \                                 安全的線程</code>

<code>--with-mysql=mysqlnd \    使用php内置連接配接資料庫的驅動。這樣就不需要事先安裝好資料庫了。</code>

<code>--with-mysqli=mysqlnd \                                   使用php内置連接配接資料庫的驅動 </code>

<code>--with-pdo-mysql=mysqlnd                                  使用php内置連接配接資料庫的驅動</code>

編譯安裝

<code>[root@real1 php-5.4.26]</code><code># make &amp;&amp; make install</code>

提供php的配置檔案

<code>[root@real1 php-5.4.26]</code><code># cp php.ini-production /etc/php.ini</code>

(1)、設定httpd的配置檔案讓httpd支援動态格式的網頁.php

設定支援.php格式的首頁

<code>&lt;IfModule dir_module&gt;</code>

<code>    </code><code>DirectoryIndex index.php index.html</code>

<code>&lt;</code><code>/IfModule</code><code>&gt;</code>

添加.php格式的網頁的處理器

<code>AddType application</code><code>/x-httpd-php</code> <code>.php</code>

<code>AddType application</code><code>/x-httpd-php-source</code> <code>.phps</code>

檢視是否加載php子產品

<code>[root@real1 ~]</code><code># grep "LoadModule[[:space:]]*php" /etc/httpd-2.4.1/httpd.conf</code>

<code>LoadModule php5_module        modules</code><code>/libphp5</code><code>.so</code>

說明:

    在 rele2.9527du.com(192.168.60.99)主機也是一樣的編譯安裝httpd、php程式和設定。

3、在 DataServer.9527du.com(192.168.60.88)安裝 MariaDB 資料庫伺服器。

(1)、準備好安裝 MariaDB 資料庫的條件

建立MariaDB資料庫的資料目錄

<code>[root@DataServer /]</code><code># mkdir -p  mysqldata/mysql</code>

建立初始化資料庫的使用者 mysql,且把該使用者建立成系統使用者預設登陸shell為:/sbin/nologing

<code>[root@DataServer /]</code><code># user -r  -s /sbin/nologin mysql</code>

<code>[root@DataServer /]</code><code># id mysql</code>

<code>uid=388(mysql) gid=388(mysql) </code><code>groups</code><code>=388(mysql)</code>

因為發起對資料目标中的資料操作(增、删、改、查)的程序的屬主是:mysql,是以要修改資料目錄的屬主屬組為:mysql.

<code>root@DataServer mysqldata]</code><code># chown mysql:mysql mysql</code>

<code>[root@DataServer mysqldata]</code><code># ll</code>

<code>total 4</code>

<code>drwxr-xr-x 2 mysql mysql 4096 Sep  8 10:41 mysql</code>

(2)、安裝 MariaDB資料庫

解壓資料庫程式到 /use/local 目錄下

<code>[root@DataServer admin]</code><code># tar -xf mariadb-5.5.36-linux-i686.tar.gz -C /usr/local/</code>

<code>[root@DataServer admin]</code><code># cd /usr/local/</code>

建立軟連結,不直接修改目錄名稱,為了以後更新方面

<code>[root@DataServer </code><code>local</code><code>]</code><code># ln -sv mariadb-5.5.36-linux-i686 mysql</code>

<code>create symbolic link `mysql</code><code>' to `mariadb-5.5.36-linux-i686'</code>

<code>[root@DataServer </code><code>local</code><code>]</code><code># ll mysql</code>

<code>lrwxrwxrwx 1 root root 25 Sep  8 09:30 mysql -&gt; mariadb-5.5.36-linux-i686</code>

修改解壓後的所有程式的屬主屬組為:mysql ,因為做資料庫的初始化時,需要以mysql的身份執行一些初始化腳本。

<code>root@DataServer </code><code>local</code><code>]</code><code># cd mysql/</code>

<code>[root@DataServer mysql]</code><code># chown -R mysql:mysql ./*</code>

<code>[root@DataServer mysql]</code><code># ll</code>

<code>total 216</code>

<code>drwxr-xr-x  2 mysql mysql   4096 Sep  8 09:34 bin</code>

<code>-rw-r--r--  1 mysql mysql  17987 Feb 24  2014 COPYING</code>

<code>-rw-r--r--  1 mysql mysql  26545 Feb 24  2014 COPYING.LESSER</code>

<code>drwxr-xr-x  3 mysql mysql   4096 Sep  8 09:34 data</code>

<code>drwxr-xr-x  2 mysql mysql   4096 Sep  8 09:34 docs</code>

<code>....</code>

初始化資料庫

<code>[root@DataServer mysql]</code><code># ./scripts/mysql_install_db --datadir=/mysqldata/mysql/  --user=mysql</code>

<code>Installing MariaDB</code><code>/MySQL</code> <code>system tables </code><code>in</code> <code>'/mysqldata/mysql/'</code> <code>...</code>

<code>OK</code>

<code>Filling help tables...</code>

說明:

   初始化資料庫已經成功。

(3)、提供啟動 MariaDB 資料庫的條件

為資料庫提供配置檔案

<code>[root@DataServer mysql]</code><code># cp support-files/my-large.cnf /etc/my.cnf</code>

根據實際情況修改資料庫的資料目錄的位置等參數

<code>[root@DataServer mysql]</code><code># vim /etc/my.cnf</code>

<code>thread_concurrency = 2</code>

<code>datadir = </code><code>/mysqldata/mysql/</code>

為 MariaDB 資料庫提供啟動腳本

<code>[root@DataServer mysql]</code><code># cp support-files/mysql.server /etc/init.d/mysqld</code>

<code>root@DataServer mysql]</code><code># ll /etc/init.d/mysqld</code>

<code>-rwxr-xr-x 1 root root 11844 Sep  8 10:48 </code><code>/etc/init</code><code>.d</code><code>/mysqld</code>

為了安全考慮,修改資料庫程式的屬主為:root 屬組為:mysql

<code>[root@DataServer mysql]</code><code># chown -R root:mysql ./*</code>

<code>drwxr-xr-x  2 root mysql   4096 Sep  8 09:34 bin</code>

<code>-rw-r--r--  1 root mysql  17987 Feb 24  2014 COPYING</code>

<code>-rw-r--r--  1 root mysql  26545 Feb 24  2014 COPYING.LESSER</code>

<code>drwxr-xr-x  3 root mysql   4096 Sep  8 09:34 data</code>

<code>drwxr-xr-x  2 root mysql   4096 Sep  8 09:34 docs</code>

<code>.....</code>

為了使用 MariaDB 資料庫提供的工具指令友善,把它所在的路徑導出來

<code>[root@DataServer /]</code><code># vim /etc/profile.d/mysql.sh</code>

<code>PATH=$PATH:</code><code>/usr/local/mysql/bin/</code>

(3)、啟動 MariaDB 資料庫并測試

啟動資料庫服務

<code>[root@DataServer /]</code><code># service  mysqld start</code>

<code>Starting MySQL..                                           [  OK  ]</code>

使用用戶端工具mysql連接配接資料庫

<code>root@DataServer /]</code><code># mysql</code>

<code>Welcome to the MariaDB monitor.  Commands end with ; or \g.</code>

<code>Your MariaDB connection </code><code>id</code> <code>is 2</code>

<code>Server version: 5.5.36-MariaDB-log MariaDB Server</code>

<code>Copyright (c) 2000, 2014, Oracle, Monty Program Ab and others.</code>

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

<code>MariaDB [(none)]&gt;</code>

    資料庫已經順利啟動。

(4)、修改資料庫資源的通路,原因安裝資料資料庫時預設安裝的使用者是沒有密碼的。極其不安全。

删除多餘的預設使用者

<code>MariaDB [(none)]&gt; drop user </code><code>'root'</code><code>@</code><code>'dataserver.9527du.com'</code><code>;</code>

<code>MariaDB [(none)]&gt; drop user </code><code>'root'</code><code>@</code><code>'::1'</code><code>;</code>

<code>MariaDB [(none)]&gt; drop user </code><code>''</code><code>@</code><code>'localhost'</code><code>;</code>

<code>MariaDB [(none)]&gt; drop user </code><code>''</code><code>@</code><code>'dataserver.9527du.com'</code><code>;</code>

<code>MariaDB [(none)]&gt; drop user </code><code>'root'</code><code>@</code><code>'localhost'</code><code>;</code>

給保留的使用者添加密碼,

<code>MariaDB [(none)]&gt; </code><code>set</code> <code>password </code><code>for</code> <code>'root'</code><code>@</code><code>'127.0.0.1'</code> <code>= password(</code><code>'root'</code><code>);</code>

<code>Query OK, 0 rows affected (0.00 sec)</code>

設定遠端管理資料庫的使用者

<code>MariaDB [(none)]&gt; grant all on *.* to </code><code>'admin'</code><code>@</code><code>'%.%.%.%'</code> <code>identified by </code><code>'admin'</code><code>;</code>

修改後的 MariaDB 資料庫的使用者清單

<code>MariaDB [(none)]&gt; </code><code>select</code> <code>user,host,password from mysql.user;</code>

<code>+-------+-----------+-------------------------------------------+</code>

<code>| user  | host      | password                                  |</code>

<code>| admin | %.%.%.%   | *4ACFE3202A5FF5CF467898FC58AAB1D615029441 |</code>

<code>| root  | 127.0.0.1 | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B |</code>

<code>2 rows </code><code>in</code> <code>set</code> <code>(0.00 sec)</code>

遠端測試是否能夠登陸操作資料庫

<code>D:\&gt;mysql -uadmin -h192.168.60.88 -p</code>

<code>Enter password: *****</code>

<code>Welcome to the MySQL monitor.  Commands end with ; or \g.</code>

<code>。。。。。</code>

<code>mysql&gt; show databases;</code>

<code>+--------------------+</code>

<code>| Database           |</code>

<code>| information_schema |</code>

<code>| mysql              |</code>

<code>| performance_schema |</code>

<code>| </code><code>test</code>               <code>|</code>

    MariaDB資料庫已經安裝完成

(5)、建立Discuz論壇使用的資料庫

<code>MariaDB [(none)]&gt; create database discuz;</code>

<code>Query OK, 1 row affected (0.00 sec)</code>

建立Discuz論壇程式通路資料庫的使用者,采用最小權限法則,該使用者隻有:Discuz 資料庫的所有權限。

<code>MariaDB [(none)]&gt; grant all on discuz.* to </code><code>'discuz'</code><code>@</code><code>'192.168.60.%'</code> <code>identified by </code><code>'discuz'</code><code>;</code>

<code>Query OK, 0 rows affected (0.01 sec)</code>

<code>MariaDB [(none)]&gt; flush privileges;</code>

    LAMP 平台的資料庫已經安裝測試成功。

4、測試,LAMP 平台

說明:都是在real1.9527du.com(192.168.60.99)主機,通過【curl】通路測試的。

(1)、添加測試頁

<code>[root@real1 htdocs]</code><code># cat index.php</code>

<code>&lt;?php</code>

<code>    </code><code>$link = mysql_connect(</code><code>'192.168.60.88'</code><code>,</code><code>'admin'</code><code>,</code><code>'admin'</code><code>);</code>

<code>    </code><code>if</code> <code>($link)</code>

<code>       </code><code>echo</code> <code>"Success..."</code><code>;  ----&gt; 如果連接配接資料庫成功會輸出:Success...</code>

<code>    </code><code>else</code>

<code>       </code><code>echo</code> <code>"Failure..."</code><code>;  ----&gt; 如果連接配接資料庫失敗會輸出:Failure...</code>

<code>?&gt;</code>

(2)、測試real1.9527du.com(192.168.60.99)主機搭建的 lamp 平台

<code>[root@real1 httpd-2.4.1]</code><code># curl http://192.168.60.99/index.php</code>

<code>Success...</code>

    連接配接資料庫成功

通過ssh遠端工具,關閉資料庫服務

<code>[root@real1 httpd-2.4.1]</code><code># ssh 192.168.60.88 'service mysqld stop'</code>

<code>[email protected]'s password:</code>

<code>Shutting down MySQL.[  OK  ]</code>

再次測試是否能夠連接配接資料庫

<code>Failure...</code>

    連接配接資料庫失敗。

192.168.60.99 主機的:lamp 平台已經搭建成功!!!

(3)、測試real2.9527du.com(192.168.60.40)主機搭建的:lamp 平台

把測試頁面發送到 192.168.60.40

<code>[root@real1 httpd-2.4.1]</code><code># scp ./htdocs/index.php 192.168.60.40:/usr/local/httpd-2.4.1/htdocs/</code>

<code>[email protected]'s password:</code>

<code>index.php                                     100%  146     0.1KB</code><code>/s</code>   <code>00:00</code>

測試 是否能夠連接配接到資料庫 

<code>[root@real1 httpd-2.4.1]</code><code># curl http://192.168.60.40/index.php                   </code>

通過ssh遠端工具,開啟資料庫服務

<code>[root@real1 httpd-2.4.1]</code><code># ssh 192.168.60.88 'service mysqld start'              </code>

<code>Starting MySQL....[  OK  ]</code>

再次通路測試

    已經連接配接到資料庫伺服器了。192.168.60.40 主機的:lamp 平台已經搭建成功!!!

   提供 Discuz 論壇服務的兩個LAMP平台都搭建成功。

二、使用rsync資料同步服務解決,兩台 Discuz! 伺服器資料共享問題;

使用rsync 資料同步服務為:real1.9527du.com(192.168.60.99)和

real2.9527du.com(192.168.60.40) 兩台提供 Discuz 論壇服務的伺服器的提供資料共享解決方案。

real1.9527du.com(192.168.60.99)作為rsync的伺服器端

real2.9527du.com(192.168.60.40)作為rsync用戶端

1、安裝配置rsync伺服器

(1)使用lvm邏輯卷儲存論壇程式

檢視VG卷組是否還有剩餘空間

<code>[root@real1 /]</code><code># vgdisplay vg0 | grep "[[:space:]]*\/[[:space:]]*Size"</code>

<code>  </code><code>Alloc PE / Size       6656 / 52.00 GiB</code>

<code>  </code><code>Free  PE / Size       1023 / 7.99 GiB</code>

 建立lvm

<code>[root@real1 /]</code><code># lvcreate -L 4G -n lvrsync vg0</code>

<code>  </code><code>Logical volume </code><code>"lvrsync"</code> <code>created</code>

格式化lvm

<code>[root@real1 /]</code><code># mke2fs -t ext4 /dev/vg0/lvrsync</code>

<code>[root@real1 /]</code><code># echo $?</code>

<code>0</code>

(2)、挂載

建立挂載點

<code>[root@real1 /]</code><code># mkdir /web</code>

設定開機自動挂載

<code>[root@real1 /]</code><code># vim /etc/fstab</code>

<code>/dev/mapper/vg0-lvrsync</code> <code>/web</code>                    <code>ext4    defaults,acl        0 0</code>

<code>[root@real1 /]</code><code># mount -a</code>

<code>[root@real1 /]</code><code># mount | grep "lvrsync"</code>

<code>/dev/mapper/vg0-lvrsync</code> <code>on </code><code>/web</code> <code>type</code> <code>ext4 (rw)</code>

(3)安裝 rsync程式并為其提供配置檔案

<code>[root@real1 /]</code><code># yum install rsync</code>

讓 rsync 以獨立守護程序方式工作。

rsync工作成服務模式,要有配置檔案,為rsync伺服器提供配置檔案

23

<code>[root@real1 /]</code><code># vim /etc/rsyncd.conf</code>

<code>#</code>

<code>uid = nobody                      </code>

<code>gid = nobody</code>

<code>use chroot = no                  </code>

<code>max connections = 10              ------&gt; 并發量</code>

<code>strict modes = </code><code>yes</code>

<code>pid </code><code>file</code> <code>= </code><code>/var/run/rsyncd</code><code>.pid     -----&gt; </code><code>rsync</code><code>的PID檔案位置</code>

<code>log </code><code>file</code> <code>= </code><code>/var/log/rsyncd</code><code>.lock    -----&gt; 鎖檔案的位置</code>

<code>[web]                              -----&gt; </code><code>rsync</code><code>伺服器導出的存儲空間的辨別</code>

<code>path = </code><code>/web</code>                        <code>------&gt; 尋出的存儲空間在檔案系統的位置</code>

<code>ignore errors                      ------&gt; 資料同步時是否忽略一些IO錯誤,繼續實作資料同步</code>

<code>read</code> <code>only = no                     -------&gt; 允許用戶端上傳資料</code>

<code>write only = no                    -------&gt; 允許用戶端拉取資料</code>

<code>hosts allow = 192.168.60.0</code><code>/24</code>      <code>--------&gt; 允許通路</code><code>rsync</code><code>伺服器的用戶端端</code>

<code>hosts deny = *</code>

<code>list = </code><code>false</code>                       <code>--------&gt; 不允許列出</code><code>rsync</code><code>伺服器導出的存儲空間</code>

<code>uid = root</code>

<code>gid = root</code>

2、配置 rsync 用戶端實時向rsync伺服器推送資料。

使用 innotify 機制實作資料的實時同步

(1)、使用lvm邏輯卷做為rsync導出的存儲空間。

檢視卷組是否還有空間建立lvm

<code>[root@real2 /]</code><code># vgdisplay | grep "[[:space:]]*\/[[:space:]]*Size"</code>

  建立lvm

<code>[root@real2 /]</code><code># lvcreate -L 4G -n web vg0</code>

<code>  </code><code>Logical volume </code><code>"web"</code> <code>created</code>

  格式化lvm

<code>[root@real2 /]</code><code># mke2fs  -t ext4 /dev/vg0/web</code>

<code>[root@real2 /]</code><code># echo $?</code>

<code>[root@real2 /]</code><code># mkdir  /web</code>

設定自動挂載

<code>[root@real2 /]</code><code># vim /etc/fstab</code>

<code>/dev/mapper/vg0-web</code>     <code>/web</code>                    <code>ext4    defaults,acl        0 0</code>

<code>[root@real2 /]</code><code># mount -a</code>

<code>[root@real2 /]</code><code># mount | grep "web"</code>

<code>/dev/mapper/vg0-web</code> <code>on </code><code>/web</code> <code>type</code> <code>ext4 (rw)</code>

(3)、安裝: innotify

inotify-tools-3.14.tar.gz 

<code>[root@real2 admin]</code><code># tar -xf  inotify-tools-3.14.tar.gz</code>

<code>[root@real2 admin]</code><code>#cd inotify-tools-3.14</code>

<code>[root@real2 inotify-tools-3.14]</code><code>#./configure --prefix=/usr/local/inotify-tools</code>

<code>[root@real2 inotify-tools-3.14]</code><code>#Make &amp;&amp; make install</code>

(4)、配置 當 /web 目錄的檔案發生改變(create、move、delete、modify)就觸發 rsync 用戶端向 rsync 服務端推送資料。

腳本如下:

<code>#/bin/bash</code>

<code>rsyncServer=192.168.60.99</code>

<code>src=</code><code>/web/</code>

<code>dst=web</code>

<code>rsync</code> <code>-azrtopg --delete $src $rsyncServer::$dst</code>

<code>/usr/local/inotify-tools/bin/inotifywait</code> <code>-mrq  -e create,move,delete,modify  $src | </code><code>while</code> <code>read</code> <code>files;</code><code>do</code>

<code>   </code><code>rsync</code> <code>-azrtopg --delete $src $rsyncServer::$dst</code>

<code>done</code>

(5)、在 rsync 服務端啟動rsync 服務

<code>[root@real1 /]</code><code># rsync --daemon --config=/etc/rsyncd.conf --ipv4</code>

檢視是否監聽

<code>[root@real1 /]</code><code># netstat -antpl | grep rsync</code>

<code>tcp        0      0 0.0.0.0:873                 0.0.0.0:*                   LISTEN      2382</code><code>/rsync</code>

在服務端以背景方式運作innotify監測腳本

<code>[root@real2 ~]</code><code># ./inotify.sh &amp;</code>

<code>[1] 2348</code>

(6)、測試:rsync + inotify 實作資料實時同步:

在 rsync 用戶端建立檔案

<code>[root@real2 ~]</code><code># touch  /web/test.txt</code>

檢視 rsync 伺服器端導出的存儲空間是否有該檔案

<code>[root@real1 web]</code><code># ll</code>

<code>total 16</code>

<code>drwx------. 2 root root 16384 Sep  8 11:32 lost+found</code>

<code>-rw-r--r--. 1 root root     0 Sep  8 11:47 </code><code>test</code><code>.txt</code>

    在rsync 用戶端,innotify 已經監測到 /web 檔案系統的 create 事件

在 rsync 用戶端修改 test.txt 檔案

<code>[root@real2 ~]</code><code># echo "test rsync server" &gt; /web/test.txt</code>

看看 rsync 伺服器端的 test.txt 檔案的内容是否改變

<code>[root@real1 web]</code><code># cat test.txt</code>

<code>test</code> <code>rsync</code> <code>server</code>

   在 rsync 用戶端,innotify 已經監測到 /web 檔案系統的"modify"檔案的事件

在 rsync 用戶端删除 test.txt 檔案

<code>[root@real2 ~]</code><code># rm -f /web/test.txt</code>

看看 rsync 服務端的 test.txt 檔案是否也被删除

    從上面測試得知,使用 rsync + innotify 實作兩台伺服器的論壇程式共享已經成功。

3、由于沒有做政策,當使用者上傳附件時候,把它定向到某台特定的discuz!伺服器。

是以,做周期性任務計劃,定時從rsync 伺服器端拉取資料到本地,實作無論使用者上傳附件到哪台伺服器。都可以實作附件共享。

<code>[root@real2 ~]</code><code># crontab -e</code>

<code>crontab</code><code>: installing new </code><code>crontab</code>

<code>*</code><code>/1</code> <code>* * * * </code><code>/usr/bin/rsync</code> <code>-aptgoz 192.168.60.99::web </code><code>/web</code>

使用 rsync 用戶端,向rsync發出資料同步請求的方式:拉取資料到本地和推送資料到rsync導出的存儲空間。

進而實作,無論使用者通路 Discuz 時被 lvs 分發到哪台主機都可有下載下傳使用者上傳的附件。 

三、部署 Discuz! 論壇程式.

1、在 real2.9527du.com(192.168.60.40) 部署 Discuz! 論壇程式.

也就是在 rsync用戶端部署 Discuz! 論壇程式,會自動通過 rsync的資料同步服務,同步到另一台Discuz 伺服器上。

(1)、建立部署論壇程式的目錄

<code>[root@real2 /]</code><code># cd web/</code>

<code>[root@real2 </code><code>/web</code><code>]</code><code># mkdir html</code>

(2)、修改 httpd 的配置檔案,【DocumentRoot】定義的文檔根目錄為:/web/html

修改real2 主機的httpd配置檔案

<code>[root@real2 upload]</code><code># vim /etc/httpd-2.4.1/httpd.conf</code>

<code>DocumentRoot </code><code>"/web/html"</code>

<code>&lt;Directory </code><code>"/web/html"</code><code>&gt;</code>

<code>   </code><code>Options -Indexes -FollowSymLinks</code>

<code>   </code><code>AllowOverride None</code>

<code>    </code><code>Require all granted</code>

<code>&lt;</code><code>/Directory</code><code>&gt;</code>

同樣也修改 real1.9527du.com 的配置檔案

<code>[root@real1 web]</code><code># vim /etc/httpd-2.4.1/httpd.conf</code>

(3)、啟動 httpd 服務

<code>[root@real2 upload]</code><code># cd /usr/local/httpd-2.4.1/</code>

<code>[root@real2 httpd-2.4.1]</code><code># ./bin/apachectl restart</code>

(4)、安裝:

<code>[root@real2 html]</code><code># unzip Discuz_X2.5_SC_GBK.zip</code>

<a href="http://s3.51cto.com/wyfs02/M02/49/1B/wKioL1QO7mXiLygWAARA-B0DIoM845.jpg" target="_blank"></a>

點選“我同意”

<a href="http://s3.51cto.com/wyfs02/M01/49/1B/wKioL1QO7rHiZGoBAALq0LJfTQg768.jpg" target="_blank"></a>

按要求修改上述目錄的權限

<a href="http://s3.51cto.com/wyfs02/M02/49/1B/wKioL1QO7z3A1VRTAAJnLGtj4iA221.jpg" target="_blank"></a>

填寫連接配接資料庫的資訊

<a href="http://s3.51cto.com/wyfs02/M00/49/1A/wKiom1QO75jCtcOkAAHmPIOVxGM224.jpg" target="_blank"></a>

在該台伺服器部署 Discuz!成功!

2、啟動 rsync 服務, 把Discuz 論壇程式同步到另一台伺服器(real1.9527du.com)。

(1)、啟動rsync服務

<code>[root@real1 web]</code><code># rsync --daemon --config=/etc/rsyncd.conf --ipv4</code>

<code>[root@real1 web]</code><code># netstat -anptl | grep rsync</code>

<code>tcp        0      0 0.0.0.0:873                 0.0.0.0:*                   LISTEN      2330</code><code>/rsync</code>

(2)、在rsyn用戶端啟動innotify監測腳本

<code>[1] 2561</code>

(3)、檢視資料是否同步過來

<code>[root@real1 web]</code><code># ll html/</code>

<code>total 9312</code>

<code>-rw-r--r--.  1 root root 9522601 Aug 16 13:54 Discuz_X2.5_SC_GBK.zip</code>

<code>drwxr-xr-x.  2 root root    4096 Oct 31  2012 readme</code>

<code>drwxr-xr-x. 12 root root    4096 Oct 31  2012 upload</code>

<code>drwxr-xr-x.  4 root root    4096 Oct 31  2012 utility</code>

(4)、啟動 real1.9527du.com 主要的http服務

<code>root@real1 web]</code><code># cd /usr/local/httpd-2.4.1/</code>

<code>[root@real1 httpd-2.4.1]</code><code># ./bin/apachectl start</code>

3、通路測試

<a href="http://s3.51cto.com/wyfs02/M01/49/1B/wKioL1QO8NCCrVrIAAJ1M-mP018537.jpg" target="_blank"></a>

通路另一台伺服器,檢視測試結果

<a href="http://s3.51cto.com/wyfs02/M01/49/1A/wKiom1QO8PGBKhJZAAH-GXJA6mk014.jpg" target="_blank"></a>

在 192.168.60.44發貼,測試在另一台伺服器是否看到

<a href="http://s3.51cto.com/wyfs02/M02/49/1B/wKioL1QO8U-iNp5hAAJ_kfNcrXI233.jpg" target="_blank"></a>

檢視192.168.60.99伺服器是否看到在192.168.60.40伺服器上傳的附件。

<a href="http://s3.51cto.com/wyfs02/M02/49/1A/wKiom1QO8ZfjSdiyAAKGhp-k59k654.jpg" target="_blank"></a>

已經測試過,還能下載下傳。

    兩台伺服器部署 Discuz! 論壇程式已經成功!!!

四、配置基于 lvs 的 nat 模型負載均衡兩台 Discuz! 伺服器。

lvs 的nat 模型工作原理:

   ipvs 捕獲到通路的是叢集服務時,通過排程算法計算該通路應該被排程到後端的那個 Real Server ,然後ipvs修改通路叢集服務的資料封包的目标IP位址為選中的 Real Server,再把資料封包發送到 Real Server.

   當 Real Server 建構完成響應了,資料封包的源IP是RIP,目标IP是CIP。網際網路的資料封包路由是根據目标IP路由的,如果,該 Real Server 能夠連接配接到外網,該資料封包是可以傳輸到CIP用戶端的。但是用戶端不會接收(因為用戶端請求的是VIP)。是以,Real Server 響應用戶端時,還應該把資料封包的源位址修改為VIP。

   是以,RealServer 還應該把資料封包送給 Directory,由它根據nat目标位址轉換會話表,把響應的資料封包的源位址修改為:VIP,再送給用戶端。

為了配合 ipvs 完成上述過程,要解決以下問題:

   (1)、Real Server 響應用戶端時,發現自己通路的網絡與自己不在同一網絡,怎麼把資料封包送給 Director?

   通過預設網關。隻要通路的網絡是别的網絡,都把資料封包送給網關。DIR做為 Real Server 的預設網關。

   是以,還要求DIP與RIP在同一個網絡中。

   (2)、Real Server 把響應封包通過預設網關送達 Director 。資料封包經過 FORWARD 鍊,送達 POST_ROUTING 會根據nat會話表完成源位址的轉換。

    此時,Director 相當于工作在網絡防火牆狀态,要使用到系統的轉發功能。是以要開啟Linux的 ip_forward 功能。才可以把資料封包送達 POST_ROUTING鍊。

如下圖:

<a href="http://s3.51cto.com/wyfs02/M01/49/1A/wKiom1QO8sWz5l-6AALGiksXlm4026.jpg" target="_blank"></a>

1、在 real1 配置預設網關(DIP:192.168.60.1)。

<code>[root@real1 ~]</code><code># route add default gw 192.168.60.1</code>

<code>[root@real1 ~]</code><code># route -n</code>

<code>Kernel IP routing table</code>

<code>Destination     Gateway         Genmask         Flags Metric Ref    Use Iface</code>

<code>0.0.0.0         192.168.60.1    0.0.0.0         UG    0      0        0 eth1</code>

<code>192.168.60.0    0.0.0.0         255.255.255.0   U     0      0        0 eth1</code>

2、在 real2 配置預設網關(DIP:192.168.60.1)

<code>[root@real2 ~]</code><code># route add default gw 192.168.60.1</code>

<code>[root@real2 ~]</code><code># route -n</code>

<code>192.168.60.0    0.0.0.0         255.255.255.0   U     0      0        0 eth0</code>

<code>0.0.0.0         192.168.60.1    0.0.0.0         UG    0      0        0 eth0</code>

3、配置 lvs 規則。

開啟資料封包轉發功能

<code>[root@director ~]</code><code># echo 1 &gt; /proc/sys/net/ipv4/ip_forward</code>

定義叢集服務,使用lvs的持久連接配接功能。

<code>[root@director ~]</code><code># ipvsadm -A -t 172.16.60.22:80 -s wlc  -p 30</code>

定義叢集服務的 Real Server

<code>[root@director ~]</code><code># ipvsadm -a -t 172.16.60.22:80 -r 192.168.60.40 -m -w 1</code>

<code>[root@director ~]</code><code># ipvsadm -a -t 172.16.60.22:80 -r 192.168.60.99 -m -w 1</code>

檢視lvs規則

<code>[root@director ~]</code><code># ipvsadm -L -n</code>

<code>IP Virtual Server version 1.2.1 (size=4096)</code>

<code>Prot LocalAddress:Port Scheduler Flags</code>

<code>  </code><code>-&gt; RemoteAddress:Port           Forward Weight ActiveConn InActConn</code>

<code>TCP  172.16.60.22:80 rr</code>

<code>  </code><code>-&gt; 192.168.60.99:80             Masq    1      0          0</code>

<code>  </code><code>-&gt; 192.168.60.40:80             Masq    1      0          0</code>

4、通路測試:

<a href="http://s3.51cto.com/wyfs02/M00/49/1B/wKioL1QO9E2QDHnOAAS_5W7-R5U454.jpg" target="_blank"></a>

到此為止,LVS負載均衡兩台: Discuz! 已經成功!!!!

     本文轉自成長的小蟲 51CTO部落格,原文連結:http://blog.51cto.com/9528du/1550332,如需轉載請自行聯系原作者