linux入門到高級

目  錄php

1. Linux入門篇.............................................................................................................. 3css

1. 1 Linux操做系統簡介......................................................................................... 3html

1. 2 Linux發展趨勢................................................................................................ 4前端

1. 3 Linux系統安裝................................................................................................ 4java

1. 4 Linux學習技巧............................................................................................... 19node

2. Linux系統篇............................................................................................................. 20mysql

2.1 Linux系統管理................................................................................................ 20linux

2.1. 1 Linux目錄初識.................................................................................... 20ios

2.1. 2 Linux經常使用命令.................................................................................... 21nginx

2.1. 3 Linux用戶權限.................................................................................... 22

2.1. 4 Linux網絡配置.................................................................................... 23

3. Linux服務篇............................................................................................................. 25

3.1 Linux服務部署................................................................................................ 25

3.1. 1 構建NTP時間服務器............................................................................ 25

3.1. 2 構建DHCP服務器.................................................................................. 27

3.1. 3 搭建Samba服務器................................................................................ 29

3.1. 4 搭建NFS服務器................................................................................... 32

3.1. 5 搭建FTP服務器................................................................................... 33

3.1. 6 構建Apache WEB服務器....................................................................... 35

3.1. 7 構建MySQL服務器................................................................................ 38

3.1. 8 LAMP架構網站搭建............................................................................... 42

3.1. 9 Cacti監控平臺搭建............................................................................. 46

3.1. 10 Nagios監控平臺搭建.......................................................................... 50

3.1. 11 Kickstart自動化安裝平臺................................................................. 56

4. Linux編程篇............................................................................................................. 60

4.1 Linux Shell編程............................................................................................. 60

4.1. 1 Shell編程簡介.................................................................................... 60

4.1. 2 Shell變量設置.................................................................................... 61

4.1. 3 Shell流程控制語句............................................................................. 62

4.1. 4 Shell腳本案例.................................................................................... 67

4.1. 5 Shell數組編程.................................................................................... 71

5. Linux深刻篇............................................................................................................. 72

5. 1 構建Nginx WEB服務器................................................................................... 72

5.1. 1 Nginx WEB安裝.................................................................................... 73

5.1. 2 Nginx 虛擬主機配置............................................................................ 74

5.1. 3 Nginx性能優化.................................................................................... 75

5.1. 4 Nginx參數深刻理解............................................................................. 77

5.1. 5 Nginx Rewrite規則............................................................................. 78

5. 2 構建Rsync同步服務器................................................................................... 80

5.2. 1 Rsync服務端配置................................................................................. 80

5.2. 2 Rsync基於SSH同步............................................................................. 83

5.2. 3 Rsync實時同步配置............................................................................. 83

5. 3 Tomcat/Resin JAVA服務器............................................................................. 84

5.3. 1 Tomcat安裝配置.................................................................................. 84

5.3. 2 Tomcat性能優化.................................................................................. 85

5.3. 3 Resin安裝配置.................................................................................... 87

5.3. 4 Resin性能優化.................................................................................... 88

5.3. 5 Resin多實例配置................................................................................. 89

5. 4 Nginx Tomcat動靜分離.................................................................................. 90

5. 5 LNAMP高性能架構配置.................................................................................... 92

5. 6 構建DNS域名解析服務器................................................................................ 99

5. 7 MySQL主從高可用架構.................................................................................. 102

5. 8 LVS+Keepalived負載均衡............................................................................. 110

5. 9 Squid緩存服務器配置.................................................................................. 116

6. Linux下高併發系統內核優化.................................................................................. 122

7. Nginx負載均衡機制及常見問題............................................................................... 124

8. Linux運維職業規劃................................................................................................ 127

9. Linux運維面試總結................................................................................................ 127

1) 面試技巧總結............................................................................................ 127

2) 面試題目總結............................................................................................ 128

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1.     Linux入門篇

1.1   Linux操做系統簡介

Linux是一套無償使用和自由傳播的類Unix操做系統,是一個基於POSIX和UNIX的多用戶、多任務、支持多線程和多CPU的操做系統。它能運行主要的UNIX工具軟件、應用程序和網絡協議。它支持32位和64位硬件。Linux繼承了Unix以網絡爲核心的設計思想,是一個性能穩定的多用戶網絡操做系統。

1991年的10月5日,Linux創始人林納斯·託瓦茲(Linus Torvalds)在comp.os.minix新聞組上發佈消息,正式向外宣佈Linux內核的誕生,1994年3月,Linux 1.0發佈,代碼量17萬行,當時是按照徹底自由免費的協議發佈,隨後正式採用GPL(General Public License的縮寫,是一份GNU通用公共受權)協議。

Linux具備以下優勢:

Ø  穩定、免費或者花費少

Ø  安全性高

Ø  多任務,多用戶

Ø  耗資源少

Ø  因爲內核小,因此它能夠支持多種電子產品,如:Android手機、PDA等。

1.2   Linux發展趨勢

隨着IT產業的不斷髮展,用戶對網站體驗要求也愈來愈高,而目前主流網站後端承載系統都是Linux系統,目前Android手機所有基於Linux內核研發。企業大數據、雲存儲、虛擬化等先進技術都是基於Linux系統。

2010年據有關權威部門統計:未來幾年內我國軟件行業的從業機會十分龐大,中國每一年對軟件人才的需求將達到50萬人左右。而對於Linux 專業人才的就業前景,更是廣闊;據悉在將來5-10年內 Linux 專業人才的需求將達到 120 萬+!尤爲是有經驗的資深的Linux工程師目前很是的缺少,薪資也是很是誘人,平均月薪都是15-20K,能力強的薪資更高。

 

因此機會對每一個人都是公平的,關鍵是咱們每一個人如何去行動,選擇大於努力。

 

1.3   Linux系統安裝

在安裝Linux系統以前,先來了解windows系統結構,windows系統通常是安裝在C盤系統盤,一樣Linux也有相似的系統盤(/根分區),Linux一般分區爲(根分區/、swap分區),Linux系統以文件的存儲方式,全部的文件都是存儲在某個目錄下的,相似於windows的文件夾。

對於文件系統的屬性來講,windows文件系統類型通常是ntfs、fat32等,而Linux文件系統類型則爲ext二、ext三、ext4等(文件系統:是操做系統用於明確磁盤或分區上的文件的方法和數據結構,文件系統由三部分組成:與文件管理有關軟件、被管理文件以及實施文件管理所需數據結構。)

安裝 Linux系統是每個初學者的第一個門檻。在這個過程當中間,最大的困惑莫過於給硬盤進行分區。雖然如今各類發行版本的 Linux 已經提供了友好的圖形交互界面,可是不少人仍是感受無從下手。這其中的緣由主要是不清楚 Linux 的分區規定。就比如若是咱們瞭解了windows分區的規則,系統盤C、數據盤D等,就很好分區了。

在 Linux 中規定,每個硬盤設備最多隻能有 4個主分區(其中包含擴展分區)構成,任何一個擴展分區都要佔用一個主分區號碼,也就是在一個硬盤中,主分區和擴展分區一共最可能是 4 個。

下面正式來安裝Linux系統,安裝系統前須要準備以下軟件:

ü  VMware workstation10.0

ü  CentOS 5.8x86_i386.iso

安裝圖解以下:

第一步,新建虛擬機以下圖:

 

第二步,選擇相關選項,以下圖:

 

第三步選擇「稍後安裝操做系統」,以下圖:

 

第四步,選擇客戶機操做系統類型以下圖:

 

第五步,設置虛擬機硬盤大小爲20G,最低不能小於5G,以下圖:

 

第六步,虛擬機新建完成,以下圖:

 

第七步,修改虛擬機內存爲512M,並添加ISO鏡像,以下圖:

 

自此,虛擬機新建完成,接下來點擊「啓動此虛擬機」進行Linux系統安裝,Linux系統安裝圖解以下:

第一步,進入安裝界面,直接按Enter回車鍵便可。

 

第二步,光盤檢測,選擇SKIP跳過。

 

第三步,選擇安裝過程當中的語言,初學者能夠選擇「簡體中文」。

 

第四步,選擇初始化整個硬盤,清除全部數據。

 

第五步,選擇分區方式爲「自定義分區「。

 

 

第五步,點擊「新建「-首先建立一個swap交換分區,大小爲物理內存的2倍(1024M)。

 

第六步,繼續建立分區,選擇「新建「,而後建立根分區/,以下圖選擇,大小爲剩餘全部空間便可。

 

第七步,默認點擊下一步,同時默認DHCP配置,時鐘選擇上海,去掉UTC勾,點擊下一步。

 

第八步,設置root密碼,至少六位,點擊下一步。

 

第九步,系統安裝包選擇,這裏選擇「如今定製「。

 

第十步,系統安裝包選擇,左側選擇「開發「----右側選擇」開發工具「和「開發庫」,語言選擇「支持中文「,其餘一律不選擇。

 

安裝完畢會提示「reboot「,直接回車便可。  

1.4   Linux學習技巧

初學者能夠本身安裝虛擬機,而後把linux經常使用命令例如cd、ls、chmod、useradd、vi等等多練習幾十遍,把本身敲打命令的熟練程度提高上來。

而後根據文檔搭建Linux下常見的各類服務(DHCP、SAMBA、DNS、Apache、Mysql等),遇到問題後能夠在google搜索,搜索的時候多看幾篇文章,綜合最好的文章來解決問題。

可以熟練的搭建服務後,理解每一個服務的完整配置和優化,能夠拓展思惟。例如LAMP,咱們通常是把全部服務放在一臺機器上,若是分開多臺該如何部署呢?等等。

平時多積累shell編程,能夠在網上查找前輩們寫的很是好的shell,本身下載下來多練習幾遍,從中吸收,不斷提升。

創建一個本身的學習博客,把平時工做學習中的知識都記錄在裏面,這樣也能夠供別人來參考同時也能提升本身的編寫文檔及方案的能力。

經過以上學習可以知足企業的通常應有,須要達到資深級別,還須要深刻學習集羣架構、負載均衡、自動化運維、運維開發等知識。最後仍是一句話:多練習纔是硬道理!實踐出真知!

2.     Linux系統篇

2.1     Linux系統管理

經過前兩章的學習,咱們已經可以獨立安裝Linux系統,已經掌握了Linux學習的技巧,那接下來,咱們將系統的來了解Linux系統各目錄、權限及經常使用命令的使用。

2.1.1    Linux目錄初識

經過前面的學習,咱們已經可以獨立安裝完一個linux系統,那接下來咱們來熟悉一下Linux系統裏面的各個目錄文件夾的大體功能:

主要的目錄樹的有/、/root、/home、/usr、/bin等目錄。下面是一個典型的linux目錄結構以下: (附圖表)

 

/ 根目錄 
/bin 存放必要的命令 
/boot 存放內核以及啓動所需的文件
/dev 存放設備文件 
/etc 存放系統配置文件 
/home 普通用戶的宿主目錄,用戶數據存放在其主目錄中 
/lib 存放必要的運行庫 
/mnt 存放臨時的映射文件系統,一般用來掛載使用。

 /proc 存放存儲進程和系統信息 
/root 超級用戶的主目錄 
/sbin 存放系統管理程序 
/tmp 存放臨時文件
/usr 存放應用程序,命令程序文件、程序庫、手冊和其它文檔。 
/var 系統默認日誌存放目錄

2.1.2    Linux經常使用命令

默認進入系統,咱們會看到這樣的字符: [root@localhost ~]#,其中#表明當前是root用戶登陸,若是是$表示當前爲普通用戶。

咱們瞭解linux由不少目錄文件構成,那咱們來學習第一個Linux命令:

cd命令,cd  /home ;解析:進入/home目錄

cd /root 進入/root目錄;cd ../返回上一級目錄;cd  ./當前目錄;(.和..能夠理解爲相對路徑;例如cd /hom/test ,cd加完整的路徑,能夠理解爲絕對路徑)

接下來繼續學習更多的命令:
    ls ./ 查看當前目錄全部的文件和目錄。

ls  -a 查看全部的文件,包括隱藏文件,以.開頭的文件。

 

pwd顯示當前所在的目錄。

mkdir建立目錄,用法mkdir  test ,命令後接目錄的名稱。

rmdir 刪除空目錄

rm 刪除文件或者目錄,用法 rm –rf test.txt (-r表示遞歸,-f表示強制)。

cp 拷貝文件,用法,cp  old.txt  /tmp/new.txt ,經常使用來備份;若是拷貝目錄

須要加 –r參數。

 

mv 重命名或者移動文件或者目錄,用法, mv old.txt new.txt

touch 建立文件,用法,touch test.txt,若是文件存在,則表示修改當前文件時間。

Useradd建立用戶,用法 useradd wugk ,userdel刪除用戶。

Groupadd建立組,用法 groupadd wugk1 ,groupdel刪除組。

 

find查找文件或目錄,用法 find  /home  -name  「test.txt」,命令格式爲:

find 後接查找的目錄,-name指定須要查找的文件名稱,名稱能夠使用*表示全部。

find  /home -name  「*.txt」 ;查找/home目錄下,全部以.txt結尾的文件或者目錄。

vi 修改某個文件,vi有三種模式:

命令行模式、文本輸入模式、末行模式。

默認vi打開一個文件,首先是命令行模式,而後按i進入文本輸入模式,能夠在文件裏寫入字符等等信息。

寫完後,按esc進入命令模式,而後輸入:進入末行模式,例如輸入:wq表示保存退出。

若是想直接退出,不保存,能夠執行:q!, q!歎號表示強制退出。

cat 查看文件內容,用法 cat test.txt 能夠看到test.txt內容

more 查看文件內容,分頁查看,cat是所有查看,若是篇幅不少,只能看到最後的篇幅。能夠使用cat和more同時使用,例如:cat  test.txt |more 分頁顯示text內容,|符號是管道符,用於把|前的輸出做爲後面命令的輸入。

echo 回顯,用法 echo ok,會顯示ok,輸入什麼就打印什麼。

echo  ok > test.txt ;把ok字符覆蓋test.txt內容,>表示追加並覆蓋的意思。

>>兩個大於符號,表示追加,echo ok >> test.txt,表示向test.txt文件追加OK字符,不覆蓋原文件裏的內容。

初學者常見的命令就如上所示,固然還有不少深刻的命令須要學習,後面的課程會講解。

2.1.3    Linux用戶權限

在Linux操做系統中,root的權限是最高的,至關於windows的administrator,擁有最高權限,能執行任何命令和操做。在系統中,經過UID來區分用戶的權限級別,UID等於0,表示此用戶具備最高權限,也就是管理員。其餘的用戶UID依次增長,經過/etc/passwd用戶密碼文件能夠查看到每一個用戶的獨立的UID。

每個文件或者目錄的權限,都包含一個用戶權限、一個組的權限、其餘人權限,例以下:

標紅第一個root表示該文件全部者是root用戶,第二個root表明該文件的所屬的組爲root組,其餘用戶這裏默認不標出。

 [root@node1 ~]#ls -l monitor_log.sh

-rw-r--r--1 root root 91 May  7 20:21monitor_log.sh

[root@node1 ~]#

若是咱們想改變某個文件的全部者或者所屬的組,能夠使用命令chown

chown  –R  test:test monitor_log.sh便可。

每一個Linux文件具備四種訪問權限:可讀(r)、可寫(w)、可執行(x)和無權限(-)。
利用ls -l命令能夠看到某個文件或目錄的權限,它以顯示數據的第一個字段爲
 準。第一個字段由10個字符組成,以下:
    [root@node1 ~]# ls -lmonitor_log.sh

-rw-r--r-- 1 rootroot 91 May  7 20:21 monitor_log.sh

[root@node1~]#
   第一位表示文件類型,-表示文件,d表示目錄;後面每三位爲一組。
   第一組:2-4位表示文件全部者的權限,即用戶user權限,簡稱u
   第二組:5-7位表示文件全部者所屬組成員的權限,group權限,簡稱g
   第三組:8-10位表示全部者所屬組以外的用戶的權限,other權限,簡稱o

從上面這個文件,咱們能夠看出,monito_log.sh文件對應的權限爲:

root用戶具備讀和寫的權限,root組具備讀的權限,其餘人具備讀的權限。

  爲了能更簡單快捷的使用和熟悉權限,rwx權限能夠用數字來表示,分別表示爲r(4)、w(2)、x(1)。

Monitor_log.sh權限能夠表示爲:644

若是給某個文件受權,命令爲chmod:chmod 777 monitor_log.sh

2.1.4    Linux網絡配置

熟悉了經常使用的命令和Linux權限,那接下來如何讓所在的Linux系統上網呢?管理linux服務器網絡有哪些命令呢?

    Linux服務器默認網卡配置文件在/etc/sysconfig/network-scripts/下,命名的名稱通常爲:ifcfg-eth0 ifcfg-eth1 ,eth0表示第一塊網卡,eth1表示第二塊網卡,依次類推。通常DELL R720標配有4塊千兆網卡。

    修改網卡的IP,能夠使用命令: vi /etc/sysconfig/network-scripts/ifcfg-eth0 若是是DHCP獲取的IP,默認配置以下:

# Advanced Micro Devices [AMD] 79c970 [PCnet32 LANCE]

DEVICE=eth0

BOOTPROTO=dhcp

HWADDR=00:0c:29:52:c7:4e

ONBOOT=yes

TYPE=Ethernet

若是是靜態配置的IP,ifcfg-eth0網卡配置內容以下:

# Advanced Micro Devices [AMD] 79c970 [PCnet32 LANCE]

DEVICE=eth0

BOOTPROTO=static

HWADDR=00:0c:29:52:c7:4e

ONBOOT=yes

TYPE=Ethernet

IPADDR=192.168.33.10

NETMASK=255.255.255.0

GATEWAY=192.168.33.1
網卡參數詳解以下:

DEVICE=eth0   #物理設備名
ONBOOT=yes   # [yes|no](重啓網卡是否激活設備)
BOOTPROTO=static #[none|static|bootp|dhcp](不使用協議|靜態分配|BOOTP協議|DHCP協議)

TYPE=Ethernet  #網卡類型

IPADDR=192.168.33.10 #IP 地址
NETMASK=255.255.255.0 #子網掩碼
GATEWAY=192.168.33.1 #網關地址

網卡配置完畢,重啓網卡,命令: /etc/init.d/network restart 便可。

查看ip命令:ifconfig 查看當前服務器全部網卡的IP,能夠單獨指定,ifconfig eth0 查看eth0的IP地址。

網卡配置完畢,若是來配置DNS,首先要知道DNS配置在哪一個目錄文件下,vi  /etc/resolv.conf 文件:

在該文件裏面添加以下兩條:

nameserver 202.106.0.20

nameserver 8.8.8.8

從上到下,分別表示主DNS,備DNS。配置完畢後,不須要重啓網卡,DNS當即生效。

能夠ping www.baidu.com 看看效果:

 

IP配置完畢後,咱們能夠經過遠程工具來鏈接Linux服務器,常見的Linux遠程鏈接工具備:putty、secureCRT(主流)、xshell、xmanger等工具。

下載安裝secureCRT,打開工具,而後如圖配置:

點擊左上角quick connect快速鏈接,彈出界面,而後輸入IP,用戶名,端口默認是22,而後點擊下方的connect鏈接,會提示輸入密碼,輸入便可。

 

彈出輸入密碼框:

 

進入遠程界面,與服務器真實登陸同樣,而後能夠執行命令:

 

經過這幾章的學習,咱們已經熟練了Linux經常使用命令的操做,權限網絡、網絡配置、遠程鏈接等知識,那接下來咱們還能作什麼呢?咱們已經差很少入門了,接下來就是更進一步的服務配置,Linux系統到底用來作什麼呢?接下來的章節將跟你們一塊兒來學習。

Linux系統的應用,咱們最開始介紹的時候簡單介紹過,目前大中型企業都用它來承載web網站、數據庫、虛擬化平臺等,那接下來咱們將在Linux系統安裝各類服務和軟件來實現Linux真正的價值。

3.     Linux服務篇

3.1     Linux服務部署

3.1.1    構建NTP時間服務器

NTP服務器是用於局域網服務器時間同步使用的,能夠保證局域網全部的服務器與時間服務器的時間保持一致,某些應用對時間實時性要求高的必須統一時間。

互聯網的時間服務器也有不少,例如ntpdate ntp.fudan.edu.cn 復旦大學的NTP免費提供互聯網時間同步。

NTP服務器監聽端口爲UDP的123,那就須要在本地防火牆開啓運行客戶端訪問123端口,vi /etc/sysconfig/iptables添加以下規則:

-A INPUT -m state--state NEW -m udp -p udp --dport 123 -j ACCEPT

NTP時間服務器配置:

yum install ntp ntpdate -y 便可!

修改ntp.conf配置文件

cp /etp/ntp.conf /etc/ntp.conf.bak

vi /etc/ntp.conf 只修改以下兩行,把#號去掉便可!

server 127.127.1.0     # local clock

fudge 127.127.1.0 stratum 10

以守護進程啓動ntpd

