網路開展事業或在網路創業賺錢的第一步:【架設24小時賺錢網站主機】比網頁設計更優先!

感謝您造訪 Linux主機伺服器架設技術基地。 你可進入替你架設主機.影片教你維護頁面,詳細瞭解Linux主機架設及相關技術維護影片教學(完整配套措施),有主機馬上可以架設網站營運,完全無限制!

租用不如自有主機!聰明的網站經營者都選擇架設Linux主機伺服器做為網站運作平台,因功能完整又強大,免費架站程式超多!完全沒有版權問題,超強『防駭客攻擊與入侵』及安全防護可以讓你無後顧之憂。

                    架設主機.影片教你維護: http://por.tw/linux/new-E_learning/index.php

Linux主機伺服器架設技術基地  維護團隊  敬上
瀏覽模式: 普通 | 列表
使用linux下的TC進行伺服器流量控制(Linux主機伺服器架設技術)

TC很是強大很多所謂的硬體路由器,都是基於這個做的!


    TC介紹

    在Linux中,TC有二種控制方法CBQ和HTB.HTB是設計用來置換CBQ的。它是一個層次式的過濾框架。

    TC內含三個基本的構成塊: 佇列規定qdisc(queueing discipline )、類(class)和分類器(Classifiers)

    佇列(queueing discipline):用來實現控制網路的收發速度。通過佇列,linux可以將網路封包快取起來,然後根據使用者的設定,在盡量不中斷連線(如 TCP)的前提下來平滑網路流量。需要注意的是,linux對接收佇列的控制不夠好,所以我們一般只用傳送到佇列,即「控發不控收」。它封裝了其他兩個主要 TC元件(類和分類器)。內核如果需要通過某個網路介面傳送到封包,它都需要按照為這個介面配置的qdisc(排隊規則)把封包加入佇列。然後,內核會盡可能多地從qdisc裡面取出封包,把它們交給網路配接器驅動模組。

    最簡單的QDisc是pfifo它不對進入的封包做任何的處理,封包採用先入先出的模式通過佇列。不過,它會儲存網路介面一時無法處理的封包。

    佇列規則內含FIFO(先進先出),RED(隨機早期探測),SFQ(隨機公平佇列)和令牌桶(Token Bucket),類基佇列(CBQ),CBQ 是一種超級佇列,即它能夠包括其它佇列(甚至其它CBQ)。

    class用來表示控制策略。很顯然,很多時候,我們很可能要對不同的IP實行不同的流量控制策略,這時候我們就得用不同的class來表示不同的控制策略了。

    filter用來將使用者劃入到具體的控制策略中(即不同的class中)。比如,現在,我們想對xxa,xxb兩個IP實行不同的控制策略(A,B),這時,我們可用filter將xxa劃入到控制策略A,將xxb劃入到控制策略B,filter劃分的標誌位可用u32打標功能或IPtables的 set-mark(大多使用iptables來做標示)功能來實現。

    目前,TC可以使用的過濾器有:fwmark分類器,u32分類器,基於路由的分類器和RSVP分類器(分別用於IPV6、IPV4)等;其中,fwmark分類器容許我們使用 Linux netfilter 代碼選取流量,而u32分類器容許我們選取基於 ANY 頭的流量 .需要注意的是,filter(過濾器)是在QDisc內定,它們不能作為主體。

    封包->iptables(在通過iptables時,iptables根據不同的ip來設定不同的mark)->TC(class)->TC(queue)

    應用

    假設eth0位是伺服器的外網網路介面。

    1)首先在eth0的qdiscA,qdiscA控制通過本機到外網的速度,因此是用來控制伺服器流出速度的

    #tc qdisc add       dev eth1     root      handle               1:htb   default 1

    加入      設定介面     最上層     控制碼(做標示用)     標示    預設使用1的class

    解釋如下:無論是佇列,還是class和filter都有ID之類的標誌符,一般都有parent(父,上層的),注意ID具有介面本地性,不同的網路介面可以有相同的ID.對於這裡因為qdisc在頂部,所以parent無,用『root』字樣來標識,ID用1:來標誌

    『default 91′表示當某個ip流不滿足任何已設定的filter規則時,將自動歸入class 1中。更詳細的指令規則說明請參考手冊。

    2)然後在qdisc下建立兩個class,來指定eth0控制通過本機到外網的速度

    #tc class add dev eth0 parent 1:0 classid1:30 htb rate 2mbit ceil 4mbit prio 2

    註:以上就是我們控制輸出伺服器的速度,為2M,最大可以到4M

    rate: 是一個類保證得到的頻寬值。如果有不只一個類,請保證所有子類總和是小於或等於父類。

    prio:用來指示借用頻寬時的競爭力,prio越小,優先級越高,競爭力越強。

    ceil: ceil是一個類最大能得到的頻寬值。

    3)接著針對不同的應用在各root class下設定不同的類,。示例如下。(如果只有一個類,這個就沒有必要了)

    #tc class add dev eth0 parent 1:30 classid 1:31 htbrate 0.5mbit ceil 2mbit prio 3

    同時為了不使一個會話永占頻寬,在節點(即本文的各應用結點)加入隨即公平佇列sfq.(多IP)

    #tc qdisc add dev eth0 parent 1:31 handle 31:sfq perturb   10

    4)接著加入過濾器。

    #tc filter add dev eth0 parent 1: protocol ipprio 31 handle 31 fw flowid 1:31

    4)用iptable打標,也可以使用u32之類

    #iptables -t mangle -I FORWARD -i !eth1 -p tcp –sport 80 -s xxx.xxx.xxx.xxx  –j MARK –set-mark 31

