一、Linux的啟動過程?
- 開機自檢:伺服器主機開機以後,将根據主機闆BIOS(Basic Input/Output System,基本輸入輸出系統)中的設定對CPU、記憶體、顯示卡、鍵盤等裝置進行初步檢測,檢測成功後根據預設的啟動順序移交系統控制權,大多數時候會移交給本機硬碟。
- MBR引導:當從本機硬碟中啟動系統時,首先根據硬碟第1個扇區中MBR(Master Boot Record,主引導記錄)的設定,将系統控制權傳遞給包含作業系統引導檔案的分區;或者直接根據MBR記錄中的引導資訊調用啟動菜單(如GRUB)。
- GRUB菜單:對于Linux系統來說,GRUB算是使用最為廣泛的多系統引導器程式了。系統控制權傳遞給GRUB以後,将會顯示啟動菜單提供給使用者選擇,并根據所選項(或采用預設值)加載Linux核心檔案,然後将系統控制權轉交給核心。
- 加載Linux核心:Linux核心是一個預先編譯好的特殊二進制檔案,介于各種硬體資源與系統程式之間,負責資源配置設定與排程。核心接過系統控制權以後,将完全掌控整個Linux作業系統的運作過程。在RHEL6系統中,預設的核心檔案位于"/boot/vmlinuz-2.6.32-431.e16.x86_64"。
- init程序初始化:為了完成進一步的系統引導過程,Linux核心首先将系統中的"/sbin/init"程式加載到記憶體中運作(運作中的程式稱為程序),init程序負責完成一系列的系統初始化過程,最後等待使用者進行登入。
二、linux系統監控指令,檢視cpu負載記憶體等情況
top指令是Linux下常用的性能分析工具,比如cpu、記憶體的使用,能夠實時顯示系統中各個程序的資源占用狀況,類似于Windows的任務管理器。
top顯示系統目前的程序和其他狀況,是一個動态顯示過程,即可以通過使用者按鍵來不斷重新整理目前狀态.如果在前台執行該指令,它将獨占前台,直到使用者終止該程式為止. 比較準确的說,top指令提供了實時的對系統處理器的狀态監視.它将顯示系統中CPU最“敏感”的任務清單.該指令可以按CPU使用.記憶體使用和執行時間對任務進行排序;而且該指令的很多特性都可以通過互動式指令或者在個人定制檔案中進行設定。
top指令參數
d:指定每兩次螢幕資訊重新整理之間的時間間隔。當然使用者可以使用s互動指令來改變之。
p:通過指定監控程序ID來僅僅監控某個程序的狀态。
q:該選項将使top沒有任何延遲的進行重新整理。如果調用程式有超級使用者權限,那麼top将以盡可能高的優先級運作。
S:指定累計模式
s:使top指令在安全模式中運作。這将去除互動指令所帶來的潛在危險。
i:使top不顯示任何閑置或者僵死程序。
c:顯示整個指令行而不隻是顯示指令名
常用操作
top //每隔5秒顯式所有程序的資源占用情況
top -d2//每隔2秒顯式所有程序的資源占用情況
top -c//每隔5秒顯式程序的資源占用情況,并顯示程序的指令行參數(預設隻有程序名)
top -p12345 -p6789//每隔5秒顯示pid是12345和pid是6789的兩個程序的資源占用情況
top -d2 -c -p123456//每隔2秒顯示pid是12345的程序的資源使用情況,并顯式該程序啟動的指令行參數
三、檢視網絡流量的指令
watch -n 1 "/sbin/ifconfig eth0 | grep bytes"