/etc/init.d/ntpd start 便可

(注意*: ntpd啓動後,客戶機要等幾分鐘再與其進行時間同步,不然會提示「no server suitable for synchronization found」錯誤。)

配置時間同步客戶機

crontab -e

增長一行,在天天的6點10分與時間同步服務器進行同步

10 06 * * * /usr/sbin/ntpdate ntp-server的ip>>/usr/local/logs/crontab/ntpdate.log

備註:若是客戶機沒有ntpdate,能夠yum –y install ntp 便可!

如下是ntp服務器配置文件內容(局域網NTP,若是須要跟外網同步,添加外網server便可)

driftfile /var/lib/ntp/drift

restrict default kod nomodify notrap nopeer noquery

restrict -6 default kod nomodify notrap nopeernoquery

restrict 127.0.0.1

restrict -6 ::1

server 127.127.1.0     # local clock

fudge  127.127.1.0 stratum 10

includefile /etc/ntp/crypto/pw

keys /etc/ntp/keys

下面是參數詳解:

restrict default ignore

# 關閉全部的 NTP 要求封包

restrict 127.0.0.1

# 開啓內部遞歸網絡接口 lo

restrict 192.168.0.0 mask 255.255.255.0 nomodify

#在內部子網裏面的客戶端能夠進行網絡校時,但不能修改NTP服務器的時間參數。

server 198.123.30.132

#198.123.30.132做爲上級時間服務器參考

restrict 198.123.30.132

#開放server 訪問咱們ntp服務的權限

driftfile /var/lib/ntp/drift

在與上級時間服務器聯繫時所花費的時間,記錄在driftfile參數後面的文件內

broadcastdelay 0.008

#廣播延遲時間

 

自此NTP服務搭建完畢,而後在全部客戶端crontab裏面添加以下語句:

0  0   * *  * /usr/sbin/ntpdate  10.0.0.155 >>/data/logs/ntp.log2>&1

3.1.2    構建DHCP服務器

DHCP(Dynamic HostConfiguration Protocol,動態主機配置協議)是一個局域網網絡協議,使用UDP協議工做,主要用途:給內部網絡或網絡服務供應商自動分配IP地址,DHCP有3個端口,其中UDP67和UDP68爲正常的DHCP服務端口,分別做爲DHCP Server和DHCP Client的服務端口。

DHCP能夠部署在服務器、交換機或者服務器,能夠控制一段IP地址範圍,客戶機登陸服務器時就能夠自動得到DHCP服務器分配的IP地址和子網掩碼。其中DHCP所在服務器的須要安裝TCP/IP協議,須要設置靜態IP地址、子網掩碼、默認網關。

正式安裝DHCP服務:

Yum install  dhcp dhcp-devel –y 便可,而後修改DHCP /etc/dhcpd.conf配置文件內容以下:

ddns-update-style interim;

ignore client-updates;

next-server  192.168.0.79;

filename "pxelinux.0";

allow booting;

allow bootp;   

subnet 192.168.0.0 netmask 255.255.255.0 {

# --- default gateway

option routers          192.168.0.1;

optionsubnet-mask      255.255.252.0;

#   optionnis-domain       "domain.org";

#  optiondomain-name "192.168.0.10";

#   optiondomain-name-servers  192.168.0.11;

#   optionntp-servers      192.168.1.1;

#   option netbios-name-servers 192.168.1.1;

# --- Selects point-to-point node(default is hybrid). Don't change this unless

# -- you understand Netbios very well

#   option netbios-node-type 2;

range  dynamic-bootp 192.168.0.100 192.168.0.200;

host ns {

hardware ethernet  00:1a:a0:2b:38:81;

fixed-address 192.168.0.101;}

}

參數解析以下:

選    項

解    釋

 

 

ddns-update-style interim|ad-hoc|none

 參數用來設置DHCP服務器與DNS服務器的動態信息更新模式:interim爲DNS互動更新模式,ad-hoc爲特殊DNS更新模式,none爲不支持動態更新模式。

next-server ip

pxeclient遠程安裝系統,指定tftp server 地址

filename

開始啓動文件的名稱,應用於無盤安裝,能夠是tftp的相對或絕對路徑  

ignore client-updates

爲忽略客戶端更新

subnet-mask

爲客戶端設定子網掩碼

option routers

爲客戶端指定網關地址

domain-name

爲客戶端指明DNS名字

domain-name-servers

爲客戶端指明DNS服務器的IP地址

host-name

爲客戶端指定主機名稱

broadcast-address

爲客戶端設定廣播地址

ntp-server

爲客戶端設定網絡時間服務器的IP地址

time-offset

爲客戶端設定格林威治時間的偏移時間,單位是秒

注意如上配置,須要修改爲對應服務器網段IP,而後重啓DHCP服務,/etc/init.d/dhcpd restart便可。

客戶端要從這個DHCP服務器獲取IP,須要作簡單的設置,若是是linux須要把/etc/sysconfig/network-scritps/ifcfg-eth0裏BOOTPROTO相改爲dhcp便可,windows機器的話,須要修改本地鏈接,把它設置成自動獲取IP便可。

BOOTPROTO=dhcp

3.1.3    搭建Samba服務器

Samba是在Linux和UNIX系統上實現SMB協議的一個免費軟件,由服務器及客戶端程序構成,

SMB(Server Messages Block,信息服務塊)是一種在局域網上共享文件和打印機的一種通訊協議,它爲局域網內的不一樣計算機之間提供文件及打印機等資源的共享服務。

SMB協議是客戶機/服務器型協議,客戶機經過該協議能夠訪問服務器上的共享文件系統、打印機及其餘資源。經過設置「NetBIOS overTCP/IP」使得Samba不但能與局域網絡主機分享資源,還能與全世界的電腦分享資源。

安裝SAMBA服務器:

Yum install  samba –y

安裝完畢,而後作以下設置(過濾#號行、空行以下命令)

cp /etc/samba/smb.conf /etc/samba/smb.conf.bak ;egrep -v"#|^$" /etc/samba/smb.conf.bak |grep -v "^;">/etc/samba/smb.conf

查看smb.conf配置文件以下:

[global]

        workgroup =MYGROUP

        server string =Samba Server Version %v

        security =share

        passdb backend= tdbsam

        load printers =yes

        cups options =raw

 

[temp]

     comment=Temporaryfile space

     path=/tmp

     read only=no

     public=yes

 

[data]

     comment=Temporaryfile space

     path=/data

     read only=no

     public=yes

根據需求修改以後重啓服務:

[root@node1 ~]# /etc/init.d/smb restart

Shutting down SMB services:                                [FAILED]

Shutting down NMB services:                                [FAILED]

Starting SMB services:                                     [ OK  ]

Starting NMB services:                                     [ OK  ]

 

workgroup =

WORKGROUP 設Samba Server 所要加入的工做組或者域。

server string = Samba Server Version %v

Samba Server 的註釋,能夠是任何字符串,也能夠不填。宏%v表示顯示Samba的版本號。

 

 

 

 

security = user

1.share:用戶訪問Samba Server不須要提供用戶名和口令, 安全性能較低。

2. user:Samba Server共享目錄只能被受權的用戶訪問,由Samba Server負責檢查帳號和密碼的正確性。帳號和密碼要在本Samba Server中創建。

3. server:依靠其餘Windows NT/2000或Samba Server來驗證用戶的帳號和密碼,是一種代理驗證。此種安全模式下,系統管理員能夠把全部的Windows用戶和口令集中到一個NT系統上,使用Windows NT進行Samba認證, 遠程服務器能夠自動認證所有用戶和口令,若是認證失敗,Samba將使用用戶級安全模式做爲替代的方式。

4. domain:域安全級別,使用主域控制器(PDC)來完成認證。

comment = test

是對該共享的描述,能夠是任意字符串。

path = /home/test

共享目錄路徑

browseable= yes/no 

用來指定該共享是否能夠瀏覽。

writable = yes/no

writable用來指定該共享路徑是否可寫。

available = yes/no

available用來指定該共享資源是否可用

admin users = admin

該共享的管理者

valid users = test

容許訪問該共享的用戶

invalid users = test

禁止訪問該共享的用戶

write list = test

容許寫入該共享的用戶

public = yes/no

public用來指定該共享是否容許guest帳戶訪問。

 

在瀏覽器裏面訪問方式爲:\\192.168.33.10(SMB文件共享服務端IP),如何沒有權限訪問,須要注意防火牆和selinux設置,能夠使用以下命令關閉:

/etc/init.d/iptables stop ;sed  –i   ‘/SELINUX/s/enforcing/disabled’  /etc/sysconfig/selinux

3.1.4    搭建NFS服務器

NFS 是Network File System的縮寫,即網絡文件系統。一種使用於分散式文件系統的協定,由Sun公司開發,於1984年向外公佈。功能是經過網絡讓不一樣的機器、不一樣的操做系統可以彼此分享個別的數據,讓應用程序在客戶端經過網絡訪問位於服務器磁盤中的數據,是在類Unix系統間實現磁盤文件共享的一種方法。

NFS在文件傳送或信息傳送過程當中依賴於RPC協議。RPC,遠程過程調用 (Remote Procedure Call) 是能使客戶端執行其餘系統中程序的一種機制。NFS自己是沒有提供信息傳輸的協議和功能的。

NFS應用場景,經常使用於高可用文件共享,多臺服務器共享一樣的數據,可擴展性比較差,自己高可用方案不完善,取而代之的數據量比較大的能夠採用MFS、TFS、HDFS等等分佈式文件系統。

NFS安裝配置:

Yum install nfs*  portmap  -y 以下圖,安裝成功便可。

NFS安裝完畢,須要建立共享目錄,共享目錄在/etc/exports文件裏面配置,可配置參數以下:

/data/     192.168.33.11(rw,sync,no_hide,no_all_squash)

在配置文件中添加如上一行,而後重啓Portmap,NFS服務便可,/etc/init.d/portmap restart;/etc/init.d/nfs restart

第一列/data/表示須要共享的目錄。

IP表示容許哪一個客戶端訪問。

IP後括號裏的設置表示對該共享文件的權限。

ro                     只讀訪問

rw                     讀寫訪問

sync                   全部數據在請求時寫入共享

hide                   在NFS共享目錄中不共享其子目錄

no_hide                共享NFS目錄的子目錄

all_squash             共享文件的UID和GID映射匿名用戶anonymous,適合公用目錄。

no_all_squash          保留共享文件的UID和GID(默認)

root_squash            root用戶的全部請求映射成如anonymous用戶同樣的權限(默認)

no_root_squas          root用戶具備根目錄的徹底管理訪問權限

Linux客戶端,如何想使用這個NFS文件系統,須要在客戶端掛載,掛載命令爲:

Mount –t  nfs 192.168.33.10:/data/    /mnt 便可。若是有報錯根據錯誤信息排查。常見問題有rpc服務沒有啓動、防火牆沒關閉、selinux未關閉等問題。(拓展* 有興趣的童鞋能夠研究MFS(分佈式文件系統)。)

3.1.5    搭建FTP服務器

FTP 是文件傳輸協議,正是因爲這種協議使得主機間能夠共享文件。 FTP 使用TCP 生成一個虛擬鏈接用於控制信息,而後再生成一個單獨的 TCP 鏈接用於數據傳輸

vsftpd是一款在Linux發行版中最主流的FTP服務器程序;特色是小巧輕快,安全易用;能讓其自身特色得發發揮和掌握。

目前在開源操做系統中經常使用的FTP服務器程序主要有vsftpd、ProFTPD、PureFTPd和wuftpd等,這麼多FTP服務器程序,關鍵在於本身熟練哪個就使用哪個。今天咱們來研究一下VSFTPD簡單安裝及使用。安裝命令: yum  install vsftpd*  -y

修改配置文件以下:

#vsftpd config2014 by wugk

anonymous_enable=NO    //禁止匿名用戶訪問

local_enable=YES  //容許本地用戶登陸FTP

write_enable=YES   //運行用戶在FTP目錄有寫入的權限

local_umask=022   //設置本地用戶的文件生成掩碼爲022,默認是077

dirmessage_enable=YES//激活目錄信息,當遠程用戶更改目錄時,將出現提示信息

xferlog_enable=YES   //啓用上傳和下載日誌功能

connect_from_port_20=YES  //啓用FTP數據端口的鏈接請求

xferlog_std_format=YES  //是否使用標準的ftpd xferlog日誌文件格式

listen=YES  //使vsftpd處於獨立啓動監聽端口模式

pam_service_name=vsftpd//設置PAM認證服務配置文件名稱,文件存放在/etc/pam.d/目錄

userlist_enable=YES   //用戶列表中的用戶是否容許登陸FTP服務器,默認是不容許

tcp_wrappers=YES    //使用tcp_wrqppers做爲主機訪問控制方式

 

1)   第一種方法就是使用系統用戶登陸FTP,可是也是比較危險的,先測試系統用戶登陸FTP,在Linux系統上建立useradd test 用戶,併爲其設置名,而後在xp客戶端打開個人電腦資源裏面訪問 ftp://192.168.33.10,輸入用戶名和密碼便可訪問,進行建立和刪除操做。

2)   第二種方法比較安全,配置相對複雜一點,就是使用vsftpd虛擬用戶登陸FTP服務器進行常見的操做。

Ø 首先安裝FTP 虛擬用戶須要用到的軟件及認證模塊

yum install pam* db4*--skip-broken –y

建立並生成vsftpd數據庫文件vi /etc/vsftpd/ftpusers.txt,內容以下:

第一行爲FTP虛擬用戶,登陸用戶名,第二行爲密碼,第三行爲用戶名,依次類推。

wugk

1

wugk1

1

Ø 生成數據庫文件命令:

db_load -T -t hash -f/etc/vsftpd/ftpusers.txt /etc/vsftpd/vsftpd_login.db

chmod 700/etc/vsftpd/vsftpd_login.db

Ø 配置PAM驗證文件:

在配置文件vi /etc/pam.d/vsftpd 行首加入以下兩行認證語句:(若是是32位,lib64需改爲lib,若是RedHat,加入的語句不同,需注意)

auth    sufficient      /lib64/security/pam_userdb.so     db=/etc/vsftpd/vsftpd_login

account sufficient      /lib64/security/pam_userdb.so      db=/etc/vsftpd/vsftpd_login

Ø 建立vsftpd映射本地用戶:

全部的FTP虛擬用戶須要使用一個系統用戶,這個系統用戶不須要密碼,也不須要登陸。主要用來作虛擬用戶映射使用。

useradd  –d /home/ftpuser –s /sbin/nologin ftpuser

Ø 修改完整版配置文件內容以下:

anonymous_enable=NO

local_enable=YES

write_enable=YES

local_umask=022

dirmessage_enable=YES

xferlog_enable=YES

connect_from_port_20=YES

xferlog_file=/var/log/vsftpd.log

xferlog_std_format=YES

ascii_upload_enable=YES

ascii_download_enable=YES

listen=YES

 

guest_enable=YES

guest_username=ftpuser

pam_service_name=vsftpd

user_config_dir=/etc/vsftpd/vsftpd_user_conf

virtual_use_local_privs=YES

 

    保存重啓,/etc/init.d/vsftpd restart 便可使用虛擬用戶登陸,這時候全部的虛擬用戶共同使用/home/ftpuser目錄上傳下載,若是想使用本身獨立的目錄,能夠在/etc/vsftpd/vsftpd_user_conf目錄建立各自的配置文件,如給wugk建立獨立的配置文件:

vi/etc/vsftpd/vsftpd_user_conf/wugk ,內容以下,創建本身的FTP目錄。

local_root=/home/ftpsite/wugk

write_enable=YES

anon_world_readable_only=YES

anon_upload_enable=YES

anon_mkdir_write_enable=YES

anon_other_write_enable=YES

 重啓,使用客戶端登陸FTP,測試便可。關於FTP講解就到此,windows還能夠使用Server-U來搭建FTP服務器端,有興趣的童鞋能夠研究一下。

Ø FTP主被動模式

FTP主動模式:客戶端從一個任意的非特權端口N(N>1024)鏈接到FTP服務器的port 21命令端口。而後客戶端開始監聽端口N+1,併發送FTP命令「port N+1」到FTP服務器。接着服務器會從它本身的數據端口(20)鏈接到客戶端指定的數據端口(N+1)。

FTP被動模式:客戶端從一個任意的非特權端口N(N>1024)鏈接到FTP服務器的port 21命令端口。而後客戶端開始監聽端口N+1,同時客戶端提交 PASV命令。服務器會開啓一個任意的非特權端口(P >1024),併發送PORT P命令給客戶端。而後客戶端發起從本地端口N+1到服務器的端口P的鏈接用來傳送數據。

3.1.6    構建Apache WEB服務器

Apache是世界使用排名第一的Web服務器軟件。它能夠運行在幾乎全部普遍使用的計算機平臺上,因爲其跨平臺和安全性被普遍使用,是最流行的Web服務器端軟件之一。Apache工做模式有多種,其中最經常使用的有兩種:

Prefork模式:PreforkMPM 使用多個子進程,每一個子進程只有一個線程。每一個進程在某個肯定的時間只能維持一個鏈接。

在大多數平臺上,Prefork MPM在效率上要比Worker MPM要高,可是內存使用大得多。prefork的無線程設計在某些狀況下將比worker更有優點:它能夠使用那些沒有處理好線程安全的第三方模塊,而且對於那些線程調試困難的平臺而言,它也更容易調試一些。

Worker模式:WorkerMPM 使用多個子進程,每一個子進程有多個線程。每一個線程在某個肯定的時間只能維持一個鏈接。一般來講,在一個高流量的HTTP服務器上,Worker MPM是個比較好的選擇,由於Worker MPM的內存使用比Prefork MPM要低得多。

Worker MPM也由不完善的地方,若是一個線程崩潰,整個進程就會連同其全部線程一塊兒"死掉".因爲線程共享內存空間,因此一個程序在運行時必須被系統識別爲"每一個線程都是安全的"。

Ø 源碼安裝Apache

官方下載目前穩定版本,http://mirror.esocc.com/apache/httpd/httpd-2.2.27.tar.gz ,解壓安裝以下,安裝apache以前,須要先安裝apr apr-util。

 

而後啓動apache服務:  /usr/local/apache2/bin/apachectl start

 

查看apache進程及端口:

 

源碼包安裝Apache默認發佈目錄爲:/usr/local/apache2/htdocs/下。

Ø Apache基於域名虛擬主機配置

修改vi/usr/local/apache2/conf/extra/httpd-vhosts.conf 虛擬主機配置文件內容以下:

NameVirtualHost*:80

<VirtualHost*:80>

    ServerAdmin wgkgood@163.com

    DocumentRoot "/data/webapps/www1"

    ServerName www.wugk1.com

  <Directory "/data/webapps/www1">

    AllowOverride All

    Options -Indexes FollowSymLinks

    Order allow,deny

    Allow from all

  </Directory>

    ErrorLog logs/error_log

    CustomLog logs/access_log common

</VirtualHost>

 

<VirtualHost*:80>

    ServerAdmin wgkgood@163.com

    DocumentRoot "/data/webapps/www2"

    ServerName www.wugk2.com

  <Directory"/data/webapps/www2">

    AllowOverride All

    Options -Indexes FollowSymLinks

    Order allow,deny

    Allow from all

  </Directory>

    ErrorLog logs/error_log

    CustomLog logs/access_log common

</VirtualHost>

而後在/usr/local/apache2/conf/httpd.conf最末尾加入以下配置:

Includeconf/extra/httpd-vhosts.conf

從新加載apache便可,/usr/local/apache2/bin/apachectlgraceful效果演示以下:

 

Apache基於IP虛擬主機一樣跟域名一直,在服務器配置多個IP,而後把域名改爲IP便可。

Ø Apache Rewrite規則講解

Rewrite URL重定向就是實現URL的跳轉和隱藏真實地址,能夠把複雜的URL變成簡潔直觀的URL,對seo優化有很大的幫助。以下幾個簡單的舉例:

把全部配置的域名都跳轉到一個域名:

RewriteEngine on   //啓用rewrite引擎

RewriteCond %{HTTP_HOST}^wugk1.com [NC]   //匹配以wugk1.com開頭的域名,NC忽略大小寫。

RewriteRule ^/(.*)$  http://www.wugk1.com/$1  [L]

//匹配上面條件,而後跳轉到http://www.wugk1.com

1)   R 強制外部重定向。

2)   F 禁用URL,返回403HTTP狀態碼。

3)   G 強制URL爲GONE,返回410HTTP狀態碼。

4)   P 強制使用代理轉發。

5)   L 代表當前規則是最後一條規則,中止分析之後規則的重寫。

6)   N 從新從第一條規則開始運行重寫過程。

7)   C 與下一條規則關聯。

3.1.7    構建MySQL服務器

MySQL是一個開放源碼的小型關聯式數據庫管理系統,開發者爲瑞典MySQL AB公司, 目前屬於Oracle公司,MySQL被普遍地應用Internet上的中小型網站中。因爲其體積小、速度快、整體擁有成本低,尤爲是開放源碼這一特色,許多中小型網站爲了下降網站整體擁有成本而選擇了MySQL做爲網站數據庫