TC對最對高速度的控制

    Rate ceiling 速率限度

    參數ceil指定了一個類可以用的最大頻寬, 用來限制類可以借用多少頻寬。預設的ceil是和速率一樣

    這個特性對於ISP是很有用的, 因為他們一般限制被服務的使用者的總量即使其他使用者沒有請求服務。(ISPS 很想使用者付更多的錢得到更好的服務) ,注根類是不容許被借用的, 所以沒有指定ceil

    註: ceil的數值應該至少和它所在的類的速率一樣高, 也就是說ceil應該至少和它的任何一個子類一樣高

    Burst 突發

    網路硬體只能在一個時間傳送到一個包這僅僅取決於一個硬體的速率。 鏈路共享軟體可以利用這個能力動態產生多個連線運行在不同的速度。所以速率和ceil不是一個即時度量只是一個在一個時間裡傳送到包的平均值。實際的情況是怎樣使一個流量很小的類在某個時間類以最大的速率提供給其他類。 burst 和cburst 參數控制多少資料可以以硬體最大的速度不費力的傳送到給需要的其他類。

    如果cburst 小於一個理論上的封包他形成的突發不會超過ceil 速率, 同樣的方法TBF的最高速率也是這樣。

    你可能會問, 為什麼需要bursts . 因為它可以很容易的提高向應速度在一個很擁擠的鏈路上。 比如WWW 流量是突發的。 你訪問首頁。 突發的獲得並閱讀。 在閒置的時間burst將再"charge"一次。

    註: burst 和cburst至少要和其子類的值一樣大。

    TC指令格式:

    加入

    tc qdisc [ add | change | replace | link ] dev DEV [ parent qdisc-id | root ] [ handle qdisc-id ] qdisc [ qdisc specific parameters ]

    tc class [ add | change | replace ] dev DEV parent qdisc-id [ classid class-id ] qdisc [ qdisc specific parameters ]

    tc filter [ add | change | replace ] dev DEV [ parent qdisc-id | root ] protocol protocol prio priority filtertype [ filtertype specific parameters ] flowid flow-id

    顯示

    tc [-s | -d ] qdisc show [ dev DEV ]

    tc [-s | -d ] class show dev DEV tc filter show dev DEV

    檢視TC的狀態

    tc -s -d qdisc show dev eth0

    tc -s -d class show dev eth0

    刪除tc規則

    tc qdisc del dev eth0 root

    案例

    一、下載

    下載限制單個IP

    tc qdisc add dev eth0 root handle 1: htb r2q 1

    tc class add dev eth0 parent 1: classid 1:1 htb rate 30mbit ceil 60mbit

    tc filter add dev eth0 parent 1: protocol ip prio 16 u32 match ip dst 192.168.1.2  flowid 1:1

    就可以限制192.168.1.2的下載速度為30Mbit最高可以60Mbit

    r2q,是指沒有default的root,使整個網路的頻寬沒有限制

    下載整段IP

    tc qdisc add dev eth0 root handle 1: htb r2q 1

    tc class add dev eth0 parent 1: classid 1:1 htb rate 50mbit ceil 1000mbit

    tc filter add dev eth0 parent 1: protocol ip prio 16 u32 match ip dst 192.168.111.0/24 flowid 1:1

    就可以限制192.168.111.0 到255 的頻寬為3000k了,實際下載速度為200k左右。

    這種情況下,這個網段所有機器共享這200k的頻寬。

    還可以加入一個sfq(隨機公平佇列)

    tc qdisc add dev eth0 root handle 1: htb r2q 1

    tc class add dev eth0 parent 1: classid 1:1 htb rate 3000kbit burst 10k

    tc qdisc add dev eth0 parent 1:1 handle 10: sfq perturb 10

    tc filter add dev eth0 parent 1: protocol ip prio 16 u32 match ip dst 192.168.111.168 flowid 1:1

    sfq,他可以防止一個段內的一個ip佔用整個頻寬。
