Linux運維入門到高級全套經常使用要點

Linux運維入門到高級全套經常使用要點 php

1. Linux 入門篇..................................................................... 4 css

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

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

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

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

2. Linux 系統篇................................................................................ 22 mysql

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

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

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

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

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

3. Linux 服務篇................................................................................ 32

3.1 Linux 服務部署.................................................................. 32

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

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

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

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

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

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

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

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

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

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

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

4. Linux 編程篇................................................................................ 89

4.1 Linux Shell 編程................................................................. 89

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

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

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

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

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

5. Linux 深刻篇.............................................................................. 106

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

5.1. 1 Nginx WEB 安裝........................................................ 107

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

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

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

5.1. 5 Nginx Rewrite 規則................................................... 115

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

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

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

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

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

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

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

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

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

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

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

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

5. 6 LVS+Keepalived 負載均衡............................................... 143

5. 7 Squid 緩存服務器配置................................................... 154

5. 8 MySQL 高可用架構........................................................ 160

6. Linux 運維職業規劃.................................................................. 170

 

 

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,能力強的薪資更高。

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

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 workstation 10.0

ü CentOS 5.8 x86_i386.iso 安裝圖解以下:第一步,新建虛擬機以下圖:

clip_image003 第二步,選擇相關選項,以下圖: clip_image005 第三步選擇「稍後安裝操做系統」,以下圖: clip_image007 第四步,選擇客戶機操做系統類型以下圖:

clip_image009

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

clip_image012 第七步,修改虛擬機內存爲 512M,並添加 ISO 鏡像,以下圖: clip_image014 自此,虛擬機新建完成,接下來點擊「啓動此虛擬機」進行 Linux 系統安裝,Linux 系統安裝圖解以下:第一步,進入安裝界面,直接按 Enter 回車鍵便可。 clip_image016 第二步,光盤檢測,選擇 SKIP 跳過。

clip_image017

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

clip_image021 第四步,選擇初始化整個硬盤,清除全部數據。 clip_image023 第五步,選擇分區方式爲「自定義分區「。

clip_image025

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

clip_image029

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

clip_image032

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

clip_image035

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

clip_image039 第九步,系統安裝包選擇,這裏選擇「如今定製「。 clip_image041 第十步,系統安裝包選擇,左側選擇「開發「----右側選擇」開發工具「和「開發庫」,語言選擇「支持中文「,其餘一律不選擇。

clip_image043

clip_image045 安裝完畢會提示「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 目錄結構以下: (附圖表)

clip_image047

/ 根目錄

/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:21 monitor_log.sh

[root@node1 ~]#

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

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

每一個 Linux 文件具備四種訪問權限:可讀(r)、可寫(w)、可執行(x)和

無權限(-)。

利用 ls -l 命令能夠看到某個文件或目錄的權限,它以顯示數據的第一個字段爲 準。第一個字段由 10 個字符組成,以下:

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

-rw-r--r-- 1 root root 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.149.128 NETMASK=255.255.255.0 GATEWAY=192.168.149.1

網卡參數詳解以下:

DEVICE=eth0 #物理設備名

ONBOOT=yes # [yes|no](重啓網卡是否激活設備)

BOOTPROTO=static #[none|static|bootp|dhcp](不使用協議|靜態分配

|BOOTP 協議|DHCP 協議)

TYPE=Ethernet #網卡類型

IPADDR=192.168.149.128 #IP 地址

NETMASK=255.255.255.0 #子網掩碼 GATEWAY=192.168.149.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看看效果:

clip_image048 IP 配置完畢後,咱們能夠經過遠程工具來鏈接 Linux 服務器,常見的

Linux 遠程鏈接工具備:putty、secureCRT(主流)、xshell、xmanger 等工具。

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

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

clip_image050 彈出輸入密碼框:

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

clip_image054 經過這幾章的學習,咱們已經熟練了 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 nopeer noquery 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.log

2>&1

3.1. 2 構建 DHCP 服務器