對應目前主流的LAMP架構來講,Mysql更是獲得各位IT運維、DBA的青睞,目前mysql已被orcacle收購,不過好消息是原來mysql創始人已獨立出來本身從新開發了一個MariaDB,並且使用的人數愈來愈多。並且MariaDB兼容mysql全部的功能和相關參數。

Mysql經常使用的兩大引擎有MyISAM和innoDB,那他們有什麼明顯的區別呢,什麼場合使用什麼引擎呢?

MyISAM類型的表強調的是性能,其執行數 度比InnoDB類型更快,但不提供事務支持,若是執行大量的SELECT操做,MyISAM是更好的選擇,支持表鎖。

InnoDB提供事務支持事務,外部鍵等高級 數據庫功能,執行大量的INSERT或UPDATE,出於性能方面的考慮,應該使用InnoDB表,支持行鎖。

MySQL安裝方式有兩種,一種是yum/rpm安裝,另一種是tar源碼安裝。

Yum 安裝方法很簡單,執行命令以下便可: yum install –y mysql-server  mysql-devel mysql

源碼安裝MySQL方式:

cd/usr/src ;wget http://downloads.mysql.com/archives/mysql-5.1/mysql-5.1.63.tar.gz ;tarxzf mysql-5.1.63.tar.gz ;cd mysql-5.1.63 ;./configure--prefix=/usr/local/mysql    --enable-assembler &&make &&make install

配置Mysql服務爲系統服務:

cp/usr/local/mysql/share/mysql/my-medium.cnf /etc/my.cnf

cp/usr/local/mysql/share/mysql/mysql.server /etc/rc.d/init.d/mysqld

chkconfig --add mysqld 
chkconfig --level 345 mysqld on

 

cd /usr/local/mysql

useradd mysql
chown -R  mysql.mysql /usr/local/mysql 
/usr/local/mysql/bin/mysql_install_db --user=mysql  
chown -R mysql  var 
/usr/local/mysql/bin/mysqld_safe --user=mysql &

MySQL平常操做命令:

create database test_db; 建立名爲test_db數據庫

use test_db; 進入test_db數據庫

show tables; 查看數據庫裏有多少張表。

 

create table test01 (id varchar(20),namevarchar(20));建立名爲test01表,並建立兩個字段,id、name、數據長度(用字符來定義長度單位。)

insert into test01 values("001","wugk1"); 向表中插入數據。

select * from test01; 查看test01表數據內容。

 

grant all privileges on test_db.*  to test@localhost identified by '123456';

grant all  on  test_db.*     to  test@localhost identified by '123456';

grant select,insert,update,delete on *.* to test@」%」  identified by  ‘123456’;

給mysql數據庫受權。

flush privileges;刷新權限

mysqldump –uroot –p123456  test_db >/tmp/test.db.sql   ;MySQL備份或導出

mysql –uroot –p123456 test_db  </tmp/test.db.sql        ;MySQL導入

mysqladmin –uroot–p123456 password  newpassword    ;修改MySQL root密碼

drop database test_db ; 刪除數據庫

drop table test01 ;  刪除表

delete from test01 ; 清空表內容

show variables like '%char%'; 查看數據庫字符集

修改Mysql字符集爲UTF-8的方法:在/etc/my.cnf對應以下配置段加入相應命令。

[client]字段里加入default-character-set=utf8

[mysqld]字段里加入character-set-server=utf8

[mysql]字段里加入default-character-set=utf8

而後重啓MySQL服務便可。

3.1.8    LAMP架構網站搭建

Linux+Apache+Mysql/MariaDB+Perl/PHP/Python一組經常使用來搭建動態網站或者服務器的開源軟件,自己都是各自獨立的程序,可是由於常被放在一塊兒使用,擁有了愈來愈高的兼容度,共同組成了一個強大的Web應用程序平臺。

隨着開源潮流的蓬勃發展,開放源代碼的LAMP已經與J2EE.Net商業軟件造成三足鼎立之勢,而且該軟件開發的項目在軟件方面的投資成本較低,所以受到整個IT界的關注。

目前LAMP架構是大多數中小企業最青睞的PHP架構選擇,也是衆多Linux SA喜歡選擇的一套架構。那接下來咱們就實戰來操做一下,若是來搭建這樣一套架構,固然能夠使用yum方法,安裝命令很簡單,一條命令搞定全部。

yum  install  httpd httpd-devel  mysql-servermysql-devel  php php-devel php-mysql –y

這一條命令LAMP環境便可安裝成功,只須要重啓apache、mysql服務便可。

    若是想要更多功能和自定義模塊,須要使用源碼包的方式來安裝LAMP架構。以下咱們使用源碼包來實現LAMP架構安裝與配置:

Ø  源碼安裝LAMP之Apache

yum install apr-devel apr-util-devel –y;

cd /usr/src ; wget http://mirror.bit.edu.cn/apache/httpd/httpd-2.2.27.tar.gz ;tarxzf  httpd-2.2.27.tar.gz ;cd httpd-2.2.27;./configure --prefix=/usr/local/apache --enable-so --enable-rewrite&&make &&make install

Ø  源碼安裝LAMP之MySQL

cd /usr/src ;wget http://downloads.mysql.com/archives/mysql-5.1/mysql-5.1.63.tar.gz ;tarxzf mysql-5.1.63.tar.gz ;cd mysql-5.1.63 ;./configure  --prefix=/usr/local/mysql--enable-assembler &&make &&make install

配置Mysql服務爲系統服務:

cp/usr/local/mysql/share/mysql/my-medium.cnf /etc/my.cnf

cp/usr/local/mysql/share/mysql/mysql.server /etc/rc.d/init.d/mysqld

chkconfig --add mysqld 
chkconfig --level 345 mysqld on

 

cd /usr/local/mysql

useradd mysql
chown -R  mysql.mysql /usr/local/mysql 
/usr/local/mysql/bin/mysql_install_db --user=mysql  
chown -R mysql  var 
/usr/local/mysql/bin/mysqld_safe --user=mysql &

Ø  源碼安裝LAMP之PHP

cd /usr/src ;wget http://mirrors.sohu.com/php/php-5.3.28.tar.bz2 ;tarjxf  php-5.3.28.tar.bz2 ;cd php-5.3.28;./configure --prefix=/usr/local/php5--with-config-file-path=/usr/local/php/etc  --with-apxs2=/usr/local/apache/bin/apxs --with-mysql=/usr/local/mysql/

 

Ø  源碼安裝Apache+PHP整合

整合apache+php環境,修改httpd.conf配置文件,而後加入以下語句:

LoadModule     php5_modulemodules/libphp5.so (默認已存在)

AddType     application/x-httpd-php .php

DirectoryIndex  index.phpindex.html (把index.php加入index.html以前)

而後在/usr/local/apache/htdocs目錄下建立index.php測試頁面,執行以下命令:

cat>>/usr/local/apache/htdocs/index.php <<EOF

<?php

phpinfo();

?>

EOF

從新啓動apache服務,經過IP訪問界面以下圖,即表明LAMP環境搭建成功。

 

Ø  源碼安裝DISCUZ論壇

下載discuz源碼包文件,而後解壓:

cd  /usr/src ;wget http://download.comsenz.com/DiscuzX/3.1/Discuz_X3.1_SC_UTF8.zip

解壓discuz程序包:unzip Discuz_X3.1_SC_UTF8.zip -d /usr/local/apache/htdocs/

重命名程序文件:cd/usr/local/apache/htdocs/ ;mv upload/* .

賦予discuz目錄徹底訪問權限:cd /usr/local/apache/htdocs/ ;chmod 777 -R data/ uc_server/ config/uc_client/

而後訪問IP安裝discuz論壇,以下圖,選擇「我贊成」

 

 進入以下界面,數據庫安裝,若是不存在則須要新建數據庫並受權。

 

數據庫建立及受權命令以下:

create database discuz charset=utf8;

grant all on discuz.* toroot@'localhost' identified by "123456";

 

點擊下一步,直至安裝完成,進入等待已久的論壇畫面:

 

自此LAMP環境整合並搭建成功,經過IP直接訪問便可。

3.1.9    Cacti監控平臺搭建

做爲一名Linux SA,平常最重要的就是保證網站正常穩定的運行,咱們須要實時監控網站、服務器的運行狀態,這時須要藉助開源軟件(cacti、nagios、zabbix等)監控來實現。

Cacti是用php語言實現的一個軟件,它的主要功能是用snmp服務獲取數據,而後用rrdtool儲存和更新數據,當用戶須要查看數據的時候用rrdtool生成圖表呈現給用戶。所以,snmp和rrdtool是cacti的關鍵。

Snmp關係着數據的收集,rrdtool關係着數據存儲和圖表的生成。snmp抓到數據不是存儲在mysql中,而是存在rrdtool生成的rrd文件中(在cacti根目錄的rra文件夾下,通常以rra爲後綴名稱)。簡單原理圖以下:

1)   Cacti服務器端安裝

官網下載cacti相關軟件,一共須要三個軟件,下載地址分別以下:

http://www.cacti.net/downloads/cacti-0.8.8a.tar.gz

http://oss.oetiker.ch/rrdtool/pub/rrdtool-1.4.5.tar.gz

http://www.cacti.net/downloads/spine/cacti-spine-0.8.8a.tar.gz

2)   安裝LAMP系統環境

這裏採用yum安裝方式,安裝命令:

yum install  httpd  mysql   mysql-server    php   php-mysql php-json php-pdo   -y

3)   安裝rrdtool採集工具

安裝rrdtool以前須要安裝相應的lib庫,以下安裝:

yum install cairo-devel libxml2-devel pango pango-devel –y

tar xzf rrdtool-1.4.5.tar.gz  ;cd rrdtool-1.4.5  ;./configure --prefix=/usr/local/rrdtool/

make &&make install;ln -s /usr/local/rrdtool/bin/* /usr/local/bin/

4)   安裝SNMP服務

yum install net-snmp net-snmp-utils  –y  

5)   安裝cacti主程序

tar xzf cacti-0.8.8a.tar.gz &&mv  cacti-0.8.8a   /var/www/html/cacti/

6)   建立cacti數據庫

mysql -uroot –p  輸入你的密碼進入數據庫,而後建立數據庫:

create database cacti;建立數據庫

grant all on cacti.* to cacti@'localhost' identified by"123456";建立用戶並受權

flush privileges; 刷新權限

mysql配置完畢後,把cacti數據導入cacti數據庫

mysql  -ucacti  -p123456 cacti </var/www/html/cacti/cacti.sql

配置完mysql後,咱們須要設置cacti  rra、log 目錄的權限,這裏設置爲777:

chmod -R  777  /var/www/html/cacti/rra/

chmod -R  777  /var/www/html/cacti/log/

7)   修改cacti全局配置文件

vi /var/www/html/cacti/include/config.php爲以下配置:

8)   添加Rrdtool抓圖任務計劃

*/5  * * * * /usr/bin/php /var/www/html/cacti/poller.php>>/tmp/cacti_rrdtool.log 2 >&1

9)   Cacti安裝完畢,測試訪問

經過http://ip/cacti/ 訪問出現以下界面,點擊NEXT下一步。

 

 默認一直點擊下一步:

 

 進入登陸界面,第一次須要修改密碼:

進入Cacti配置管理界面

 

點擊device,能夠添加設備,默承認以看到127.0.0.1這臺服務器。右上角Add能夠增長設備。

 

點擊localhost能夠看到具體的設置,包括採用的snmp協議版本,監控的名稱等:

 

若是出現snmp error,檢查snmp服務是否已啓動,或者是否有權限。出現如上信息則表示正常。

點擊左上角第二個按鈕,graphs查看cacti圖像—選擇localhost主機—右邊會顯示cacti每5分鐘的監控圖像。

 

更多cacti深刻知識,根據需求深刻講解。

3.1.10  Nagios監控平臺搭建

Nagios是一款開源的免費網絡監視工具,能有效監控Windows、Linux和Unix的主機狀態,交換機路由器等網絡設置,打印機等。在系統或服務狀態異常時發出郵件或短信報警第一時間通知網站運維人員,在狀態恢復後發出正常的郵件或短信通知。

Nagios和cacti有什麼區別呢?簡單的來講cacti主要監控流量,服務器狀態頁面展現;nagios主要監控服務,郵件及短信報警燈,固然也有簡單的流量監控界面,兩者綜合使用效果更好。(附Nagios工做簡單邏輯圖)

Nagios監控客戶端須要藉助插件及NRPE軟件來實現,NRPE做爲中間的代理程序,接收Nagios服務器端發來的請求,另外一端在遠程主機上指定的相關的監控信息。

 

1)   Nagios服務端安裝

一樣安裝nagios服務須要安裝LAMP環境,這裏省略,能夠參考以前的cacti PHP環境安裝方法:官網下載nagios相應版本和插件:

wget http://sourceforge.net/projects/nagios/files/nagios-3.x/nagios-3.2.1/nagios-3.2.1.tar.gz/download

http://down1.chinaunix.net/distfiles/nagios-plugins-1.4.14.tar.gz

 

/usr/sbin/useraddnagios

tar zxvf nagios-3.2.1.tar.gz

cd nagios-3.2.1

./configure --prefix=/usr/local/nagios --with-command-group=nagios

make all

make install //來安裝主程序,CGI和HTML文件

make install-init //在/etc/rc.d/init.d安裝啓動腳本

make install-config //來安裝示例配置文件,安裝的路徑是/usr/local/nagios/etc

make install-commandmode //來配置目錄權限

make install-webconf // 配置nagios跟apache整合

2)   安裝Nagios-plugins

tar zxvf nagios-plugins-1.4.14.tar.gz

cd nagios-plugins-1.4.14

./configure --prefix=/usr/local/nagios --with-nagios-user=nagios--with-nagios-group=nagios

make && make install

3)   nagios訪問控制設置

htpasswd  -c  /usr/local/nagios/etc/htpasswd.usersnagiosadmin

輸入兩次密碼便可,登陸頁面的時候會用到這個密碼.

4)   Nagios測試訪問

重啓nagios ,/etc/init.d/nagios restart;/etc/init.d/httpd restart ;

http://localhost/nagios/ 以下圖:

點擊左側的Hosts能夠看到右側默認localhost主機的監控,UP表示主機目前運行正常:

 

點擊左側的Services能夠看到右側默認localhost監控的各個服務的狀態,綠色OK表示正常:

 

5)   Nagios案例配置

默認安裝完nagios,配置文件主目錄在/usr/local/nagios/下,目錄各類的功能以下:

bin

Nagios 可執行程序所在目錄

etc

Nagios 配置文件所在目錄

sbin

Nagios CGI 文件所在目錄,也就是執行外部命令所需文件所在的目錄

share

Nagios網頁文件所在的目錄

libexec

Nagios 外部插件所在目錄

var

Nagios 日誌文件、lock 等文件所在的目錄

var/archives

Nagios 日誌自動歸檔目錄

var/rw

用來存放外部命令文件的目錄

這裏先來了解etc/objects目錄主要包括監控主機的配置、模板、監控時間段等配置文件。

 

 簡單來添加一個客戶端監控的步驟:

cplocalhost.cfg  192.168.33.10.cfg

把默認配置文件裏面的locahost、127.0.0.一、check_local替換成最新

sed -i's#localhost#192.168.33.10#g;s#127.0.0.1#192.168.33.10#g;s#check_local#check#g;s#linux-servers#192.168.33.10#g' 192.168.33.10.cfg

在nagios.cfg36行後加入cfg_file=/usr/local/nagios/etc/objects/192.168.33.10.cfg

sed -i'36a cfg_file=/usr/local/nagios/etc/objects/192.168.33.10.cfg'/usr/local/nagios/etc/nagios.cfg

最後執行:/usr/local/nagios/bin/nagios-v /usr/local/nagios/etc/nagios.cfg沒有報錯便可。

默認有報錯,由於沒有在客戶端安裝nagios插件及NRPE,需刪掉配置文件裏disk、swap、process、user、cpu等監控配置段:

defineservice{

        use                             local-service        

        host_name                       192.168.33.10

        service_description                 Swap Usage

        check_command                   check_swap!20!10

        }

這裏注意*若是沒有配置check_nrpe監控,默認不能監控客戶端例如swap、disk、CPU、process等狀態,須要在配置文件裏刪除或者註釋掉。

以下是剛剛添加的默認的客戶端監控圖:

6)    Nagios客戶端插件安裝

Nagios客戶端安裝須要安裝兩個軟件,nagios-plugins-1.4.15.tar.gz和nrpe-2.13.tar.gz,安裝方法以下:

useradd nagios ;tar-xzf nagios-plugins-1.4.15.tar.gz &&cd nagios-plugins-1.4.15&&./configure –prefix=/usr/local/nagios &&make&&make install

tar -xzfnrpe-2.13.tar.gz && cd nrpe-2.13 &&./configure --enable-ssl--with-ssl-lib &&make all && make install-plugin &&make install-daemon && make install-daemon-config

chown -R nagios:nagios /usr/local/nagios/ ;cd .. ;cp nrpe.cfg /usr/local/nagios/etc/nrpe.cfg

啓動nrpe客戶端命令:/usr/local/nagios/bin/nrpe-c /usr/local/nagios/etc/nrpe.cfg –d

7)   Nrpe客戶端配置

修改vi/usr/local/nagios/etc/nrpe.cfg 修改默認配置段的內容以下,去掉#號,作相應修改。

command[check_users]=/usr/local/nagios/libexec/check_users-w 5 -c 10

command[check_load]=/usr/local/nagios/libexec/check_load-w 15,10,5 -c 30,25,20

command[check_disk]=/usr/local/nagios/libexec/check_disk-w 20 -c 10 -p /dev/sda2

command[check_procs]=/usr/local/nagios/libexec/check_procs-w 50 -c 100

command[check_swap]=/usr/local/nagios/libexec/check_swap-w 20 -c 10

8)   Nagios服務器Nrpe配置

Nagios 服務器端也須要安裝nrpe,同時須要定義Nrpe監控命令,寫command.cfg末尾便可:

define command{

        command_namecheck_nrpe

        command_line$USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$

        }

9)   Nagios監控端客戶機配置

在192.168.33.10.cfg加入以下配置段,引用客戶端nrpe.cfg裏面配置的check_load命令,命令通常格式爲:check_nrpe!command

define service{

       use                             local-service     

       host_name                      192.168.33.10

       service_description                Current Load

       check_command                  check_nrpe!check_load

       }

 

其餘同理,添加的方法同樣。只要在客戶端nrpe.cfg裏面添加的監控命令,均可以在服務端引用。

10)  Nagios監控端HTTP關鍵詞

在真實的線上環境中,若是要監控HTTP、web、tomcat某個URL關鍵詞,監控網站關鍵詞是否被篡改,若是來實現呢?

   這裏能夠使用默認監控命令check_http命令+相關的參數來實現,以下:

在command.cfg添加以下關鍵詞監控命令:check_http_word,參數解析:-I指定IP或者主機名,-u指定URL,-p指定端口,-s指定關鍵詞。

define command{

       command_name    check_http_word

       command_line    $USER1$/check_http-I $HOSTADDRESS$ -u

ARG1$pARG1$−p

ARG2$ -s $ARG3$

 

       }

而後在服務器端監控主機的配置文件裏面引用便可,引用的方法以下:

 也能夠在服務器端命令行執行以下命令來作測試,例如監控頁面不存在ATM關鍵詞,但82端口web服務能夠訪問,依然會發送報警。

/usr/local/nagios/libexec/check_http -I192.168.33.11 -u /index.html -p 82 -s "ATM"

 

 如上截圖表示,關鍵詞ATM不存在,則nagios在監控頁面上會顯示CRITICAL緊急。

11)   Nagios郵件及短信報警

使用nagios報警,之前能夠用飛信發送報警,可是自從飛信更改接口後,就不方便了,那咱們要發短信報警怎麼辦呢,咱們能夠139郵箱,機制是nagios給139郵箱發送信息,而後信息會自動發到咱們綁定的手機。提早在139上綁定好手機便可。除此以外還能夠使用短信貓(收費)設備來發送報警。

默認command.cfg裏面已經配置好了郵件報警設置,能夠使用默認的配置,使用系統默認的mail發送郵件;還能夠本身定義發送的內容格式及發送的郵件smtp服務器端軟件。

這裏使用默認的配置文件,要能收到短信報警,除了在139.com界面綁定139郵箱以外,還須要在nagios服務器端配置文件修改郵件收件人以下:

修改配置文件:vi/usr/local/nagios/etc/objects/contacts.cfg內容以下:

 

 

一樣也能夠使用sed命令修改:cd /usr/local/nagios/etc/objects/ ;

sed  -i 's#nagios@localhost#wgkgood@139.com#g' contacts.cfg

    如上配置完畢後,重啓nagios服務,能夠測試關閉某個服務,過一會就會收到nagios發來的報警郵件。

    自此,Nagios相關的配置就到此爲止,固然有興趣的童鞋還能夠進一步研究,例如nagios跟cacti如何整合,nagios如何優化等等。