Linux主機伺服器架設技術(Linux加掛第二顆硬碟)

  流程簡介

檢查硬碟代號→ fdisk → mkfs.ext3格式化 → 永久掛載



檢查第二顆硬碟的代號

    * 若 IDE 直接檢查 hd 字串
      root@dns:~# dmesg |grep hd

Kernel command line: root=/dev/hda2 ro  vga=788 splash=silent


hda: cache flushes supported
 hda: hda1 hda2 ← 第一顆硬碟,內含兩個分割區
Adding 2931820k swap on /dev/hda1.  Priority:-1 extents:1 across:2931820k
EXT3 FS on hda2, internal journal
ide-scsi is deprecated for cd burning! Use ide-cd and give dev=/dev/hdX as device
hda: selected mode 0x46

由以上知,只有一顆硬碟時,會叫 hda, 分成兩個分割區。若有第二顆會出現 hdb, 第三顆 hdc ...依此類推


    * 若 SATA , 那麼 hd 及 sd 皆可能
      root@dns:~# dmesg |grep sd

hdc: LITE-ON DVD SOHD-16P9S, ATAPI CD/DVD-ROM drive
SCSI device sda: 312581808 512-byte hdwr sectors (160042 MB) ← 第一顆 sata 硬碟
SCSI device sdb: 312581808 512-byte hdwr sectors (160042 MB) ← 第二顆 sata 硬碟
hdc: ATAPI 48X DVD-ROM drive, 254kB Cache  ← 光碟機

由以上知,第一顆是 sda, 第二顆 sdb ...依此類推


    * 若 SCSI 直接檢查 sd 字串
      root@dns:~# dmesg |grep sd

SCSI device sda: 312581808 512-byte hdwr sectors (160042 MB) ← 第一顆 sata 硬碟
SCSI device sdb: 312581808 512-byte hdwr sectors (160042 MB) ← 第二顆 sata 硬碟



開始動手
安置硬碟 FDISK

    * 使用 FDISK 初始化新的硬碟
      root@dns# fdisk /dev/hdb