DHCP(Dynamic Host Configuration 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; option subnet-mask 255.255.252.0;

# option nis-domain "domain.org";

# option domain-name "192.168.0.10";

# option domain-name-servers 192.168.0.11;

# option ntp-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 協議的一個免費軟件,由服務器及客戶端程序構成,

SMBServer Messages Block,信息服務塊)是一種在局域網上

享文件和打印機的一種通訊協議,它爲局域網內的不一樣計算機之間提供文件及打印機等資源的共享服務。

SMB 協議是客戶機/服務器型協議,客戶機經過該協議能夠訪問服務器上的共享文件系統、打印機及其餘資源。經過設置「NetBIOS over TCP/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=Temporary file space path=/tmp read only=no public=yes

[data]

comment=Temporary file space path=/data read only=no public=yes

Shutting

[FAILED]

down

 

SMB

services:

Shutting

[FAILED]

down

 

NMB

services:

Starting

[ OK ]

 

SMB

 

services:

Starting

 

NMB

 

services:

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

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

[ 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.149.128(SMB 文件共享服務端 IP),如何沒有權限訪問,須要注意防火牆和 selinux 設置,能夠使用以下命令關閉:

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

/etc/sysconfig/selinux

clip_image056

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 以下圖,安裝成功便可。

clip_image058

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

/data/ 192.168.149.129(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.149.128:/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

clip_image060

修改配置文件以下:

#vsftpd config 2014 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.149.128輸入用戶名和密碼便可訪問,進行建立和刪除操做。

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 模式:Prefork MPM 使用多個子進程,每一個子進程只有一個線程。每一個進程在某個肯定的時間只能維持一個鏈接。

在大多數平臺上,Prefork MPM 在效率上要比 Worker MPM 要高,

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

Worker 模式:Worker MPM 使用多個子進程,每一個子進程有多個線程。每一個線程在某個肯定的時間只能維持一個鏈接。一般來講,在一個高流量的 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。

clip_image062

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

clip_image063

查看 apache 進程及端口:

clip_image065

源碼包安裝 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 最末尾加入以下配置:

Include conf/extra/httpd-vhosts.conf

從新加載 apache 便可,/usr/local/apache2/bin/apachectl graceful

效果演示以下:

clip_image067

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;tar

xzf mysql-5.1.63.tar.gz ;cd mysql-5.1.63 ;./configure

--prefix=/usr/local/mysql --enable-assembler &&make &&make install

clip_image069

配置 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; 查看數據庫裏有多少張表。

clip_image071

create table test01 (id varchar(20),name varchar(20));建立名爲 test01 表,

並建立兩個字段,id、name、數據長度(用字符來定義長度單位。)

insert into test01 values ("001","wugk1"); 向表中插入數據。 select * from test01; 查看 test01 表數據內容。

clip_image073

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-server mysql-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;tar xzf

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;tar

xzf mysql-5.1.63.tar.gz ;cd mysql-5.1.63 ;./configure

--prefix=/usr/local/mysql --enable-assembler &&make &&make install

clip_image074

配置 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;tar jxf 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/

clip_image076

Ø 源碼安裝 Apache+PHP 整合整合 apache+php 環境,修改 httpd.conf 配置文件,而後加入以下語句:

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

AddType application/x-httpd-php .php

DirectoryIndex index.php index.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 環境搭建成功。

clip_image078

Ø 源碼安裝 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 論壇,以下圖,選擇「我贊成」

clip_image079

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

clip_image080

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

create database discuz charset=utf8; grant all on discuz.* to root@'localhost' identified by "123456"; clip_image082 點擊下一步,直至安裝完成,進入等待已久的論壇畫面:

clip_image084 自此 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 爲後綴名稱)。簡

單原理圖以下:

clip_image086

1) Cacti 服務器端安裝

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

http://www.cacti.net/downloads/cacti-0.8.8a.tar.gzhttp://oss.oetiker.ch/rrdtool/pub/rrdtool-1.4.5.tar.gzhttp://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 爲以下配置:

clip_image088

8) 添加 Rrdtool 抓圖任務計劃