3.1.11  Kickstart自動化安裝平臺

隨着公司業務不斷增長,常常須要採購新服務器,並要求安裝Linux系統,而且要求Linux版本要一致,方便之後的維護和管理,每次人工安裝linux系統會浪費掉更多時間,若是咱們有辦法能節省一次一次的時間豈不更好呢?

大中型互聯網公司一次採購服務器上百臺,若是採用人工手動一臺一臺的安裝,一我的得搞壞N張光盤,得多少個加班加點才能完成這項」艱鉅」的任務呢,咱們能夠看到全人工來完成這樣的工做太浪費人力了,有沒有自動化安裝平臺呢,經過一臺已存在的系統而後克隆或者複製到新的服務器呢。Kickstart能夠絕不費力的完成這項工做。

PXE(preboot execute environment,預啓動執行環境)是由Intel公司開發的最新技術,工做於Client/Server的網絡模式,支持工做站經過網絡從遠端服務器下載映像,並由此支持經過網絡啓動操做系統,在啓動過程當中,終端要求服務器分配IP地址,再用TFTP(trivial file transfer protocol)協議下載一個啓動軟件包到本機內存中執行。

要使用kickstart安裝平臺,包括的完整架構爲:Kickstart+DHCP+NFS+TFTP+PXE,從架構能夠看出,大體須要安裝的服務,例如dhcp、tftp、nfs、kickstart/pxe等。

1)   DHCP、TFTP安裝

yum  install   -y   dhcp* tftp* 

首先配置tftp服務:

vi /etc/xinetd.d/tftp

servicetftp

{

disable =no

socket_type= dgram

protocol =udp

wait = yes

user =root

server =/usr/sbin/in.tftpd

server_args= -u nobody -s /tftpboot

per_source= 11

cps = 1002

flags =IPv4

}

只須要把disable =yes改爲disable = no便可。

2)   TFTP+PXE配置

要實現遠程安裝系統,首先須要在TFTPBOOT目錄指定相關PXE內核模塊及相關參數。配置步驟以下:

mount    /dev/cdrom    /mnt 掛載本地光盤

#若是系統是5.x,默認tftpboot目錄已經自動建立到/根目錄下

#若是系統是6.x,默認tftpboot目錄在/var/lib/下,因此centos6.x須要作軟連接到/根目錄下。

cp/usr/lib/syslinux/pxelinux.0 ./

cp  /mnt/images/pxeboot/{vmlinuz,initrd.img}  ./  拷貝內核至tftpboot目錄下

mkdir -p  pxelinux.cfg  &&cp /mnt/isolinux/isolinux.cfg   pxelinux.cfg/default

拷貝isolinux.cfg配置文件重命名,系統安裝的時候會根據這個文件的配置啓動相應的選項。

修改pexlinux.cfg/default內容以下:

defaultlinux

prompt 1

timeout 10

displayboot.msg

F1boot.msg

F2options.msg

F3general.msg

F4param.msg

F5rescue.msg

labelcentos5.8

kernelvmlinuz

appendks=nfs:192.168.0.79:/centosinstall/ks.cfg ksdevice=eth0 initrd=initrd.img

label text

kernelvmlinuz

appendinitrd=initrd.img text

label ks

kernelvmlinuz

append ksinitrd=initrd.img

labellocal

localboot1

labelmemtest86

kernelmemtest

append –

解析:192.168.0.79是kickstart服務器,/centosinstall 是nfs共享linux鏡像的目錄,也是linux存放安裝文件的路徑,ks.cfg是kickstart主配置文件;設置timeout 10 /*超時時間爲10S */;ksdevice=etho表明當咱們有多塊網卡的時候,要實現自動化須要設置從eth0安裝。

TFTP配置完畢,因爲是TFTP是非獨立服務,須要依賴xinetd服務來啓動,啓動命令爲:

chkconfig    tftp --level 35 on  && service  xinetd restart 

3)   NFS+KICKSTART配置

遠程系統安裝,客戶端須要下載系統所需的軟件包,因此須要使用NFS或者httpd把鏡像文件共享出來。

mkdir   -p   /centosinstall

nohup cp  -rf   /mnt/*  /centosinstall  &

echo  「/centosinstall   *(rw,sync)」 >>/etc/exports

在NFS配置文件/etc/exports中加入如上語句:/centosinstall    *(rw,sync),表示容許任何主機訪問/centosinstall目錄,有讀寫權限。

    配置kickstart,能夠使用system-kickstart系統軟件包來配置,也能夠直接拷貝/root/目錄下anaconda-ks.cfg 重命名爲ks.cfg,並把ks.cfg拷貝至剛共享的/centosinstall目錄下,賦權限爲chmod 777 ks.cfg

以下我這裏採用配置文件內容以下:vi ks.cfg

# Kickstart file automatically generated by anaconda.

install

text

nfs --server=192.168.0.79 --dir=/centosinstall

key --skip

lang zh_CN.UTF-8

keyboard us

network --device eth0 --bootproto=dhcp --noipv6

rootpw 123456

firewall --disabled

authconfig --enableshadow --enablemd5

selinux --disabled

timezone Asia/Shanghai

bootloader --location=mbr --driveorder=sda--append="rhgb quiet"

clearpart --all --initlabel

part /boot --fstype ext3 --size=200

part swap --size=4000

part / --fstype ext3 --size=80000

part /data --fstype ext3 --size=1 --grow

%packages

@admin-tools

@base

@core

@development-libs

@development-tools

@editors

@system-tools

@base-x

@chinese-support

keyutils

kexec-tools

trousers

fipscheck

device-mapper-multipath

imake

audit

xorg-x11-server-Xnest

xorg-x11-server-Xvfb

第一步install,以text字符界面,指定nfs共享IP和目錄,設置安裝後的服務器字符集、網絡分配方式、密碼;

而後設置防火牆狀態,磁盤採用MBR方式引導,而後客戶機分區的狀況;%packages

後寫入客戶機系統須要安裝的軟件包,能夠本身定製。更多詳細的參數在此就不作過多的說明了,能夠進一步學習。

在真實環境中,一般咱們會發現一臺服務器好幾塊硬盤,作完raid,整個硬盤有等10T,若是來使用kickstart自動安裝並分區呢;通常服務器硬盤超過2T,如何來使用kickstart安裝配置呢?這裏就不能使用MBR方式來分區,須要採用GPT格式來引導並分區。

須要在ks.cfg末尾添加以下命令來實現需求:

%pre
parted -s /dev/sdb  mklabel gpt
%end

爲了實現kickstart安裝完系統後,自動初始化系統等等工做,咱們能夠在系統安裝完後,自動執行定製的腳本,須要在ks.cfg末尾加入以下配置:

%post

mount  -t  nfs 192.168.0.79:/centos/init /mnt

cd  /mnt/;/bin/sh  auto_init.sh

%end

4)   DHCP配置及測試

Pxe+kickstart自動安裝系統,須要用到DHCP分配的客戶端的IP地址,這裏直接上dhcpd.conf配置文件:

ddns-update-style interim;

ignore client-updates;

next-server 192.168.0.79;

filename "pxelinux.0";

allow booting;

allow bootp;

subnet 192.168.0.0 netmask 255.255.255.0 {

# --- default gateway

option routers         192.168.0.1;

option subnet-mask     255.255.252.0;

range dynamic-bootp 192.168.0.100 192.168.0.200;

host ns {

hardware ethernet 00:1a:a0:2b:38:81;

fixed-address 192.168.0.101;}

}

最後重啓全部服務,並關閉iptables和selinux,而後找一臺新服務器,接入網線與kickstart服務器在一個交換機或經過中繼能獲取到IP的網絡便可。

service  xinetd  restart

service nfs restart

service   dhcpd restart

注*KICKSTART全部配置就此告一段落,真實環境須要注意,新服務器跟kickstart最後獨立在一個網絡,不要跟辦公環境或者服務器機房網絡混在一塊兒,若是別的機器以網卡就會把它的系統重裝成Linux系統。

4.     Linux編程篇

4.1     LinuxShell編程

4.1.1    Shell編程簡介

shell是操做系統的最外層。shell合併編程語言以控制進程和文件,以及啓動和控制其它程序。shell 經過提示您輸入,向操做系統解釋該輸入,而後處理來自操做系統的任何結果輸出來管理您與操做系統之間的交互。

Shell是用戶與Linux操做系統之間溝通的橋樑。用戶能夠輸入命令執行,又能夠利用 Shell腳本編程去運行。隨着Linux企業應用愈來愈多,維護Linux平常工做頻繁,因此若是單靠手工去敲打命令是很是困難的,因此學會熟練使用SHELL編程是每一個Linux SA必備的功課。

Linux Shell種類很是多,常見的有:BourneShell(/usr/bin/sh或/bin/sh)、Bourne Again Shell(/bin/bash)、C Shell(/usr/bin/csh)、K Shell(/usr/bin/ksh)、Shell for Root(/sbin/sh)等。不一樣的Shell語言的語法有所不一樣,因此不能交換使用。

最經常使用的shell是Bash,也就是Bourne Again Shell,因爲易用和免費,Bash在平常工做中被普遍使用,也是大多數Linux系統默認的Shell。接下來咱們來寫一個簡單的shell腳本。(shell腳本通常文件名以.sh結尾,同時文件第一行定義該腳本爲shell腳本)

vi first_shell.sh

#!/bin/bash

#This is my First shell

echo 「Hello  World !」

這就是咱們的第一個腳本,是否是很簡單呢,註解以下:

#!/bin/bash  //表示定義該腳本是一個shell腳本(固定格式)。

#This is my First shell  //這裏的#號屬於註解,沒有任何的意義,SHELL不會解析它。

echo 「Hello  World !」  //shell腳本主命令,咱們執行這個腳本講看到: Hello World ! 信息。

腳本編寫完畢,如何來執行呢,首先執行shell腳本須要執行權限,賦予執行權限:

chmod o+x first_shell.sh 而後./first_shell.sh執行便可;也能夠直接使用命令執行: /bin/sh first_shell.sh,顯示效果同樣。

4.1.2    Shell變量設置

Shell編程語言是非類型的解釋型語言,不像C++/JAVA語言編程時須要事先聲明變量,SHELL給一個變量賦值,實際上就是定義了變量,在Linux支持的全部shell中,均可以用賦值符號(=)爲變量賦值。

SHELL變量可分爲兩類:局部變量和環境變量。局部變量只在建立它們的shell腳本中使用。而環境變量則能夠在建立它們的shell及其派生出來的任意子進程中使用。有些變量是用戶建立的,其餘的則是專用shell變量。

例如在腳本里面定義A=123,定義這樣一個變量,前面變量名,後面是變量的值。

引用變量能夠使用$A,把變量放在腳本里面會出現什麼樣的效果呢?以下:

#!/bin/bash

#Author wugk 2014-06-10

A=123

echo 「Printf variables equal is $A」

執行腳本:sh  test.sh,結果將會顯示:

Printf variables equal is 123

簡單的理解變量,至關於定義一個別名-名稱,引用的時候加上$符號就能夠了。

例如定義變量 name=wuguangke

執行echo $name 將會顯示wuguangke

SHELL常見的系統變量解析:

$0 當前程序的名稱

$n 當前程序的第n個參數,n=1,2,…9

$* 當前程序的全部參數(不包括程序自己)

$# 當前程序的參數個數(不包括程序自己)

$? 命令或程序執行完後的狀態,通常返回0表示執行成功。

$UID 當前用戶的ID

$PWD 當前所在的目錄

4.1.3    Shell流程控制語句

在Linux Shell編程中,if、for、while、case等條件流程控制語句用的很是多,把這些學好,對提高腳本的功力有很是大的幫助。下面將逐個來說解具體的用法:

Ø  If條件判斷語句

If  (表達式) #if ( Variable in Array )

語句1

else

語句2

fi

案例一,測試數字大小

#!/bin/sh

NUM=100

if (( $NUM > 4 )) ;then

echo 「this num is $NUM greater  4 !」

fi

案例二,測試目錄是否存在,不存在則新建(注意,中括號之間必需要空格)

#!/bin/sh

#judge dir exist

if  [  ! -d  /data/20140515 ];then

mkdir  -p/data/20140515

 else

    echo  「This DIR isexist,Please exit …..」

fi

邏輯運算符解析:

-f 判斷文件是否存在 eg: if [ -f filename ]

-d 判斷目錄是否存在 eg: if [ -d dir     ]

-eq    等於 應用於:整型比較

-ne    不等於 應用於:整型比較

-lt    小於 應用於:整型比較

-gt    大於 應用於:整型比較

-le    小於或等於 應用於:整型比較

-ge    大於或等於 應用於:整型比較

-a 雙方都成立(and) 邏輯表達式 –a 邏輯表達式

-o 單方成立(or) 邏輯表達式 –o 邏輯表達式

-z 空字符串

 

案例三,多個條件測試判斷

#!/bin/sh

scores=80;
if  [[ $scores -gt 85 ]]; then
    echo "very good!";
elif [[ $scores -gt 75 ]]; then
    echo "good!";
elif [[ $scores -gt 60 ]]; then
    echo "pass!";
else
    echo "no pass!";
fi;

Ø  循環語句for

For 變量 in 字符串

 

do

 

語句1

 

done

 

案例一,打印seq多個數

    #!/bin/sh

    for   i  in  `seq 15`

    do

        echo  「NUM is $i」

    done

 

案例二,找到相關log,而後批量打包

   

    #!/bin/sh

    for   i  in  `find /var/log  -name 「*.log」`

    do

        tar–czf  2014log.tgz $i

    done

 

Ø  循環語句while

while 條件語句

 

do

 

語句1

 

done

 

 

案例一,while條件判斷數字

#!/bin/sh

i=1;

while [[ $i -lt 10 ]];do

   echo $i;

   ((i++));

done;

案例二,while逐行讀取某個文件

#!/bin/sh

while read line

do

   echo  $line;

done < /etc/hosts

 

 

Ø  Until循環語句

until 條件          

do

action

done

直到知足條件,才退出。不然執行action。

案例一,條件判斷數字

#!/bin/sh

a=10;

until [[ $a -lt 0 ]];do

echo $a;

((a--));

done;    

 

 

Ø  Case選擇語句

case $arg in 

    pattern1)

    語句1

    ;; 

    pattern2)

    語句2

    ;; 

    *)

    語句3

    ;; 

esac

案例一,建立選擇參數腳本

#!/bin/sh

case $1 in

 

        monitor_log)

        monitor_log

        ;;

        archive_log)

        archive_log

        ;;

 

        *          )

        echo "Usage:{$0 monitor_log |archive_log |help }"

        ;;

esac

Ø  select選擇語句

#!/bin/sh

PS3="What you like most of the open sourcesystem?"

select i in CentOS RedHat Ubuntu

do

echo "Your Select System: "$i

done

 

4.1.4    Shell腳本案例

a)  自動刪除test.txt文件腳本

腳本的功能實現從/root/目錄cp拷貝test.txt到/tmp目錄,而且在/tmp目錄建立一個目錄abc,而且刪除原/root/下test.txt。

首先命名腳本名稱爲auto_cp.sh(名稱能夠本身定義),內容以下:

#!/bin/bash

#This is First shell for auto cpFiles

#定義文件和目錄變量

FILES=/root/test.txt

DIR=/tmp

cp  $FILES  $DIR 

cd  $DIR ; mkdir –p abc

rm  -rf $FILES

echo 「The Shell Scripts exec successfully !」

「自動CP並刪除文件」的腳本編寫完畢,保存退出便可。

b)  自動備份Mysql數據庫腳本

#!/bin/sh

#autobackup mysql

#wugk  2012-12-12

#DefinePATH定義變量

BAKDIR=/data/backup/mysql/`date+%Y-%m-%d`

MYSQLDB=webapp

MYSQLPW=backup

MYSQLUSR=backup

#mustuse root user run scripts 必須使用root用戶運行,$UID爲系統變量

if            

   [ $UID -ne 0 ];then

   echo This script must use the root user ! !!

   sleep 2

   exit 0

fi

#DefineDIR and mkdir DIR 判斷目錄是否存在,不存在則新建

if

   [ ! -d $BAKDIR ];then

   mkdir -p $BAKDIR

else

   echo This is $BAKDIR exists....

fi

#Usemysqldump backup mysql 使用mysqldump備份數據庫

/usr/bin/mysqldump-u$MYSQLUSR -p$MYSQLPW -d $MYSQLDB >$BAKDIR/webapp_db.sql

echo"The mysql backup successfully "

c)  自動打包tar目錄下log文件腳本

 

#!/bin/sh

#autotar czf shell to Files

#Authorwugk 2014-05-15

SRC_DIR=/opt/

DES_DIR=/opt/backup/`date+%Y%m%d`

 

If

[ ! –d $DES_DIR ];then

    Mkdir –p $DES_DIR

fi

for  i in  `find  $SRC_DIR -name 「*.log」`

do

    tar czf  $i.tgz  $i

done

echo 「Thescripts exec end, Files tar successfully !」

 

d)  自動拒絕惡意IP腳本

 #!/bin/sh

#autodrop ssh failed IP address

#wugk 2013-1-2

#定義變量

SEC_FILE=/var/log/secure

#以下爲截取secure文件惡意ip 遠程登陸22端口,大於等於4次就寫入防火牆,禁止之後再登陸服務器的22端口

IP_ADDR=`tail-n 1000 /var/log/secure |grep "Failed password"| egrep-o "([0-9]{1,3}\.){3}[0-9]{1,3}" | sort -nr | uniq -c|awk ' $1>=4 {print $2}'`

IPTABLE_CONF=/etc/sysconfig/iptables

echo

cat<<EOF

++++++++++++++welcometo use ssh login drop failed ip+++++++++++++++++

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

++++++++++++++++------------------------------------++++++++++++++++++

EOF

echo-n "請等待5秒後開始執行 "

for ((j=0;j<=4;j++));do echo -n "----------";sleep 1 ;done

echo

for i in `echo$IP_ADDR`

do

    #查看iptables配置文件是否含有提取的IP信息

    cat$IPTABLE_CONF |grep $i >/dev/null

if

    [$? -ne 0 ];then

    #判斷iptables配置文件裏面是否存在已拒絕的ip,如何不存在就再也不添加相應條目

    sed-i "/lo/a -A INPUT -s $i -m state --state NEW -m tcp -p tcp --dport22 -j DROP" $IPTABLE_CONF

else

    #如何存在的話,就打印提示信息便可

    echo  "Thisis $i is exist in iptables,please exit ......"

fi

done

#最後重啓iptables生效

/etc/init.d/iptablesrestart

 

4.1.5    Shell數組編程

數組,就是相同數據類型的元素按必定順序排列的集合,就是把有限個類型相同的變量用一個名字命名,而後用編號區分他們的變量的集合,這個名字成爲數組名,編號成爲下標。

 

今天這裏咱們來探討一維數組的定義、統計、引用和刪除等操做。首先來定義一個一維數組:

A=( test1 test2  test3 ) ,定義數組通常以括號的方式來定義,數組的值能夠隨機定義。如何來引用呢?

echo  ${A[0]},表明引用第一個數組變量,結果會顯示test1,數組引用從0開始,表明第一個數組,依次類推。

echo  ${A[1]},表明引用第二個數組變量,結果會顯示test2,數組引用也是從0開始計算的。

如何顯示該數組全部參數呢?echo  ${A[@]} 將顯示全部參數test1test2 test3 。

如何顯示該數組參數個數呢?echo  ${#A[@]} 將顯示該數組的參數個數3。

若是替換某個數組呢?例如替換第二個test2數組爲test5:echo ${A[@]/test2/test5}

如何刪除一個數組呢?例如刪除test3數組命令爲:unset A[2] ;echo ${A[@]}查看效果。

 

那輸入如何在編程來使用呢?請看下面例子:

#!/bin/sh

#Auto Make KVM Virtualization

#Auto config bond scripts

eth_bond()

{

NETWORK=(

 HWADDR=`ifconfig eth0 |egrep "HWaddr|Bcast" |tr "\n"" "|awk '{print $5,$7,$NF}'|sed -e 's/addr://g' -e 's/Mask://g'|awk'{print $1}'`

 IPADDR=`ifconfig eth0 |egrep "HWaddr|Bcast" |tr "\n"" "|awk '{print $5,$7,$NF}'|sed -e 's/addr://g' -e 's/Mask://g'|awk'{print $2}'`

 NETMASK=`ifconfig eth0 |egrep "HWaddr|Bcast" |tr"\n" " "|awk '{print $5,$7,$NF}'|sed -e 's/addr://g' -e's/Mask://g'|awk '{print $3}'`

 GATEWAY=`route -n|grep "UG"|awk '{print $2}'`

)

cat >ifcfg-bond0<<EOF

DEVICE=bond0

BOOTPROTO=static

${NETWORK[1]}

${NETWORK[2]}

${NETWORK[3]}

ONBOOT=yes

TYPE=Ethernet

NM_CONTROLLED=no

EOF

如上腳本爲定義三個數組變量,而後分別來引用,這樣讓腳本可讀性更強,更整潔。關於數組就簡單的介紹到這裏。

 

 

5.     Linux深刻篇

5.1   構建Nginx WEB服務器

nginx [engine x]是Igor Sysoev編寫的一個HTTP和反向代理服務器,另外它也能夠做爲郵件代理服務器。它已經在衆多流量很大的俄羅斯網站上使用了很長時間,這些網站包括YandexMail.RuVKontakte,以及Rambler

據Netcraft統計,在2012年8月份,世界上最繁忙的網站中有11.48%使用Nginx做爲其服務器或者代理服務器。目前互聯網主流公司360、百度、新浪、騰訊、阿里等都在使用nginx做爲本身的web服務器。

Nginx由內核和模塊組成,其中,內核的設計很是微小和簡潔,完成的工做也很是簡單,僅僅經過查找配置文件將客戶端請求映射到一個location block(location是Nginx配置中的一個指令,用於URL匹配),而在這個location中所配置的每一個指令將會啓動不一樣的模塊去完成相應的工做。

Nginx相對於Apache優勢:

1)  高併發響應性能很是好,官方Nginx處理靜態文件併發5w/s

2)  反向代理性能很是好。(可用於負載均衡)

3)  內存和cpu佔用率低。(爲Apache的1/5-1/10)

4)  功能較Apache少(經常使用功能均有)

5)  對php可以使用cgi方式和fastcgi方式。

5.1.1    NginxWEB安裝

首先須要安裝pcre庫,而後再安裝Nginx:

#安裝pcre支持rewrite庫,也能夠安裝源碼,注*安裝源碼時,指定pcre路徑爲解壓

源碼的路徑,而不是編譯後的路徑,不然會報錯

(make[1]: *** [/usr/local/pcre/Makefile] Error 127 錯誤)

yum install pcre-devel pcre -y

#下載Nginx源碼包

cd /usr/src ;wget -c http://nginx.org/download/nginx-1.4.2.tar.gz

#解壓Nginx源碼包

tar -xzf nginx-1.4.2.tar.gz

#進入解壓目錄,而後sed修改Nginx版本信息爲WS

cd nginx-1.4.2 ; sed -i -e 's/1.4.2//g' -e's/nginx\//WS/g' -e

's/"NGINX"/"WS"/g' src/core/nginx.h

#預編譯Nginx

useradd www ;./configure --user=www --group=www--prefix=/usr/local/nginx --with-

http_stub_status_module --with-http_ssl_module

#.configure預編譯成功後,執行make命令進行編譯

make

#make執行成功後,執行make install 正式安裝

make install

#自此Nginx安裝完畢

/usr/local/nginx/sbin/nginx  -t  檢查nginx配置文件是否正確,返回OK即正確。

[root@localhost ~]# /usr/local/nginx/sbin/nginx -t

nginx: the configuration file/usr/local/nginx/conf/nginx.conf syntax is ok

nginx: configuration file/usr/local/nginx/conf/nginx.conf test is successful

[root@localhost ~]#

而後啓動nginx,/usr/local/nginx/sbin/nginx回車便可。查看進程是否已啓動:

[root@localhost ~]# ps -ef |grep nginx

nobody   5381 30285  0 May16 ?        00:04:31 nginx: worker process        

root    30285     1  0  2014?        00:00:00 nginx: master process/usr/local/nginx/sbin/nginx

root    32260 32220  0 12:34 pts/0    00:00:00 grep nginx

[root@localhost ~]#

5.1.2    Nginx虛擬主機配置

在真實的服務器環境,爲了充分利用服務器資源,一臺nginx web服務器同時會配置N個虛擬域名主機,即多個域名對於一樣一個80端口。而後服務器IP數量不少,也能夠配置基於多個IP對應同一個端口。

vi修改nginx.conf server段配置內容以下:

 

#virtual hosts config 2014/5/18

server {

       listen       80;

       server_name  www.a.com;

 

       #access_log logs/host.access.log  main;

 

       location / {

           root   html/a;

           index  index.html index.htm;

        }

 

server {

       listen       80;

       server_name  www.b.com;

 

       #access_log logs/host.access.log  main;

 

       location / {

           root   html/b;

           index  index.html index.htm;

        }

建立兩個不一樣的目錄mkdir –p /usr/local/nginx/html/{a,b},而後分別在兩個目錄建立兩個不一樣的index.html網站頁面便可。經過客戶端配置hosts指向兩個域名,而後在IE瀏覽器訪問測試效果。

5.1.3    Nginx性能優化

隨着訪問量的不斷增長,須要對Nginx和內核作相應的優化來知足高併發用戶的訪問,那下面在單臺Nginx服務器來優化相關參數。

1)  Nginx.conf配置優化:

worker_processes 8;

nginx進程數,建議按照cpu數目來指定,通常爲它的倍數。

worker_cpu_affinity 00000001 00000010 0000010000001000 00010000

00100000 01000000 10000000;

爲每一個進程分配cpu,上例中將8個進程分配到8個cpu,固然能夠寫多個,或者將一

個進程分配到多個cpu。

worker_rlimit_nofile 102400;

這個指令是指當一個nginx進程打開的最多文件描述符數目,理論值應該是最多打

開文件數(ulimit -n)與nginx進程數相除,可是nginx分配請求並非那麼均勻

,因此最好與ulimit -n的值保持一致。

use epoll;

使用epoll的I/O模型。epoll是Linux內核爲處理大批量文件描述符而做了改進的

poll,它能顯著提升程序在大量併發鏈接中只有少許活躍的狀況下的系統CPU利用

率。

worker_connections 102400;

每一個進程容許的最多鏈接數,理論上每臺nginx服務器的最大鏈接數爲

worker_processes*worker_connections。

keepalive_timeout 60;

keepalive超時時間,客戶端到服務器端的鏈接持續有效時間,當出現對服務器的後

繼請求時,keepalive-timeout功能可避免創建或從新創建鏈接。

client_header_buffer_size 4k;

客戶端請求頭部的緩衝區大小,這個能夠根據你的系統分頁大小來設置,通常一個

請求的頭部大小不會超過1k,不過因爲通常系統分頁都要大於1k,因此這裏設置爲

分頁大小。分頁大小能夠用命令getconf PAGESIZE取得。

open_file_cache max=102400 inactive=20s;

這個將爲打開文件指定緩存,默認是沒有啓用的,max指定緩存數量,建議和打開

文件數一致,inactive是指通過多長時間文件沒被請求後刪除緩存。

open_file_cache_valid 30s;

這個是指多長時間檢查一次緩存的有效信息。

open_file_cache_min_uses 1;

open_file_cache指令中的inactive參數時間內文件的最少使用次數,若是超過這

個數字,文件描述符一直是在緩存中打開的,如上例,若是有一個文件在inactive

時間內一次沒被使用,它將被移除。

2)  Linux內核參數優化:

net.ipv4.tcp_max_tw_buckets = 10000

timewait的數量,默認是180000。

net.ipv4.ip_local_port_range = 1024 65000

容許系統打開的端口範圍。

net.ipv4.tcp_tw_recycle = 1

啓用timewait快速回收。

net.ipv4.tcp_tw_reuse = 1

開啓重用。容許將TIME-WAIT sockets從新用於新的TCP鏈接。

net.ipv4.tcp_syncookies = 1

開啓SYN Cookies,當出現SYN等待隊列溢出時,啓用cookies來處理。 

 

5.1.4    Nginx參數深刻理解

Nginx經常使用配置參數有upstream,主要用於均衡後端多個實例:

Nginx 的upstream目前支持5種算法分配方式:

1)  輪詢(默認rr)

每一個請求按時間順序逐一分配到後端不一樣的服務器,若是後端某臺服務器down掉,自動剔除,待恢復自動添加上。

2)  Weight權重

指定輪詢權重,權重越高,處理的請求就越多,weight和訪問比率成正比,用於後端服務器性能不均的狀況。

3)  ip_hash

每一個請求根據訪問的IP的hash結果分配,這樣每一個訪客固定訪問一個後端服務器,能夠解決session的問題,通常用於登陸會話。

4)  fair(第三方)

按後端服務器的響應時間來分配請求,響應時間短的優先分配。 

5)  url_hash(第三方)

upstream的 fail_timeout和max_fails參數是用來判斷負載均衡upstream中的某個server是否失效。

在fail_timeout的時間內,nignx與upstream中某個server的鏈接嘗試失敗了max_fails次,則nginx會認爲該server已經失效。在接下來的 fail_timeout時間內,nginx再也不將請求分發給失效的server。

例如在nginx.conf裏面配置以下的tdt_app均衡:

upstream tdt_app {

    server  10.10.1.11:8080 weight=1 max_fails=2 fail_timeout=30s;

    server   10.10.1.12:8080 weight=1 max_fails=2fail_timeout=30s;

}

Tdt_app均衡兩臺後端JAVA服務,在30秒內nginx會與後端的某個server通訊檢測,若是檢測鏈接失敗2次,則Nginx會認爲該server已經失效,而後踢出轉發列表,而後在接下來的30s內,nginx再也不講請求轉發給失效的server。

另外,fail_timeout設置的時間對響應時間沒影響,這個響應時間是用proxy_connect_timeout和proxy_read_timeout來控制的。

proxy_connect_timeout :Nginx與後端服務器鏈接的超時時間,發起握手等候響應超時時間。

proxy_read_timeout:鏈接成功後_等候後端服務器響應時間,其實已經進入後端的排隊之中等候處理(也能夠說是後端服務器處理請求的時間)。

proxy_send_timeout :後端服務器數據回傳時間,在規定時間以內後端服務器必須傳完全部的數據。

keepalive_timout:一個http產生的tcp鏈接在傳送完最後一個響應後,還須要等待多少秒後,才關閉這個鏈接。

 

5.1.5    NginxRewrite規則

Rewrite規則含義就是某個URL重寫成特定的URL,從某種意義上說爲了美觀或者對搜索引擎友好,提升收錄量及排名等。

Rewrite規則的最後一項參數爲flag標記,支持的flag標記主要有如下幾種: 

1)  last :至關於Apache裏德(L)標記,表示完成rewrite;

2)  break;本條規則匹配完成後,終止匹配,再也不匹配後面的規則 

3)  redirect:返回302臨時重定向,瀏覽器地址會顯示跳轉後的URL地址 

4)  permanent:返回301永久重定向,瀏覽器地址欄會顯示跳轉後的URL地址 

5)  last和break用來實現URL重寫,瀏覽器地址欄URL地址不變。 

 

a)  例如用戶訪問www.test.com,想直接跳轉到網站下面的某個頁面,www.test.com/new.index.html如何來實現呢?

咱們能夠使用Nginx Rewrite 來實現這個需求,具體以下:

在server中加入以下語句便可:

rewrite ^/$ http://www.wugk.com/index.html permanent;

*表明前面0或更多個字符

+表明前面1或更多個字符

?表明前面0或1個字符

^表明字符串的開始位置

$表明字符串結束的位置

。爲通配符,表明任何字符

b)  例如多個域名跳轉到同一個域名,nginx rewrite規則寫法以下:

server

{

listen 80;

server_name www.wugk.com wugk.com;

if ($host != ‘www.wugk.com’ ) {

rewrite ^/(.*)$ http://www.wugk.com/$1  permanent;

}

更多深刻的rewrite能夠繼續學習。

5.2   構建Rsync同步服務器

Rsync是Unix/Linux下的一款應用軟件,利用它能夠使多臺服務器數據保持同步一致性,第一次同步時 rsync 會複製所有內容,但在下一次只傳輸修改過的文件。

Rsync 在傳輸數據的過程當中能夠實行壓縮及解壓縮操做,所以能夠使用更少的帶寬。能夠很容易作到保持原來文件的權限、時間、軟硬連接等。

5.2.1    Rsync服務端配置

下面正式來配置Rsync服務器,模擬真實環境服務器數據同步。

A是源服務器,B、C爲客戶端服務器,因需求,B、C服務器須要從A某個同步某個目錄到本地。

正式安裝,官網下載rsync穩定版本,而後進行安裝編譯。

cd  /usr/src;wget  http://rsync.samba.org/ftp/rsync/src/rsync-3.0.7.tar.gz 

tar  xzf  rsync-3.0.7.tar.gz  && cd rsync-3.0.7 &&./configure --

prefix=/usr/local/rsync  &&make &&make install

安裝完畢,配置rsync配置文件,默認/etc/不存在rsyncd.conf配置文件,須要手動建立,配置內容爲以下:cat  rsyncd.conf

#########[global] 全局配置

uid = nobody

gid = nobody

use chroot = no

max connections = 30

pid file = /var/run/rsyncd.pid

lock file = /var/run/rsyncd.lock

log file = /var/log/rsyncd.log

transfer logging = yes

log format = %t %a %m %f %b

syslog facility = local3

timeout = 300

 

[www]

read only = yes

path = /usr/local/webapps

comment = www

auth users =test

secrets file = /etc/rsync.pas

hosts allow = 192.168.0.11,192.168.0.12

 

[web]

read only = yes

path = /data/www/web

comment = web

auth users =test

secrets file = /etc/rsync.pas

hosts allow = 192.168.1.11,192.168.0.0/24

 

Rsync配置參數說明:

[www]   #要同步的模塊名

path = /usr/local/webapps  #要同步的目錄

comment = www   #這個名名稱無所謂,最後模塊名一直)

read only = no  # no客戶端可上傳文件,yes只讀

write only = no # no客戶端可下載文件,yes不能下載

list = yes     #是否提供資源列表

auth users =test #登錄系統使用的用戶名,沒有默認爲匿名。

hosts allow = 192.168.0.10,192.168.0.20  #本模塊容許經過的IP地址

hosts deny = 192.168.1.4     #禁止主機IP

secrets file=/etc/rsync.pas  #密碼文件存放的位置

 

    啓動服務器端RSYNC主進程,/usr/local/rsync/bin/rsync --daemon ,監聽端口TCP 873

設置rsync服務器端同步密鑰:

vi /etc/rsync.pas

username:userpasswd (表示用戶名:密碼)

test:test999

保存完畢,chmod 600 /etc/rsync.pas設置權限爲宿主用戶讀寫。

 

最後在客戶端配置同步密鑰和命令,以下設置便可同步。

vi /etc/rsync.pas  輸入服務器端配置的密碼:

test999

保存便可開始同步:執行以下語句

Rsync -aP --deletetest@192.168.0.100::www /usr/local/webapps   --password-file=/etc/rsync.pas  

Rsync -aP --deletetest@192.168.0.100::web /data/www/web  --password-file=/etc/rsync.pas   

注*/usr/local/webapps爲客戶端的目錄,@前test是認證的用戶名;IP後面www爲rsync服務器端的模塊名稱。