四、docker四中網絡模式
- host模式:如果啟動容器的時候使用 host 模式,那麼這個容器将不會獲得一個獨立的 Network Namespace,而是和主控端共用一個 Network Namespace。容器将不會虛拟出自己的網卡,配置自己的 IP 等,而是使用主控端的 IP 和端口。
- container模式:這個模式指定新建立的容器和已經存在的一個容器共享一個 Network Namespace,而不是和主控端共享。新建立的容器不會建立自己的網卡,配置自己的 IP,而是和一個指定的容器共享 IP、端口範圍等。同樣,兩個容器除了網絡方面,其他的如檔案系統、程序清單等還是隔離的。兩個容器的程序可以通過 lo 網卡裝置通信。
- none模式:這個模式和前兩個不同。在這種模式下,Docker 容器擁有自己的 Network Namespace,但是,并不為 Docker容器進行任何網絡配置。也就是說,這個 Docker 容器沒有網卡、IP、路由等資訊。需要我們自己為 Docker 容器添加網卡、配置 IP 等。
-
bridge模式:bridge 模式是 Docker 預設的網絡設定,此模式會為每一個容器配置設定 Network Namespace、設定 IP 等,并将一個主機上的 Docker 容器連接配接到一個虛拟網橋上。當 Docker server 啟動時,會在主機上建立一個名為 docker0 的虛拟網橋,此主機上啟動的 Docker 容器會連接配接到這個虛拟網橋上。虛拟網橋的工作方式和實體交換機類似,這樣主機上的所有容器就通過交換機連在了一個二層網絡中。接下來就要為容器配置設定 IP 了,Docker 會從 RFC1918 所定義的私有 IP 網段中,選擇一個和主控端不同的IP位址和子網配置設定給 docker0,連接配接到 docker0 的容器就從這個子網中選擇一個未占用的 IP 使用。如一般 Docker 會使用 172.17.0.0/16 這個網段,并将 172.17.0.1/16 配置設定給 docker0 網橋(在主機上使用 ifconfig 指令是可以看到 docker0 的,可以認為它是網橋的管理接口,在主控端上作為一塊虛拟網卡使用)
docker常用指令:
1.docker version //檢視docker的版本号,包括用戶端、服務端、依賴的Go等
2.docker info //檢視系統(docker)層面資訊,包括管理的p_w_picpaths, containers數等
3.docker search <p_w_picpath> //在docker index中搜尋p_w_picpath
4.docker pull <p_w_picpath> //從docker registry server 中下拉p_w_picpath
5.docker push <p_w_picpath|repository> //推送一個p_w_picpath或repository到registry
6.docker push<p_w_picpath|repository>:TAG //同上,指定tag
7.docker inspect <p_w_picpath|container> //檢視p_w_picpath或container的底層資訊
8.docker p_w_picpaths //檢視本機p_w_picpaths
9.docker p_w_picpaths –a //列出所有的p_w_picpaths
10.docker ps //預設顯示正在運作中的container
六、docker怎麼實作容器間的獨立
使用核心技術Namespaces
1.pid namespace:不同使用者的程序就是通過pid namespace 隔離開的,且不同 namespace中可以有相同pid。所有的LXC程序在docker中的父程序為docker程序,每個lxc程序具有不同的 namespace 。
2.net namespace:有了pid namespace, 每個 namespace 中的pid能夠互相隔離,但是網絡端口還是共享 host 的端口。網絡隔離是通過 net namespace 實作的,每個 net namespace 有獨立的 networkdevices, IP addresses, IP routing tables, /proc/net 目錄。這樣每個 container 的網絡就能隔離開來。docker預設采用veth的方式将 container 中的虛拟網卡同 host 上的一個docker bridge: docker0 連接配接在一起。
3.ipc namespace:container中程序互動還是采用linux常見的程序間互動方法 (interprocess communication - IPC),包括常見的信号量、消息隊列和共享記憶體。container 的程序間互動實際上還是host 上具有相同pid namespace 中的程序間互動。
4.mnt namespace:類似chroot,将一個程序放到一個特定的目錄執行。mnt namespace 允許不同 namespace 的程序看到的檔案結構不同,這樣每個 namespace 中的程序所看到的檔案目錄就被隔離開了。在container裡頭,看到的檔案系統,就是一個完整的linux系統,有/etc、/lib 等,通過chroot實作。
5.uts namespace:UTS("UNIX Time-sharing System")namespace 允許每個 container 擁有獨立的 hostname 和 domain name, 使其在網絡上可以被視作一個獨立的節點而非 Host 上的一個程序。
6.usernamespace:每個 container 可以有不同的 user 和 groupid, 也就是說可以在 container 内部用 container 内部的使用者執行程式而非 Host 上的使用者。
七、實作高可用的工具有哪些?
1.hearbeat
2.keepalived
...
八、MySQL資料庫備份工具?
MySQLdump工具:
1.是mysql自帶的備份工具,目錄在bin目錄下面:/usr/local/mysql/bin/mysqldump,支援基于innodb的熱備份。但是由于是邏輯備份,是以速度不是很快,适合備份資料比較小的場景。Mysqldump完全備份+二進制日志可以實作基于時間點的恢複。
2.是 mysql 用于備份和資料轉移的一個工具。它主要産生一系列的 SQL 語句,可以封裝到檔案,該檔案包含有所有重建你的資料庫所需要的 SQL 指令如 CREATE DATABASE,CREATE TABLE,INSERT 等等。可以用來實作輕量級的快速遷移或恢複資料庫。
3.是将資料表導成 SQL 腳本檔案,在不同的 MySQL 版本之間更新時相對比較合适,這也是最常用的備份方法。
4.資料庫導出對象可以針對單個表、多個表、單個資料庫、多個資料庫、所有資料庫進行導出的操
作。
percona提供的xtrabackup工具:
Xtrabackup 實作是實體備份,而且是實體熱備
1.支援innodb的實體熱備份,支援完全備份,增量備份,而且速度非常快,支援innodb存儲引起的資料在不同資料庫之間遷移,支援複制模式下的從機備份恢複備份恢複,為了讓xtrabackup支援更多的功能擴充,可以設立獨立表空間,打開innodb_file_per_table功能,啟用之後可以支援單獨的表備份。
2.(1)備份過程快速、可靠;
(2)備份過程不會打斷正在執行的事務;
(3)能夠基于壓縮等功能節約磁盤空間和流量;
(4)自動實作備份檢驗;
(5)還原速度快。
九、awk和sed的差別?
awk:
awk是一種程式語言,對文檔資料的處理具有很強的功能。awk擅長從格式化封包或從一個大的文本檔案中抽取資料。
awk的指令格式為:
awk [-F filed-separator] “commands” input-file(s)
awk将一行文字按分隔符(filed-separator)分為多個域,依次記為$ 1,$ 2 . . . $ n。$0代表所有域值。是以awk更适合于以域為機關來處理檔案。加之ARGIND等内置變量,使awk能處理多個檔案。典型的應用為查找一個檔案中的某個字段是否在另一個檔案中出現
sed:
sed是一個精簡的、非互動式的編輯器。它能執行與編輯vi和emacs相同的編輯任務,但sed編輯器不提供互動使用方式,隻能在指令行下輸入編輯指令。
sed的指令格式為:
sed [options] 'command' file(s)
sed [options] -f scrīptfile file(s)
作為編輯器,當然少不了插入(a/、i/)、删除(d)、查找替換(s)等指令。
如果檔案是格式化的,即由分隔符分為多個域的,優先使用awk
awk适合按列(域)操作,sed适合按行操作
awk适合對檔案的抽取整理,sed适合對檔案的編輯。
十、cacti報警已經知道了,怎麼關閉報警?
将“Threshold Enabled”前面選項框中的勾去掉,即disabled門檻值,當達到設定的告警門檻值也不報警。
轉載于:https://blog.51cto.com/hexiaoshuai/1916522