*/5 * * * * /usr/bin/php

/var/www/html/cacti/poller.php >>/tmp/cacti_rrdtool.log 2 >&1

9) Cacti 安裝完畢,測試訪問經過 http://ip/cacti/訪問出現以下界面,點擊 NEXT 下一步。

clip_image090

默認一直點擊下一步:

clip_image092

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

clip_image094 進入 Cacti 配置管理界面

clip_image096

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

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

clip_image100 若是出現 snmp error,檢查 snmp 服務是否已啓動,或者是否有權限。

出現如上信息則表示正常。

點擊左上角第二個按鈕,graphs 查看 cacti 圖像—選擇 localhost 主機

—右邊會顯示 cacti 每 5 分鐘的監控圖像。

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

3.1. 10 Nagios 監控平臺搭建

Nagios 是一款開源的免費網絡監視工具,能有效監控 Windows、

Linux 和 Unix 的主機狀態,交換機路由器等網絡設置,打印機等。在系統或服務狀態異常時發出郵件或短信報警第一時間通知網站運維人員,在狀態恢復後發出正常的郵件或短信通知。

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

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

clip_image104

1) Nagios 服務端安裝

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

wget http://sourceforge.net/projects/nagios/files/nagios-3.x/nagios-3.2.1/nag ios-3.2.1.tar.gz/downloadhttp://down1.chinaunix.net/distfiles/nagios-plugins-1.4.14.tar.gz/usr/sbin/useradd nagios 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.users nagiosadmin

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

4) Nagios 測試訪問

重啓 nagios ,/etc/init.d/nagios restart ;/etc/init.d/httpd restart ; http://localhost/nagios/ 以下圖:

clip_image106

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

clip_image108

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

clip_image110

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 目錄主要包括監控主機的配置、模板、監控時間段等配置文件。

clip_image112

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

cp localhost.cfg 192.168.149.128.cfg

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

sed -i

's#localhost#192.168.149.128#g;s#127.0.0.1#192.168.149.128#g;s#chec

k_local#check#g ; s#linux-servers#192.168.149.128#g '

192.168.149.128.cfg

在 nagios.cfg 36 行 後 加 入 cfg_file=/usr/local/nagios/etc/objects/192.168.149.128.cfg sed -i '36a cfg_file=/usr/local/nagios/etc/objects/192.168.149.128.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 等監控配置段:

define service{ use local-service host_name 192.168.149.128 service_description Swap Usage check_command check_swap!20!10 }

clip_image114

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

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

clip_image116

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 -xzf nrpe-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 修改默認配置段的內容以下,

去掉#號,作相應修改。

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

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

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

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

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

8) Nagios 服務器 Nrpe 配置

Nagios 服務器端也須要安裝 nrpe,同時須要定義 Nrpe 監控命令,

寫 command.cfg 末尾便可:

define command{ command_name check_nrpe

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

}

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

define service{ use local-service host_name 192.168.149.128 service_description Current Load check_command check_nrpe!check_load

}

clip_image118

其餘同理,添加的方法同樣。只要在客戶端 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$ -p $$ARG2$ -s $ARG3$

}

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

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

/usr/local/nagios/libexec/check_http -I 192.168.149.129 -u /index.html

-p 82 -s "ATM"

clip_image122 如上截圖表示,關鍵詞 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 內容以下:

clip_image124

一樣也能夠使用 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 址,再用 TFTPtrivial 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 service tftp