Rsync 經常使用參數解析:

-a, ––archive

歸檔模式,表示以遞歸方式傳輸文件,並保持全部文件屬性。

––exclude=PATTERN

指定排除一個不須要傳輸的文件匹配模式

––exclude-from=FILE

從 FILE 中讀取排除規則

––include=PATTERN

指定須要傳輸的文件匹配模式

––delete

刪除那些接收端還有而發送端已經不存在的文件

-P

等價於 ––partial ––progress

-v, ––verbose

詳細輸出模式

-q, ––quiet

精簡輸出模式

––rsyncpath=PROGRAM

指定遠程服務器上的 rsync 命令所在路徑

––password-file=FILE

從 FILE 中讀取口令,以免在終端上輸入口令,

一般在 cron 中鏈接 rsync 服務器時使用

 

5.2.2    Rsync基於SSH同步

除了能夠使用rsync密鑰進行同步以外,還有一個比較簡單的同步方法就是基於linux ssh來同步。具體方法以下:

    rsync  -aP --delete  root@192.168.0.10:/data/www/webapps  /data/www/webapps ,若是想每次同步不輸入密碼,須要作Linux主機之間免密碼登陸。

5.2.3    Rsync實時同步配置

在企業平常web應用中,某些特殊的數據須要要求保持跟服務器端實時同步,那咱們該如何來配置呢?如何來實現呢?這裏能夠採用rsync+inotify來實現需求。

Inotify 是一個 Linux特性,它監控文件系統操做,好比讀取、寫入和建立。Inotify 反應靈敏,用法很是簡單,而且比 cron 任務的繁忙輪詢高效得多。

Rsync安裝完畢後,須要安裝inotify文件檢查軟件。同時爲了同步的時候不須要輸入密碼,這樣能夠使用ssh免密鑰方式進行同步。

安裝inotify-tools-3.14.tar.gz軟件,tar –xzf  inotify-tools-3.14.tar.gz ;./configure  ;make

;make install 便可。配置auto_inotify.sh同步腳本,內容以下:

#!/bin/sh 

src=/data/webapps/www 

des=/home/webapps/

ip=192.168.0.11

inotifywait -mrq--timefmt '%d/%m/%y-%H:%M' --format '%T %w%f' -e modify,delete,create,attrib${src} | while read file 

do

 for i  in  $ip 

      do 

      /usr/local/rsync/bin/rsync   -aP  --delete  $src root@$ip:$des   

      done 

done

 

    在服務器端後臺啓動該腳本,nohup  sh auto_inotify.sh  & ,在服務器端目錄新建或者刪除,客戶端都會實時進行相關操做。

5.3   Tomcat/ResinJAVA服務器

Tomcat是由Apache軟件基金會下屬的Jakarta項目開發的一個Servlet容器,按照Sun Microsystems提供的技術規範,實現了對ServletJavaServer PageJSP)的支持,Tomcat自己也是一個HTTP服務器,能夠單獨使用,apache是一個以C語言編寫的HTTP服務器。Tomcat主要用來解析JSP語言。目前最新版本爲8.0。

5.3.1    Tomcat安裝配置

安裝tomcat以前須要安裝jdk (Java Development Kit) 是 Java 語言的軟件開發工具包(SDK)),這裏選擇jdk-6u18-linux-x64-rpm.bin,bin文件安裝跟sh文件方法同樣,sh./ jdk-6u18-linux-x64-rpm.bin,回車便可,默認安裝到/usr/java/jdk1.6.0_18目錄下。

配置java環境變量,vi /etc/profile 添加以下語句:

exportJAVA_HOME=/usr/java/jdk1.6.0_18 

exportCLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib 

exportPATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH:$HOMR/bin 

source    /etc/profile    //使環境變量馬上生效。 

java    -version         //查看java版本,顯示版本爲1.6.0_18,證實安裝成功。

在官網下載tomcat相應版本,這裏下載的版本爲apache-tomcat-6.0.30.tar.gz,下載完後解壓:

tar -xzf apache-tomcat-6.0.30.tar.gz  ;mvapache-tomcat-6.0.30  /usr/local/tomcat便可。

 

啓動tomcat,命令爲:/usr/local/tomcat_test/bin/startup.sh

查看ps -ef |grep tomcat 進程及端口是否存在,經過頁面訪問能夠看到tomcat默認測試頁面:

這個畫面是默認網站,怎麼來建立一個本身的網站頁面呢,定義本身的發佈目錄,方法以下:在server.xml配置文件末尾加入以下行:(附截圖)

<Context path="/"docBase="/data/webapps/www" reloadable="true"/>

 

在/data/webapps/www目錄下,建立本身的jsp代碼,重啓tomcat便可訪問。

5.3.2    Tomcat性能優化

線上環境使用默認tomcat配置文件,性能很通常,爲了知足大量用戶的訪問,須要對tomcat進行參數性能優化,具體優化的地方以下:

Ø  Linux內核的優化

Ø  服務器資源配置的優化

Ø  Tomcat參數優化

Ø  配置負載集羣優化

這裏着重講解tomcat參數的優化:server.xml文件,關閉DNS查詢、配置最大併發等參數。

maxThreads:tomcat起動的最大線程數,即同時處理的任務個數,默認值爲200

acceptCount:當tomcat起動的線程數達到最大時,接受排隊的請求個數,默認值爲100

固然這些值都不是越大越好,須要根據實際狀況來設定。能夠基於測試的基礎上來不斷的調優分析。

<Connector port="8080"  

          protocol="org.apache.coyote.http11.Http11NioProtocol" 

          connectionTimeout="20000" 

          redirectPort="8443"  

          maxThreads="5000"  

          minSpareThreads="20" 

          acceptCount="1000"

          disableUploadTimeout="true"

          enableLookups="false"  

          URIEncoding="UTF-8" />

Catalina.sh JVM參數優化,添加以下內容:

CATALINA_OPTS="$CATALINA_OPTS –Xms4000M–Xmx4000M –Xmn1000M-XX:SurvivorRatio=4 -XX:+UseConcMarkSweepGC-XX:CMSInitiatingOccupancyFraction=82 -DLOCALE=UTF-16LE  -DRAMDISK=/ -DUSE_RAM_DISK=ture-DRAM_DISK=true"