Command (m for help): x
Expert command (m for help): m
Command action
  b move beginning of data in a partition
  c change number of cylinders
  d print the raw data in the partition table
  e list extended partitions
  f fix partition order
  g create an IRIX (SGI) partition table
  h change number of heads
  m print this menu
  n add a new partition
  p print the partition table
  q quit without saving changes
  r return to main menu
  s change number of sectors/track
  v verify the partition table
  w write table to disk and exit


   1. 新增
      Command (m for help): n
   2. 選完分割區大小後, 寫入
      Command (m for help): w
      會顯示The partition table has been altered! 訊息
   3. 離開 FDISK
      Command (m for help): q



格式化並手動掛載

    * 格式化 hdb1
      root@dns:# mkfs.ext3 /dev/hdb1

    * 將新硬碟掛在新增目錄
      root@dns# mount -t ext3 /dev/hdb1 /home2



寫入/etc/fstab永久掛載

    * 永久掛載
      root@dns:~$ vi /etc/fstab

#

# filesystem mountpoint type options dump pass
/dev/sda2 / ext3 defaults,errors=remount-ro 0 1
/dev/sda1 none swap sw 0 0
proc /proc proc defaults 0 0
/dev/fd0 /floppy vfat defaults,user,noauto,showexec,umask=022 0 0
/dev/cdrom /cdrom iso9660 defaults,ro,user,noexec,noauto 0 0
none /sys sysfs defaults 0 0
none /dev/pts devpts defaults 0 0
/dev/hdb1 /home2 ext3 defaults,errors=remount-ro 0 0


    * 依 /etc/fstab 最新的設定重新掛載:
      root@dns#mount -a

    * 觀察

   1. root@dns# df
   2. root@dns# fdisk -l
Linux主機伺服器架設技術(使用者擁有權復原 Home chowner)

若以 root 身份執行 sftp 把 /home 下所有 user 資料夾取回,全部資料夾檔案身份權限皆成為 root。

解決方式:

   1. 使用 chown 指令一個一個變更 → 龐大的工程。
   2. 使用 shell,一次把 /home 底下所有的資料夾,恢復成原有的人。

若配合主機移轉文件,直接把 /etc/passwd,/etc/shadow, /etc/group 資料直接轉至新主機,那麼主機移轉工作就變成很快速的一件事。


SHELL內容

注意:本 shell 寫的不太好,只能放在 /home 底下執行,做法如下

    * root@dns:/home$ vi /home/chownall.sh

#!/bin/bash
fnames=$(ls /home)
for i in $fnames
do
        if [ -d $i ]; then
          chown -R $i.$i /home/$i
        fi
done

    * root@dns:/home$ sh chownall.sh

在Linux主機上安裝Open WebMail與設定

在Linux主機上安裝Open WebMail與設定

設定 Open WebMail

    在 cgi-bin/openwebmail/etc 可以發現有 openwebmail.conf.default, openwebmail.conf.help 和 openwebmail.conf 這三個檔, 其中
    openwebmail.conf.default     內定的設定檔, 包含所有 Open WebMail 可以頂的選項
    openwebmail.conf.help     openwebmail.conf.default 所有選項的說明檔
    openwebmail.conf

        主要的設定檔, 管理者要設定的選項, 應該都寫在這個檔案裡頭, 而不應該直接去改 openwebmail.conf.default

     

