集羣:一組協同工做的服務器對外表現爲一個總體php
LBC:負載均衡集羣,多臺主機承擔壓力請求html
HAC:高可用集羣,儘量的保障服務的不間斷運行前端
HPC:高性能運算集羣,提供單臺服務器提供不了的計算能力java
集羣結構: node
負載調度器:管理集羣的主機,能夠是硬件或軟件python
服務器池:集羣服務器mysql
共享存儲:共享集羣服務器存儲地方linux
負載調度器組件 ios
硬件:nginx
一流:F5中big-ip ,價格昂貴
二流:ROSE ,安瑞科技
定義:把核心的算法封裝在獨立的運算芯片中
優勢:
一、速度更快
二、更穩定
三、學習成本低廉
軟件:amoeba、RAC、LVS 、Nginx、haproxy
優勢:
一、開源免費
二、學習成本高
NAS:網絡附加存儲,低廉,速度慢,併發低
分佈式存儲:MFS(主) NFS(多個)
負載均衡集羣 LBC
組件:1.負載調度器 2.服務器池 3.共享存儲
負載調度器
硬件:F5中big-ip
軟件:Nginx,LVS(主要學習)
負載調度層級(各層應用軟件)
二層:數據鏈路,MAC尋址,鏈路級負載:判斷網絡,暫時只有硬件可作F5 big-ip
四層:傳輸層IP,PORT,LVS、haproxy
七層:應用層URL,FQDN,amoeba、nginx
工做原理
四層:創建一個完整TCP鏈接,由客戶端發起,負載調度器轉發至真實服務器完成
七層:創建兩次完成TCP鏈接,由客戶端至調度器一次,調度器至真實服務器另外一次
判斷
四層:IP + PORT 套接字(源目的,IP端口)
七層:FQDN,URL(域名)
優勢
四層:壓力偏小,併發較大
七層:壓力大,可是可以識別 主機名 (虛擬主機)
工做場景
四層:TCP UDP C/S
七層:ssl http mail
安全性
四層:能夠轉發 SYN
七層:能夠攔截 SYN
高可用集羣HAC
實現方案:心跳檢測,發數據包,檢查服務器是否正常運行,屢次無迴應,取代
存在問題:腦分裂,存在兩臺相同IP的服務器,形成網絡訪問中斷,數據的丟失或損壞
解決方案
一、心跳線冗餘:多接幾條
二、採用串口線:線多,其中一條壞,會自動跳轉好的線
三、電源交換機:使用命令斷電
實現手段
軟件:heartbeat、keepalived
硬件:ROSE、安瑞科技、F5
高可用標準(一年)
99 99% 87.6小時 #高可用最低要求
999 99.9% 8.8小時 #
9999 99.99% 53分鐘 #
99999 99.999% 5分鐘 #
高性能運算集羣HPC
LBC:處理請求時,直接交給其中一個節點計算
HPC:處理請求時,拆分數據,分給其餘節點計算,再合併個HPC
分佈式計算:拆分數據進行計算
分佈式存儲:避免數據合併傳回的時間
性能提高方案
提升性能的順序:加緩存--水平擴展--加CDN--拆分業務--再上CDN
CDN:靜態數據緩存,創建鏡像站點,加快訪問速度,智能識別訪問所在位置,選擇最近站點回復訪問
水平擴展:多臺服務器承擔請求壓力
DNS(負載調度器)
一、無後端健康狀態監測
二、DNS 服務器須要熱備 (公網DNS服務器)
三、調度規則 RR,無特殊調度
四、DNS緩存服務器形成的網絡訪問壓力不一致
agent(負載調度器)
一、支持後端健康狀態檢測
二、支持多種調度算法
垂直擴展:更換性能更高的硬件設備
缺點
一、性價比低
二、性能提高存在瓶頸
三、在替換過程當中,服務出現中斷,mac 表刷新須要時間
優勢
一、網絡拓撲無改動
調度算法
只能選擇一個靜態或動態算法
調度算法分類
靜態調度active,只根據算法自己去調度,不考慮服務器自己
動態調度in-active,除了考慮算法自己,還要考慮服務器狀態
靜態調度算法
RR輪詢:
將請求分配給後端的服務器,從第一臺服務器開始到第N臺結束,而後循環
WRR加權輪詢:
按照權重的比例實如今多臺主機之間進行調度(按權重值)
SH(source hash)源地址散列:
將同一個IP的用戶請求,發送給同一個服務器(防止用戶重複請求,如登入)
#臨時解決cookie:本地客戶端,session:服務端重複握手自由消耗的問題
#應用內存分頁技術,使一部份內存變爲可寫,SIP--hash--RS1,使用hash轉換爲固定長度的字符串,節省資源
DH(destination hash)目標地址散列:
將同一個目標地址的用戶請求發送給同一個真實服務器(提升緩存的命中率)
#讓用戶更快的訪問到緩存所在地址
#也是有hash計算數據提交給服務器覈對,節省資源
動態調度算法
LC(lest-connection)最少鏈接:
將新的鏈接請求,分配給鏈接數最少的服務器(活動鏈接×256+非活動鏈接)
#一個線程三個狀態:正在建立鏈接,鏈接傳輸數據,鏈接釋放以前
#活動鏈接:鏈接傳輸數據
#非活動鏈接:正在建立鏈接,鏈接釋放以前
#LC算法認爲一個活動鏈接等於256個非活動鏈接
WLC加權最少鏈接:
特殊最少鏈接算法,權重越大承擔的請求數越多(活動鏈接×256+非活動鏈接)/權重
SED最短時間望延遲:
特殊的WLC算法(活動鏈接+1)*256/權重
#指定性能最好的服務器先開始接受請求
NQ永不排隊:
特殊的SED算法,無需等待,如真實服務器的鏈接數等於0那就直接分配不須要運算
#無論服務器性能好壞,優先選擇無鏈接的服務器
LBLC特殊的DH算法:
即能提升緩存命中率,又要考慮服務器性能
#設置閥值,當其中一臺緩存服務器壓力太大,自動轉移到另外一臺緩存服務器
LBLCR LBLC+緩存:
儘量提升負載均衡和緩存命中率的折中方案
#讓緩存服務器之間同步數據,減小後臺服務器壓力
特殊算法--持久化鏈接
相似於SH算法,持久鏈接優先於算法又等同於算法,一個請求先被持久鏈接計算,再被其餘算法計算,應用內存分頁技術
PCC(持久客戶端鏈接):
每客戶端持久;未來自於同一個客戶端的全部請求通通定向至此前選定的RS;也就是隻要IP相同,分配的服務器始終相同
#不管請求是何端口,都傳給同一個服務器
example:ipvsadm -A -t 172.16.0.8:80 -s wlc -p 120
PPC(持久端口鏈接):
每端口持久;未來自於同一個客戶端對同一個服務(端口)的請求,始終定向至此前選定的RS
example:ipvsadm -A -t 172.16.0.8:80 -s rr -p 120
PFMC持久防火牆標記鏈接:
未來自於同一客戶端對指定服務(端口)的請求,始終定向至此選定的RS;不過它能夠將兩個絕不相干的端口定義爲一個集羣服務
#給請求設置標籤,根據標籤,決定作持久化鏈接
example:
# iptables -t mangle -A PREROUTING -d 172.16.0.8 -p tcp --dport 80 -j MARK --set-mark 10
# iptables -t mangle -A PREROUTING -d 172.16.0.8 -p tcp --dport 443 -j MARK --set-mark 10
# service iptables save
# ipvsadm -A -f 10 -s wlc -p 120
ARP通訊行爲控制
ARP 響應級別
arp-ignore
0 只要本機配置有相應 IP 地址就響應 #相鄰網卡也能響應
1 僅在請求的目標地址配置在請求到達的網絡接口上時,纔給予響應 #只能在當前IP段局域網響應
ARP 通告行爲
arp-announce
0 將本機任何網絡接口上的任何地址都向外通告
1 儘量避免向目標網絡通告與其網絡不匹配的地址信息表 #只能在當前IP段局域網響應
2 僅向目標網絡通告與其網絡相匹配的地址信息 #檢查網卡上全部網段,在進行詳細匹配
案例環境專爲LVS和HA設計的一款健康檢查工具
支持故障自動切換(Failover)
支持節點健康狀態檢查(Health Checking)
官方網站:http://www.keepalived.org/
keepalived的熱備方式
VRRP(Virtual Router Redundancy Protocol,虛擬路由冗餘協議)
一主 + 多備,共用同一個IP地址,但優先級不一樣
Heartbeat是Linux-HA工程的一個組件,自1999年開始到如今,發佈了衆多版本,是目前開源Linux-HA項目最成功的一個例子,在行業內獲得了普遍的應用
LVS:Linux 虛擬服務,工做在四層的負載調度器,用於四層轉發數據
組件:ipvs:內核態,工做在內核空間,LVS 核心代碼
ipvsadm:用戶態,工做在用戶空間,是用戶管理LVS的惟一手段
鉤子函數:內核一種機制,可以優先獲取數據報文的全部權
LVS工做模式(NAT,DR,TUN)
併發量: DR > TUN > NAT
配置難易度: NAT < DR < TUN
優先: DR > NAT > TUN
NAT:DNAT端口映射,SNAT局域網共享公有IP
一、負載調度器必須是 Linux 操做系統,真實服務器節點能夠是任意操做系統
二、真實服務器和負載調度器能夠在不一樣廣播域內,真實服務器應該把網關指向負載調度器
三、負載調度器即負責處理入站請求又必須負責處理出站請求
四、支持端口映射,真實服務器服務地址能夠跟集羣端口不一致
DR:直接路由,支持千臺,超過千臺,使用硬件負載調度
一、負載調度器與真實服務器必須是 Linux 操做系統(禁止子網卡)
二、真實服務器與負載調度器必須處於同一個廣播域內
三、負載調度器只負責處理入站請求
四、真實服務器與負載調取集羣端口必須一致不支持端口映射
TUN:隧道模式
一、負載調度器必須是Linux操做系統,真實服務器能夠全平臺
二、負載調度器與真實服務器必須擁有公網IP或者可以被公網IP直接路由
三、負載調度器負載處理入站請求,出站請求由真實服務器完成
四、不支持端口映射
使用環境
負載網關服務器:兩張網卡,一張外網口IP,一張內網口IP, yum -y install ipvsadm
web1服務器:搭建httpd,設置內網網關,設置開機自啓動
web2服務器:搭建httpd,設置內網網關,設置開機自啓動
外網客戶機:不須要設置
web1服務器
curl localhost:8080 #查看搭建好的網站內容
web2服務器
curl localhost
負載調度器-網關服務器
modprobe ip_vs #測試是否加載,若是沒有獲得任何信息,則已經加載
cat /proc/net/ip_vs #查看版本信息,以檢測是否已經開始正常工做
service iptables start
echo "" > /etc/sysconfig/iptables #永久清空防火牆規則
iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -o eth1 -j SNAT --to-source 192.168.20.200
#設置防火牆nat轉換規則,-s指定內網口段,-o指定外網口網卡名,--to-source外網口IP
iptables -t nat -L #查看防火牆nat轉換規則
service iptables save #關機是也保持防火牆配置
iptables -D -t IP:80 #清除防火牆調度規則
chkconfig iptables on
yum -y install ipvsadm #安裝LVS負載調度器
vim /etc/sysctl.conf #開啓數據轉發
sysctl -p #刷新配置文件
ipvsadm -A -t 192.168.20.200:80 -s rr
#添加一個調度器規則,-A添加調度器,-t指定外網口IP,-s指定算法
ipvsadm -a -t 192.168.20.200:80 -r 192.168.10.101:8080 -m
ipvsadm -a -t 192.168.20.200:80 -r 192.168.10.102:80 -m
#添加集羣服務器信息,-t指定外網口IP,-r指定集羣單臺主機,-m指定NAT調度模式
ipvsadm -Ln #查看調度設置規則
chkconfig ipvsadm on
service ipvsadm save #關機是也保存調度設置
ipvsadm -Ln --stats #查看已調度信息(次數,出入數據大小)
#虛擬網卡的 IP 與真實網卡的 IP 需在同 一網段,且子網掩碼爲 255.255.255.255, 且主機虛擬網卡與其餘服務器虛擬網卡 IP 相同
#linux相臨網卡能夠互相訪問
安裝環境:
一臺LVS負載調度器:關閉防禦, yum -y install ipvsadm
web1服務器:安裝httpd,啓動,設置開機自啓動
web2服務器:跟web1同樣
LVS負載調度器
service NetworkManager stop #啓動虛擬接口口,必須關閉此服務
chkconfig NetworkManager off
cd /etc/sysconfig/network-scripts/
cp -a ifcfg-eth0 ifcfg-eth0:0 #更改IP爲訪問調度服務的IP
vim /etc/sysctl.conf
添加:
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.eth0.send_redirects = 0
#修改內核參數,網卡重定向,防止相同網絡地址廣播衝突,若是有多快網卡須要設置多行 net.ipv4.conf.eth0.send_redirects = 0
sysctl -p
ifup eth0:0
ipvsadm -A -t 192.168.10.222:80 -s rr
ipvsadm -a -t 192.168.10.222:80 -r 192.168.10.100:80 -g
#-g聲明DR模式,只處理入站請求
ipvsadm -a -t 192.168.10.222:80 -r 192.168.10.101:80 -g
ipvsadm -Ln #查看輪訓規則
ipvsadm -Ln --stats #查看輪訓記錄
service ipvsadm save
chkconfig ipvsadm on
web1服務器
service NetworkManager stop #啓動虛擬藉口,必須關閉此服務
chkconfig NetworkManager off
cd /etc/sysconfig/network-scripts/
cp -a ifcfg-lo ifcfg-lo:0
vim ifcfg-lo:0 #更改IP爲訪問調度服務的IP,掩碼改成255.255.255.255,防止廣播
vim /etc/sysctl.conf
修改:
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
#關閉全部網卡的響應和通告行爲,全部數據不接受
sysctl -p
ifup lo:0
route add -host 192.168.10.222 dev lo:0
#開放10.222的IP用lo:0網卡響應
若是是用nignx作web1網站須要修改nginx.conf
vim /usr/local/nginx/conf/nginx.conf
修改:
keepalive_timeout 0; #取消註釋
#keepalive_timeout 65; #開啓註釋
web2服務器
更web1設置同樣
安裝環境:
主LVS:配置DR調度服務,導入Keepalived.iso
從LVS:修改DR網卡方式,導入Keepalived.iso
web1服務器:安裝httpd
web2服務器:安裝httpd
主LVS調度服務器
yum -y install kernel-devel openssl-devel popt-devel gcc*
./configure --prefix=/ --with-kernel-dir=/usr/src/kernels/2.6.32-642.el6.x86_64/
make && make install
chkconfig --add keepalived
chkconfig keepalived on
vim /etc/keepalived/keepalived.conf
注:配置文件不能有空格
添加:
! Configuration File for keepalived
global_defs {
router_id R1 #命名主機
}
vrrp_instance VI_1 {
state MASTER #設置服務類型主 / 從( MASTER/SLAVE )
interface eth0 #指定那塊網卡用來監聽
virtual_router_id 60 #設置組號,只有同組才能通訊
priority 90 #服務器優先級,主服務器優先級高
advert_int 1 #心跳時間,每秒檢測對方存活,檢查負載服務器的
authentication { #存活驗證密碼
auth_type PASS
auth_pass 1111
}
virtual_ipaddress { #設置集羣地址
192.168.10.222
}
}
virtual_server 192.168.10.222 80 { #設置集羣地址,以及端口號
delay_loop 3 #健康檢查間隔,檢查後端服務器的
lb_algo rr #使用輪詢調度算法
lb_kind DR # DR 模式的羣集
protocol TCP #使用的協議
real_server 192.168.10.100 80 { #管理的網站節點以及使用端口
weight 1 #權重,優先級
TCP_CHECK { #狀態檢查方式
connect_port 80 #檢查的目標端口
connect_timeout 3 #鏈接超時(秒),多少秒檢測一次
nb_get_retry 3 #重試次數
delay_before_retry 4 #重試間隔(秒)
}
}
real_server 192.168.10.101 80 { #管理的第二個網站節點以及使用端口
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 4
}
}
}
/etc/init.d/keepalived start
scp /etc/keepalived/keepalived.conf root@192.168.10.102:/etc/keepalived/
從LVS調度服務器(跟主基本同樣)
配置網卡信息
ifup eth0:0
yum -y install ipvsadm
service ipvsadm start #規則須要與主負載同步,因此須要啓動
chkconfig ipvsadm on
vim /etc/keepalived/keepalived.conf
修改:
router_id R1 #命名主機
state SLAVE #設置服務類型主 / 從( MASTER/SLAVE )
priority 50 #服務器優先級,主服務器優先級高
/etc/init.d/keepalived start
chkconfig --add keepalived
chkconfig keepalived on
網卡配置後啓動報錯須要修改網卡配置文件:註釋
vim /etc/sysconfig/network-scripts/ifup-eth
247 #if ! ARPING=$(/sbin/arping -c 2 -w ${ARPING_WAIT:-3} -D -I ${REALDEVICE} ${ipaddr[$idx]}) ; then
248 #ARPINGMAC=$(echo $ARPING | sed -ne 's/.*\[\(.*\)\].*/\1/p')
249 #net_log $"Error, some other host ($ARPINGMAC) already uses address ${ipaddr[$idx]}."
250 #exit 1
251 #fi
擴展:
在keepalived.conf配置文件中加入如下內容:(主從轉換腳本調用)
注:執行腳本不能屏幕輸出(寫入null),判斷條件不能關於keepalived,更改須要重啓
notify_master"想要執行的腳本路徑"
#表示當切換到master狀態時,要執行的腳本
notify_backup "想要執行的腳本路徑"
#表示當切換到backup狀態時,要執行的腳本
notify_fault"想要執行的腳本路徑"
#表示切換出現故障時要執行的腳本
例:
vrrp_instance VI_1 {
state MASTER
interface eth1
virtual_router_id 66
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 123456
}
virtual_ipaddress {
172.18.0.200/16
}
notify_master "/etc/keepalived/notify.sh master"
notify_backup "/etc/keepalived/notify.sh backup"
notify_fault "/etc/keepalived/notify.sh fault"
}
keepalived檢測腳本的做用及注意事項:
#默認每隔3秒鐘執行一次檢測腳本,檢查nginx服務是否啓動,若是沒啓動就把nginx服務啓動起來,若是啓動不成功,就把keepalived服務down掉,讓漂浮到備keepalived上
#檢測腳本必定要寫在vrrp_instance的前面也就是上面,並且花括號必定要有空格,追蹤trace_script要定在vip的後面,多少人栽在了這上面好多小時
vrrp_script check_ng {
script " /etc/keepalived/check_nginx.sh "
interval 2
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.76.25/24
}
track_script {
check_ng
}
}
LVS-heartbeat高可用
heartbeat是腳本方式的高可用,設置簡單,但切換過程比較慢
安裝環境:
web1服務器:安裝httpd,導入heartbeat.tar.gz包
web2服務器:安裝httpd,導入heartbeat.tar.gz包
web1服務器
vim /etc/hosts # heartbeat須要用主機名解析切換
添加:
192.168.10.100 server
192.168.10.101 client1
scp /etc/hosts root@192.168.10.101:/etc/hosts
tar xf heartbeat.tar.gz
cd heartbeat
yum -y install *
cd /usr/share/doc/heartbeat-3.0.4/
cp -a authkeys ha.cf haresources /etc/ha.d/
cd /etc/ha.d/
vim authkeys #通常使用MD5加密
修改:
auth 3
#1 crc
#2 sha1 HI!
3 md5 Hello!
chmod 600 authkeys
vim ha.cf
修改:
node server #記錄高可用主機,幾個就幾條
node client1
bcast eth0 # Linux #聲明使用聲明網卡,冗餘多網卡
vim haresources
添加:
server IPaddr::10.10.10.10/24/eth0:0 #聲明主服務器訪問的IP,不能與真實機相同
scp authkeys ha.cf haresources root@192.168.10.101:/etc/ha.d/
#web2須要先安裝heartbeat.tar.gz
/etc/init.d/heartbeat start #啓動高可用
web2服務器
tar xf heartbeat.tar.gz
cd heartbeat
yum -y install *
/etc/init.d/heartbeat start #啓動高可用
測試:切斷網絡,若是要檢查httpd狀態,須要腳本支持
內容:
#!/bin/bash
PWD=/usr/local/script/jiankong
#腳本位置
URL=http://10.10.10.11/index.html
#主機真實IP鏈接
HTTP_CODE=`curl -o /dev/null -s -w "%{http_code}" "${URL}"`
#返回主頁請求碼,http_code是curl內置變量
if [ $HTTP_CODE != 200 ]
then
service heartbeat stop
fi
腳本定時任務設置
vim /etc/crontab
添加:
* * * * * root bash /root/heart.sh
service crond start
chkconfig crond on
安裝環境:
LVS服務器:安裝LVS-DR模式,設置nginx服務器IP調度
nginx1服務器:apache1和apache2同一個負載調度,apache3單獨一個負載調度
nginx2服務器:同nginx1同樣配置,除真實IP不一樣
apache1服務器:安裝httpd服務,設置網頁內容不一樣,方便測試
apache2服務器:安裝httpd服務
apache3服務器:安裝httpd服務
CDN包含:
智能 DNS
緩存服務器:
Nginx:不是主流的緩存服務器
Varnish:用內存分頁技術讀取元數據,支持正則表達式方法清空緩存
特色:在小規模的應用中,性能突出
Squid:用磁盤存儲數據,不支持正則表達式清空,支持FTP HTTP SSL
特色:在大規模的應用中,性能突出
UFS(Unix filesystem):squid採用的文件系統
調用過程:分區下-目錄下-二級目錄下-緩存文件(object)
digest tables:目錄對應的索引記錄
hash tables:分區對應的索引記錄
代理服務器基本類型:
傳統代理:適用於Internet,需明確指定服務端
透明代理:適用於共享上網網關,不需指定服務端
反向代理:位於網站前端,代理web接受客戶端的請求
使用反向代理的優勢:
提升 web 站點的訪問速度(縮短訪問距離)
隱藏服務器的真實 IP(數據被竊取)
主配置文件
軟件包:squid-2.6.STABLE21-6.el5
系統服務:squid
主程序:/usr/sbin/squid
主配置文件:/etc/squid/squid.conf
默認監聽端口:TCP 3128
默認訪問日誌:/var/log/squid/access.log
http_port 3128 #默認端口
access_log /var/log/squid/access.log squid #指定日誌位置,默認配置沒有
cache_mem 64 MB #squid進程可以調用的最大內存數
cache_dir ufs /var/spool/squid 100 16 256
#緩存目錄,緩存目錄最大使用100MB,一級目錄16個,二級目錄256個
visible_hostname proxy.benet.com #可見主機名
dns_testnames www.google.com www.163.com #指定dns,用於檢查服務是否正常運行
maximum_object_size 4096 KB #限制一個文件多大時,不緩存
reply_body_max_size 10 MB #容許訪問緩存的最大大小
ACL( Access Control List ,訪問控制列表):
根據源地址、目標URL、文件類型等定義ACL列表
acl 列表名稱 列表類型 列表內容 ...
acl all src 1.0.0.0/0.0.0.0
針對已定義的acl列表進行限制
http_access allow或deny 列表名稱 ...
http_access deny all
ACL列表定義類型
src 源地址
dst 目標地址
port 目標端口
dstdomain 目標域
time 訪問時間
maxconn 最大併發鏈接
url_regex 目標URL地址
Urlpath_regex 整個目標URL路徑
ACL注意事項
一、容許多個類型使用同一個列表名稱進行處理
二、若是隻設置 acl 不定義 http_access 至關於規則不存在
三、squid 內存內置函數以及定義 all 表明全部,不能自定義使用
四、當 all 區域不存在,而且已經定義 acl 區域,那麼此區域是否放行根據配置文件中的最後一行 http_access 反向進行操做
準備環境:
內網客戶機:設置內網網關
外網web服務器:搭建httpd服務
squid緩存網關:設置內外網兩張網卡
squid緩存網關
yum -y install squid
vim /etc/squid/squid.conf
添加:在http_port下
visible_hostname www.xdl.com #若是不添加,訪問時會警告
service squid start
vim /etc/sysctl.conf
sysctl -p
內網客戶機測試
linux下:/etc/profile文件添加添加
HTTP_PROXY=HTTP://內網網關IP:3128
export HTTP_PROXY
#正常數據包沒法收到,須要配置squid做爲代理服務器
. /etc/profile
elinks 外網web服務器IP
windows下:
瀏覽器—編輯—首選項—高級—連接—設置—手動代理—http網關內網 IP—3128
直接訪問外網
若是須要重啓squid:service squid reload
tcpdump -nA port 80 監聽httpd服務端口
tcpdump –nA port 80 #抓包命令
準備環境:
內網客戶機:設置內網網關
外網web服務器:搭建httpd服務
squid緩存網關:設置內外網兩張網卡
squid緩存網關
yum -y install squid
vim /etc/squid/squid.conf
修改:
http_port 內網網關IP:3128 transparent
#正常數據包沒法收到,須要聲明squid做爲代理服務器
添加:在http_port下
visible_hostname www.xdl.com
#若是不添加,訪問時會警告
service squid start
vim /etc/sysctl.conf
sysctl -p
iptables -t nat -A PREROUTING -i eth0( 內網網卡 ) -s 192.168.1.0/24 -p tcp --dport 80 -j REDIRECT --to-ports 3128
#藉助iptables修改80端口爲3128端口
內網客戶機測試
直接訪問
準備環境:
內網web1服務器:搭建httpd
內網web2服務器:搭建httpd
外網客戶機:不須要配置
squid緩存網關:設置內外網兩張網卡
squid緩存網關
yum -y install squid
vim /etc/squid/squid.conf
修改:
http_access allow all
#容許全部IP通行
http_port 外網網關IP:80 vhost
#開啓反向代理模式
添加:在http_port下
cache_peer 內網192.168.10.100 parent 80 0 originserver round-robin
#添加緩存池,parent指上游服務器,0指是否有其餘squid服務器,originserver節點,round-robin只支持輪訓
cache_peer 內網192.168.10.101 parent 80 0 originserver round-robin
visible_hostname www.xdl.com
#若是不添加,訪問時會警告
service squid start
vim /etc/sysctl.conf
sysctl -p
內網客戶機測試
直接訪問
存儲方式的分類
塊存儲
優勢:
一、實現較爲簡單成本較低
二、經過 raid 能夠顯著的提升磁盤讀寫性能
缺點
一、共享問題
二、文件系統侷限問題
文件存儲(CIFS/NFS/FTP)
優勢
一、通常來講文件存儲服務器都是使用單臺服務器構建成本低廉
二、文件系統由文件共享服務處理,不須要本地文件系統處理,跨平臺程度高
缺點
一、讀寫性能較差
對象存儲/雲存儲/分佈式存儲
將元數據信息與真實數據信息分開保存,METADATA存儲數據的元數據信息以及 CHUNKSERVER保存文件真實數據信息
存儲網絡的分類(軟件)
DAS:直接附加存儲 對象:塊存儲
NAS:網絡附加存儲 對象:文件存儲
SAN:存儲區域網絡 對象:對象存儲,網絡級別的塊存儲
硬件存儲解決方案:HP-EMC2
去OME
O:oracle
M:IBM小型機
E:EMC2
RHCS對象組成
RHCS 紅帽集羣套件 intofy+rsync 高性能版本
CMAN 用於發送集羣消息
CCS 集羣配置工具
RGMANAGER 集羣控制器 控制集羣啓動關閉隔離,柵設備
GFS2:第二版全局文件系統 集羣文件系統
CLVM:集羣邏輯卷組
準備環境:
一臺時間服務器
一臺同步客戶機
時間服務器
yum -y install ntp
ntpdate cn.pool.ntp.org #同步網絡時間
date -s 2018-08-28
date -s 15:26:30
vim /etc/ntp.conf
修改:
restrict 192.168.10.0 mask 255.255.255.0 nomodify notrap
註釋server區域
添加:
server 127.127.1.0
fudge 127.127.1.0 stratum 10
service ntpd start
chkconfig ntpd on
同步客戶機
yum -y install ntpdate
ntpdate -u 192.168.10.100
crontab -e
添加:
0 */2 * * * /usr/sbin/ntpdate -u 192.168.10.100 &>/dev/null
service crond start
chkconfig crond on
date
準備環境:
ISCSI服務器:搭建時間服務,添加新硬盤
共享客戶機:與服務器同步時間
永久設置:
ISCSI服務器
fdisk -l
pvcreate /dev/sdb
vgcreate vg0 /dev/sdb
lvcreate -L 1G -n lv0 vg0
mkfs -t ext4 /dev/vg0/lv0
yum -y install scsi-target-utils #安裝ISCSI主服務器服務
vim /etc/tgt/targets.conf
添加:
<target iqn.2018-08.server:lvm> #設置iqn標籤,至關於ISCSI服務主機名
backing-store /dev/vg0/lv0 #聲明磁盤位置
initiator-address 192.168.10.100 #運行訪問IP
</target>
service tgtd start
chkconfig tgtd on
tgtadm -L iscsi -o show -m target #查看ISCSI的服務的LUN是否設置成功
共享客戶機
yum -y install iscsi-initiator-utils #服務端ISCSI工具
iscsiadm -m discovery -t st -p 192.168.10.100 #查看服務端的共享目錄
iscsiadm -m node -T iqn.2018-08.server:lvm --login #登入ISCSI服務
fdisk /dev/sdb #給邏輯卷分區
mkfs.ext4 /dev/sdb1
mkdir /scsi
mount /dev/sdb1 /scsi/
df -h
取消ISCSI
umount /scsi/
iscsiadm -m node -T iqn.2018-08.server:lvm --logout
臨時命令設置
ISCSI服務器
yum -y install scsi-target-utils
pvcreate /dev/sdb
vgcreate vg0 /dev/sdb
lvcreate -L 1G -n lv0 vg0
mkfs.ext4 /dev/vg0/lv0
partprobe /dev/vg0/lv0
service tgtd start
netstat -anpt | grep tgtd
tgtadm -L iscsi -o new -m target -t 1 -T iqn.2018-08.server:lvm
tgtadm -L iscsi -o new -m logicalunit -t 1 -l 1 -b /dev/vg0/lv0
tgtadm -L iscsi -o show -m target
共享客戶機
iscsiadm -m discovery -t st -p 192.168.10.100
iscsiadm -m node -T iqn.2018-08.server:lvm --login
fdisk /dev/sdb
mkfs.ext4 /dev/sdb1
mount /dev/sdb1 /scsi/
df -h
軟件版本:
scsi-target-utils-1.0.24-3.el6_4.x86_64
iscsi-initiator-utils-6.2.0.873-2.el6.x86_64
cman-3.0.12.1-49.el6_4.1.x86_64
rgmanager-3.0.12.1-17.el6.x86_64
gfs2-utils-3.0.12.1-49.el6_4.1.x86_64
lvm2-cluster-2.02.98-9.el6.x86_64
準備環境:
server服務器:搭建時間同步服務器,ssh免密登入,添加新硬盤
client1服務器:
client2服務器:
client3服務器:
server服務器
vim /etc/hosts
添加:
192.168.10.101 client1
192.168.10.102 client2
192.168.10.103 client3
192.168.10.100 server
scp /etc/hosts root@192.168.10.101:/etc/
scp /etc/hosts root@192.168.10.102:/etc/
scp /etc/hosts root@192.168.10.103:/etc/
alias ha='for I in {1..3}; do' #設置別名,變量ha匹配1,2,3做爲主機名匹配
ha ssh client$I 'touch /root/1.txt'; done #批量給客戶機添加文件,做爲測試
yum install -y scsi-target-utils #安裝ISCSI主服務器服務
vim /etc/tgt/targets.conf
添加:
<target iqn.2018-08.server:lvm> #設置iqn標籤
<backing-store /dev/sdb> #指定共享磁盤
vendor_id test #發行商號,任意
lun 6 #LUN號
</backing-store>
incominguser iscsiuser iscsiuser #設置用戶密碼認證
initiator-address 192.168.10.0/24 #設置容許的訪問網段
</target>
service tgtd start
tgtadm --lld iscsi --mode target --op show #查看設置好的ISCSI服務
ha ssh client$I 'yum -y install iscsi-initiator-utils'; done #批量安裝客戶機服務端ISCSI服務
ha ssh client$I 'service iscsi start'; done #更改完客戶機配置文件後啓動
ha ssh client$I 'chkconfig iscsi on'; done
ha ssh client$I 'iscsiadm -m discovery -t st -p 192.168.10.100:3260'; done
#查看客戶機可否找到服務器ISCSI服務共享磁盤
ha ssh client$I 'iscsiadm -m node -T iqn.2018-08.server:lvm -p 192.168.10.100 -l'; done
#批量使客戶端登入服務端服務
ha ssh client$I 'service iscsi restart'; done
ha ssh client$I 'chkconfig iscsi on'; done
ha ssh client$I 'yum install -y cman rgmanager'; done
#須要關閉NetworkManager和自啓動
#cman用於發送集羣消息,CCS 集羣配置工具
#rgmanager集羣控制器,控制集羣啓動關閉隔離,柵設備,其中一臺服務器掛了,隔離
#去客戶機進行操做建立集羣,以後再進行如下操做
ha ssh client$I 'yum install -y lvm2-cluster'; done
# CLVM:集羣邏輯卷組,使客戶機其中一臺設置完邏輯卷組,其它客戶機也能收到
ha ssh client$I 'lvmconf --enable-cluster'; done #開啓邏輯卷組集羣功能,不是啓動
ha ssh client$I 'grep "locking_type = 3" /etc/lvm/lvm.conf'; done
#查看邏輯卷組是否識別到
ha ssh client$I 'service clvmd start'; done
ha ssh client$I 'chkconfig clvmd on'; done
ha ssh client$I 'chkconfig cman on'; done
ha ssh client$I 'chkconfig rgmanager on'; done
ha ssh client$I 'yum install -y gfs2-utils'; done
# GFS2:第二版全局文件系統,集羣文件系統,提供集羣鎖的集羣功能
ha ssh client$I 'service gfs2 start'; done
client1服務器
vim /etc/iscsi/initiatorname.iscsi
修改:
InitiatorName=iqn.2018-08.server:lvm
vim /etc/iscsi/iscsid.conf
修改:
node.session.auth.authmethod = CHAP
node.session.auth.username = iscsiuser
node.session.auth.password = iscsiuser
#去服務器執行操做
ccs_tool create testcluster #建立名爲testcluster的集羣
ccs_tool addfence meatware fence_manual
#建立名爲meatware的柵設備,當集羣有損壞是用柵設備隔離
ccs_tool lsfence #查看柵設備是否添加
ccs_tool addnode -n 1 -f meatware client1 #添加集羣節點
ccs_tool addnode -n 2 -f meatware client2
ccs_tool addnode -n 3 -f meatware client3
ccs_tool lsnode #查看羣節點
cd /etc/cluster/
cat cluster.conf #查看配置文件是否正確
scp cluster.conf root@client2:/etc/cluster/ #批量修改其它客戶機配置文件
scp cluster.conf root@client3:/etc/cluster/
service cman start #在客戶機啓動,不然可能報錯,cman集羣節點之間能夠通訊了
#去主服務器配置
pvcreate /dev/sdb
vgcreate clustervg /dev/sdb
pvs #其它客戶機也能夠查看到
lvcreate -L 10G -n clusterlv clustervg
lvs
mkfs.gfs2 -j 2 -p lock_dlm -t testcluster:sharedstorage /dev/clustervg/clusterlv
#-j指定日誌文件,-p指定鎖表類型,-t指定鎖表名稱
#虛擬機有些沒法完成,由於IO模型不支持
# mkfs.gfs2 -h查看幫助
#-J指定日誌區域的大小,默認爲128MB
mkdir /iscsi
mount -t gfs2 /dev/clustervg/clusterlv /iscsi/
# gfs2_tool gettune /mydata查看掛載目錄的屬性
# gfs2_tool settune /mydata new_files_jdata 1最經常使用,設置是否馬上同步到磁盤的,通常設置爲1,下面咱們就來設置一下
gfs2_tool journals /iscsi #查看日誌文件,默認爲128MB
gfs2_jadd -j 1 /dev/clustervg/clusterlv #新增日誌文
client2服務器
vim /etc/iscsi/initiatorname.iscsi
修改:
InitiatorName=iqn.2018-08.server:lvm
vim /etc/iscsi/iscsid.conf
修改:
node.session.auth.authmethod = CHAP
node.session.auth.username = iscsiuser
node.session.auth.password = iscsiuser
service cman start
pvs
lvs
mkdir /iscsi
mount -t gfs2 /dev/clustervg/clusterlv /iscsi/
client3服務器
vim /etc/iscsi/initiatorname.iscsi
修改:
InitiatorName=iqn.2018-08.server:lvm
vim /etc/iscsi/iscsid.conf
修改:
node.session.auth.authmethod = CHAP
node.session.auth.username = iscsiuser
node.session.auth.password = iscsiuser
service cman start
pvs
lvs
mkdir /iscsi
mount -t gfs2 /dev/clustervg/clusterlv /iscsi/
擴展集羣邏輯卷
lvs
lvextend -L 15G /dev/clustervg/clusterlv #從10G增長到15G
df -h
gfs2_grow /dev/clustervg/clusterlv #擴展邏輯邊界
df -h
MFS:MooseFS是一個具有冗餘容錯功能的分佈式網絡文件系統,它將數據分別存放在多個物理服務器或單獨磁盤或分區上,確保一份數據有多個備份副本,然而對於訪問MFS的客戶端或者用戶來講,整個分佈式網絡文件系統集羣看起來就像一個資源同樣,從其對文件系統的狀況看MooseFS就至關於UNIX的文件系統
數據塊的存儲:單個塊的存儲大小爲 64MB,文件小於 64 MB,採用單獨塊進行存儲。多餘則申請多個塊進行存儲,但都知足一個特色,16進制
一、只有第一個塊用完之後才容許寫入第二個塊
二、剩餘塊空間不容許在利用
組成結構
管理服務器:managing server 簡稱 master
這個組件的角色是管理整個mfs文件系統的主服務器,除了分發用戶請求外,還用來存儲整個文件系統中每一個數據文件的metadata信息,metadate(元數據)信息包括文件(也能夠是目錄,socket,管道,塊設備等)的大小,屬性,文件的位置路徑等
元數據備份服務器:Metadata backup servers 簡稱metalogger
這個組件的做用是備份管理服務器master的變化的metadata信息日誌文件,文件類型爲changelog_ml.*.mfs。以便於在管理服務器出問題時,能夠通過簡單的操做便可讓新的主服務器進行工做
數據存儲服務器組:data servers(chunk servers)簡稱data
這個組件就是真正存放數據文件實體的服務器了,這個角色能夠有多臺不一樣的物理服務器或不一樣的磁盤及分區來充當,當配置數據的副本多於一份時,據寫入到一個數據服務器後,會根據算法在其餘數據服務器上進行同步備份
客戶機服務器組:(client servers)簡稱 client
這個組件就是掛載並使用mfs文件系統的客戶端,當讀寫文件時,客戶端首先會鏈接主管理服務器獲取數據的metadata信息,而後根據獲得的metadata信息,訪問數據服務器讀取或寫入文件實體,mfs客戶端經過fuse mechanism實現掛載mfs文件系統的,所以,只有系統支持fuse,就能夠做爲客戶端訪問mfs整個文件系統
MFS 優勢:
高可靠性:
每一份數據能夠設置多個備份(多分數據),並能夠存儲在不一樣的主機上
高可擴展性:
能夠經過增長主機的磁盤容量或增長主機數量來動態擴展整個文件系統的存儲量
高可容錯性:
當數據被刪除後的一段時間內,依舊存放於主機的回收站中,以備誤刪除恢復數據
高數據一致性:
即便文件被寫入、訪問時,咱們依然能夠輕鬆完成對文件的一致性快照
MFS缺點:
master目前是單點,雖然會把數據信息同步到備份服務器,可是恢復須要時間
master服務器對主機的內存要求略高
默認metalogger複製元數據時間較長(可調整)
內存使用問題:
對於master服務器來講,資源型要求就是內存大小,爲了整個系統訪問更快,mfs會把因此訪問的元數據metadada信息放在內存中提供用戶訪問,所以,當文件數量增長時,內存使用量就會增長,根據官方說法,處理一百萬個文件chunkserver,大概須要300M的內存空間。據此,推算若是將來要出來1個億的文件chunkserver,大概須要30G內存空間
MFS工做方式
遍歷
client 發起遍歷請求至 Master,Master查詢元數據信息返回給 Client,Client 接收展現
獲取文件
一、client 發起文件請求至 Master端,Master查詢文件的 IP/PORT/ID 信息返回給 Client
二、client 鏈接對應的服務器獲取數據
刪除文件
一、client 發起刪除文件請求至 Master端
二、Master刪除對應的元數據信息,並向後端真實服務器添加異步刪除任務,當到達指定時間後,chunkserver 刪除對應真實數據,返回刪除成功至 master
建立文件
一、client 向 Master 服務器發起新建文件請求,發送相關元數據信息如大小文件名
二、Master 向後端 chunkserver 選舉節點,併發送建立新塊的請求
三、chunkserver 建立完成新塊之後,發送新塊的 IP/PORT/ID 至 Master 服務器
四、Master 發送新塊地址信息至 client
五、client 鏈接至新塊地址進行寫入,寫入完成後,發送關閉文件信息至 Master
六、Master 接收到關閉信息後,鏈接至對應chunkserver 進行查詢請求,修改最終元數據的大小最後修改時間等
修改文件
一、client 向 master 發起修改文件請求
二、master 檢索內存信息確認 chunkserver 地址,鏈接至 chunkserver 進行拷貝塊請求(將源數據塊拷貝至新塊-1),將新塊-1 port,ip,id 信息發送至 client
client 鏈接 新塊-1 進行對應修改
若是數據無變化
當客戶端關閉文件請求發送至 master 後
Master 鏈接 chunkserver 檢測數據塊內容是否有變化,無變化刪除新塊-1 修改元數據中的最終訪問時間
若是數據有變化
master 服務器鏈接 chunkserver 申請 新塊-2 知足 新塊-1 的容量,將新塊-1 數據拷貝至 新塊-2 ,刪除源塊以及 新塊-1 更新本身的元數據信息
/usr/local/mfs/etc/mfs/mfsmaster.cfg
WORKING_USER = mfs
WORKING_GROUP = mfs
SYSLOG_IDENT = mfsmaster
#在 syslog 中的表示,說明這是 mfsmaster 產生的
LOCK_MEMORY = 0
#是否執行 mlockall() 以免 mfsmaster 內存溢出(默認爲 0 )
NICE_LEVEL = -19
#運行的優先級(默認 -19 ,注意,這進程必須是 root 啓動 )
DATA_PATH = /usr/local/mfs/var/mfs
#數據存放路徑,該目錄下有三大類文件,changelog,sessions,stats
EXPORTS_FILENAME = /usr/local/mfs/etc/mfs/mfsexports.cfg
#被掛載目錄以及其權限控制文件的存放位置
BACK_LOGS = 50
#元數據的改變日誌文件數量(默認是 50 )
MATOML_LISTEN_HOST = *
#元數據日誌服務器監聽的 IP 地址(默認是 * ,表明任何 IP )
MATOML_LISTEN_PORT = 9419
#元數據日誌服務器監聽的端口地址,默認是 9419
MATOCS_LISTEN_HOST = *
#用於存儲服務器( Chunk Server )鏈接的 IP 地址
MATOCS_LISTEN_PORT = 9420
#是存儲服務器( Chunk server )鏈接的端口地址
REPLICATIONS_DELAY_INIT = 300
#延遲複製的時間(默認是 300 )
CHUNKS_LOOP_MIN_TIME = 300
# chunks的迴環率
CHUNKS_SOFT_DEL_LIMIT = 10
CHUNKS_WRITE_REP_LIMIT = 2,1,1,4
#在一個循環裏複製到一個 CHUNK Server 的最大 chunks 數目
CHUNKS_READ_REP_LIMIT = 10,5,2,5
MATOCL_LISTEN_HOST = *
MATOCL_LISTEN_PORT = 9421
/usr/local/mfs/etc/mfs/mfsexports.cfg #表示MFSMETA文件系統,設置掛載點權限
rw.alldirs,maproot=0 #表示客戶端擁有的權限
權限部分選項以下:
ro #只讀模式共享
rw #讀寫方式共享
alldirs #容許掛載任何指定的子目錄
maproot #映射爲root用戶仍是指定的用戶
password #指定客戶端密碼
/usr/local/mfs/var/mfs/metadata.mfs #存儲元數據信息的持久化目錄
元數據持久化
一、當 Master Server 啓動後將 /usr/local/mfs/var/mfs 下的 metadata.mfs加載至內存中並更名爲 metadata.mfs.back
二、新建 changelog.*.mfs 文件用於進行增量保存的文件,完整備份保存至 metadata.mfs.back
可以使用最大空間
官方提示當 MFS 剩餘資源在 1GB 是整個 MFS 系統中止寫入類型請求。可是,社區實測在 百分之九十五 時中止寫入,1.9GB
goal值設置
一、默認 goal 值爲 2
二、goal 必須不大於當前 chunkserver 節點數量
三、當 chunkserver 損壞後,會從新選一臺進行同步,並儘量保證數量爲設置的 goal 值
準備環境:
導入:moosefs-3.0.84-1.tar.gz壓縮包
MFS-master服務器:yum -y install zlib zlib-devel gcc gcc-c++
MFS-log服務器:yum -y install zlib zlib-devel gcc gcc-c++
MFS-chunk1服務器:添加硬盤,yum -y install zlib zlib-devel gcc gcc-c++
MFS-chunk1服務器:添加硬盤,yum -y install zlib zlib-devel gcc gcc-c++
MFS-fuse客戶機:yum -y install zlib zlib-devel gcc gcc-c++ fuse fuse-devel fuse-libs
MFS-master服務器
useradd mfs -s /sbin/nologin
tar xf moosefs-3.0.84-1.tar.gz
./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs
make && make install
chown -R mfs.mfs /usr/local/mfs/
ln -s /usr/local/mfs/bin/* /usr/local/bin
ln -s /usr/local/mfs/sbin/* /usr/local/sbin/
cd /usr/local/mfs/etc/mfs/
cp -a mfsmaster.cfg.sample mfsmaster.cfg #主服務文件
cp -a mfsexports.cfg.sample mfsexports.cfg #掛載點文件
vim mfsexports.cfg
添加:
192.168.10.0/24 rw,alldirs,maproot=0 #定義客戶端權限
cp -a ../../var/mfs/metadata.mfs.empty ../../var/mfs/metadata.mfs #元數據文件
mfsmaster start
中止master server,安全中止master server是很是必要的,千萬不要kill,而是利用自帶的命令mfsmaster來安全中止master server , mfsmaster stop,咱們安裝後採用默認的配置,沒有作任何更改,因此默認的日誌是寫入/var/log/messages
mfscgiserv start #服務自帶web監控端,須要時啓動
瀏覽器:http://192.168.10.100:9425
/usr/local/mfs/sbin/mfsmaster -a #若是啓動不了,執行這條命令修復
MFS-log服務器
useradd mfs -s /sbin/nologin
tar xf moosefs-3.0.84-1.tar.gz
./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs
make && make install
chown -R mfs.mfs /usr/local/mfs/
ln -s /usr/local/mfs/bin/* /usr/local/bin/
ln -s /usr/local/mfs/sbin/* /usr/local/sbin/
cd /usr/local/mfs/etc/mfs/
cp -a mfsmetalogger.cfg.sample mfsmetalogger.cfg #日誌文件
vim mfsmetalogger.cfg
修改:
META_DOWNLOAD_FREQ = 2 #同步時間
MASTER_HOST = 192.168.10.100
mfsmetalogger start
lsof -i :9419 #查看端口狀態,ESTABLISHED,正在傳送數據
MFS-chunk1服務器
useradd mfs -s /sbin/nologin
tar xf moosefs-3.0.84-1.tar.gz
./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs
make && make install
chown -R mfs.mfs /usr/local/mfs/
ln -s /usr/local/mfs/bin/* /usr/local/bin/
ln -s /usr/local/mfs/sbin/* /usr/local/sbin/
cd /usr/local/mfs/etc/mfs/
cp mfschunkserver.cfg.sample mfschunkserver.cfg #chunk文件,至關於集羣節點
vim mfschunkserver.cfg
修改:
HDD_CONF_FILENAME = /usr/local/mfs/etc/mfs/mfshdd.cfg
#聲明磁盤文件定義位置
MASTER_HOST = 192.168.10.100
MASTER_PORT = 9420
mkdir /mnt/sdb1
cp -a mfshdd.cfg.sample mfshdd.cfg #配置磁盤供給文件
vim /usr/local/mfs/etc/mfs/mfshdd.cfg
添加:
/mnt/sdb1 #最後位置添加,記得添加硬盤
fdisk /dev/sdb
partprobe #刷新
mkfs.ext4 /dev/sdb1
mount /dev/sdb1 /mnt/sdb1/
chown -R mfs.mfs /mnt/sdb1/
mfschunkserver start
ps -ef | grep mfs
MFS-chunk2服務器
設置與1同樣
MFS-fuse客戶機
useradd mfs -s /sbin/nologin
tar xf moosefs-3.0.84-1.tar.gz
./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --disable-mfsmaster --disable-mfschunkserver && make && make install
ln -s /usr/local/mfs/bin/* /usr/local/bin
ln -s /usr/local/mfs/sbin/* /usr/local/sbin/
mkdir /mnt/mfs
mfsmount /mnt/mfs/ -H 192.168.10.100 #掛載MFS共享磁盤
cd /mnt/mfs
echo 1231123 > index.html
chown -R mfs.mfs index.html
mfsfileinfo index.html #具體查看文件備份個數
mfsgetgoal index.html #查看文件備份個數
mfsgettrashtime index.html #查看文件保持時間
mfssettrashtime 60000 index.html #設置保存時間,要麼0,要麼大於6000秒
測試:
誤刪除處理,垃圾回收站機制
rm -rf index.html
mfssettrashtime 64800 /mnt/mfs/test #設置保存時間,要麼0,要麼大於6000秒
mkdir /back #建立第三方掛載點
chown mfs.mfs /back
mfsmount -m /back -H 10.10.10.11 #-m指定元數據
cd /back
find . -name *txt*
mv 002/00000002\|1.txt /back/trash/undel/
umount /back
查看恢復文件
快照功能 #至關於指針,不會佔用多餘的數據塊
mkdir bb
chown mfs.mfs bb/
mfsmakesnapshot 1.txt bb/ #建立快照
cd bb/
ll
冗餘goal設置 #goal是備份文件次數
mfssetgoal 3 /mnt/mfs/test1 #設置test1文件備份次數
mfsgetgoal /mnt/mfs/test1 #查看test1文件的goal值
mfsfileinfo /mnt/mfs/test1 #查看test1文件的具體goal值
還原 master
複製log服務器的日誌到master下:
scp * root@192.168.10.100:/usr/local/mfs/var/mfs/
mfsmaster start #啓動報錯
mfsmaster -a #-a自動修復,3.0之前是-u
注意:
#恢復數據只要change.*.mfs的最後一個和metadata.mfs.back兩個文件
#恢復須要中止mfsmaster程序後,執行mfsmetarestore -m和mfsmaster -ai修復
#備份時最好中止mfsmaster
NMS:網絡管理系統
收集數據
snmp簡單網絡管理協議
V1:功能簡單
V2:身份認證
V3:加密
OID:身份認證標識,一串代碼,確認索要收集的數據
mibs:管理信息庫,/usr/share/snmp/mibs能夠查看文件內OID
展現數據
cacti 展現數據:
繪圖工具:RRDTOOL
數據收集工具:SNMP
框架:LAMP
圖形展現:rrdtool
展現框架:cacti
流量與性能監測爲主:顯示之前的信息,不報警
http://www.cacti.net/
準備環境:
主服務器:導入cacti.iso ,yum -y install httpd mysql mysql-server mysql-devel libxml2-devel mysql-connector-odbc perl-DBD-MySQL unixODBC php php-mysql php-pdo
yum -y install gcc gcc-c++
被監控機:導入cacti.iso ,yum -y install net-snmp net-snmp-utils lm_sensors
主服務器
yum -y install net-snmp net-snmp-utils net-snmp-libs lm_sensors #若是須要監控本身,安裝
service mysqld start #設置開機自啓
mysqladmin -uroot password 123
service httpd start #設置開機自啓
tar xf rrdtool-1.4.5.tar.gz #安裝圖形展現
./configure --prefix=/usr/local #會報錯
tar -xf cgilib-0.5.tar.gz #接口處理函數
cd cgilib-0.5
make
cp libcgi.a /usr/local/lib/
cp cgi.h /usr/include/ #標準圖函數
yum -y install libart_lgpl-devel
yum -y install pango-devel* cairo-devel*
cd rrdtool-1.4.5
./configure --prefix=/usr/local
make && make install
tar xf cacti-0.8.7g.tar.gz #安裝展現框架
mv cacti-0.8.7g /var/www/html/cacti
cd /var/www/html/cacti
patch -p1 -N < ~/cacti/data_source_deactivate.patch #升級補丁
patch -p1 -N < ~/cacti/graph_list_view.patch
patch -p1 -N < ~/cacti/html_output.patch
patch -p1 -N < ~/cacti/ldap_group_authenication.patch
patch -p1 -N < ~/cacti/script_server_command_line_parse.patch
patch -p1 -N < ~/cacti/ping.patch
patch -p1 -N < ~/cacti/poller_interval.patch
useradd runct #添加檢測數據的用戶帳戶,更改權限,保證讀寫數據正常
chown -R root.root ./
chown -R runct.runct rra/ log/
mysql -uroot -p
設置:
create database cactidb default character set utf8;
grant all on cactidb.* to 'cactiuser'@'localhost' identified by '123';
mysql -u cactiuser -p cactidb < cacti.sql #導入數據庫文件
vim include/config.php
修改:
$database_type = "mysql";
$database_default = "cactidb";
$database_hostname = "localhost";
$database_username = "cactiuser";
$database_password = "123";
$database_port = "3306";
vim /etc/httpd/conf/httpd.conf
修改:
DocumentRoot "/var/www/html/cacti"
<Directory "/var/www/html/cacti">
options None
AllowOverride None
Order allow,deny
Allow from all
</Directory>
DirectoryIndex index.php index.html
service httpd restart
打開瀏覽器操做http://192.168.216.16/install
snmpwalk -v 2c -c public 192.168.10.101 system #測試數據獲取鏈接
php /var/www/html/cacti/poller.php #啓動php解析,使網頁圖片顯示
vim /etc/crontab
添加:
*/5 * * * * root /usr/bin/php /var/www/html/cacti/poller.php &>/dev/null
service crond start
chkconfig crond on
tar xf cacti-plugin-0.8.7g-PA-v2.8.tar.gz #添加插件管理器Plugin Management
cd cacti-plugin-arch/
mysql -u cactiuser -p cactidb < pa.sql
cd /var/www/html/cacti/
patch -p1 -N < ~/cacti-plugin/cacti-plugin-arch/cacti-plugin-0.8.7g-PA-v2.8.diff
cd plugins
tar xf ~/cacti-plugin/monitor-0.8.2.tar.gz #添加monitor插件
mysql -u cactiuser -p cactidb < monitor/monitor.sql
刷新瀏覽器,看看是否處理,從新添加插件
chown -R apache.apache plugins #web訪問,設置apache權限
被監控機
vim /etc/snmp/snmpd.conf
修改:
com2sec notConfigUser default public #修改共同體
access notConfigGroup "" any noauth exact all none none #修改all
view all included .1 80 #取消註釋
service snmpd start
chkconfig snmpd on
其它配置
配置識別插件
Utilities -- User Management -- admin -- Plugin Management -- save
Configuration -- Plugin Management -- Actions 添加插件 (thold需單獨點擊)
未出現圖標,則:
Utilities -- User Management -- admin -- View Thresholds 和 View Monitoring 打鉤
9、配置Monitor
Configration -- setting -- misc -- 將最後一行改成Tiles -- save
10、配置Thold
Configration -- setting -- Thresholds -- Dead hosts Notifications 後 添加 告警郵箱
From Email Address 後添加 指定發件人地址 -- 選中 send alerts as text 表示純文本發送郵件
11、設置SMTP,DNS等
Configration -- setting -- Mail/DNS -- 測試用的收信地址、SMTP、發送人郵件地址、發送人名稱(Cacti_System)、120
12、添加檢測項目
Templates -- Threshold Templates -- ucd/net-CPU Usage-User -- High Threshold 設置爲85
告警閾值默認計量單位:
cpu 使用率 爲 百分比(不包含該值)
網卡流量 Byte/s
硬盤空間 KB
內存佔用 KB
也能夠設置多個告警項,同時可生效 如 內存低於50MB而且下載流量超過80MB/s
十3、查看告警
Management -- Thresholds -- thold
nagios
繪圖工具:PHP GD
數據收集工具:腳本+插件
框架:靜態頁面 + JS + perl
服務與性能監測爲主:當前狀態監測,會報警,不顯示之前狀態http://www.nagios.org/
報警等級: OK WARNING critical嚴重警告 unknown pending正在鏈接
監控對象:
主機,主機組:windows必需要設置主機組
服務/資源,服務組:CPU,內存
聯繫人,聯繫人組:報警,發郵件
時段:指定時間內監控,報警
命令:經過定義不一樣命,令定義不一樣服務
nagios core logic:核心進程
plugin:插件管理器
check_***:nagios默認的腳本命名方式
check_xyz:主動發起掃描,部署對應的腳本或命令,收集數據
check_by_ssh:服務器發起請求,客戶機主動發起掃描,收集數據
check_nrpe:用在類Unix之上,服務器發起請求,客戶機主動發起掃描,收集數據
snmp:沒法收集的數據經過snmp收集
NSCA:主動提交數據的,只能當輔助收集數據使用
針對不一樣操做系統,nagios收集數據方式
依賴拓撲圖:把多臺監控機定義成依賴關係,NMS監控一個設備收集報警信息
flaping:定義報警閥值,默認三次
準備環境:
主監控服務器:導入nagios.iso,yum -y install httpd gcc* glibc glibc-common *gd* php php-mysql openssl openssl-devel
linux客戶機:導入nagios.iso,yum -y install openssl openssl-devel gcc*
windows客戶機:看系統安裝NSClient++-0.3.8-x64.msi
主監控服務器
useradd nagios
groupadd nagcmd #必須建立
usermod -a -G nagcmd nagios #添加組成員
usermod -a -G nagcmd apache
tar zxf nagios-3.1.2.tar.gz
./configure --with-command-group=nagcmd --enable-event-broker
make all
make install
make install-init
make install-config
make install-commandmode
make install-webconf
htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin #必須是nagiosadmin
service httpd restart
tar zxf nagios-plugins-1.4.15.tar.gz #安裝插件管理器
cd nagios-plugins-1.4.15
./configure --with-nagios-user=nagios --with-nagios-group=nagios --with-mysql --enable-perl-modules
make
make install
chkconfig --add nagios
chkconfig nagios on
/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg #檢查配置文件
service nagios start
瀏覽器登入:http://your_nagios_IP/nagios
tar xf nagios-nrpe_2.8.1.tar.gz #須要openssl
./configure --enable-ssl --with-ssl-lib=/usr/lib64/
make all
make install-plugin
vim /usr/local/nagios/etc/objects/linux.cfg #建立linux監控配置文件
添加:
define host{
use linux-server
host_name linux/IP
alias linux
address 192.168.10.101(客戶端IP既被監控的IP)
}
define service{
use generic-service
host_name linux
service_description check-load
check_command check_nrpe!check_load
}
define service{
use generic-service
host_name linux
service_description check-users
check_command check_nrpe!check_users
}
define service{
use generic-service
host_name linux
service_description otal_procs
check_command check_nrpe!check_total_procs
}
vim /usr/local/nagios/etc/objects/commands.cfg
添加:
define command{
command_name check_nrpe
command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$
}
vim nagios.cfg
添加:
cfg_file=/usr/local/nagios/etc/objects/linux.cfg
/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
service nagios restart
linux 端監控
useradd nagios
tar zxf nagios-plugins-1.4.15.tar.gz
#爲了安裝 nrpe,先安裝 nagios-plugins-1.4.15.tar.gz 插件
cd nagios-plugins-1.4.15
./configure --with-nagios-user=nagios --with-nagios-group=nagios
make all
make install
tar -zxvf nrpe-2.8.1.tar.gz
./configure --enable-ssl --with-ssl-lib=/usr/lib64/
make all
make install-plugin
make install-daemon
make install-daemon-config
vim /usr/local/nagios/etc/nrpe.cfg
修改:
allowed_hosts=192.168.10.100,127.0.0.1 #添加服務器IP
/usr/local/nagios/bin/nrpe -c /usr/local/nagios/etc/nrpe.cfg -d #檢測是否有誤而且運行
windos 端監控
被監控端安裝 NSClient++-0.3.8-Win32.msi
在監控服務器上修改:
vim /usr/local/nagios/etc/agios.cfg
取消註釋:
cfg_file=/usr/local/nagios/etc/objects/windows.cfg
vim /usr/local/nagios/etc/objects/windows.cfg
修改IP:
address 192.168.10.1 #被監控IP
原理
zabbix 是一個基於WEB界面的提供分佈式系統監視以及網絡監視功能的企業級的開源解決方案 ( 基於 GPL V2 ),必須以源碼包形式售賣
Zabbix:可用經過圖像展現須要保留的任何數據,以及經過觸發器設置對應服務、資源的可控性
zabbix由 2 部分構成,zabbix server與可選組件zabbix agent
收集數據方式:C/S、SNMP
繪製圖像工具:PHP-GD
展現平臺:LAMP
五個主要程序
zabbix 安裝完成後會產生 5 個程序:zabbix_agentd,zabbix_get、zabbix_proxy,zabbix_sender,zabbix_server,zabbix_java_gateway是可選,這個須要另外安裝
zabbix_agentd:客戶端守護進程,此進程收集客戶端數據,例如 cpu負載、內存、硬盤使用狀況等
zabbix_get:zabbix 工具,單獨使用的命令,一般用於排錯
zabbix_sender:zabbix工具,用於發送數據給 server 或者 proxy ,在腳本完成以後使用 sender 主動將數據提交
zabbix_server:zabbix 服務端守護進程,全部的數據都是被提交或主動提交到 zabbix_server 端
zabbix_proxy:zabbix代理守護進程。功能相似server,惟一不一樣的是它只是一箇中轉站,它須要把收集到的數據提交/被提交到server裏
zabbix_java_gateway:zabbix2.0以後引入的一個功能。顧名思義:Java網關,相似agentd,可是隻用於Java方面。須要特別注意的是,它只能主動去獲取數據,而不能被動獲取數據。它的數據最終會給到server或者proxy
安裝準備:
主服務器:
客戶機1:
客戶機2:
......
windows客戶機
主服務器(rh7)
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
wget http://mirrors.163.com/.help/CentOS7-Base-163.repo #或導入CentOS7-Base-163.repo
yum clean all
yum makecache
yum -y install mariadb mariadb-server httpd php php-mysql
systemctl start httpd
systemctl enable httpd
systemctl enable mariadb
systemctl start mariadb
mysql_secure_installation #初始化數據庫,並設置密碼
rpm -ivh http://repo.zabbix.com/zabbix/3.2/rhel/7/x86_64/zabbix-release-3.2-1.el7.noarch.rpm
#或導入zabbix-release-3.2-1.el7.noarch.rpm
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX #yum認證
yum -y install zabbix-server-mysql zabbix-web-mysql zabbix-agent #或導入已有安裝包
mysql -u root -p
設置:
CREATE DATABASE zabbix DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;
grant all privileges on zabbix.* to zabbix@localhost identified by 'zabbix';
cd /usr/share/doc/zabbix-server-mysql-3.2.11/
zcat create.sql.gz | mysql -uroot -p zabbix #解壓並導入數據庫
vim /etc/zabbix/zabbix_server.conf
修改:
DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=zabbix
systemctl start zabbix-server
systemctl enable zabbix-server
vim /etc/httpd/conf.d/zabbix.conf #能夠修改zabbix網頁配置文件,最好不更改
修改:
php_value max_execution_time 300
php_value memory_limit 128M
php_value post_max_size 16M
php_value upload_max_filesize 2M
php_value max_input_time 300
php_value always_populate_raw_post_data -1
php_value date.timezone Asia/Shanghai
yum -y install ntpdate #配置時間同步器,參考以前的
ntpdate cn.pool.ntp.org #同步網絡時間
systemctl restart httpd
瀏覽器:http://192.168.231.100/zabbix #用戶名Admin,密碼數據庫密碼
客戶機1
導入zabbix-agent-3.2.6-1.el6.x86_64.rpm
yum -y install zabbix-agent-3.2.6-1.el6.x86_64.rpm
vim /etc/zabbix/zabbix_agentd.conf
修改:
Server= 192.168.231.100
ServerActive= 192.168.231.100
Hostname=192.168.231.10
service zabbix-agent start
chkconfig zabbix-agent on
添加主機:配置-主機-建立主機-主機名稱--可見名稱--添加或建立組--IP地址
模板-選擇- Template ICMP Ping- Template OS Linux-選擇-添加-添加
客戶機2
與客戶機配置同樣
windows客戶機
解壓zabbix_agents_3.2.0.win (1).zip
移動到C盤更名爲zabbix
修改conf下文件,與linux設置同樣
打開cmd命令提示符
設置:
c:\ zabbix\bin\win64\zabbix_agentd.exe -c c:\ zabbix\conf\zabbix_agentd.win.conf -i
#將進程添加到
c:\ zabbix\bin\win64\zabbix_agentd.exe -c c:\ zabbix\conf\zabbix_agentd.win.conf -s
#開啓服務
web監控網站上添加windows規則
更改成中文
點擊右上角人頭-language-Chinese-uptake
解決亂碼問題
Win+R > fonts > 拷貝微軟雅黑字體更名爲 msyh.ttf > /usr/share/zabbix/fonts
chmod 755 msyh.ttf
vim /usr/share/zabbix/include/defines.inc.php
修改:
define('ZBX_GRAPH_FONT_NAME', 'msyh');
設置報警聲音
點擊右上角人頭-正在發送信息-前端信息中-播放聲音-勾選全部
配置 web 場景
配置-主機-應用集-建立應用集-web場景-建立web場景-名稱-應用集-客戶端-步驟-名稱-URL-要求的狀態碼
觸發器-建立觸發器-名稱-嚴重性-表達式添加-監控項-選添加的場景(數字類型)-功能(不等於)-N(200)-表達式(and 012)-可寫描述
配置自動發現規則
準備多臺已經按照agent的客戶機,修改過配置文件,以便自動查找到
配置-自動發現-建立發現規則-名稱-IP範圍-延時(5)-檢查(ICMP ping)-啓用關閉-添加
配置-動做-事件源(自動發現)-建立動做-名稱-觸發條件(主機IP)(主機在線>=5)-計算方式(和)-操做(刪除內容)-新的(主機)(主機組)(與模板關聯ping linux)(啓用主機)-添加-啓用自動發現規則
配置監控 Nginx 併發量腳本(自定義腳本)
安裝nginx,配置status模塊
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module
vi /usr/local/nginx/conf/nginx.conf
location /abc {
stub_status on;
}
導入腳本nginx-status.sh
在客戶端添加自定義腳本規則,放入/etc/zabbix/zabbix_agentd.d/
vim /etc/zabbix/zabbix_agentd.conf
修改:
UnsafeUserParameters=1
UserParameter=nginx.status[*],/etc/zabbix/zabbix_agentd.d/nginx-status.sh $1
service zabbix-agent restart
chkconfig zabbix-agent on
在服務器端安裝zabbix-get
zabbix_get -s 192.168.231.10 -k 'nginx.status[ping]' #測試客戶端
瀏覽器:配置-模板-導入-選擇文件
配置-主機-建立主機-名稱-組-IP地址-模板-選擇(導入的那個,linux,ping)-添加-添加
配置聚合圖形
監測中-聚合圖形-名稱-添加-選擇(設置的名稱)-編輯聚合圖形
連接釘釘報警
vim /etc/zabbix/zabbix_server.conf
查看:
AlertScriptsPath=/usr/lib/zabbix/alertscripts #查看腳本放入位置
導入腳本token.sh到/usr/lib/zabbix/alertscripts
複製釘釘機器人密碼,更改腳本
chmod +x token.sh
瀏覽器:管理-報警媒介類型-建立媒介類型-名稱-類型(腳本)-腳本名稱-(導入的腳本)-腳本參數-{ALERT.SENDTO}-添加-{ALERT.SUBJECT}-添加-{ALERT.MESSAGE}-添加
配置-動做-事件源(觸發器)-建立動做-名稱-新的觸發條件(>=,觸發器示警度,警告)-添加-計算方式(和)-操做-默認接收人(故障{TRIGGER.STATUS},服務器:{HOSTNAME1}發生: {TRIGGER.NAME}故障!)-默認信息(
告警主機:{HOSTNAME1},告警時間:{EVENT.DATE} {EVENT.TIME}
告警等級:{TRIGGER.SEVERITY}
告警信息: {TRIGGER.NAME}
告警項目:{TRIGGER.KEY1}
問題詳情:{ITEM.NAME}:{ITEM.VALUE}
當前狀態:{TRIGGER.STATUS}:{ITEM.VALUE1}
事件 ID:{EVENT.ID}
)-操做-新的-步驟持續事件(60)-操做類型(發送信息)-發送到用戶羣組-發送到用戶-僅送到(釘釘)-添加-恢復操做-與以前同樣(
恢復{TRIGGER.STATUS}, 服務器:{HOSTNAME1}: {TRIGGER.NAME}已恢復!
告警主機:{HOSTNAME1}
告警時間:{EVENT.DATE} {EVENT.TIME}
告警等級:{TRIGGER.SEVERITY}
告警信息: {TRIGGER.NAME}
告警項目:{TRIGGER.KEY1}
問題詳情:{ITEM.NAME}:{ITEM.VALUE}
當前狀態:{TRIGGER.STATUS}:{ITEM.VALUE1}
事件 ID:{EVENT.ID}
)-添加-添加
管理-用戶-admin-報警媒介-類型-收件人(手機號)-取消(未分類,信息)-添加-更新
原理:
網卡支持:PXE協議,自帶網卡ROM,記錄DHCP客戶端,TFTP客戶端,PXE客戶端DHCP只能是服務器搭建的,不能用其餘網絡設備,由於須要記錄TFTP的IP
PEXlinux.0:引導文件目錄,系統鏡像中存在這個目錄,才能使用網絡批量安裝
pexlinux.cfg:linux安裝配置文件,是linux初始安裝界面
vmlinuz:虛擬內存壓縮的運行空間,至關於PE,在內存中運行
initrd.img:最基礎的文件系統,用於運行vmlinuz
準備環境
主服務器:有圖形化環境,yum -y install vsftpd dhcp tftp syslinux tftp-server
主服務器
cd /var/ftp/pub/
mkdir dvd
chown ftp.ftp dvd/
cp -a /mnt/dvd/* dvd/
vim /etc/dhcp/dhcpd.conf
添加:
subnet 192.168.10.0 netmask 255.255.255.0 {
range 192.168.10.50 192.168.10.60;
option routers 192.168.10.100;
next-server 192.168.10.100; #TFTP服務端地址
filename "pxelinux.0"; #iso鏡像引導目錄,名字固定
}
vim /etc/xinetd.d/tftp
修改:
server_args = -s /tftpboot #指定tftp目錄
disable = no
mkdir -p /tftpboot/pxelinux.cfg
cp /var/ftp/pub/dvd/isolinux/isolinux.cfg /tftpboot/pxelinux.cfg/default #系統安裝信息
cp /usr/share/syslinux/pxelinux.0 /tftpboot/
chmod 644 /tftpboot/pxelinux.cfg/default
cp /var/ftp/pub/dvd/isolinux/* /tftpboot/
service dhcpd restart
chkconfig dhcpd on
service xinetd restart #tftp被xinetd管理
chkconfig xinetd on
service vsftpd restart
chkconfig vsftpd on
vim /tftpboot/pxelinux.cfg/default
修改:
default linux
append initrd=initrd.img ks=ftp://192.168.10.100/pub/ks.cfg #指定vsftp位置
yum -y install system-config-kickstart #圖形化安裝信息文件包
進入圖形化操做
system-config-kickstart
修改:
基本配置:root密碼
安裝後從新引導
安裝方法:FTP安裝
FTP服務器:ftp://192.168.10.100
FTP目錄:pub/dvd
引導裝載:安裝新引導
MBR
分區信息:清除主引導記錄
刪除全部分區
初始化磁盤標籤
添加新佈局 #磁盤分區
防火牆:禁用
軟件包選擇:隨便選一個
安裝後腳本:/bin/bash
touch /root/1.txt
保存退出
vim anaconda-ks.cfg #複製軟件包到生成的ks.cfg中
cp ks.cfg /var/ftp/pub/
保證須要在同一個廣播域中
Cobbler
1、cobbler 簡介
Cobbler是一款自動化操做系統安裝的實現,與PXE安裝系統的區別就是能夠同時部署多個版本的系統,而PXE只能選擇一種系統
2、cobbler 的安裝
yum install -y epel-release #安裝yum源,須要聯網,更新太快
yum install -y cobbler cobbler-web pykickstart debmirror
systemctl restart httpd
systemctl restart cobblerd
netstat -an | grep 25151
vim /etc/cobbler/settings
修改:
server 服務器IP
next_server 服務器IP
cobbler get-loaders #將配置文件同步到應該所在的目錄下
systemctl enable rsyncd
vim /etc/debmirror.conf
註釋:
#@dists="sid";
#@arches="i386";
openssl passwd -1 -salt $(openssl rand -hex 4) #系統加密方案與cobbler一致
vim /etc/cobbler/settings
修改:
default_password_crypted 加密字符串
yum install cman fence-agents #安置柵設備軟件,隔離已安置的系統
yum -y install xinetd #centos7中默認沒安裝xinetd服務
vim /etc/xinetd.d/tftp
修改:
disabled改成no
systemctl restart cobblerd
cobbler sync #同步文件
cobbler check
yum install -y dhcp
vim /etc/dhcp/dhcpd.conf
添加:
option domain-name "chinasoft.com";
option domain-name-servers 114.114.114.114,8.8.8.8;
default-lease-time 43200;
max-lease-time 86400;
log-facility local7;
subnet 20.0.0.0 netmask 255.0.0.0 {
range 20.20.10.10 20.20.10.240;
option routers 20.20.20.20;
}
next-server 20.20.20.20;
filename="pxelinux.0";
systemctl restart dhcpd
systemctl enable tftp
systemctl enable dhcpd
systemctl start tftp
systemctl restart cobblerd
mount /dev/cdrom /media
cobbler import --name="centos6.5-x86_64" --path=/media/ #自動導入系統鏡像
#能夠經過訪問:http://IP/cobbler/ 看到文件列表,複製鏡像共享路徑
vim centos6.5-x86_64.cfg
修改:
usr --usrl="網頁鏡像路徑"
cobbler distro list #查看ks文件列表,默認有一個自帶的
cobbler profile remove --name ks文件名 #刪除ks文件
cp centos6.5-x86_64.cfg /var/lib/cobbler/kickstarts/
cd /var/lib/cobbler/kickstarts/
cobbler profile add --name=centos6.5-x86_64-basic --distro=centos6.5-x86_64 --
kickstart=/var/lib/cobbler/kickstarts/centos6.5-x86_64.cfg
#指定ks名稱,指定鏡像名稱,以前上傳的名稱,指定ks文件路徑
cobbler profile list
cobbler sync
cobbler profile remove --name=centos6.7-x86_64 #刪除ks文件
cobbler distro remove --name=centos6.7-x86_64 #刪除鏡像
注:不一樣的ks文件能夠指向相同的鏡像,修改ks文件內容,可用腳本添加裝機服務
防火牆:工做在主機邊緣處或網絡邊緣處對進出的數據報文根據規則處理的模塊或者機制, 從而保護網絡的安全
做用對象:IP地址,MAC地址,端口,協議類型,數據包中的數據
防火牆分類
功能分類
基礎類防火牆:根據數據包報文的結構特徵進行對應處理的模塊
IDS 防火牆:入侵檢測系統 提供過後分析(跳板機,堡壘機)
IPS 防火牆:入侵防護系統 攔截問題數據報文,防禦涉及範圍廣(防毒牆)
主動類防火牆:只防護一種應用程序
waf:web應用程序防火牆
daf:數據庫應用程序防火牆
ddos攻擊抵禦
結構分類
軟件:360、iptables
硬件:網禦 深信服 360網擎
工做模式分類
包過濾防火牆:mac port ip status
應用層防火牆:huostname url
性能指標:吞吐量,溫度
工做層級
netfilter是內核態模塊,位於Linux內核中的包過濾功能體系
iptables用戶態工具,位於/sbin/iptables,用來管理防火牆規則的工具
centos6:用戶態iptables,用戶態netfilter
centos7:用戶態firewalld,用戶態netfilter
規則
自定義規則:ACCEPT 、 REJECT 、 DROP 、SNAT
默認規則(缺省值、兜底):ACCEPT DROP
順序
規則順序:自上而下依次匹配,匹配即中止
書寫規則順序:有相關,小的放前。無相關,大的放前
表的順序:raw > mangle > nat > filter
鏈的順序
入站:PREROUTING > INPUT
出站: OUTPUT > POSTROUTING
轉發:PREROUTING > FORWORD > POSTROUTING
鏈:承載規則的地方
INPUT:處理入站數據包
OUTPUT:處理出站數據包
FORWORD:處理轉發數據包
POSTROUTING:在進行路由選擇後處理數據包 DNAT
PREROUTING:在進行路由選擇前處理數據包 SNAT
表:承載鏈
raw:路由跟蹤
mangle:標記、修改
nat:路由轉換
SNAT:利用單獨公網 IP 給內網用戶提供訪問公網的能力
DNAT:端口映射
filter:數據報文過濾
iptables [-t 表名] 選項 [鏈名] [條件] [-j 控制類型]
注:不指定表名時,默認指filter表
不指定鏈名時,默認指表內的全部鏈
除非設置鏈的默認策略,不然必須指定匹配條件
選項、鏈名、控制類型使用大寫字母,其他均爲小寫
若是系統被從新引導,這些規則就會自動被清除並重設。
sbin/service iptables save
保存在 /etc/sysconfig/iptables
控制類型
ACCEPT:容許經過
DROP:直接丟棄,不給出任何迴應
REJECT:拒絕經過,必要時會給出提示
LOG:記錄日誌信息,而後傳給下一條規則繼續匹配
SNAT:修改數據包源地址
DNAT:修改數據包目的地址
REDIRECT:重定向
-t 指定要使用的表
例:
iptables -A INPUT -p tcp --dport 80 -j DROP #最後添加規則,丟棄80端口數據包
iptables -I INPUT -p tcp --dport 443 -j ACCEPT #最前添加規則,放行443端口數據包
iptables -I INPUT 3 -p tcp --dport 44 -j ACCEPT #添加規則到第三行
iptables -L -n -v --line-numbers #查看防火牆規則
iptables -D INPUT 3 #刪除指定行規則
iptables -t filter -P INPUT ACCEPT #修改指定鏈默認規則,只能改成ACCEPT,DROP
通用匹配
可直接使用,不依賴於其餘條件或擴展
包括網絡協議、IP地址、網絡接口等條件
常見的通用匹配條件
協議匹配:-p 協議名
地址匹配:-s 源地址、-d 目的地址
接口匹配:-i 入站網卡、-o 出站網卡
例:
# iptables -A FORWARD -s 192.168.1.11 -j REJECT
# iptables -I INPUT -s 10.20.30.0/24 -j DROP
# iptables -I INPUT -p icmp -j DROP #禁止全部icmp
# iptables -A FORWARD -p ! icmp -j ACCEPT #除icmp其它均可以
# iptables -A INPUT -i eth1 -s 172.16.0.0/12 -j DROP
隱含匹配
要求以特定的協議匹配做爲前提
包括端口、TCP標記、ICMP類型等條件
經常使用的隱含匹配條件
端口匹配:
--sport 源端口、--dport 目的端口
ICMP類型匹配:--icmp-type ICMP類型
例:
# iptables -A FORWARD -s 192.168.4.0/24 -p udp --dport 53 -j ACCEPT
# iptables -A INPUT -p tcp --dport 20:21 -j ACCEPT
# iptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT #0回顯
# iptables -A INPUT -p icmp --icmp-type 3 -j ACCEPT #3目的主機無響應
#組成拒絕其它icmp,主機能夠ping其它主機
# iptables -A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
#組成拒絕其它icmp,主機能夠ping其它主機,能夠只配這一條
# iptables -A INPUT -p icmp -m icmp --icmp-type 11 -j ACCEPT #容許ping
顯式匹配
要求以"-m 擴展模塊"的形式明確指出類型
包括多端口、MAC地址、IP範圍、數據包狀態等條件
經常使用的顯式匹配條件
多端口匹配: -m multiport --sport 源端口列表
-m multiport --dport 目的端口列表
IP範圍匹配: -m iprange --src-range IP範圍
MAC地址匹配:-m mac –mac1-source MAC地址
狀態匹配:-m state --state 鏈接狀態
# iptables -A INPUT -p tcp -m multiport --dport 25,80,110,143 -j ACCEPT
# iptables -A FORWARD -p tcp -m iprange --src-range 192.168.4.21-192.168.4.28 -j ACCEPT
# iptables -A INPUT -m mac --mac-source 00:0c:29:c0:55:3f -j DROP
# iptables -I INPUT -p tcp -m multiport --dport 80-82,85 -j ACCEPT
# iptables -I INPUT -p tcp -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
#ESTABLISHED正在鏈接,RELATED相關鏈接
# iptables -I INPUT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
#放在規則第一條能夠加快訪問速度
SNAT策略的典型應用環境
局域網主機共享單個公網IP地址接入Internet
SNAT策略的原理
源地址轉換,Source Network Address Translation
修改數據包的源地址
前提條件
局域網各主機正確設置IP地址/子網掩碼
局域網各主機正確設置默認網關地址
Linux網關支持IP路由轉發
開啓sysctl路由轉發
實現方法:編寫SNAT轉換規則
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT --to-source 218.29.30.31
地址假裝
MASQUERADE —— 地址假裝
#適用於外網 IP地址 非固定的狀況(真是環境應該用)
#對於ADSL 撥號鏈接,接口一般爲 ppp0、ppp1
#將SNAT規則改成 MASQUERADE 便可
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE
DNAT策略的典型應用環境
在Internet中發佈位於企業局域網內的服務器
DNAT策略的原理
目標地址轉換,Destination Network Address Translation
修改數據包的目標地址
前提條件
局域網的Web服務器可以訪問Internet
網關的外網IP地址有正確的DNS解析記錄
開啓sysctl路由轉發
實現方法
編寫DNAT轉換規則
iptables -t nat -A PREROUTING -i eth0 -d 218.29.30.31 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.6
發佈時修改目標端口
在DNAT規則中以"IP:Port"的形式指定目標地址
iptables -t nat -A PREROUTING -i eth0 -d 218.29.30.31 -p tcp --dport 2346 -j DNAT --to-destination 192.168.1.6:22
yum -y install iptables-services
systemctl start iptables
systemctl enable iptables
SELinux是Linux的一個擴張強制訪問控制的安全模塊
SELinux=NSA(MAC)+Linux
NAS:美國國家安全局
MAC:強制訪問控制,可以保證每個進程都運行在安全的最小集合的狀態下—>最小權限集合
發展:
2.2à須要手動加載的一個外部模塊
2.4à直接寫到內核的一個模塊
2.6à成爲了一部分Linux發行版的內核的一部分
特性:
在SELinux中,訪問控制屬性叫作安全上下文。全部客體(文件、進程間通信通道、套接字、網絡主機等)和主體(進程)都有與其關聯的安全上下文,一個安全上下文由三部分組成:用戶、角色和類型標識符。經常用下面的格式指定或顯示安全上下文
四層防護控制
iptables:應用在內核
selinux:操做繁瑣
tcpwarpper:應用在用戶空間,浪費資源
acl:應用在用戶空間,浪費資源
控制類型
強制訪問控制:在rwx後,還要匹配規則庫
任意訪問控制:rwx 擁有就可以執行對應功能
用戶:角色:類型,
chcon [-R] [-t type] [-u user] [-r role] 文件
選項與參數:
-R :連同該目錄下的次目錄也同時修改;
-t :後面接安全性本文的類型字段!
-u :後面接身份識別,例如 system_u;
-r :後面接角色,例如 system_r;
例:chcon -R -t httpd_sys_content_t /data #修改類型
selinux(行爲控制工具,對內部應用)
注:由於seLinux是內核等級設置,須要重啓系統才能生效
配置文件位置:/etc/selinux/config
setenforce 0 #臨時關閉防禦,0是半關閉,1是開啓
SELINUX=enforcing #開啓防禦
SELINUX=disabled #關閉防禦
SELINUX=permissive #清空規則設置
getenforce #查看當前selinux狀態
ll -Z #查看當前用戶,角色,類型,類型一致才能訪問
restorecon #還原成原有的SELinux type
格式:restorecon [-Rv] 檔案或目錄
選項與參數:
-R :連同次目錄一塊兒修改;
-v :將過程顯示到屏幕上
Managing Boole(管理SElinux布爾值)
SEliux布爾值就至關於一個開關,精確控制SElinux對某個服務的某個選項的保護
getsebool -a #命令列出系統中可用的SELinux布爾值
setsebool –p samba_enable_home_dirs=1
#開啓家目錄共享,setsebool命令用來改變SELinux布爾值
#若是對服務,查看目錄類型能夠查看配置文件
虛擬化,是指經過虛擬化技術將一臺計算機虛擬爲多臺邏輯計算機。在一臺計算機上同時運行多個邏輯計算機,每一個邏輯計算機可運行不一樣的操做系統,而且應用程序均可以在相互獨立的空間內運行而互不影響,從而顯著提升計算機的工做效率,解決服務器的資源浪費
分類
全虛擬化技術
徹底虛擬化技術又叫硬件輔助虛擬化技術,最初所使用的虛擬化技術就是全虛擬化(Full Virtualization)技術,它在虛擬機(VM)和硬件之間加了一個軟件層--Hypervisor,或者2VMM)
一、hypervisor 直接運行在物理硬件之上 - KVM 硬件須要支持虛擬化,效率達到98%
二、hypervisor 運行在另外一個操做系統中 - QEMU 和 WINE,不須要硬件支持虛擬化,由內核提供的虛擬化機制
半虛擬化技術
也叫作準虛擬化技術。它就是在全虛擬化的基礎上,把客戶操做系統進行了修改,增長了一個專門的API,這個API能夠將客戶操做系統發出的指令進行最優化,即不須要Hypervisor耗費必定的資源進行翻譯操做,所以Hypervisor的工做負擔變得很是的小,所以總體的性能也有很大的提升。
寄居架構
就是在操做系統之上安裝和運行虛擬化程序,依賴於主機操做系統對設備的支持和物理資源的管理;
優勢:簡單,便於實現
缺點:安裝和運行應用程序依賴於主機操做系統對設備的支持
舉例:GSX Server, VMware Server, Workstation
裸金屬架構
就是直接在硬件上面安裝虛擬化軟件,再在其上安裝操做系統和應用,依賴虛擬層內核和服務器控制檯進行管理
優勢:虛擬機不依賴於操做系統,能夠支持多種操做系統,多種應用,更加靈 活
缺點:虛擬層內核開發難度較大
舉例:VMWare ESX Server
安裝環境
服務器:安裝VMware-VMvisor-Installer-6.0.0-2494585.x86_64
客戶機:安裝VMware-viclient-all-6.0.0
服務器
配置網卡IP,6版本必須設置網關
客戶機
破解輸入密鑰:清單--配置--已得到的許可--添加
添加虛擬機:清單--地址池--添加虛擬機
添加鏡像方法1:清單--系統--光驅(讀取本地主機鏡像)
添加鏡像方法2:清單--地址池--配置--存儲(瀏覽數據存儲)--建立文件夾--上傳鏡像(鏡像存儲於虛擬機內)
資源分配(把系統分給不一樣的用戶管理):清單--地址池--新建資源分配--將系統拉入資源池--地址池--用戶--添加--主頁--角色--添加角色(賦給權限)--主頁--資源池--權限--添加權限
虛擬機通電自啓動:清單--配置--虛擬機啓動/關機--屬性(修改啓動延時和啓動類型)
添加網橋(交換機):清單--配置--網絡--添加網絡(下一步)--屬性--添加網卡(能夠用來作san網絡,分擔網絡壓力)
查看性能與生成報表:清單--性能--選擇查看類型--保存
直通設備:把硬件直接交給虛擬機使用
雲計算軟件
IaaS:基礎設施及服務(花對應的錢買的對應的容器,安裝好操做系統的雲主機)
PaaS:平臺及服務(購買到一個已經部署好運行環境的雲主機)
SaaS:軟件及服務(購買後能夠經過b/s方式訪問對應服務)
Docker來源
Docker 是 dotcloud 公司開源的一款產品 dotcloud 是 2010 年服務,新成立的一家公司,主要基於 Paas ( Platfrom as a Service ) 平臺爲開發者提供,2013 年 10 月 dotcloud 公司更名爲 Docker 股份有限公司
Docker定義
Linux Container 是一種內核虛擬化技術,能夠提供輕量級的虛擬化,以便隔離進程和資源
Docker 是 PaaS 提供商 dotCloud 開源的一個基於 LXC(Linux Container) 的高級容器引擎,源代碼託管在 Github 上, 基於 GO (GO天生支持對併發)語言並聽從 Apache2.0 協議開源,開發的一款管理引擎
Docker 與 傳統虛擬化的差別
vmm docker
內核級別的隔離 容器級別的隔離
浪費大量資源(虛擬系統) 基本不消耗資源(至關於進程消耗的資源)
獨立lib庫 共享內核的lib庫
耗時 快速
Docker 自身組件
容器:已經運行的虛擬機,已經運行的環境(鏡像在Docker中運行)
鏡像:封裝的運行環境
倉庫:存放鏡像的地方(網易蜂巢或官方https://hub.docker. com)
Docker運行環境
docker只能運行在linux中
最好按照在centos7中
全部軟件須要更新
Docker特性與運行方式
鏡像下載有層級關係
最大不超過128層
上層優先級大於下層(數據讀取會自上而下,哪一個先獲取,就是哪一個設置)
已有的分層只能讀不能修改
運行容器:至少擁有一個位於前臺的進程,不然會退出
第一種安裝方法:
添加 Docker 源,並安裝
cat >/etc/yum.repos.d/docker.repo <<-EOF
[dockerrepo]
name=Docker Repository
baseurl=https://yum.dockerproject.org/repo/main/centos/7 enabled=1 gpgcheck=1 gpgkey=https://yum.dockerproject.org/gpg EOF
yum install docker-engine
yum install docker
第二種安裝方法:
更新操做系統至最新內核(非必要): yum update
執行 Docker 安裝腳本: curl -sSL https://get.docker.com/ | sh
啓動 Docker 服務
systemctl start docker
systemctl enable docker
docker run hello-world #檢查安裝成功
docker ps #顯示正在運行的容器
docker ps -a #顯示全部容器,容器名,鏡像名
#後臺進程運行前臺方法,tailf、daemon off
docker run hello-world #下載鏡像
docker rm 容器名稱 #刪除容器,容器ID不須要寫全,3-4位便可
加速器安裝
阿里雲Docker官網:https://dev.aliyun.com/search.html #註冊帳號
cp /lib/systemd/system/docker.service /etc/systemd/system/docker.service #配置文件
chmod 777 /etc/systemd/system/docker.service
vim /etc/systemd/system/docker.service
添加:
ExecStart=/usr/bin/dockerd-current --registry- mirror=https://kfp63jaj.mirror.aliyuncs.com
#老版本docker與新版本有些不同
systemctl daemon-reload #從新加載進程,才能生效
systemctl restart docker
ps -ef | grep docker #查看進程,驗證是否生效
安裝wordpress博客
WordPress 運行環境須要以下軟件的支持:
PHP 5.6 或更新軟件
MySQL 5.6 或 更新版本
Apache 和 mod_rewrite 模塊
docker pull mariadb
docker pull wordpress
docker run --name db --env MYSQL_ROOT_PASSWORD=example -d mariadb
#name命名,env環境變量,d放入後臺運行
docker run --name MyWordPress --link db:mysql -p 8080:80 -d wordpress
#容器每次啓動會隨機分配一個IP地址,link綁定數據庫,wordpress依賴mariadb,mariadb先啓動,p是DNAT
安裝GitLab
#版本控制器,面向開發,代碼多個主線,在主線上開放支線,開發人員在支線上修改代碼,測試成功後與主線合併進行發佈
支持的軟件:
postgresql
redis 緩存服務
gitlab 服務
啓動 postgresql:
docker run --name gitlab-postgresql -d \
--env 'DB_NAME=gitlabhq_production' \
--env 'DB_USER=gitlab' --env 'DB_PASS=password' \
sameersbn/postgresql:9.4-12
啓動 Redis:
docker run --name gitlab-redis -d sameersbn/redis:latest
啓動 gitlab:
docker run --name gitlab -d \
--link gitlab-postgresql:postgresql --link gitlab-redis:redisio \
--publish 10022:22 --publish 10080:80 \
--env 'GITLAB_PORT=10080' --env 'GITLAB_SSH_PORT=10022' \
--env 'GITLAB_SECRETS_DB_KEY_BASE=long-and-random-alpha-numeric-string' \
sameersbn/gitlab:8.4.4 #系統默認用戶名:root 密碼:5iveL!fe
Docker 三個重要概念:倉庫 (Repository)、鏡像 (image) 和 容器 (Container)
docker run --name MyWordPress --link db:mysql -p 8080:80 -d wordpress
Docker 指令的基本用法:
docker + 命令關鍵字(COMMAND) + 一系列的參數
docker info #顯示守護進程的系統資源
#storage Driver存儲驅動版本,overlay2第二版分層文件系統,穩定,效率高,可修改
docker search imageID #Docker 倉庫的查詢,用戶名/鏡像名:版本,最好選官方的
docker pull imageID #Docker 倉庫的下載
docker images #Docker 鏡像的查詢
docker rmi imageID/鏡像名:版本 #Docker 鏡像的刪除,-f強制刪除
docker ps #正在運行容器的查詢,-a查詢全部容器
docker run #容器的建立啓動
docker start/stop 容器別名/ID #容器啓動中止
docker load -i 鏡像名 #導入鏡像
# Docker 指令除了單條使用外,還支持賦值、解析變量、嵌套使用
單一容器管理
#每一個容器被建立後,都會分配一個 CONTAINER ID 做爲容器的惟一標示,後續對容器的啓動、中止、修改、刪除等全部操做,都是經過 CONTAINER ID 來完成,偏向於數據庫概念中的主鍵
docker ps --no-trunc #查看完整版本的容器ID號
docker stop/start CONTAINERID #中止
docker run --restart=always #容器的自動啓動
docker ps -a -q #只查看容器ID
docker rm $(docker ps -a -q) #刪除全部容器,-f強制刪除
docker start/stop MywordPress #經過容器別名啓動/中止
docker inspect MywordPress #查看容器全部基本信息,網橋IP和docker IP
docker logs MywordPress #查看容器日誌
docker stats MywordPress #查看容器所佔用的系統資源
docker exec 容器名 容器內執行的命令 #容器執行命令
docker exec -it 容器名 /bin/bash #登入容器的bash
遠程ssh鏈接方法
docker exec -it 容器名 /bin/bash
安裝passwd服務,修改密碼
修改ssh遠程鏈接配置,開啓密碼認證
開啓容器,使用DNAT轉換 任意端口:22
鏈接:ssh 服務器IP 任意端口
多容器管理
Docker 提倡理念是 "一個容器一個進程",假設一個服務須要由多個進程組成,就須要多個容器組成一個系統,相互分工和配合對外提供完整服務
Docker compose:容器編排工具,容許用戶在一個模板(YAML格式)中定義一組相關聯的容器,會根據 --link 等參數,對啓動的優先級進行排序
Docker compose 的安裝:
curl -L https://github.com/docker/compose/releases/download/1.14.0/docker-compose-`uname -s`-uname -m` > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
docker-compose --version
mv wordpress.yml wordpress.yaml
cd /root/wordpress && docker-compose up -d #建立啓動項目,到docker-compose.yaml所在目錄下執行
cd /root/wordpress && docker-compose start #啓動項目
cd /root/wordpress && docker-compose stop #關閉項目
鏡像管理
容器建立時須要指定鏡像,每一個鏡像都由惟一的標示 ImageID,和容器的 ContainerID同樣,默認128位,可使用前 16 爲縮略形式,也可使用鏡像名與版本號兩部分組合惟一標示,若是省略版本號,默認使用最新版本標籤(latesr)
鏡像的分層:Docker 的鏡像經過聯合文件系統(union filesy stem)將各層文件系統疊加在一塊兒
docker history 鏡像名 #查詢鏡像的分層
docker history --no-trunc history #顯示完整的歷史命令
docker save 鏡像 ID > /home/xxx.tar #鏡像的導出
docker load < /home/xx.tar #鏡像的導入,鏡像名和標籤會消失
#恢復鏡像名,從新下載鏡像,相同層級不會下載
docker save -o mysql5.7.tar imagename:tag #鏡像的導出,老版本可用,新版本不必定
docker load -i centos6-tools.tar #導入鏡像,老版本可用,新版本不必定
Dockfile是一種被 Docker 程序解釋的腳本,Dockerfile 由一條一條的指令組成,每條指令對應 Linux 下面的一條命令。Docker 程序將這些Dockerfile 指令翻譯真正的 Linux 命令。Dockerfile 有本身書寫格式和支持的命令,Docker 程序解決這些命令間的依賴關係,相似於 Makefile 。Docker 程序將讀取 Dockerfile ,根據指令生成定製的 Image
docker commit 容器ID 倉庫/鏡像名:版本 #容器轉爲鏡像,鏡像名自定義,須要小寫
#commit封裝容器進程會關閉
docker build -t 鏡像名:版本 dockerfile文件路徑 #用於啓動有dockerfile文件的鏡像
FROM(指定基礎image)
構建指令,必須指定且須要在Dockerfile其它指令的前面,後續指令都依賴於該指令指定的image,FROM指定的基礎image能夠是遠程官方倉庫,也能夠是本地倉庫
example:
FROM centos:7.2
FROM centos
MAINTAINER(用來指定鏡像建立者信息)
構建命令,用於將image的製造者相關的信息寫入到image中,當咱們隊該image執行docker inspect命令是,輸出中有相應字段記錄該信息
example
MAINTAINER wangyang
wangyang@itxdl.cn
RUN(安裝軟件用)
構建命令,RUN能夠容許任何被基礎image支持的命令,如基礎image選擇了centos,那麼軟件管理部分只能使用centos的包管理命令
example
RUN cd /tmp && curl -L 'http://archive.apache.org/dist/tomcat-7/v7.0.8/bin/apache-tomact-7.0.8.tar.gz' | tar xz
RUN ["/bin/bash","-c","echo hello"]
CMD(設置container啓動時執行的操做)
設置命令,用於containe啓動時指定的操做,該操做能夠是執行自定義腳本,也能夠是系統命令,該指令只能在文件中存在一次,若是有多個,則執行最後一條
example
CMD echo "hello,world"
ENTRYPOINT(設置container啓動時執行的操做)
設置指令,指定容器啓動時執行的命令,能夠屢次設置,可是隻有最後一個有效
example
ENTRYPOINT ls -l
#另外一種用法和CMD指令配合使用來指定ENTRYPOINT的默認參數,這時候CMD指令不是一個完整的可執行指令,僅僅只是參數部分,ENTRYPOINT指令只能使用JSON方式指定執行命令,而不能指定參數
example
FROM ubuntu
CMD ["-l"]
ENTRYPOINT ["/usr/bin/ls"]
USER(設置容器的用戶)
設置指令,設置啓動指令的用戶,默認用戶是root
example
USER daemon = ENTRYPOINT ["memcached","-u","daemon"]
EXPOSE(指定容器須要映射到宿主機的端口,只是聲明端口)
example
docker rum -p host_port1:port -p host_prot2:port2 image
ENV(用於設置環境變量)
example
ENV JAVA_home /path/to/java/dirent
ADD(從src複製文件到容器的dest路徑,並解壓)
example
ADD <src> <dest>
<src>是相對唄構建的源目錄的相對路徑,能夠是文件,目錄,遠程URl
<dest>容器的絕對路徑
COPY(從src複製文件到容器的dest路徑,只能文件)
VOLUME(指定掛載點,作持久化目錄)
設置指令,使容器中的一個目錄具備持久化存儲數據的功能,該目錄能夠被容器自己使用,也能夠共享給其餘容器使用。咱們知道容器使用的是AUFS,這種文件系統不能持久化數據,當容器關閉後,全部的更改都會丟失。當容器中的應用有持久化數據的需求時能夠在Dockerfile中使用該指令
WORKDIR(切換目錄)
example
WORKDIR /p1 WORKDIR /p2 RUN vim a.txt\
ONBUILD(在子鏡像中執行)
ONBUILD 指定的命令在構建鏡像時並不執行,而是在它的子鏡像中執行
example
ONBUILD ADD . /app/src
ONBUILD RUN /usr/local/bin/python-build --dir /app/src
倉庫是 Docker 程序中的三大要素之一,主要的功能存放 Image (環境)。
官方地址:https://index.docker.io/docker
私有倉庫構建 – 官方
倉庫端:
docker run -d -v /opt/registry:/var/lib/registry -p 5000:5000 --restart=always registry
#下載鏡像倉庫,registry爲官方的鏡像倉庫名
vim /etc/docker/daemon.json #新建文件,指定倉庫位置
添加:
{
"insecure-registries": ["10.10.10.11:5000"] #縮進四空格,填倉庫服務器IP
}
重啓docker服務
客戶端:
vim /etc/docker/daemon.json #新建文件,指定倉庫位置
添加:
{
"insecure-registries": ["10.10.10.11:5000"] #縮進四空格,填倉庫服務器IP
}
重啓docker服務
curl -XGET http://10.10.10.11:5000/v2/_catalog #查看鏡像倉庫列表
docker load -i 導入的鏡像名 #導入鏡像
docker tag 鏡像名:版本號 新倉庫IP:端口/新鏡像名:版本號 #修改鏡像名和版本號
docker push 新倉庫IP:端口/新鏡像名:版本號 #上傳鏡像到倉庫
docker pull 新倉庫IP:端口/新鏡像名:版本號 #下載倉庫鏡像
Harbor - 企業級 Docker 私有倉庫搭建
企業級的鏡像倉庫,但須要注意 harbor 使用的是官方的 docker registry 服務去完成,至於 registry 是用本地存儲或者 s3 都是能夠的,harbor 的功能是在此之上提供用戶權限管理、鏡像複製等功能,提升使用的 registry 的效率
安裝底層需求
Python 應該是 2.7 或更高版本
Docker 引擎應爲 1.10 或更高版本
Docker Compose 須要爲 1.6.0 或更高版本
Harbor官方下載地址: https://github.com/vmware/harbor/releases
tar xf harbor-offline-installer-v1.2.0.tgz
安裝步驟:
vim /etc/docker/daemon.json
修改:
{
"insecure-registries": ["serverip"] #域名地址。若是是80,須要加上
}
vim harbor.cfg
修改:
hostname #目標的主機名或者徹底限定域名
ui_url_protocol #http 或 http
db_password #用於 db_auth 的 MySQL 數據庫的根密碼
max_job_workers #(默認值爲 3 )做業服務中的複製工做人員的最大數量
customize_crt #默認爲on當此屬性打開時, prepare 腳本將爲註冊表的令牌的生成 / 驗證創
ssl_cert #SSL 證書的路徑,僅當協議設置爲 https 時才應用
ssl_cert_key #SSL 密鑰的路徑,僅當協議設置爲 https 時才應用
secretkey_path #用於在複製策略中加密或解密遠程註冊表的密碼的密鑰路徑
mkdir -p /data/cert/
openssl genrsa -des3 -out server.key 2048
openssl req -new -key server.key -out server.csr
cp server.key server.key.org #備份證書
openssl rsa -in server.key.org -out server.key #去除密碼設置
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
./install.sh #到解壓目錄下運行腳本
windows測試:客戶機修改hosts文件,域名訪問,最好在谷歌訪問
鏈接:默認管理員用戶名 / 密碼爲 admin / Harbor12345
linux測試:
vim /etc/docker/daemon.json
修改:
{
"insecure-registries": ["serverip"] #域名地址。若是是80,須要加上
}
修改hosts文件
重啓docker服務
docker login serverip #登入到鏡像倉庫
導入鏡像
docker tag hello-world 域名或IP/library/centos6.7:v1.0 #從新打標籤,須要安裝格式
docker push 域名或IP/library/centos6.7:v1.0 #上傳鏡像到倉庫
docker pull 域名或IP/library/centos6.7:v1.0 #下載鏡像
容器訪問外部網絡
iptables -t nat -A POSTROUTING -s 172.17.0.0/16 -o docker0 -j MASQUERADE
外部網絡訪問容器
docker run -d -p 80:80 apache
會建立以下規則:
iptables -t nat -A PREROUTING -m addrtype --dst-type LOCAL -j DOCKER
iptables -t nat -A DOCKER ! -i docker0 -p tcp -m tcp --dport 80 -j DNAT --to-destination 172.17.0.2:80
網絡管理 – 進程
-b, --bridge="" 指定 Docker 使用的網橋設備,默認狀況下 Docker 會自動建立和使用 docker0 網橋設備,經過此參數可使用已經存在的設備
--bip 指定 Docker0 的 IP 和掩碼,使用標準的 CIDR 形式,如 10.10.10.10/24
--dns 配置容器的 DNS,在啓動 Docker 進程是添加,全部容器所有生效
網絡管理 – 容器
--dns 用於指定啓動的容器的 DNS
--net 用於指定容器的網絡通信方式,有如下四個值
bridge:Docker 默認方式,網橋模式
none:容器沒有網絡棧
container:使用其它容器的網絡棧,Docker容器會加入其它容器的 network namespace
host:表示容器使用 Host 的網絡,沒有本身獨立的網絡棧。容器能夠徹底訪問 Host 的網絡,不安全
基礎命令說明
docker network ls #查看當前可用的網絡類型
docker network create -d網絡類型 #建立網絡空間名稱
類型分爲:
overlay network
bridge network
獨立至不一樣的網絡名字命名空間進行隔離
docker network create -d bridge xdlcom #名稱隨便取
docker network create -d bridge xdlcn #名稱隨便取
docker network ls
docker run -d --network= xdlcom --name test1 hub.c.163.com/public/centos:6.7-tools
#以--network= xdlcom名稱的網絡模式啓動
docker run -d --network= xdlcn --name test2 hub.c.163.com/public/centos:6.7-tools
測試:進入容器相互訪問,ping不通,已隔離
使用linux橋接器進行通訊
cd /etc/sysconfig/network-scripts/
cp ifcfg-eth0 ifcfg-br0 #br0是網橋bocker0的縮寫
vi ifcfg-eth0
添加: #刪除原來全部內容,只保存一個UUID,至關於但網橋
DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
BRIDGE=br0
NM_CONTROLLED=yes
BOOTPROTO=static
vi ifcfg-br0
修改:
DEVICE=br0
TYPE=Bridge
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.216.131 #本機IP
NETMASK=255.255.255.0
#修改後重啓系統,不然可能會出現本地能通訊,外部不能通訊問題
yum install -y git #託管的工具
git clone https://github.com/jpetazzo/pipework #把遠程代碼同步到本地
cp pipework/pipework /usr/local/bin/pipwork #pipwork爲容器賦予真正能被外網訪問的地址
chmod a+x /usr/local/bin/
docker run -itd --net=none --name=ff -d 容器名 #網絡設爲none
docker inspect 容器名 #查看容IP信息
pipework br0 容器名 192.168.216.135/24 #須要分配的IP地址,臨時,須要寫開機自啓
注:若是不成功,多重啓容器和網卡,正常bug
Overlay 全覆蓋網絡(主要用於跨機器間的數據通信問題)
Consul 是一個支持多數據中心分佈式高可用的服務發現和配置共享的服務軟件,由 HashiCorp 公司用 Go 語言開發, 基於 Mozilla Public License 2.0 的協議進行開源. Consul 支持健康檢查,並容許 HTTP 和 DNS 協議調用 API 存儲鍵值對
hostnamectl set-hostname 主機名 #設置主機名,永久
構建集羣環境:
vim /etc/hosts
添加:
10.10.10.11 node1
10.10.10.12 node2
#主機之間可以使用主機名進行通信
搭建時間同步服務
node1:
導入或下載consul_1.1.0_linux_amd64.zip
unzip consul_1.1.0_linux_amd64.zip
mv consul /usr/local/bin/
chmod a+x /usr/local/bin/
mkdir /opt/consul
nohup consul agent -server -bootstrap -data-dir /opt/consul -bind=10.10.10.11 &
#綁定當前IP地址,-server 聲明主服務器,-data-dir /opt/consul持久化目錄
netstat -antp | grep 8500 #查看consul是否運行
vim /lib/systemd/system/docker.service
修改:
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock --cluster-store=consul://localhost:8500 --cluster-advertise=eth0:2375
#檢查eth0:2375端口是否存活
systemctl daemon-reload #修改啓動文件,須要從新引導
systemctl restart docker
node2:
unzip consul_1.1.0_linux_amd64.zip
mv consul /usr/local/bin/
chmod a+x /usr/local/bin/
mkdir /opt/consul
nohup consul agent -data-dir /opt/consul -bind=10.10.10.12 &
#綁定當前IP地址,-data-dir /opt/consul持久化目錄
vim /lib/systemd/system/docker.service
修改:
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock --cluster-store=consul://localhost:8500 --cluster-advertise=eth0:2375
#檢查eth0:2375端口是否存活
systemctl daemon-reload
systemctl restart docker
consul join node1 #加入node1節點
consul members #查看consul的節點
# consul支持高可用,能夠在設置一個主服務,相互競爭
node1:
docker network create -d overlay multihost #建立全覆蓋網絡,multihost隨便取名
docker network ls
docker run --name test --network=multihost -d hub.c.163.com/public/centos:6.7-tools
#以--network=multihost模式啓動容器
node2:
docker run --name test1 --network=multihost -d hub.c.163.com/public/centos:6.7-tools
#不能與主服務器容器同名
登陸至容器進行 Ping 測試
前提:在 Docker 中,一個從鏡像啓動的容器一旦刪除後會刪除對應在物理機上的數據信息
數據卷(data volume)
mount -t overlay overlay -olowerdir=./low,upperdir=./upper,workdir=./work ./merged
持久化實現命令
#測試,掛載對應三個目錄,達到持久化目錄的效果
docker run --name blog1 --volumes-from="blog" -d 鏡像名 #容器之間的共享數據
docker run --name mysql -v /mysql:/var/lib/mysql -d 鏡像名
#宿主和容器創建持久化目錄,/mysql:/var/lib/mysql先宿主機目錄,再容器目錄
docker rm -f -v 容器名 #刪除持久化目錄和容器
有的鏡像自帶持久化目錄,在Dockerfile中有添加volumes參數,生成的持久化目錄在/var/lib/docker/volumes/隨機字符串/_data
存儲核心分類
Docker 存儲驅動 (storage driver) 是 Docker 的核心組件,它是 Docker 實現分紅鏡像的基礎
device mapper (DM):性能和穩定性存在問題,不推薦生產環境使用
btrfs:社區實現了 btrfs driver,穩定性和性能存在問題
overlayfs:內核 3.18 overlayfs 進入主線,性能和穩定性優異,第一選擇
修改爲OverlayFS的默認文件系統
echo "overlay" > /etc/modules-load.d/overlay.conf
cat /proc/modules|grep overlay
reboot
vim /etc/systemd/system/docker.service
--storage-driver=overlay \
雲計算
美國國家標準與技術研究院(NIST)定義:雲計算是一種按使用量付費的模式,這種模式提供可用的、便捷的、按需的網絡訪問, 進入可配置的計算資源共享池(資源包括網絡,服務器,存儲,應用軟件,服務),這些資源可以被快速提供,只需投入不多的管理工做,或與服務供應商進行不多的交互
雲計算前身網格計算底層虛擬化 分佈式計算,傳統虛擬化做爲底層
如何抵禦ddos攻擊:
針對少許IP攻擊,封IP
少流量多IP攻擊,防火牆上設置超過鏈接數不能通訊
外部應用程序防火牆
引入公網流量清洗
雲計算的分類(架構)
公有云:公網用戶,帶寬大aws
資源按需供給
多租戶,自服務
私有云:企業本身vmware
虛擬化自動擴展
簡化資源的管理和監控
混合雲:openstack
計算要求高的,放入公司內部執行
用戶請求放入共網
雲計算的分類(服務類型)
IAAS:基礎設施即服務
PAAS:平臺即服務
SAAS:軟件即服務
雲計算框架選擇
API:應用程序編程接口,接口的普遍性
使用何種開源協議進行編寫
平臺成熟度
API 對接 亞馬遜雲平臺
使用 Apache 協議進行開源
最火爆開源項目
一個框架
使用 Python 進行開發
混合雲
JUNO10版本的核心組件
Nova:用於建立虛擬機
Glance:提供鏡像和定義權限
Swift:不須要考慮文件系統解決方案,直接存儲數據mount掛載
Cinder:提供雲盤
Neutron:給虛擬機提供網絡層次劃分,虛擬路由,不須要硬件路由
Horizon:提供b/s操做界面
Keystone:定義因此操做和服務的權限,提供通訊方案
Heat:經過編寫yaml文件,批量建立虛擬機
Ceilometer:監控流量
Trove:提供連接數據庫的方案,默認集成
Sahara:能夠與hadoop平臺結合的第三方插件