配置多個tomcat實例,方法也很簡單,只須要在服務器上cp多個tomcat,而後修改三個端口和發佈目錄便可,而後分別啓動便可。

爲了提高整個網站的性能,還須要在tomcat前面架設nginx web反向代理服務器,用以提升用戶高速訪問。

5.3.3    Resin安裝配置

Resin是CAUCHO公司的產品,是一個很是流行的application server,對servlet和JSP提供了良好的支持,性能也比較優良,resin自身採用JAVA語言開發。

resin 普通版本和pro版本主要區別是 pro支持緩存負載均衡。pro由於有強大的cache功能,獨立做爲web服務器處理靜態頁面性能均可以和apache有一比。但普通版本獨立做爲web服務器性能就要差一些。固然能夠使用apache+resin的方案藉助apache的緩存功能提升性能。 

通常我的使用都使用開源免費版,若是想更高的性能,能夠購買使用企業版resin,售後服務有保障。

wgethttp://www.caucho.com/download/resin-4.0.33.tar.gz

tar –xzvf  resin-4.0.33.tar.gz

cdresin-4.0.33 &&./configure --prefix=/usr/local/resin

\--with-resin-log=/data/logs/resin/--with-java-home=/usr/java/jdk1.6.0_18/

make&&make install

安裝完畢後,修改/usr/local/resin/conf/resin.xml配置文件發佈目錄,如圖:

 

而後啓動resin,/usr/local/resin/bin/resin.shstart 測試成功訪問以下圖(發佈目錄未修改以前resin默認測試頁面):

 

5.3.4    Resin性能優化

Resin同tomcat同樣,都須要優化JVM參數,resin的JVM參數配置在resin.xml裏面,配置最大最小內存,會話保持時間及併發數等以下所示:

<http address="*"port="8080"/>

     <!-- SSL port configuration: -->

     <http address="*" port="8443">

        <jsse-sslself-signed-certificate-name="resin@localhost"/>

     </http>

       <jvm-arg>-Xms4000m</jvm-arg>

       <jvm-arg>-Xmx4000m</jvm-arg>

        <jvm-arg>-Xmn1000m</jvm-arg>

       <jvm-arg>-XX:PermSize=128m</jvm-arg>

       <jvm-arg>-XX:MaxPermSize=256m</jvm-arg>

       <thread-max>10000</thread-max>

       <socket-timeout>30s</socket-timeout>

       <keepalive-max>5000</keepalive-max>

        <keepalive-timeout>60s</keepalive-timeout>

       <jvm-arg>-agentlib:resin</jvm-arg>      

  Resin參數優化一樣包括最大內存、最小內存,年輕帶,最大併發,會話超時時間等。根據實際的應用來調節不一樣的參數。

5.3.5    Resin多實例配置

爲了資源最大利用,單臺服務器能夠配置多個resin實例,配置resin多實例的方式跟tomcat大部分一致,但還有一些區別:

cd/usr/local/resin/conf下,而後cp resin.xml resin1.xml  ;cp resin.xml  resin2.xml

修改兩個配置文件以下圖所示:

HTTP端口爲8080 Resin1.xml 配置以下:

 

HTTP端口爲8081 Resin2.xml 配置以下:

建立兩個發佈目錄mkdir  -p /data/webapps/{www1,www2}寫入測試jsp文件便可。最後以下方法啓動兩個resin實例:

/usr/local/resin/bin/resin.sh -conf/usr/local/resin/conf/resin1.xml -server 1 start

/usr/local/resin/bin/resin.sh -conf/usr/local/resin/conf/resin2.xml -server 2 start

真實環境,須要調整jvm參數,須要在resin.xml裏面配置,同時須要開啓啓動resin,只須要把上述腳本加入/etc/rc.local便可。

5.4   NginxTomcat動靜分離

Nginx動靜分離簡單來講就是把動態跟靜態請求分開,不能理解成只是單純的把動態頁面和靜態頁面物理分離。嚴格意義上說應該是動態請求跟靜態請求分開,能夠理解成使用Nginx處理靜態頁面,Tomcat、Resin出來動態頁面。

動靜分離從目前實現角度來說大體分爲兩種,一種是純粹的把靜態文件獨立成單獨的域名,放在獨立的服務器上,也是目前主流推崇的方案;另一種方法就是動態跟靜態文件混合在一塊兒發佈,經過nginx來分開。這樣也是本次課程要講解的,具體怎麼來實現呢,以下圖,經過location指定不一樣的後綴名實現不一樣的請求轉發。

經過expires參數設置,能夠使瀏覽器緩存過時時間,減小與服務器以前的請求和流量。具體Expires定義:是給一個資源設定一個過時時間,也就是說無需去服務端驗證,直接經過瀏覽器自身確認是否過時便可,因此不會產生額外的流量。

此種方法很是適合不常常變更的資源。(若是常常更新的文件,不建議使用Expires來緩存),我這裏設置3d,表示在這3天以內訪問這個URL,發送一個請求,比對服務器該文件最後更新時間沒有變化,則不會從服務器抓取,返回狀態碼304,若是有修改,則直接從服務器從新下載,返回狀態碼200。

 

以下爲nginx.conf裏面server 配置段,直接添加在nginx.conf裏便可。

####www.wuguangke.cn

server

  {

   listen       80;

   server_name  www.wuguangke.cn;

    indexindex.html index.htm;

#配置發佈目錄爲/data/www/wugk

   root  /data/www/wugk;

    location/

    {

        proxy_next_upstream http_502 http_504 error timeout invalid_header;

        proxy_set_header Host  $host;

        proxy_set_header X-Real-IP $remote_addr;

        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        proxy_pass http://tdt_wugk;

        expires      3d;

    }

#動態頁面交給http://tdt_wugk,也即咱們以前在nginx.conf定義的upstream tdt_wugk 均衡

    location~ .*\.(php|jsp|cgi)?$

    {

        proxy_set_header Host  $host;

        proxy_set_header X-Real-IP $remote_addr;

        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        proxy_pass http://tdt_wugk;

    }

#配置Nginx動靜分離,定義的靜態頁面直接從Nginx發佈目錄讀取。

    location~ .*\.(html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|css)$

    {

    root/data/www/wugk;

    #expires定義用戶瀏覽器緩存的時間爲3天,若是靜態頁面不常更新,能夠設置更長,這樣能夠節省帶寬和緩解服務器的壓力

   expires      3d;

    }

#定義Nginx輸出日誌的路徑

   access_log /data/logs/nginx_wugk/access.log main;

   error_log  /data/logs/nginx_wugk/error.log crit;

}

真實環境網站程序包只有一個,須要把這個程序包在nginx前端放一份,同時須要在Tomcat、Resin後端也放置一份,若是服務器涉及數量不少,那每臺服務器都須要更新,能夠使用批量更新方法。

5.5   LNAMP高性能架構配置

LNAMP(Linux+Nginx+Apache+Mysql+PHP)架構受到不少IT企業的青睞,取代了原來認爲很好的LNMP(Linux+Nginx+Mysql+PHP)架構,那咱們說LNAMP到底有什麼優勢呢,還得從Nginx和apache的優缺點提及。

Nginx處理靜態文件能力很強,Apache處理動態文件很強並且很穩定,把兩者綜合在一塊,性能提高不少倍。可能不少Linux SA在從事LNMP運維中,會發現PHP(FastCGI)模式會出現一些502錯誤的現象,這是由於Nginx+PHP(FastCGI)組合不穩定的緣由形成的。

Ø  源碼安裝LNAMP之Nginx

yum install prce-devel –y;cd  /usr/src ;wget http://nginx.org/download/nginx-1.6.0.tar.gz  ;cd nginx-1.6.0 ;./configure –prefix=/usr/local/nginx&& make &&make install

Ø  源碼安裝LNAMP之Apache

yum install apr-devel apr-util-devel –y;

cd /usr/src ; wget http://mirror.bit.edu.cn/apache/httpd/httpd-2.2.27.tar.gz ;tarxzf  httpd-2.2.27.tar.gz ;cd httpd-2.2.27;./configure --prefix=/usr/local/apache --enable-so --enable-rewrite&&make &&make install

Ø  源碼安裝LNAMP之MySQL

cd /usr/src ;wget http://downloads.mysql.com/archives/mysql-5.1/mysql-5.1.63.tar.gz ;tarxzf mysql-5.1.63.tar.gz ;cd mysql-5.1.63 ;./configure  --prefix=/usr/local/mysql--enable-assembler &&make &&make install

配置Mysql服務爲系統服務:

cp/usr/local/mysql/share/mysql/my-medium.cnf /etc/my.cnf

cp/usr/local/mysql/share/mysql/mysql.server /etc/rc.d/init.d/mysqld

chkconfig --add mysqld 
chkconfig --level 345 mysqld on

 

cd /usr/local/mysql

useradd mysql
chown -R  mysql.mysql /usr/local/mysql 
/usr/local/mysql/bin/mysql_install_db --user=mysql  
chown -R mysql  var 
/usr/local/mysql/bin/mysqld_safe --user=mysql &

Ø  源碼安裝LNAMP之PHP

cd /usr/src ;wget http://mirrors.sohu.com/php/php-5.3.28.tar.bz2 ;tarjxf  php-5.3.28.tar.bz2 ;cd php-5.3.28;./configure --prefix=/usr/local/php5--with-config-file-path=/usr/local/php/etc  --with-apxs2=/usr/local/apache/bin/apxs --with-mysql=/usr/local/mysql/

 

Ø  源碼安裝Apache+PHP整合

整合apache+php環境,修改httpd.conf配置文件,而後加入以下語句:

LoadModule     php5_modulemodules/libphp5.so (默認已存在)

AddType     application/x-httpd-php .php

DirectoryIndex  index.phpindex.html (把index.php加入index.html以前)

而後在/usr/local/apache/htdocs目錄下建立index.php測試頁面,執行以下命令:

cat>>/usr/local/apache/htdocs/index.php <<EOF

<?php

phpinfo();

?>

EOF

從新啓動apache服務,經過IP訪問界面以下圖,即表明LAMP環境搭建成功。

 

Ø  源碼安裝DISCUZ論壇

下載discuz源碼包文件,而後解壓:

cd  /usr/src ;wget http://download.comsenz.com/DiscuzX/3.1/Discuz_X3.1_SC_UTF8.zip

解壓discuz程序包:unzip Discuz_X3.1_SC_UTF8.zip -d /usr/local/apache/htdocs/

重命名程序文件:cd/usr/local/apache/htdocs/ ;mv upload/* .

賦予discuz目錄徹底訪問權限:cd /usr/local/apache/htdocs/ ;chmod 777 -R data/ uc_server/ config/uc_client/

而後訪問IP安裝discuz論壇,以下圖,選擇「我贊成」

 

 進入以下界面,數據庫安裝,若是不存在則須要新建數據庫並受權。

 

數據庫建立及受權命令以下:

create database discuz charset=utf8;

grant all on discuz.* toroot@'localhost' identified by "123456";

 

點擊下一步,直至安裝完成,進入等待已久的論壇畫面:

 

自此LAMP環境整合並搭建成功,那如何使用Nginx來整合LAMP呢?

Ø  源碼安裝Nginx+LAMP整合

先修改apache訪問端口爲8080,Nginx端口爲80。

而後修改nginx配置文件:vi /usr/local/nginx/conf/nginx.conf,server配置段內容以下:

(定義upstream均衡模塊,配置動靜分離,動態轉發至apache,靜態文件直接本地響應)

upstream app_lamp {

   server   127.0.0.1:8080 weight=1max_fails=2 fail_timeout=30s;

   }

   server {

        listen       80;

        server_name  localhost;

 

        location / {

            root   /usr/local/apache/htdocs;

            index  index.php index.html index.htm;

        }

        location ~ .*\.(php|jsp|cgi)?$

   {

         proxy_set_header Host  $host;

         proxy_set_header X-Real-IP$remote_addr;

         proxy_set_header X-Forwarded-For$proxy_add_x_forwarded_for;

         proxy_pass http://app_lamp;

   }

        location ~.*\.(html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|css)$

      {

        root /usr/local/apache/htdocs;

        expires      3d;

     }

   }

測試,訪問nginx ip+port以下圖所示:

 

 查看系統啓動的端口及進程以下圖:

 

自此,LNAMP所有整合完畢,接下來就是對系統內核、各個服務、架構進行優化,一樣優化是一項長期的任務。

5.6   構建DNS域名解析服務器

咱們天天打開的網站,他是如何來解析,而且咱們怎麼能獲得網站的內容反饋的界面呢?那什麼是DNS呢(DNS(Domain Nameservice,域名服務,主要用於因特網上做爲域名和IP地址相互映射)那今天咱們未來學習DNS服務器的構建,DNS服務能夠算是Linux服務中比較難的一個了,尤爲是配置文件書寫,少一個字符都有可能形成錯誤。

那什麼是DNS呢?簡單的說就是完成域名到IP的解析過程。簡潔的域名能讓人們更方便記憶,不須要記那麼長的IP訪問某一個網站。

DNS解析過程究竟是怎樣的呢?

第一步:客戶機訪問某個網站,請求域名解析,首先查找本地HOSTS文件,若是有對應域名、IP記錄,直接返回給客戶機。若是沒有則將該請求發送給本地的域名服務器:

第二步:本地DNS服務器可以解析客戶端發來的請求,服務器直接將答案返回給客戶機。

第三步:本地DNS服務器不能解析客戶端發來的請求,分爲兩種解析方法

一、採用遞歸解析:本地DNS服務器向根域名服務器發出請求,根域名服務器對本地域名服務的請求進行解析,獲得記錄再給本地DNS服務器,本地DNS服務器將記錄緩存,並將記錄返給客戶機。

二、採用迭代解析:本地DNS服務器向根域名服務器發出請求,根域名服務器返回給本地域名服務器一個可以解析請求的根的下一級域名服務器的地址,本地域名服務器再向根返回的IP地址發出請求,最終獲得域名解析記錄。

如上只是簡單介紹了一下DNS相關知識,言歸正傳,那接下來咱們正式來搭建一下DNS服務器。

1)  首先安裝bind,執行yum  install  bind* -y

2)  安裝完畢修改bind配置文件/etc/named.conf內容以下:

options {

        listen-on port 53 { any; };

        listen-on-v6 port 53 { any; };

        directory       "/var/named";

        dump-file      "/var/named/data/cache_dump.db";

        statistics-file"/var/named/data/named_stats.txt";

        memstatistics-file"/var/named/data/named_mem_stats.txt";

        allow-query     { any; };

        recursion yes;

        dnssec-enable yes;

        dnssec-validation yes;

        dnssec-lookaside auto;

        /* Path to ISC DLV key */

        bindkeys-file"/etc/named.iscdlv.key";

        managed-keys-directory"/var/named/dynamic";

};

logging {

        channel default_debug {

                file"data/named.run";

                severity dynamic;

        };

};

 

zone "." IN {

        type hint;

        file "named.ca";

};

include "/etc/named.rfc1912.zones";

include"/etc/named.root.key";

3)  修改vi /etc/named.rfc1912.zones配置文件(用於定義根區域和自定義區域),添加以下兩段內容:

#add named by wugk

zone "wugk.com" IN {

        type master;

        file "wugk.com.zone";

        allow-update { none; };

};

zone "188.92.182.in-addr.arpa"IN {

        type master;

        file "wugk.com.arpa";

        allow-update { none; };

};

4)   在/var/named/目錄添加以下文件:

Wugk.com.zone正向解析文件內容以下:

$TTL 86400

@   IN SOA  ns.wugk.com. root (

                    42  ; serial

                    3H  ; refresh

                    15M ; retry

                    1W  ; expire

                    1D )    ; minimum

@               IN NS           ns.wugk.com.

ns               IN A             182.92.188.163

www             IN A            182.92.188.163

@               IN MX 10         mail.wugk.com.

mail            IN A              182.92.188.163

Wugk.com.arpa反向解析文件內容以下:

$TTL 86400

@   IN SOA  ns.wugk.com. root (

                    42  ; serial

                    3H  ; refresh

                    15M ; retry

                    1W  ; expire

                    1D )    ; minimum

 

@   IN NS      ns.wugk.com.

163 IN PTR      mail.wugk.com.

163 IN PTR      ns.wugk.com.

163 IN PTR      www.wugk.com.

 

5)   測試DNS服務器:

找一臺客戶端,PC或者其餘服務器,將客戶端的DNS修改成服務器端DNS,訪問解析的域名能正常訪問即證實DNS服務器搭建成功。

5.7   MySQL主從高可用架構

MySQL是一個開放源碼的小型關聯式數據庫管理系統,開發者爲瑞典MySQL AB公司, 目前屬於Oracle公司,MySQL被普遍地應用Internet上的中小型網站中。因爲其體積小、速度快、整體擁有成本低,尤爲是開放源碼這一特色,許多中小型網站爲了下降網站整體擁有成本而選擇了MySQL做爲網站數據庫

對應目前主流的LAMP架構來講,Mysql更是獲得各位IT運維、DBA的青睞,目前mysql已被orcacle收購,不過好消息是原來mysql創始人已獨立出來本身從新開發了一個MariaDB,並且使用的人數愈來愈多。並且MariaDB兼容mysql全部的功能和相關參數。

Mysql經常使用的兩大引擎有MyISAM和innoDB,那他們有什麼明顯的區別呢,什麼場合使用什麼引擎呢?

MyISAM類型的表強調的是性能,其執行數 度比InnoDB類型更快,但不提供事務支持,若是執行大量的SELECT操做,MyISAM是更好的選擇,支持表鎖。

InnoDB提供事務支持事務,外部鍵等高級 數據庫功能,執行大量的INSERT或UPDATE,出於性能方面的考慮,應該使用InnoDB表,支持行鎖。

    隨着訪問量的不斷增長,Mysql數據庫壓力不斷增長,須要對mysql進行優化和架構改造,能夠使用高可用、主從複製、讀寫分離來、拆分庫、拆分表進行優化。下面咱們來學習MySQL主從複製高可用如何來實現。

Ø  MySQL數據庫主從複製原理

Mysql主從同步實際上是一個異步複製的過程,要實現複製首先須要在master上開啓bin-log日誌功能,整個過程須要開啓3個線程,分別是Master開啓IO線程,slave開啓IO線程和SQL線程。

a)  在從服務器執行slave start,從服務器上IO線程會經過受權的用戶鏈接上master,並請求master從指定的文件和位置以後發送bin-log日誌內容。

b)  Master服務器接收到來自slave服務器的IO線程的請求後,master服務器上的IO線程根據slave服務器發送的指定bin-log日誌以後的內容,而後返回給slave端的IO線程。(返回的信息中除了bin-log日誌內容外,還有本次返回日誌內容後在master服務器端的新的binlog文件名以及在binlog中的下一個指定更新位置。)

c)  Slave的IO線程接收到信息後,將接收到的日誌內容依次添加到Slave端的relay-log文件的最末端,並將讀取到的Master端的 bin-log的文件名和位置記錄到master-info文件中,以便在下一次讀取的時候可以清楚的告訴Master「我須要從某個bin-log的哪 個位置開始日後的日誌內容,請發給我」;

d)  Slave的Sql線程檢測到relay-log中新增長了內容後,會立刻解析relay-log的內容成爲在Master端真實執行時候的那些可執行的內容,並在自身執行。

Ø  MySQL數據庫主從配置

環境準備:192.168.33.10爲master主服務器,192.168.33.11爲slave從服務器。

在主和從服務器都安裝mysql相關軟件,命令以下:

yum  install  -y mysql mysql-devel mysql-server mysql-libs

安裝完畢後,在Master修改vi /etc/my.cnf內容爲以下:

[mysqld] 

 

datadir=/data/mysql 

 

socket=/var/lib/mysql/mysql.sock 

 

user=mysql

 

#Disabling symbolic-links is recommended to prevent assorted security risks 

 

symbolic-links=0

 

log-bin=mysql-bin 

 

server-id= 1

 

auto_increment_offset=1   

 

auto_increment_increment=2

 

[mysqld_safe] 

 

log-error=/var/log/mysqld.log 

 

pid-file=/var/run/mysqld/mysqld.pid  

 

replicate-do-db =all

建立/data/mysql數據目錄,mkdir –p /data/mysql ;chown –R mysqld:mysqld/data/mysql

啓動mysql便可,/etc/init.d/mysqld  restart

而後修改slave Mysql數據庫my.cnf配置文件內容以下:

[mysqld] 

 

datadir=/data/mysql 

 

socket=/var/lib/mysql/mysql.sock 

 

user=mysql

 

#Disabling symbolic-links is recommended to prevent assorted security risks 

 

symbolic-links=0

 

log-bin=mysql-bin 

 

server-id =2

 

auto_increment_offset=2   

 

auto_increment_increment=2

 

[mysqld_safe] 

 

log-error=/var/log/mysqld.log 

 

pid-file=/var/run/mysqld/mysqld.pid 

 

master-host=192.168.33.10 

 

master-user=tongbu

 

master-pass=123456

 

master-port=3306

 

master-connect-retry=60

 

replicate-do-db =all

 