{

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 = 100 2 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 內容以下:

default linux prompt 1 timeout 10 display boot.msg F1 boot.msg

F2 options.msg

F3 general.msg

F4 param.msg F5 rescue.msg label centos5.8 kernel vmlinuz append ks=nfs:192.168.0.79:/centosinstall/ks.cfg ksdevice=eth0 initrd=initrd.img label text kernel vmlinuz append initrd=initrd.img text label ks kernel vmlinuz append ks initrd=initrd.img label local

localboot 1 label memtest86 kernel memtest 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 Linux Shell 編程
4.1. 1 Shell 編程簡介

shell 是操做系統的最外層。shell 合併編程語言以控制進程和文件,

以及啓動和控制其它程序。shell 經過提示您輸入,向操做系統解釋該輸入,而後處理來自操做系統的任何結果輸出來管理您與操做系統之間的交互。

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

Linux Shell 種類很是多,常見的有:Bourne Shell(/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 is exist,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 source system?" 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 cp Files

#定義文件和目錄變量

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

#auto backup mysql

#wugk 2012-12-12

#Define PATH 定義變量

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

MYSQLDB=webapp

MYSQLPW=backup

MYSQLUSR=backup

#must use root user run scripts 必須使用 root 用戶運行,$UID 爲系

統變量

if

[ $UID -ne 0 ];then echo This script must use the root user ! ! !

sleep 2 exit 0

fi

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

if

[ ! -d $BAKDIR ];then mkdir -p $BAKDIR else echo This is $BAKDIR exists....

fi

#Use mysqldump 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

#auto tar czf shell to Files

#Author wugk 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 「The scripts exec end, Files tar successfully !」

d) 自動拒絕惡意 IP 腳本

#!/bin/sh

#auto drop 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

++++++++++++++welcome to 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

--dport 22 -j DROP" $IPTABLE_CONF else

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

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

fi

done

#最後重啓 iptables 生效

/etc/init.d/iptables restart

4.1. 5 Shell 數組編程

數組,就是相同數據類型的元素按必定順序排列的集合,就是把有限個類型相同的變量用一個名字命名,而後用編號區分他們的變量的集合,這個名字成爲數組名,編號成爲下標。 clip_image126 今天這裏咱們來探討一維數組的定義、統計、引用和刪除等操做。首先來定義一個一維數組:

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

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

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

如何顯示該數組全部參數呢?echo ${A[@]} 將顯示全部參數 test1 test2 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 Nginx WEB 安裝

首先須要安裝 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 00000100 00001000 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=2

fail_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 Nginx Rewrite 規則

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/$1permanent;

}

更多深刻的 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.gztar 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 --delete test@192.168.0.100::www /usr/local/webapps

--password-file=/etc/rsync.pas

Rsync -aP --delete test@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/Resin JAVA 服務器

Tomcat 是由 Apache 軟件基金會下屬的 Jakarta 項目開發的一個 Servlet 器,按照 Sun Microsystems 供的技術規範,實現了對 Servlet JavaServer 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 添加以下語句:

export JAVA_HOME=/usr/java/jdk1.6.0_18 export

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

PATH=$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 ;mv apache-tomcat-6.0.30

/usr/local/tomcat 便可。

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

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

看 到 tomcat 默 認 測 試 頁 面 :

clip_image128

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

<Context path="/" docBase="/data/webapps/www"

reloadable="true"/>

clip_image130 在/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,售後服務有保障。

wget http://www.caucho.com/download/resin-4.0.33.tar.gz tar –xzvf resin-4.0.33.tar.gz cd resin-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 配置文件發佈目錄,

如圖:

clip_image132

而後啓動 resin,/usr/local/resin/bin/resin.sh start 測試成功訪問以下

圖(發佈目錄未修改以前 resin 默認測試頁面):

clip_image133

5.3. 4 Resin 性能優化

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

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

<!-- SSL port configuration: -->

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

<jsse-ssl self-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 配置以下:

clip_image135

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

clip_image137

建立兩個發佈目錄 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

clip_image139

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

5. 4 Nginx Tomcat 動靜分離

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

態請求跟靜態請求分開,能夠理解成使用 Nginx 處理靜態頁面,Tomcat、

Resin 出來動態頁面。

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

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

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

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

####www.wuguangke.cn