openwebmail.conf 的內容

    # Open WebMail configuration file
    #
    # This file contains just the overrides from openwebmail.conf.default
    # please make all changes to this file.
    #
    # This file sets options for all domains and all users.
    # To set options on per domain basis, please put them in sites.conf/domainname
    # To set options on per user basis, please put them in users.conf/username
    #

    domainnames auto
    auth_module auth_unix.pl
    mailspooldir /var/mail
    dbm_ext .db
    dbmopen_ext none
    dbmopen_haslock no
    ow_cgidir /usr/local/www/cgi-bin/openwebmail
    ow_cgiurl /cgi-bin/openwebmail
    ow_htmldir /usr/local/www/data/openwebmail
    ow_htmlurl /openwebmail
    logfile /var/log/openwebmail.log
    spellcheck /usr/local/bin/ispell
    default_language en

    <default_signature>
    --
    Open WebMail Project (http://openwebmail.org)
    </default_signature>

    以上的內容可能隨著您系統而有所不同, 不過在您完成前述的安裝後, 您可以修改以下幾個選項

domainnames

    一般情況下, openwebmail 應該能正確地判斷出您 server 的 domainname, 進而正確地設定使用者的預設 Email address, 但如果發生 openwebmail 判斷錯誤或是您希望設定成其他的 domainname, 你可以將這個選項由 auto 改成您所要的 domainname, 如 mail.myserver.com.tw

spellcheck

    設定拼字檢查程式所在的路徑, 一般而言, 可能是以下其中之一, 您可以用 ls -l filename 方式檢查看看

        /usr/bin/apsell
        /usr/bin/ispell
        /usr/local/bin/aspell
        /usr/local/bin/ispell

default_language

    內定的語言, 我們把它由 en(英文) 改成 zh_TW.Big5 (繁體中文)

    註: 自 2.0 版 20030416 以後, 已經不需要在 openwebmail.conf 中設定 default_language 這個選項了, openwebmail 會根據使用者所用的瀏覽器設定, 自動選擇適合的內定的語言

default_signature

    設定預設的簽名檔, 設在這裡的值會成為每個新使用者的預設簽名檔, 不過使用時每個使用者可以依自己的需求, 設定成其他的內容

 
初始化 Open WebMail

    在前面的安裝步驟裡頭, 最後一個步驟是

        cd the_direcotry_of_openwebmail_cgi_scripts
        ./openwebmail-tool.pl --init

    這個動作會建立一些 Open WebMail 在執行時會用到的對應表, 如簡繁轉換, 陰陽曆轉換等. 如果這個動作沒有做的話, 使用者將無法透過 Web 介面使用 Open WebMail

    而由於在各種不同作業系統上的 perl 版本的差異, 其所使用的 dbm 種類也不盡相同, 有的可能需要特殊的設定後才能使用, --init 在建立上述對應表之前, 會測試系統上 perl 的 dbm 種類, 並且提供一些必要的建議事項

       1. 首先會檢查 openwebmail.conf 中的 dbm_ext, dbmopen_ext 和 dbmopen_haslock 三個選項的設定是否正確, 如果設定有誤的話, 您會看到如下的畫面

              Please change the following 3 options in openwebmail.conf

              from

              dbm_ext .db
              dbmopen_ext none
              dbmopen_haslock no

              to

              dbm_ext .db
              dbmopen_ext %dbm_ext%
              dbmopen_haslock yes

       2. 其次是檢查系統上的 dbm 是否內定使用 DB_File.pm 這個模組, 如果是而且有需要的話, 會建議您對 DB_File.pm 作一些必要的修改 (這個修改是由 DB_File.pm 作者所提供的), 您會看到如下畫面

          Please modify /usr/libdata/perl/5.00503/mach/DB_File.pm by adding

              $arg[3] = 0666 unless defined $arg[3];

          before the following text (about line 247)

              # make recno in Berkeley DB version 2 work like recno in version 1

    請務必依照以上的建議作修改, 否則您的 Open WebMail 可能會無法完全正常動作, 也請記得在做完修改之後, 別忘了重新執行一次 './openwebmail-tool.pl --init'

 
測試 Open WebMail

    在完成上面的步驟後, 您可以連線到

    http://your_server_hostname/cgi-bin/openwebmail/openwebmail.pl

    並且登入看看是否一切正常
本Linux主機伺服器架設基地立志於收集各類Linux主機伺服器架設、網站架設及網頁設計技術教學資訊,便於本人和廣大網友及網友查詢檢索,無論公司或個人認為本站存在侵權內容均可與本站聯繫,任何此類反饋資訊一經查明屬實後,將立即移除!