在Master數據庫服務器上設置權限,執行以下命令:

grant  replication  slave on *.* to  'tongbu'@'%'  identified by '123456';

在Master 數據庫執行以下命令:

mysql> show masterstatus;

+------------------+----------+--------------+------------------+

| File             | Position | Binlog_Do_DB |Binlog_Ignore_DB |

+------------------+----------+--------------+------------------+

| mysql-bin.000006|       98 |              |                  |

+------------------+----------+--------------+------------------+

1 row inset (0.00 sec)

而後在slave服務器指定master IP和同步的pos點:

change master to

master_host='192.168.33.10',master_user='tongbu',master_password='123456',master_log_file='mysql-bin.000006',master_log_pos=98;

在slave啓動slave start,並執行show slave status\G查看Mysql主從狀態:

 

Slave_IO_Running: Yes

Slave_SQL_Running: Yes兩個狀態爲YES,表明slave已經啓動兩個線程,一個爲IO線程,一個爲SQL線程。

而後在Master服務器建立一個數據庫和表,命令以下:

 

而後去slave服務器查看是否有mysql_ab_test數據庫和相應t0的表,若是存在則表明Mysql主從同步搭建成功:

 

 一樣還能夠測試在master服務器插入兩條數據,在slave查看insert數據是否已同步:

 128 master上執行以下圖:

 

129 slave上執行以下圖,在master插入的數據已經同步到slave上:

 

 自此Mysql主從搭建完畢,如今有一個問題,若是master服務器down機了,如何快速恢復服務呢?

能夠經過兩種方法:

第一種方法,若是程序鏈接的是master的IP,直接在slave服務器上添加master的IP便可。這個手動去操做,並且須要花費時間比較長,可能還會出現誤操做的狀況,不推薦。

第二種方法,能夠使用keepalived、heartbeat做爲HA檢測軟件,檢查MySQL服務是否正常,不正常則自動切換到slave上,推薦使用。

Ø  MySQL+keepalived高可用配置

繼上一章節MySQL主從配置完畢後,接着配置keepalived服務,主要用於Mysql故障自動切換。那說到keepalived,keepalived究竟是什麼呢?

keepalived是一個相似於layer3, 4& 7交換機制的軟件,也就是咱們平時說的第3層、第4層和第7層交換。

Keepalived的做用是檢測web服務器的狀態,若是有一臺web服務器、Mysql服務器宕機,或工做出現故障,Keepalived將檢測到後,會將有故障的web服務器或者Mysql服務器從系統中剔除,當服務器工做正常後Keepalived自動將web、Mysql服務器加入到服務器羣中,這些工做所有自動完成,不須要人工干涉,須要人工作的只是修復故障的WEB和Mysql服務器。

Keepalived安裝配置:

tar zxfkeepalived-1.2.1.tar.gz 

cd keepalived-1.2.1 &&./configure--with-kernel-dir=/usr/src/kernels/2.6.18-164.el5-i686 &&make&& make install 

DIR=/usr/local/;cp $DIR/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/

cp$DIR/etc/sysconfig/keepalived /etc/sysconfig/ && mkdir -p/etc/keepalived

cp$DIR/sbin/keepalived /usr/sbin/

修改Master服務器上keepalived.conf配置以下,vi/etc/keepalived/keepalived.conf

! ConfigurationFile for keepalived 

global_defs{ 

   notification_email { 

      wgkgood@139.com 

   } 

   notification_email_from wgkgood@139.com 

   smtp_server 127.0.0.1 

   smtp_connect_timeout 30 

   router_id LVS_DEVEL 

#VIP1 

vrrp_instanceVI_1 { 

    state BACKUP   

    interface eth0 

    lvs_sync_daemon_inteface eth0 

    virtual_router_id 151 

    priority 100 

    advert_int 5 

    nopreempt 

    authentication { 

        auth_type PASS 

        auth_pass 2222 

    } 

    virtual_ipaddress { 

        192.168.33.100 

    } 

virtual_server192.168.33.100 3306 { 

    delay_loop 6    

    lb_algo wrr    

    lb_kind DR   

    persistence_timeout 60    

    protocol TCP         

    real_server 192.168.33.10 3306 { 

        weight 100        

        notify_down /data/sh/mysql.sh 

        TCP_CHECK { 

        connect_timeout 10 

        nb_get_retry 3 

        delay_before_retry 3 

        connect_port 3306 

        } 

    } 

}

Mysql 從服務器配置keepalived.conf跟master同樣,只須要把Realserver IP修改爲real_server 192.168.33.11 ;優先級從100改爲90便可。

在master、slave數據庫上建立/data/sh/mysql.sh腳本,內容爲:

pkill  keepalived

而後分別重啓兩臺數據庫上keepalived服務便可。最後測試中止master Mysql服務,是否會自動切換到Backup上。

關於Mysql集羣高可用就在此告一段落,固然除了keepalived高可用以外,Mysql優化還能夠進行讀寫分離、Mysql+DRBD、拆分表等等優化,有興趣的童鞋能夠繼續深刻研究。

5.8   LVS+Keepalived負載均衡

Ø  LVS簡介及工做原理

LVS是Linux Virtual Server的簡寫,意即Linux虛擬服務器,是一個虛擬的服務器集羣系統。本項目在1998年5月由章文嵩博士成立,是中國國內最先出現的自由軟件項目之一。

LVS 簡單工做原理:用戶請求LVS VIP,LVS根據轉發方式和算法,將請求轉發給後端服務器,後端服務器接受到請求,返回給用戶。對於用戶來講,看不到WEB後端具體的應用。

LVS轉發方式有三種,分別是NAT、DR、TUN模式,經常使用算法:RR、LC、WRR、WLC模式等(RR爲輪詢模式,LC爲最少鏈接模式)

LVSNAT原理:用戶請求LVS到達director,director將請求的報文的目標地址改爲後端的realserver地址,同時將報文的目標端口也改爲後端選定的realserver相應端口,最後將報文發送到realserver,realserver將數據返給director,director再把數據發送給用戶。(兩次請求都通過director,因此訪問大的話,director會成爲瓶頸)

LVSDR原理:用戶請求LVS到達director,director將請求的報文的目標MAC地址改爲後端的realserver MAC地址,目標IP爲VIP(不變),

源IP爲用戶IP地址(保持不變),而後Director將報文發送到realserver,realserver檢測到目標爲本身本地IP,若是在同一個網段,而後將請求直接返給用戶。若是用戶跟realserver不在一個網段,則經過網關返回用戶。(此種轉發效率最高)

LVSTUN原理:跟LVS DR相似,也是改變封裝MAC地址,多了一層隧道加密。實施環境複雜,比LVS DR模式效率略低。

Ø  LVS環境安裝配置

下載LVS所需軟件ipvsadm-1.2.4.tar.gz軟件,編譯安裝:

wget -c  http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.24.tar.gz

ln -s/usr/src/kernels/2.6.* /usr/src/linux //IPVS模塊編譯進內核裏,須要作軟鏈接

tar xzvfipvsadm-1.24.tar.gz &&cd ipvsadm-1.24 && make && make install

LVS安裝完畢以後,須要進行配置,配置的步驟有兩步,第一步爲定義端口服務,第二步爲添加realserver後端服務。

ipvsadm -A -t192.168.33.188:80 -s rr

ipvsadm -a -t192.168.33.188:80 -r 192.168.33.12 -m -w 2

ipvsadm -a -t192.168.33.188:80 -r 192.168.33.13 -m -w 2

參數說明:

-A 增長一臺虛擬服務器地址。

-t 虛擬服務器提供的是tcp服務。

-s 使用的調度算法

-a 在虛擬服務器中增長一臺後端真實服務器。

-r 指定真實服務器地址。

-m 設置當前轉發方式爲NAT模式;-g爲直接路由模式;-i  模式爲隧道模式

-w 後端真實服務器的權重。

查看LVS轉發列表命令爲:ipvsadm –Ln

咱們會發現,若是這臺LVS發生突發狀況,down機了,那後端全部的應用程序都訪問不了。如何避免這種問題呢,這裏須要用到故障切換,也就是若是有一臺備用的LVS就行了,主down了,自動切換到從,怎麼實現這個需求,接下來說解的keepalived軟件就是專門用來作故障檢測及切換的。

Keepalived基於三層檢測(IP層,TCP層,及應用層),主要用於檢測web服務器的狀態,若是有一臺web服務器死機,或工做出現故障,Keepalived檢測到並將有故障的web服務器從系統中剔除;

當web服務器工做正常後Keepalived自動將web服務器加入到服務器羣中,這些工做所有自動完成,不須要人工干涉,須要人工作的只是修復故障的web服務器。

須要注意一點,若是使用了keepalived.conf配置,就不須要再執行ipvs –A命令去添加均衡的realserver命令了,全部的配置都會在keepalived.conf裏面,一個配置文件搞定全部,即只須要安裝ipvs模塊。

Ø  Keepalived安裝配置

官方下載keepalived相應穩定版本:

cd /usr/src ;wget -c  http://www.keepalived.org/software/keepalived-1.1.15.tar.gz

tar -xzvf keepalived-1.1.15.tar.gz&&cd keepalived-1.1.15 && ./configure && make&& make install

安裝完畢,配置keepalived服務爲系統服務。

DIR=/usr/local/

cp$DIR/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/ && cp$DIR/etc/sysconfig/keepalived /etc/sysconfig/ && mkdir -p /etc/keepalived&& cp $DIR/sbin/keepalived /usr/sbin/

在MASTER上/etc/keepalived/目錄建立keepalived.conf配置文件,並寫入以下內容:

! Configuration File forkeepalived

 

global_defs {

   notification_email {

      wgkgood@163.com

   }

   notification_email_from wgkgood@163.com

   smtp_server 127.0.0.1

   smtp_connect_timeout 30

   router_id LVS_DEVEL

}

 

# VIP1

vrrp_instance VI_1 {

    state BACKUP  

    interface eth0

    lvs_sync_daemon_inteface eth0

    virtual_router_id 51

    priority 100

    advert_int 5

    nopreempt

    authentication {

        auth_type PASS

        auth_pass 1111

    }

    virtual_ipaddress {

        192.168.33.188  

    }

}

 

virtual_server192.168.33.188 80 {

    delay_loop 6   

    lb_algo wrr   

    lb_kind DR  

#    persistence_timeout 60    

    protocol TCP        

 

    real_server 192.168.33.12 80 {

        weight 100       

        TCP_CHECK {

        connect_timeout 10

        nb_get_retry 3

        delay_before_retry 3

        connect_port 80

        }

    }

    real_server 192.168.33.13 80 {

        weight 100

        TCP_CHECK {

        connect_timeout 10

        nb_get_retry 3

        delay_before_retry 3

        connect_port 80

       

        }

    }

}

如上配置文件,紅色標記的地方須要注意,state狀態主服務器設置MASTER,從設置爲BACKUP,優先級備機設置比MASTER小,例如設置90,使用TCP端口檢測。

在LVS BACKUP服務器寫入以下配置,須要注意的是客戶端的配置要修改優先級及狀態:

! Configuration Filefor keepalived

global_defs {

  notification_email {

   wgkgood@163.com

  }

  notification_email_from wgkgood@163.com

  smtp_server 127.0.0.1

  smtp_connect_timeout 30

  router_id LVS_DEVEL

}

# VIP1

vrrp_instance VI_1 {

  state BACKUP

  interface eth0

  lvs_sync_daemon_inteface eth0

  virtual_router_id 51

  priority 90

  advert_int 5

  authentication {

    auth_type PASS

    auth_pass 1111

  }

  virtual_ipaddress {

    192.168.33.11

  }

}

#REAL_SERVER_1

virtual_server 192.168.33.11 80 {

  delay_loop 6

  lb_algo wlc

  lb_kind DR

  persistence_timeout 60

  protocol TCP

  real_server 192.168.33.130 80 {

    weight 100

    TCP_CHECK {

    connect_timeout 10

    nb_get_retry 3

    delay_before_retry 3

    connect_port 80

    }

}

#REAL_SERVER_2

  real_server 192.168.33.131 80 {

    weight 100

    TCP_CHECK {

    connect_timeout 10

    nb_get_retry 3

    delay_before_retry 3

    connect_port 80

    }

  }

}

如上設置,LVS 主備配置完畢,接下來須要在realserver配置LVS VIP,爲何要在realserver綁定VIP呢?

客戶端訪問director的VIP,director接收請求,將經過相應的算法將請求轉發給相應的realserver。在轉發的過程當中,會修改請求包的目的mac地址,目的ip地址不變。

Realserver接收請求,並直接響應客戶端。這時便出現一個問題,director此時與realserver位於同一個網絡中,當director直接將請求轉發給realserver時,realserver檢測到該請求包的目的ip是vip而並不是本身,便會丟棄,而不會響應。爲了解決這個問題,因此須要在全部Realserver上都配上VIP。

爲何必定要配置在lo接口上呢?

在realserver上的lo口配置VIP,這樣限制了VIP不會在物理交換機上產生MAC地址表,從而避免IP衝突。

客戶端啓動Realserver.sh腳本內容:

#!/bin/sh

#LVSClient Server

VIP=192.168.33.188

case  $1 in                                                                                                                                                                                                                                                   

start)                                                                                                                                                                                                                                           

    ifconfig lo:0 $VIP netmask 255.255.255.255broadcast $VIP

    /sbin/route add -host $VIP dev lo:0

    echo "1">/proc/sys/net/ipv4/conf/lo/arp_ignore

    echo "2">/proc/sys/net/ipv4/conf/lo/arp_announce

    echo "1">/proc/sys/net/ipv4/conf/all/arp_ignore

    echo "2">/proc/sys/net/ipv4/conf/all/arp_announce

    sysctl -p >/dev/null 2>&1

    echo "RealServer Start OK"

    exit 0

;;                                                                                                                                                                                                                                        

stop)

    ifconfig lo:0 down

    route del $VIP >/dev/null 2>&1

    echo "0">/proc/sys/net/ipv4/conf/lo/arp_ignore

    echo "0">/proc/sys/net/ipv4/conf/lo/arp_announce

    echo "0">/proc/sys/net/ipv4/conf/all/arp_ignore

    echo "0">/proc/sys/net/ipv4/conf/all/arp_announce

    echo "RealServer Stoped OK"

    exit 1

;;

*)

    echo "Usage: $0 {start|stop}"

;;

esac

LVS網站故障排查經驗:

若是發現主網站沒法訪問,首先第一步ping網站域名是否能ping通,若是域名沒法訪問,試着使用IP能不能訪問,若是IP能訪問,首先排查到域名解析問題。

若是IP也沒法訪問,登陸LVS服務器,使用命令ipvsadm –Ln 查看當前鏈接狀態和查看/var/log/messages日誌信息,能夠在LVS上訪問realserver ip,進行排查。

若是LVS服務正常,後端realserver服務異常,而後查看nginx日誌信息,是否有大量惡意訪問,臨時重啓看是否能訪問。

若是有惡意ip訪問,找出惡意ip,經確承認以關閉後,使用iptables防火牆臨時關閉便可。

LVS+keepalived+Nginx+Apache+PHP+MySQL+Memcached+Redis

 

 

 

5.9   Squid緩存服務器配置

隨着網站訪問人數愈來愈多,對體驗的要求也愈來愈高,網站承受的併發和壓力也愈來愈大,因此須要對網站和架構進行優化,優化的策略有不少,系統內核、程序、配置均衡、加入緩存等,目前主流緩存服務器主要有squid、varnish、nginx_cache,那今天咱們來討論使用老牌Squid對架構進行緩存優化。

Squidcache(簡稱爲Squid)是一個流行的自由軟件,它符合GNU通用公共許可證。Squid做爲網頁服務器的前置cache服務器,能夠代理用戶向web服務器請求數據並進行緩存,也能夠用在局域網中,使局域網用戶經過代理上網。Squid主要設計用於在Linux一類系統運行。

簡單的來講就是:用戶請求www網站,通過squid,squid檢查本地硬盤目錄有沒有這個文件的緩存;若是沒有,squid則去後端真實web服務器獲取該頁面,返回給用戶,同時在本身本地緩存一份,若是另一個用戶再訪問一樣請求頁面時,squid直接從本地返回。

squid有 ufs, aufs, coss, diskd, null 五種存儲機制,其中 ufs,aufs, diskd 都是在文件系統上面保存不少小文件, coss 是 squid 本身實現了一個簡單的文件系統,能夠使用一個大文件或者一個磁盤設備來存儲。null 則是給不想要磁盤緩存的狀況準備的,coss 看起來好像很不錯, 可是之前試驗並不足夠穩定,所以並不推薦使用。

對於一些老系統,使用 aufs 或者 diskd 是比較好的選擇,若是系統的線程庫比較好(如Linux,Solaris),那麼使用 aufs。

Ø  正式安裝squid

安裝squid也很是簡單,能夠用源碼安裝,也能夠使用rpm、yum安裝,這裏使用yum安裝,根據實際經驗使用,squid 2.6系列的squid比較穩定,能夠考慮採用。

CentOS5.8上yum安裝squid 2.6方法:

yum install -y squid

其餘系統源碼安裝squid 2.6.24版本:squid-2.6.STABLE24.tar.bz2

tar -jxfsquid-2.6.STABLE24.tar.bz2 ;cd squid-2.6.STABLE24

./configrue--prefix=/usr/local/squid/ --enable-storeio=ufs,diskd ;make ;make install

源碼安裝的配置文件內容以下:

http_port 80 accelvhost vport

cache_peer192.168.33.12 parent 80 0 originserver name=wugk1

cache_peer192.168.33.13 parent 80 0 originserver name=wugk2

cache_peer_domain wugk1www.wugk1.com

cache_peer_domain wugk2www.wugk2.com

visible_hostnamelocalhost

forwarded_for off

via off

cache_vary on

acl manager protocache_object

acl localhost src 127.0.0.1/32

acl to_localhost dst127.0.0.0/8 0.0.0.0/32

acl localnet src10.0.0.0/8

acl localnet src172.16.0.0/12

acl localnet src192.168.0.0/16

acl all src 0.0.0.0/0

acl CONNECT methodCONNECT

http_access allowmanager localhost

http_access deny manager

http_access allowlocalnet

http_access allowlocalhost

http_access allow all

acl PURGE method PURGE

http_access allow PURGElocalhost

http_access deny PURGE

cache_mem 1000 MB

maximum_object_size 8MB

maximum_object_size_in_memory256 KB

hierarchy_stoplistcgi-bin ?

coredump_dir/usr/local/squid/var/cache

refresh_pattern^ftp:          1440    20%     10080

refresh_pattern^gopher:        1440   0%      1440

refresh_pattern -i(/cgi-bin/|\?) 0     0%      0

refresh_pattern \.(jpg|png|gif|mp3|xml|html|htm|css|js)1440    50%     2880   ignore-reload

refresh_pattern.              0       20%     4320

Yum安裝squid.conf配置文件,內容以下:

http_port 80 accel vhost vport

cache_peer 192.168.33.130 parent 80 0originserver name=wugk1

cache_peer 192.168.33.131 parent 80 0originserver name=wugk2

cache_peer_domain wugk1 www.wugk1.com

cache_peer_domain wugk2 www.wugk2.com

visible_hostname localhost

forwarded_for off

via off

cache_vary on

#acl config

acl manager proto cache_object

acl localhost src 127.0.0.1/32

acl to_localhost dst127.0.0.0/8 0.0.0.0/32

acl localnet src10.0.0.0/8     # RFC1918 possible internal network

acl localnet src 172.16.0.0/12  #RFC1918 possible internal network

acl localnet src 192.168.0.0/16 #RFC1918 possible internal network

acl SSL_ports port 443

acl Safe_ports port 808080         # http

acl Safe_ports port21          # ftp

acl Safe_ports port443         # https

acl all src 0.0.0.0/0

acl CONNECT method CONNECT

http_access allow manager localhost

http_access deny manager

http_access deny !Safe_ports

http_access deny CONNECT !SSL_ports

http_access allow localnet

http_access allow localhost

http_access allow all

acl PURGE method PURGE

http_access allow PURGE localhost

http_access deny PURGE

#squid config 2014-03-25

cache_dir aufs /data/cache1 10240 16256

cache_mem 4000 MB

maximum_object_size 8 MB

maximum_object_size_in_memory 256 KB

hierarchy_stoplist cgi-bin ?

coredump_dir /var/spool/squid

refresh_pattern^ftp:          1440    20%     10080

refresh_pattern ^gopher:       1440    0%      1440

refresh_pattern -i (/cgi-bin/|\?)0     0%      0

refresh_pattern\.(jpg|png|gif|mp3|xml|html|htm|css|js) 1440   50%     2880    ignore-reload

refresh_pattern.              0       20%     4320

Ø  Squid參數詳解

#vhost和vport表示支持虛擬主機和虛擬端口,若是再加上transparent表示支持透明代理

http_port 80 accel vhost vport

#cache_peer表示若是本機緩存中找不到客戶端請求的數據,則與後端主機聯繫,以parent類型進行聯繫;