server { listen 80; server_name www.wuguangke.cn; index index.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;tar xzf

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;tar

xzf mysql-5.1.63.tar.gz ;cd mysql-5.1.63 ;./configure

--prefix=/usr/local/mysql --enable-assembler &&make &&make install

clip_image141

配置 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;tar jxf 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/

clip_image142

Ø 源碼安裝 Apache+PHP 整合整合 apache+php 環境,修改 httpd.conf 配置文件,而後加入以下語句:

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

AddType application/x-httpd-php .php

DirectoryIndex index.php index.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 環境搭建成功。

clip_image143

Ø 源碼安裝 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 論壇,以下圖,選擇「我贊成」

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

clip_image080[1] 數據庫建立及受權命令以下:

create database discuz charset=utf8;

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

clip_image144

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

clip_image145

自此 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=1 max_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 以下圖所示:

clip_image147

查看系統啓動的端口及進程以下圖:

clip_image149

自此,LNAMP 所有整合完畢,接下來就是對系統內核、各個服務、架構進行優化,一樣優化是一項長期的任務。

5. 6 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 爲最少鏈接模式)

LVS NAT 原理:用戶請求 LVS 到達 director,director 將請求的報文的目標地址改爲後端的 realserver 地址,同時將報文的目標端口也改爲後端選定的 realserver 相應端口,最後將報文發送到 realserver, realserver 將數據返給 director,director 再把數據發送給用戶。(兩次請求都通過 director,因此訪問大的話,director 會成爲瓶頸)

LVS DR 原理:用戶請求 LVS 到達 director,director 將請求的報文的

目標 MAC 地址改爲後端的 realserver MAC 地址,目標 IP 爲 VIP(不變),源 IP 爲用戶 IP 地址(保持不變),而後 Director 將報文發送到 realserver, realserver 檢測到目標爲本身本地 IP,若是在同一個網段,而後將請求直接返給用戶。若是用戶跟 realserver 不在一個網段,則經過網關返回用戶。(此種轉發效率最高)

LVS TUN 原理:跟 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. gzln -s /usr/src/kernels/2.6.* /usr/src/linux //IPVS 模塊編譯進內核裏,

須要作軟鏈接

tar xzvf ipvsadm-1.24.tar.gz &&cd ipvsadm-1.24 && make && make

install

LVS 安裝完畢以後,須要進行配置,配置的步驟有兩步,第一步爲定

義端口服務,第二步爲添加 realserver 後端服務。

ipvsadm -A -t 192.168.149.129:80 -s rr ipvsadm -a -t 192.168.149.129:80 -r 192.168.149.130 -m -w 2 ipvsadm -a -t 192.168.149.129:80 -r 192.168.149.131 -m -w 2

參數說明:

-A 增長一臺虛擬服務器地址。

-t 虛擬服務器提供的是 tcp 服務。

-s 使用的調度算法

-a 在虛擬服務器中增長一臺後端真實服務器。

-r 指定真實服務器地址。

-m 設置當前轉發方式爲 NAT 模式;-g 爲直接路由模式;-i 模式爲隧道模式

-w 後端真實服務器的權重。

查看 LVS 轉發列表命令爲:ipvsadm –Ln

clip_image151 咱們會發現,若是這臺 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.gztar -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 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 MASTER interface eth0 lvs_sync_daemon_inteface eth0 virtual_router_id 51 priority 100 advert_int 5 authentication { auth_type PASS auth_pass 1111

}

virtual_ipaddress {

192.168.149.129

}

}

#REAL_SERVER_1 virtual_server 192.168.149.129 80 { delay_loop 6 lb_algo wlc

lb_kind DR persistence_timeout 60 protocol TCP real_server 192.168.149.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.149.131 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.149.129

}

}

#REAL_SERVER_1 virtual_server 192.168.149.129 80 { delay_loop 6 lb_algo wlc lb_kind DR persistence_timeout 60 protocol TCP real_server 192.168.149.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.149.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

#LVS Client Server VIP=192.168.149.118 case $1 in start) ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $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 防火牆臨時關閉便可。

5. 7 Squid 緩存服務器配置

隨着網站訪問人數愈來愈多,對體驗的要求也愈來愈高,網站承受的併發和壓力也愈來愈大,因此須要對網站和架構進行優化,優化的策略有很大,系統內核、程序、配置均衡、加入緩存等,那今天咱們來討論使用 Squid 對架構進行緩存優化。