使用HTTP協議進行聯繫,聯繫端口是80,orginserver表示此服務器是源服務器,name表示別名。

cache_peer 192.168.33.10 parent 80 0originserver name=wugk1

cache_peer 192.168.33.11 parent 80 0originserver name=wugk2

#設置別名所對應的域名,若是cache_peer中使用域名而不是IP的話;

那麼cache_peer_domain中必定要用相同的域名,不然沒法訪問。

cache_peer_domain wugk1 www.wugk1.com

cache_peer_domain wugk2 www.wugk2.com

#設置緩存服務器名稱

visible_hostname localhost

forwarded_for off

via off

cache_vary on

#acl config

acl manager proto cache_object

acl localhost src 127.0.0.1/32

acl to_localhost dst 127.0.0.0/8 0.0.0.0/32

acl localnet src 10.0.0.0/8     # RFC1918 possible internal network

acl localnet src 172.16.0.0/12  # RFC1918 possible internal network

acl localnet src 192.168.0.0/16 # RFC1918possible internal network

acl SSL_ports port 443

acl Safe_ports port 80 8080         # http

acl Safe_ports port 21          # ftp

acl Safe_ports port 443         # https

acl all src 0.0.0.0/0

acl CONNECT method CONNECT

http_access allow manager localhost

http_access deny manager

http_access deny !Safe_ports

http_access deny CONNECT !SSL_ports

http_access allow localnet

http_access allow localhost

##設置訪問控制,容許全部客戶端訪問上面設置的兩個網站

http_access allow all

#支持purge方式清除緩存

acl PURGE method PURGE

http_access allow PURGE localhost

http_access deny PURGE

#squid config 2014-03-25

#設置緩存文件夾的路徑和參數,緩存機制爲aufs,10240表示10G,目錄下面分爲16級,每級有256個目錄

cache_dir aufs /data/cache1 10240 16 256

#設置緩存內存大小,最大內存爲4g

cache_mem 4000 MB

#設置硬盤中可緩存的最大文件大小

maximum_object_size 8 MB

#設置內存中可緩存的最大文件大小

maximum_object_size_in_memory 256 KB

hierarchy_stoplist cgi-bin ?

#當squid忽然掛掉的時候,或者忽然出現什麼故障的時候,將squid在內存中的資料寫到硬盤中

coredump_dir /var/spool/squid

#<refresh_pattern>  <regex> <最小時間> <百分比> <最大時間>

#refresh_pattern用於肯定緩存的類型,緩存過時時間,及百分比。

#若是但願內容緩存cache後不刪除,直到被主動用purge清除,能夠加ignore-reload選項

refresh_pattern ^ftp:           1440    20%    10080

refresh_pattern ^gopher:        1440   0%      1440

refresh_pattern -i (/cgi-bin/|\?)   0    0%      0

refresh_pattern\.(jpg|png|gif|mp3|xml|html|htm|css|js) 1440  50%   2880  ignore-reload

refresh_pattern .               0       20%    4320

 

Squid經常使用命令使用:

Squidclient能夠用來清理squid緩存,查看squid狀態等功能。

使用方法:
*取得squid運行狀態信息: squidclient -p80 mgr:info
*取得squid內存使用狀況: squidclient -p80 mgr:mem
*取得squid已經緩存的列表: squidclient -p80 mgr:objects
*取得squid的磁盤使用狀況: squidclient -p80 mgr:diskd
*強制更新某個url:

squidclient -p 80 -m PURGE http://www.wugk1.com/static/image/common/nv_a.png

查看緩存命中率:squidclient -p 80mgr:info |egrep "(Request Hit Ratios|Byte Hit Ratios)"

 

6.  Linux下高併發系統內核優化

1)  優化Linux文件打開最大數:

vi  /etc/security/limits.conf

* soft nproc 65535

* hard nproc 65535

* soft nofile 65535

* hard nofile 65535

爲了防止失控的進程破壞系統的性能,Unix和Linux跟蹤進程使用的大部分資源,容許用戶和系統管理員使用對進程的資源限制,設置的限制有兩種: 硬限制和軟限制:

hard硬限制是能夠在任什麼時候候任何進程中設置  但硬限制只能由超級用戶修改。

soft軟限制是內核實際執行的限制,任何進程均可以將軟限制設置爲任意小於等於對進程限制的硬限制的值,(noproc)最大線程數和(nofile)文件數。

2)  內核參數的優化

vi /etc/sysctl.conf

net.ipv4.tcp_max_tw_buckets = 6000

timewait的數量,默認是180000。

net.ipv4.ip_local_port_range = 1024    65000

容許系統打開的端口範圍。

net.ipv4.tcp_tw_recycle = 1

啓用timewait快速回收。

net.ipv4.tcp_tw_reuse = 1

開啓重用。容許將TIME-WAIT sockets從新用於新的TCP鏈接。

net.ipv4.tcp_syncookies = 1

開啓SYN Cookies,當出現SYN等待隊列溢出時,啓用cookies來處理。

net.core.somaxconn = 262144

web應用中listen函數的backlog默認會給咱們內核參數的net.core.somaxconn限制到128,而nginx定義的NGX_LISTEN_BACKLOG默認爲511,因此有必要調整這個值。

net.core.netdev_max_backlog = 262144

每一個網絡接口接收數據包的速率比內核處理這些包的速率快時,容許送到隊列的數據包的最大數目。

net.ipv4.tcp_max_orphans = 262144

系統中最多有多少個TCP套接字不被關聯到任何一個用戶文件句柄上。若是超過這個數字,孤兒鏈接將即刻被複位並打印出警告信息。這個限制僅僅是爲了防止簡單的DoS攻擊,不能過度依靠它或者人爲地減少這個值,更應該增長這個值(若是增長了內存以後)。

net.ipv4.tcp_max_syn_backlog = 262144

記錄的那些還沒有收到客戶端確認信息的鏈接請求的最大值。對於有128M內存的系統而言,缺省值是1024,小內存的系統則是128。

net.ipv4.tcp_timestamps = 0

時間戳能夠避免序列號的卷繞。一個1Gbps的鏈路確定會遇到之前用過的序列號。時間戳可以讓內核接受這種「異常」的數據包。這裏須要將其關掉。

net.ipv4.tcp_synack_retries = 1

爲了打開對端的鏈接,內核須要發送一個SYN並附帶一個迴應前面一個SYN的ACK。也就是所謂三次握手中的第二次握手。這個設置決定了內核放棄鏈接以前發送SYN+ACK包的數量。

net.ipv4.tcp_syn_retries = 1

在內核放棄創建鏈接以前發送SYN包的數量。

net.ipv4.tcp_fin_timeout = 1

若是套接字由本端要求關閉,這個參數決定了它保持在FIN-WAIT-2狀態的時間。對端能夠出錯並永遠不關閉鏈接,甚至意外當機。缺省值是60秒。2.2 內核的一般值是180秒,你能夠按這個設置,但要記住的是,即便你的機器是一個輕載的WEB服務器,也有由於大量的死套接字而內存溢出的風險,FIN- WAIT-2的危險性比FIN-WAIT-1要小,由於它最多隻能吃掉1.5K內存,可是它們的生存期長些。

net.ipv4.tcp_keepalive_time = 30

當keepalive起用的時候,TCP發送keepalive消息的頻度。缺省是2小時。

完整的內核優化腳本:

net.ipv4.ip_forward = 0

net.ipv4.conf.default.rp_filter= 1

net.ipv4.conf.default.accept_source_route= 0

kernel.sysrq = 0

kernel.core_uses_pid =1

net.ipv4.tcp_syncookies= 1

kernel.msgmnb = 65536

kernel.msgmax = 65536

kernel.shmmax = 68719476736

kernel.shmall = 4294967296

net.ipv4.tcp_max_tw_buckets= 10000

net.ipv4.tcp_sack = 1

net.ipv4.tcp_window_scaling= 1

net.ipv4.tcp_rmem = 4096        87380   4194304

net.ipv4.tcp_wmem = 4096        16384   4194304

net.core.wmem_default= 8388608

net.core.rmem_default= 8388608

net.core.rmem_max = 16777216

net.core.wmem_max = 16777216

net.core.netdev_max_backlog= 262144

net.core.somaxconn = 262144

net.ipv4.tcp_max_orphans= 3276800

net.ipv4.tcp_max_syn_backlog= 262144

net.ipv4.tcp_timestamps= 0

net.ipv4.tcp_synack_retries= 1

net.ipv4.tcp_syn_retries= 1

net.ipv4.tcp_tw_recycle= 1

net.ipv4.tcp_tw_reuse= 1

net.ipv4.tcp_mem = 94500000915000000927000000

net.ipv4.tcp_fin_timeout= 1

net.ipv4.tcp_keepalive_time= 30

net.ipv4.ip_local_port_range= 1024    65530

net.ipv4.icmp_echo_ignore_all= 1

3)  常見內核報錯解析

Ø  net.ipv4.tcp_max_tw_buckets錯誤:

Sep23 04:45:54 localhost kernel: possible SYN flooding on port 80. Sendingcookies.

Sep 23 04:45:55localhost kernel: TCP: time wait bucket table overflow

Sep 23 04:45:55localhost kernel: TCP: time wait bucket table overflow

Sep 23 04:45:55localhost kernel: TCP: time wait bucket table overflow

Sep 23 04:45:55localhost kernel: TCP: time wait bucket table overflow

Sep 23 04:45:55localhost kernel: TCP: time wait bucket table overflow

Sep 23 04:45:55localhost kernel: TCP: time wait bucket table overflow

如上錯誤是因爲net.ipv4.tcp_max_tw_buckets設置太小致使,若是內核有如上錯誤,咱們須要增長net.ipv4.tcp_max_tw_buckets的值。

Ø  Too many open files錯誤:

 

若是後臺報錯,大量的too many openfiles錯誤,通常主要是JAVA應用出現這類錯誤比較多。咱們須要設置內核打開文件最大數。

ulimit -SHn 51200 臨時生效,若是想永久生效,須要寫入到系統內核裏面:

vi /etc/security/limits.conf

* soft nproc 65535

* hard nproc 65535

* soft nofile 65535

* hard nofile 65535

而後exit退出,從新登陸即生效,也能夠寫在/etc/profile文件裏。

 

7.    Nginx負載均衡機制及常見問題

Nginx 是目前主流的WEB服務器發佈軟件,不只能夠做爲強大的web服務器,也能夠做爲一個反向代理服務器,並且nginx還能夠按照調度規則實現動靜分離,能夠按照輪詢、ip_hash、URL哈希、權重等多種方式對後端服務器作負載均衡,同時還支持後端服務器的健康檢查。

upstream tdt_wugk {

    server  10.10.141.32:8080 weight=1 max_fails=2 fail_timeout=30s;

    server  10.10.141.32:8081 weight=1 max_fails=2 fail_timeout=30s;

}

一、upstream的 fail_timeout和max_fails,用來判斷負載均衡upstream中的某個server是否失效。在fail_timeout的時間內,nignx與upstream中某個server的鏈接嘗試失敗了max_fails次,則nginx會認爲該server已經失效。在接下來的fail_timeout時間內,nginx再也不將請求分發給失效的server。

二、fail_timeout默認爲10秒,max_fails默認爲1。是指在10秒內nginx與後端server鏈接失敗一次,若是在10秒內nginx與後端的鏈接失敗達到一次,nginx認爲這個server已失效,在接下來的10秒內,nginx將不會分發請求到這臺後端。

三、若是max_fails=0,即關閉後端服務器健康檢查,若是權重同樣,那麼每次請求都會有機會發到後端不可用的服務器。另外,fail_timeout設置的時間對響應時間沒影響,這個響應時間是用接下來的proxy_connect_timeout和proxy_read_timeout來控制。

四、proxy_connect_timeout

nginx與後端鏈接的超時時間,單位爲秒,默認爲60秒。咱們在nginx錯誤日誌裏面看到的(110: Connection timedout),就是指nginx與後端鏈接已經超時。

五、proxy_read_timeout

創建鏈接後,nginx等候讀取後端服務器響應的時間,默認爲60秒。在一些比較繁忙的後端,好比線程數常常達到峯值了的tomcat,這個值注意不要設得過低,雖然線程數已經用光,但請求已經進入待隊列之中。

六、proxy_send_timeout

nginx轉發請求到後端的超時時間,默認爲60秒,在這段時間內nginx沒將請求數據發到後端將關閉鏈接。這個在網站有比較多像表單(post)之類的須要留意一下.

七、keepalive_timout時間值意味着:一個http產生的tcp鏈接在傳送完最後一個響應後,還須要等待keepalive_timeout秒後,纔開始關閉這個鏈接。

1)  Nginx配置文件優化參數:

worker_processes 8;

 nginx進程數,建議按照cpu數目來指定,通常爲它的倍數。

worker_cpu_affinity 00000001 00000010 00000100 0000100000010000 00100000 01000000 10000000;

 爲每一個進程分配cpu,上例中將8個進程分配到8個cpu,固然能夠寫多個,或者將一個進程分配到多個cpu。

worker_rlimit_nofile 102400;

 這個指令是指當一個nginx進程打開的最多文件描述符數目,理論值應該是最多打開文件數(ulimit -n)與nginx進程數相除,可是nginx分配請求並非那麼均勻,因此最好與ulimit -n的值保持一致。

use epoll;

 使用epoll的I/O模型。

worker_connections 102400;

 每一個進程容許的最多鏈接數,理論上每臺nginx服務器的最大鏈接數爲worker_processes*worker_connections。

keepalive_timeout 60;

 keepalive超時時間。

client_header_buffer_size 4k;

 客戶端請求頭部的緩衝區大小,這個能夠根據你的系統分頁大小來設置,通常一個請求的頭部大小不會超過1k,不過因爲通常系統分頁都要大於1k,因此這裏設置爲分頁大小。分頁大小能夠用命令getconf PAGESIZE取得。

open_file_cache max=102400 inactive=20s;

 這個將爲打開文件指定緩存,默認是沒有啓用的,max指定緩存數量,建議和打開文件數一致,inactive是指通過多長時間文件沒被請求後刪除緩存。

open_file_cache_valid 30s;

 這個是指多長時間檢查一次緩存的有效信息。

open_file_cache_min_uses 1;

 open_file_cache指令中的inactive參數時間內文件的最少使用次數,若是超過這個數字,文件描述符一直是在緩存中打開的,如上例,若是有一個文件在inactive時間內一次沒被使用,它將被移除。

2)  Nginx 瀏覽器緩存優化:

瀏覽器緩存(Browser Caching) 是爲了加速瀏覽並節約網絡資源,瀏覽器在用戶磁盤上對最近請求過的文檔進行存儲。

nginx能夠經過expires 指令來設置瀏覽器的Header。

Expires 指令設置:

location~ \.(gif|jpg|jpeg|png|bmp|ico|txt|png|js|css|swf|doc)${

           expires30d;

}

3)  系統fstab系統性能優化

當文件被建立,修改和訪問時,Linux系統會記錄這些時間信息。當系統的讀文件操做頻繁時,記錄文件最近一次被讀取的時間信息,將是一筆很多的開銷。

因此,爲了提升系統的性能,能夠在讀取文件時不修改文件的atime屬性。能夠經過在加載文件系統時使用notime選項來作到這一點。

當以noatime選項加載(mount)文件系統時,對文件的讀取不會更新文件屬性中的atime信息。設置noatime的重要性是消除了文件系統對文件的寫操做,文件只是簡單地被系統讀取。

通常添加在/etc/fstab裏面,以下配置:

tmpfs                   /dev/shm                tmpfs   defaults        0 0

devpts                  /dev/pts                devpts gid=5,mode=620  0 0

sysfs                   /sys                    sysfs   defaults        0 0

proc                  /proc                   proc    defaults,noatime        0 0

 

 

 

8.    Linux運維職業規劃

對於從事Linux崗位的童鞋們,最關注的問題莫過於這個行業到底怎麼樣,能不能掙錢?我之後能作什麼?

對於第一個問題:

隨着互聯網飛速的發展,用戶對網站體驗各方面都要求很高,因此做爲網站底層承載的linux系統來講,獲得大批量的應用,能夠說大中型互聯網公司Linux在服務器領域已經佔到7-80%,並且Android手機也是基於Linux來研發定製的。將來Linux會在各行各業獲得廣泛的應用。

這裏討論Linux運維,若是是Linux開發的話,薪資更高,因此只要你技術熟練、精通,薪資根本不是問題,初級薪資通常都在4-5K以上,中間6-8K,高級Linux運維薪資通常都在10K+。對應Linux崗位管理方面薪資則20K+左右。全部不要再問能給有多少錢,關鍵是你有多熟練,你的能力在哪裏?

從Linux運維領域來講,能夠努力學習的方向有:

1)   熟練Linux系統的性能優化、網絡平常管理。

2)   高性能集羣架構部署及優化等。

3)   大併發網站運維及管理。

4)   Mysql、Oracle數據庫集羣管理。

5)   自動化運維平臺開發與管理

6)   網站架構GSLB、CDN緩存等。

一個行業要想熟練、甚至精通至少要花上5-10年的時間,作一件事重在專注,即便如今不會,只要天天進步一點點,天天實踐一點點,改變一點點,相信將來更美好。只有專一才能成功。

9.     Linux運維面試總結

1)  面試技巧總結

經過全面具體的學習,咱們已經正式遨遊進入了Linux運維世界,接下來咱們就須要正式的找一份Linux崗位的工做,不少人談到找工做就懼怕,爲何呢,懼怕面試不上、面試緊張、知識準備不充分等等。

    經過這樣一個完整的Linux高級運維的學習,咱們瞭解了目前企業裏面使用的技術和架構信息,那接下來咱們來總結一下企業通常問什麼問題?以及面試的過程當中要注意哪些細節?

總結平常面試的技巧(以正式講課爲準):

1)   首先穿着要得體,最好標準的職業裝面試,不能隨意穿着;簡單一點就是要讓人一看你,就感受清爽、能幹、有活力。

2)   要準備充分,儘可能提早15分鐘到面試公司,提早翻閱資料瞭解公司的簡單背景及相關文化。

3)   保持微笑,不要太古板,要隨和,保持心態放鬆,不要搶話搶答;要懂禮貌,有時候細節決定成敗。

4)   在回答問題上要簡單明瞭,不要闡述一個問題繞來繞去,把本身都繞迷糊了;要說到恰到好處。該回答的回答,不應說盡可能別說,作到有的放矢。

5)   要保持謙遜,遇到不會的題目,不知道就是不知道,不要非懂裝懂;

6)   面試一般開始會讓你作自我介紹,自我介紹說些什麼?多長合適?

通常自我介紹,就介紹本身叫什麼名字,畢業時間學校,已經以前工做經驗,本身比較熟練的技能和本身的性格和優勢等等;注 介紹完畢,最後說聲介紹完畢,謝謝。

7)  面試要有自信,不要低着頭,面試是雙向的,你選擇公司,公司也在選擇你。機會是很是的多的,關鍵是看你本身是否能把握住,是否以前已經準備好。

8)  面試的心態必定要保持平靜,不要由於一次面試不上,就以爲本身處處都是缺點,要總結本身上次面試的不足,而後下一次改變掉,相信堅持不懈必定能找到滿意的工做。

9)  最後總結一點,作什麼事情自信很重要,相信本身能夠作到,而後勇敢的去作,結果必定讓你倍感驚喜。

2)  面試題目總結

經過不斷的面試,咱們會總結到更多的知識和技巧,這裏總結一下平常面試到的問題及簡單回答方法:

1)  你平時在公司主要作什麼?

 

2)  大家原來公司的網站架構是怎樣的?

 

3)  你對哪一塊比較熟練或者精通?

 

4)  Squid、varnish等緩存服務器維護過嗎?squid緩存代理的原理是什麼?緩存命中率怎麼查看及清空緩存?

 

5)  LVS的工做原理是什麼?有哪些算法?

 

6)  Nginx平常的優化的參數都有哪些?Nginx動靜分離作過嗎?描述簡單的步驟。

 

7)  Linux內核優化,你都優化哪些參數?

 

 

8)  你在維護網站的過程當中,曾經遇到過什麼重大的問題?怎麼解決的?

 

9)  Shell編程熟練嗎?編寫一個自動化備份Mysql數據庫的腳本?

 

10)  Mysql主從架構的原理是什麼?若是主從不一樣步,報錯了,怎麼恢復?

 

11)  若是備份大數據Mysql數據文件?Mysql優化有哪些步驟?

 

12)  FTP主被動模式的區別是什麼?

 

13)  Apache兩種工做模式的區別及優化?

 

14)  Nagios、cacti維護過嗎?平時都監控些什麼?

 

15)  大家公司的網絡出口帶寬是多少?天天網站的PV、UV是多少?

 

16)  你以爲Linux運維工程師的職責是什麼?

 

 

17)  你爲何離職,離職的緣由是什麼?

 

 

18)  你將來5-10年的職業規劃是什麼樣的?

相關文章
相關標籤/搜索