Squid cache(簡稱爲 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 比較穩定,能夠考慮採用。

安裝命令:yum install -y squid

建立 squid.conf 配置文件,內容以下:

http_port 80 accel vhost vport cache_peer 192.168.149.130 parent 80 0 originserver name=wugk1 cache_peer 192.168.149.131 parent 80 0 originserver 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 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 # RFC1918 possible 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 acl PURGE method PURGE http_access allow PURGE localhost http_access deny PURGE #squid config 2014-03-25 cache_dir aufs /data/cache1 10240 16 256 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.149.128 parent 80 0 originserver name=wugk1 cache_peer 192.168.149.129 parent 80 0 originserver 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 # RFC1918 possible 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

5. 8 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.149.128 爲 master 主服務器,192.168.149.129 爲 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.149.128

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 master status;

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

| File | Position | Binlog_Do_DB | Binlog_Ignore_DB

|

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

| mysql-bin.000006 | 98 | |

|

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

1 row in set (0.00 sec)

而後在 slave 服務器指定 master IP 和同步的 pos 點:

change master to master_host='192.168.149.128',master_user='tongbu',master_passw ord='123456',master_log_file='mysql-bin.000006',master_log_pos=9

8;

在 slave 啓動 slave start,並執行 show slave status\G 查看 Mysql 主

從狀態:

clip_image153

Slave_IO_Running: Yes

Slave_SQL_Running: Yes 兩個狀態爲 YES,表明 slave 已經啓動兩個

線程,一個爲 IO 線程,一個爲 SQL 線程。

而後在 Master 服務器建立一個數據庫和表,命令以下:

clip_image155 而後去 slave 服務器查看是否有 mysql_ab_test 數據庫和相應 t0 的表,若是存在則表明 Mysql 主從同步搭建成功:

clip_image157 一樣還能夠測試在 master 服務器插入兩條數據,在 slave 查看 insert 數據是否已同步:

128 master 上執行以下圖:

clip_image159

129 slave 上執行以下圖,在 master 插入的數據已經同步到 slave

上:

clip_image161 自此 Mysql 主從搭建完畢,如今有一個問題,若是 master 服務器 down 機了,如何快速恢復服務呢?

能夠經過兩種方法:

第一種方法,若是程序鏈接的是 master 的 IP,直接在 slave 服務器上添加 master 的 IP 便可。這個手動去操做,並且須要花費時間比較長,可能還會出現誤操做的狀況,不推薦。

第二種方法,能夠使用 keepalived、heartbeat 做爲 HA 檢測軟件,

檢查 MySQL 服務是否正常,不正常則自動切換到 slave 上,推薦使用。

Ø Mysql+keepalived 高可用配置

繼上一章節 MySQL 主從配置完畢後,接着配置 keepalived 服務,主要用於 Mysql 故障自動切換。

Keepalived 安裝配置:

tar zxf keepalived-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 ! Configuration File 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_instance VI_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.149.100

} } virtual_server 192.168.149.100 3306 { delay_loop 6 lb_algo wrr lb_kind DR persistence_timeout 60 protocol TCP real_server 192.168.149.128 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.149.129 ;優先級從 100

改爲 90 便可。

在 master、slave 數據庫上建立/data/sh/mysql.sh 腳本,內容爲:

pkill keepalived

而後分別重啓兩臺數據庫上 keepalived 服務便可。最後測試中止

master Mysql 服務,是否會自動切換到 Backup 上。

關於 Mysql 集羣高可用就在此告一段落,固然除了 keepalived 高可用以外,Mysql 優化還能夠進行讀寫分離、Mysql+DRBD、拆分表等等優化,有興趣的童鞋能夠繼續深刻研究。

6. 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 年的時間,作一件事重在專注,即便如今不會,只要天天進步一點點,天天實踐一點點,改變一點點,相信將來更美好。只有專一才能成功。

相關文章
相關標籤/搜索