0. 前言
文章已經收錄到 GitHub
個人部落格專案,歡迎 Star
:
https://github.com/chenyl8848/chenyl8848.github.io
或者訪問網站,進行線上瀏覽:
https://chenyl8848.github.io/
1. Linux 介紹
1.1 引言
Linux 是一套免費使用和自由傳播的類 Unix 作業系統,是一個基於 POSIX 和 Unix 的多使用者、多工、支援多執行緒和多 CPU 的作業系統。
伴隨著網際網路的發展,Linux 得到了來自全世界軟體愛好者、組織、公司的支援。它除了在伺服器作業系統方面保持著強勁的發展勢頭以外,在個人電腦、嵌入式系統上都有著長足的進步。
關注微信公眾號:【Java陳序員】,獲取開源專案分享、AI副業分享、超200本經典計算機電子書籍等。
目前 Linux 存在著許多不同的 Linux 發行版本,但它們都使用了 Linux 核心。Linux 可安裝在各種計算機硬體裝置中,比如手機、平板電腦、路由器、臺式計算機。
1.2 Linux 誕生
20 世紀 80 年代,計算機硬體的效能不斷提高,PC 的市場不斷擴大,當時可供計算機選用的作業系統主要有 Unix、DOS 和 MacOS 這幾種。
Unix 價格昂貴,不能執行於PC;
DOS顯得簡陋,且原始碼被軟體廠商嚴格保密;
MacOS是一種專門用於蘋果計算機的作業系統。
此時,電腦科學領域迫切需要一個更加完善、強大、廉價和完全開放的作業系統。由於供教學使用的典型作業系統很少,因此當時在荷蘭當教授的美國人 AndrewS.Tanenbaum 編寫了一個作業系統,名為 MINIX,為了向學生講述作業系統內部工作原理。MINIX 雖然很好,但只是一個用於教學目的的簡單作業系統,而不是一個強有力的實用作業系統,然而最大的好處就是公開原始碼。
全世界學計算機的學生都透過鑽研 MINIX 原始碼來了解電腦裡執行的 MINIX 作業系統,芬蘭赫爾辛基大學大學二年級的學生 Linus Torvalds 就是其中一個,在吸收了 MINIX 精華的基礎上,Linus 於 1991 年寫出了屬於自己的 Linux 作業系統,版本為 Linux0.01,是 Linux 時代開始的標誌。他利用 Unix 的核心,去除繁雜的核心程式,改寫成適用於一般計算機的 x86 系統,並放在網路上供大家下載,1994 年推出完整的核心 Version1.0,至此,Linux 逐漸成為功能完善、穩定的作業系統,並被廣泛使用。
總結:Linux 出現於 1991 年,是由芬蘭赫爾辛基大學學生,Linus Torvalds 和後來加入的眾多愛好者共同開發完成。
1.3 Linux 特點
- 完全免費
Linux 是一款免費的作業系統,使用者可以透過網路或其他途徑免費獲得,並可以任意修改其原始碼。這是其他的作業系統所做不到的。正是由於這一點,來自全世界的無數程式設計師參與了 Linux 的修改、編寫工作,程式設計師可以根據自己的興趣和靈感對其進行改變,這讓 Linux 吸收了無數程式設計師的精華,不斷壯大。
- 多使用者、多工
Linux 支援多使用者,各個使用者對於自己的檔案裝置有自己特殊的權利,保證了各使用者之間互不影響。多工則是現在電腦最主要的一個特點,Linux 可以使多個程式同時並獨立地執行。同時豐富的網路功能,可靠的系統安全,良好的可移植性,具有標準相容性,出色的速度效能。
2. Linux 之 CentOS
2.1 CentOS 引言
CentOS(Community Enterprise Operating System,中文意思是社群企業作業系統)是 Linux 發行版之一,它是來自於 Red Hat Enterprise Linux 依照開放原始碼規定釋出的原始碼所編譯而成。
由於出自同樣的原始碼,因此有些要求高度穩定性的伺服器以 CentOS 替代商業版的 [Red Hat](https://baike.baidu.com/item/Red Hat) Enterprise Linux 使用。兩者的不同,在於CentOS 完全開源。
2.2 CentOS 和 RedHeat 區別
目前的 Linux 作業系統主要應用於生產環境,主流企業的 Linux 系統仍舊是 RedHat 或者 CentOS,他們出自於同樣的原始碼,但 CentOS 完全免費。其獨有的 yum 命令支援線上升級,可以即時更新系統,不像 RedHat 那樣需要花錢購買支援服務!
2.3 安裝 CentOS
2.3.1 環境準備
# 環境要求:
1. windows7+
2. VMware Workstation8+
3. CentOS 系統(映象)
2.3.2 安裝 CentOS
0、下載 CentOS
官網:https://www.CentOS.org/
官網下載地址:http://isoredirect.CentOS.org/CentOS/7/isos/x86_64/
1、開啟 VMware Workstation
2、選擇選單 File 的第一項新建虛擬機器
3、選擇自定義虛擬機器安裝
4、選擇下一步
5、虛擬機器設定之後安裝系統
6、選擇虛擬機器安裝系統以及版本
7、選擇虛擬機器名稱與位置
8、設定處理器數
9、設定虛擬機器記憶體
10、選擇網路模式
11、選擇 IO 匯流排 下一步
12、選擇新建硬碟
13、選擇硬碟型別
14、拆分硬碟
15、設定磁碟位置
16、建立完成
3. Linux 目錄結構
# 目錄結構
bin (binaries)存放二進位制可執行檔案 [重點]
sbin (super user binaries)存放二進位制可執行檔案,只有root才能訪問
etc (etcetera)存放系統配置檔案 [重點]
usr (unix shared resources)用於存放共享的系統資源 [重點]
home 存放使用者檔案的根目錄 [重點]
root 超級使用者目錄 [重點]
dev (devices)用於存放裝置檔案
lib (library)存放跟檔案系統中的程式執行所需要的共享庫及核心模組
mnt (mount)系統管理員安裝臨時檔案系統的安裝點
boot 存放用於系統引導時使用的各種檔案
tmp (temporary)用於存放各種臨時檔案 [重點]
var (variable)用於存放執行時需要改變資料的檔案
4. Linux 中常用指令
# Linux 中命令格式:
命令 -選項 引數 如:ls -l /usr
注意:在 Linux 中命令嚴格區分大小寫。
4.1 ls 命令
# ls 顯示檔案和目錄列表 (list)
常用引數:
-l (long) 長格式顯示檔案和目錄資訊
-a (all) 顯示所有檔案和目錄(包含隱藏檔案和目錄)
-R 遞迴顯示指定目錄下的檔案清單,即會顯示指定目錄分支內各子目錄中的檔案清單。
# 0. ls (檢視目錄下檔案和目錄)
[root@localhost ~]# ls
aa aa.txt
# 1. ls -l (長格式展示檔案)
[root@localhost ~]# ls -l
總用量 60
drwxrwxr-x 2 user1 user1 4096 Aug 17 09:10 abc
- rw- r-- r-- 1 user1 user1 17 Aug 17 09:04 host.conf
- rw- r-- r-- 1 user1 user1 38450 Aug 17 09:04 php.ini
`長格式含義:`
檔案型別 檔案許可權 連結數 屬主 屬組 大小 日期 時間 檔名
d rwxrwxr-x 2 user1 user1 4096 Aug 17 09:10 abc
# 2. ls -a (顯示所有檔案)
[root@localhost ~]# ls -a
. aa .bash_history .bash_profile .cshrc .tcshrc
.. aa.txt .bash_logout .bashrc .pki .viminfo
# 3. ls -R (遞迴顯示檔案)
[root@localhost ~]# ls -R
.:
aa aa.txt
./aa:
4.2 操作檔案命令[重點]
# 0.cd 用來切換目錄
# 1.pwd 顯示當前工作目錄(print working directory)
# 2.touch 建立空檔案
# 3.mkdir 建立目錄(make directoriy)
-p 父目錄不存在情況下先生成父目錄 (parents)
# 4.cp 複製檔案或目錄(copy)
cp 檔名 目錄 複製檔案到指定目錄中
cp -r 目錄名 目錄 複製指定目錄到指定目錄中
-r 遞迴處理,將指定目錄下的檔案與子目錄一併複製(recursive)
# 5.mv 移動檔案或目錄、檔案或目錄改名(move)
mv 檔名 新檔名 檔案改名
mv 檔名 目錄名 檔案移動
mv 目錄名 不存在目錄名 目錄改名
mv 目錄名 已存在目錄名 目錄移動
# 6.rm 刪除檔案(remove)
-r 同時刪除該目錄下的所有檔案(recursive)
-f 強制刪除檔案或目錄(force)
# 7.rmdir 刪除空目錄(remove directoriy)
# 8.cat 顯示文字檔案內容(catenate)用來展示少量內容
# 9.more、less 分頁顯示文字檔案內容 退出用 q 退出
# 10.head、tail 檢視文字中開頭或結尾部分的內容
head -n 5 a.log 檢視 a.log 檔案的前 5 行
# 11.tail -f b.log 迴圈讀取(fellow)
# 12.echo 輸出命令
echo I love baby 說明:用來向螢幕輸出一句話
echo I Love baby >> aa.txt 說明:將這段內容輸入到檔案中
4.3 網路相關命令
# 1.ip addr 檢視 IP 地址
ip a 簡化寫法
# 2.ping 測試網路連通性
ping 192.168.0.1
4.4 tar 命令(windows winrar 好壓)
# tar 命令
-c 建立一個壓縮檔案的引數指令(create)
-x 解開一個壓縮檔案的引數指令(extract)
-z 是否需要用 gzip 壓縮
-v 壓縮的過程中顯示檔案(verbose)
-f 使用檔名,在 f 之後要立即接檔名(file)
# 通常組合使用:
tar -cvf aaa.tar file1.txt file2.txt 將 file1 和 file2 打包成 aaa.tar
tar -zcvf aaa.tar.gz file1.txt file2.txt 將 file1 和 file2 打包成 aaa.tar 並壓縮
tar -zxvf aaa.tar.gz file1.txt file2.txt 將 aaa.tar.gz 解壓
4.5 systemctl 服務命令
# systemctl
systemctl status|start|stop|restart 服務名 mysqld firewalld(防火牆) network(網路)
systemctl status 服務名 說明:檢視某個服務的執行狀態
systemctl start 服務名 說明:啟動某個服務
systemctl restart 服務名 說明:重啟某個服務
systemctl stop 服務名 說明:停止某個服務
4.6 程序相關命令
# 1.ps 詢在當前控制檯上執行的程序
ps -aux 說明:查詢系統中所有執行的程序,包括後臺程序,其中引數 a 是所有程序,引數 x 包括不佔用控制檯的程序,引數 u 顯示使用者。
ps -ef 說明:查詢系統中所有執行的程序,包括後臺程序,而且可以顯示出每個程序的父程序號。
ps -aux|grep 程序 服務名 關鍵字 Tomcat 重點
# 2.top 命令 動態顯示系統程序
# 3.kill 殺死程序
kill 3029 說明:上述命令中 3029 是程序號;一般在執行 kill 命令之前,先用 ps 或 pstree 來查詢一下將要被殺掉的程序的程序號。
kill -9 3029 說明:強制終止 3029 號程序的執行,其中引數 -9 代表強制的意思,實際上 kill 命令是向該程序傳送訊號,該程序接到訊號後決定是否停止執行,有些守護程序必須要收到引數 9 才終止執行。
4.7 vi 命令
vi/vim 是 Unix/Linux 上最常用的文字編輯器而且功能非常強大。
# 常用命令:
i 在游標前插入
I 在游標當前行開始插入
a 在游標後插入
A 在游標當前行末尾插入
o 在游標當前行的下一行插入新行
O 在游標當前行的上一行插入新行
----------------重點---------------------------
:set nu 顯示行號
:set nonu 取消行號
gg 到文字的第一行
G 到文字的最後一行
:n 到文字的第 n 行
------------------重點-------------------------
u undo,取消上一步操作
Ctrl + r redo,返回到 undo 之前
-------------------重點------------------------
Shift+ zz 儲存退出,與“:wq”作用相同
:q 退出不儲存
:q! 強制退出不儲存
:wq 儲存退出
:wq! 強制儲存退出
4.8 軟體相關命令
RPM 命令:是 RedHat Package Manager(RedHat 軟體包管理工具)的縮寫,這一檔案格式名稱雖然打上了 RedHat 的標誌,但是其原始設計理念是開放式的,現在包括 RedHat、CentOS、SUSE 等 Linux 的分發版本都有采用,可以算是公認的行業標準了。RPM 檔案在 Linux 系統中的安裝最為簡便。
# rpm 命令
常用引數:
i:安裝應用程式(install)
e:解除安裝應用程式(erase)
vh:顯示安裝進度;(verbose hash)
U:升級軟體包;(update)
qa: 顯示所有已安裝軟體包(query all)
## 例子:rmp -ivh gcc-c++-4.4.7-3.el6.x86_64.rpm
安裝命令:
rpm -ivh xxxx.rpm
rpm -evh xxxx.rpm
rpm -Uvh xxx.rpm
rpm -qa
YUM 命令:Yum(全稱為 Yellow dog Updater, Modified)是一個在 Fedora 和 RedHat 以及 SUSE、CentOS 中的 Shell 前端軟體包管理器。基於 RPM 包管理,能夠從指定的伺服器自動下載 RPM 包並且安裝,可以自動處理依賴性關係,並且一次安裝所有依賴的軟體包,無須繁瑣地一次次下載、安裝。
例子:
yum install gcc-c++
yum remove gcc-c++
yum update gcc-c++
yum install|remove|update 依賴名稱
注意:使用 YUM 命令必須連線外部網路。
4.9 使用者和組相關命令
# 1.檢視當前使用者:whoami
# 2.檢視登入使用者:who
-m 或 am I 只顯示執行 who 命令的使用者名稱、登入終端和登入時間
-q 或 --count 只顯示使用者的登入賬號和登入使用者的數量
# 3.退出使用者:exit
# 4.新增、刪除組賬號:groupadd、groupdel
# 5.新增使用者賬號:useradd
-g 指定組名稱 說明:如果建立使用者的時候,不指定組名,那麼系統會自動建立一個和使用者名稱一樣的組名。
# 6.設定使用者密碼:passwd [使用者名稱]
# 7.su 切換使用者
su root
4.10 許可權相關命令
Linux 檔案有三種典型的許可權,即 r 讀許可權、w 寫許可權和 x 執行許可權。在長格式輸出中在檔案型別的後面有 9 列許可權位,實際上這是針對不同使用者而設定的。
r=4,w=2,x=1
.
# chmod
all = user + group + other
chmod u+rwx,g+rwx,o+rwx 檔名
字母法:chmod u/g/o/a +/-/= rwx 檔案
[u/g/o/a] 含義
u user 表示該檔案的所有者
g group 表示與該檔案的所有者屬於同一組( group )者,即使用者組
o other 表示其他以外的人
a all 表示這三者皆是
[ +-= ] 含義
- 增加許可權
* 撤銷許可權
= 設定許可權
rwx 含義
r read 表示可讀取,對於一個目錄,如果沒有 r 許可權,那麼就意味著不能透過 ls 檢視這個目錄的內容。
w write 表示可寫入,對於一個目錄,如果沒有 w 許可權,那麼就意味著不能在目錄下建立新的檔案。
x excute 表示可執行,對於一個目錄,如果沒有 x 許可權,那麼就意味著不能透過 cd 進入這個目錄。
數字法: 4 讀 2 寫 1 執行
chmod 777 檔名
5. CRT 終端操作
# 0.準備工作
安裝 CRT 客戶端工具:WinScp工具
# 1.設定 Linux 獲取 ip 地址 (編輯網路配置檔案)
vi /etc/sysconfig/network-scripts/ifcfg-ens33
# 2.修改 ens33 配置檔案
BOOTPROTO=dhcp
ONBOOT=yes
# 3.重啟啟動網路服務載入修改配置生效
systemctl restart network
# 4.檢視 ip 地址
ip addr
# 5.此時 ip 已經獲取
ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:07:16:9e brd ff:ff:ff:ff:ff:ff
inet 192.168.202.136/24 brd 192.168.202.255 scope global noprefixroute dynamic ens33
valid_lft 1459sec preferred_lft 1459sec
inet6 fe80::b22b:7e01:db87:52fe/64 scope link noprefixroute
# 6.測試外部網路連通(保證宿主機 windows 可以上網前提)
ping www.baidu.com
# 7.使用 CRT 工具連線
6. 安裝 JDK
6.1 下載 JDK
# 1.下載 jdk
https://www.oracle.com/technetwork/java/javase/downloads/index.html
https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html
# 2.透過 CRT|WinSCP 工具將 JDK 上傳到 Linux 系統中
6.2 tar 包安裝
# 1.將 JDK 解壓縮到指定目錄
tar -zxvf JDK-8u171-linux-x64.tar.gz -C /usr/
注意:-C 引數是將 JDK 解壓之後檔案放入 usr 目錄中
# 2.進入 JDK 解壓縮目錄檢視
cd /usr/jdk1.8.0_171/
# 3.檢視詳細資訊
[root@localhost jdk1.8.0_171]# ls
bin db javafx-src.zip lib man release THIRDPARTYLICENSEREADME-JAVAFX.txt
COPYRIGHT include jre LICENSE README.html src.zip THIRDPARTYLICENSEREADME.txt
# 4.配置環境變數
vi /etc/profile
# 5.在檔案末尾加入如下配置
export JAVA_HOME=/usr/jdk1.8.0_171
export PATH=$PATH:$JAVA_HOME/bin
# 6.載入配置生效
source /etc/profile 載入配置生效
reboot 重啟系統
注意:以上兩個選項選擇任意一個即可 `source` 可以不用重啟立即生效,某些情況下 `source` 無法生效時,可以使用重啟試試。
# 7.測試環境變數
java
javac
java -version
6.3 rpm 包安裝
# 1.安裝 JDK
[root@localhost ~]# rpm -ivh JDK-8u171-linux-x64.rpm
準備中... ################################# [100%]
正在升級/安裝...
1:jdk1.8-2000:1.8.0_171-fcs ################################# [100%]
Unpacking JAR files...
tools.jar...
plugin.jar...
javaws.jar...
deploy.jar...
rt.jar...
jsse.jar...
charsets.jar...
localedata.jar...
# 2.搜尋預設安裝位置
[root@localhost ~]# find / -name "java"
/usr/java/jdk1.8.0_171-amd64/bin/java
/usr/java/jdk1.8.0_171-amd64/jre/bin/java
# 3.配置環境變數
vi /etc/profile
# 4.在檔案末尾加入如下配置
export JAVA_HOME=/usr/java/jdk1.8.0_171-amd64/
export PATH=$PATH:$JAVA_HOME/bin
# 5.載入配置生效
source /etc/profile 載入配置生效
reboot 重啟系統
注意: 以上兩個選項選擇任意一個即可 source 可以不用重啟立即生效,某些情況下 source 無法生效時,可以使用重啟試試
# 6.測試環境變數
java
javac
java -version
7. 安裝 Tomcat
# 0.下載 tomcat
http://mirrors.tuna.tsinghua.edu.cn/apache/Tomcat/Tomcat-8/v8.5.46/bin/apache-Tomcat-8.5.46.tar.gz
# 1.透過工具上傳到 Linux 系統中
# 2.解壓縮到 /usr 目錄中
[root@localhost ~]# tar -zxvf apache-Tomcat-8.5.46.tar.gz -C /usr/
-C 用來指定解壓縮的位置
# 3.檢視解壓內容
[root@localhost apache-Tomcat-8.5.46]# ls -l
總用量 124
drwxr-x---. 2 root root 4096 10 月 13 12:27 bin
-rw-r-----. 1 root root 19318 9 月 17 02:19 BUILDING.txt
drwx------. 2 root root 238 9 月 17 02:19 conf
-rw-r-----. 1 root root 5407 9 月 17 02:19 CONTRIBUTING.md
drwxr-x---. 2 root root 4096 10 月 13 12:27 lib
-rw-r-----. 1 root root 57011 9 月 17 02:19 LICENSE
drwxr-x---. 2 root root 6 9 月 17 02:17 logs
-rw-r-----. 1 root root 1726 9 月 17 02:19 NOTICE
-rw-r-----. 1 root root 3255 9 月 17 02:19 README.md
-rw-r-----. 1 root root 7139 9 月 17 02:19 RELEASE-NOTES
-rw-r-----. 1 root root 16262 9 月 17 02:19 RUNNING.txt
drwxr-x---. 2 root root 30 10 月 13 12:27 temp
drwxr-x---. 7 root root 81 9 月 17 02:17 webapps
drwxr-x---. 2 root root 6 9 月 17 02:17 work
# 4.啟動 tomcat
[root@localhost apache-Tomcat-8.5.46]# ./bin/startup.sh
# 5.關閉網路防火牆
systemctl stop firewalld 關閉網路防火牆
systemctl disable firewalld 關閉開機自啟動(永久關閉)
# 6.在 windows 中訪問 Tomcat
http://10.15.0.8:8080/
# 7.顯示 Tomcat 實時控制檯資訊
進入 Tomcat 的 logs 目錄中使用 tail -f catalina.out 命令實時檢視控制檯資訊
# 8.關閉 Tomcat
在 Tomcat 的 bin 目錄下面使用 ./shutdown.sh
8. 安裝 MySQL
8.1 環境準備
# 1.解除安裝 mariadb,否則安裝 MySQL 會出現衝突
# 2.執行命令 rpm -qa | grep mariadb
# 3.列出所有被安裝的 mariadb rpm 包
# 4.執行命令 rpm -e --nodeps mariadb-libs-5.5.56-2.el7.x86_64
8.2 本地安裝(5.6 版本預設 root 沒有密碼)
上傳下載好的軟體包到系統中。
# 0.執行本地安裝包之前必須先安裝 vim
yum install -y vim
# 1.安裝步驟
rpm -ivh perl-*
rpm -ivh net-tools-2.0-0.22.20131004git.el7.x86_64.rpm
rpm -ivh mysql-community-common-5.6.42-2.el7.x86_64.rpm
rpm -ivh mysql-community-libs-5.6.42-2.el7.x86_64.rpm
rpm -ivh mysql-community-client-5.6.42-2.el7.x86_64.rpm
rpm -ivh mysql-community-server-5.6.42-2.el7.x86_64.rpm
8.3 線上安裝
# 1.新增官方的 yum 源建立並編輯 mysql-community.repo 檔案
vi /etc/yum.repos.d/mysql-community.repo
# 2.貼上以下內容到原始檔中
[mysql56-community]
name=MySQL 5.6 Community Server
baseurl=http://repo.mysql.com/yum/mysql-5.6-community/el/7/$basearch/
enabled=1
gpgcheck=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql
注意:如果需要安裝 MySQL5.7 只需要將 baseurl 修改即可
baseurl=http://repo.mysql.com/yum/mysql-5.7-community/el/7/$basearch/
# 3.安裝 MySQL
sudo yum install -y mysql-community-server
8.4 設定 root 使用者密碼
# 1.啟動 MySQL 資料庫
[root@localhost mysql]# systemctl start mysqld
# 2.修改 MySQL 資料庫密碼
mysqladmin -u root -p password 回車 輸入原始密碼 在輸入新的密碼
注意:5.7 之前版本安裝完成之後沒有密碼,MySQL5.7 之後的版本的初始密碼是隨機生成的,放在了 /var/log/mysqld.log
使用命令 grep ‘temporary password’ /var/log/mysqld.log 讀出來即可 ROOT!Q2w
# 3.登入 MySQL
[root@localhost mysql]# mysql -u root -p
8.5 開啟遠端訪問
1、安裝完成 MySQL 時,發現 MySQL 資料庫,不允許我們遠端連線,需要修改設定。
2、登入 MySQL,並選擇使用 mysql 資料庫
3、檢視 mysql 庫中的所有表
4、查詢 user 表
5、執行如下命令
grant all privileges on *.* to 'root'@'%' identified by 'ROOT!Q2w' with grant option;
6、重新整理許可權
flush privileges;
7、重啟服務
systemctl restart mysqld
8、測試連線
9. MySQL 主從複製
# 0.架構規劃
192.168.202.201 master 主節點
192.168.202.202 slave 從節點
# 1.修改 mysql 的配置檔案
[root@localhost mysql]# vim /etc/my.cnf
# 2.分別在配置檔案中加入如下配置
mysql(master):
server-id=1
log-bin=mysql-bin
log-slave-updates
slave-skip-errors=all
msyql(slave):
server-id=2
log-bin=mysql-bin
log-slave-updates
slave-skip-errors=all
注意:兩個機器的 server-id 不能一致
# 3.重啟 mysql 服務
systemctl restart mysqld
# 4.登入 mysql 執行如下命令檢測配置是否生效
SHOW VARIABLES like 'server_id';
# 5.登入 master 節點執行如下命令
show master status;
# 6.登入從節點執行如下命令:
change master to
master_host='10.15.0.9',
master_user='root',
master_password='root',
master_log_file='mysql-bin.000001',
master_log_pos=120;
# 7.開啟從節點
start slave;
stop slave;
# 8.檢視從節點狀態
show slave status\G;
************\*\************* 1. row ************\*\*\*************
Slave_IO_State: Waiting for master to send event
Master_Host: 10.15.0.9
Master_User: root
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000001
Read_Master_Log_Pos: 120
Relay_Log_File: mysqld-relay-bin.000002
Relay_Log_Pos: 283
Relay_Master_Log_File: mysql-bin.000001
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
注意:
1. 出現 Slave_IO_Running: Yes 和 Slave_SQL_Running: Yes 說明成功
2. 如果在搭建過程出現錯誤,可以檢視檢視錯誤日誌檔案 cat /var/log/mysqld.log
# 9.透過客戶端工具進行測試
# 10.關閉主從複製(在從節點執行)
stop slave;
- 注意:如果出現
Slave I/O: Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must be different for replication to work. Error_code: 1593
錯誤,請執行如下命令rm -rf /var/lib/mysql/auto.cnf
刪除這個檔案,之所以出現會出現這樣的問題,是因為我的從庫主機是克隆的主庫所在的主機,所以auto.cnf
檔案中儲存的UUID
會出現重複。
10. 讀寫分離
10.1 MyCat 引言
基於阿里開源的 Cobar 產品而研發,Cobar 的穩定性、可靠性、優秀的架構和效能以及眾多成熟的使用案例使得 MyCat 一開始就擁有一個很好的起點,站在巨人的肩膀上,我們能看到更遠。
業界優秀的開源專案和創新思路被廣泛融入到 MyCat 的基因中,使得 MyCat 在很多方面都領先於目前其他一些同類的開源專案,甚至超越某些商業產品。
MyCat 背後有一支強大的技術團隊,其參與者都是 5 年以上資深軟體工程師、架構師、DBA 等,優秀的技術團隊保證了 MyCat 的產品質量。MyCat 並不依託於任何一個商業公司,因此不像某些開源專案,將一些重要的特性封閉在其商業產品中,使得開源專案成了一個擺設。
10.2 安裝 Mycat
# 1.下載 MyCat
http://dl.mycat.io/1.6-RELEASE/Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz
# 2.解壓 MyCat
tar -zxvf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz
# 3.檢視解壓之後目錄
[root@localhost mycat]# ls
總用量 12
drwxr-xr-x. 2 root root 190 10 月 14 22:58 bin
drwxrwxrwx. 2 root root 6 3 月 1 2016 catlet
drwxrwxrwx. 4 root root 4096 10 月 14 22:58 conf
drwxr-xr-x. 2 root root 4096 10 月 14 22:58 lib
drwxrwxrwx. 2 root root 6 10 月 28 2016 logs
-rwxrwxrwx. 1 root root 217 10 月 28 2016 version.txt
# 4.移動到 /usr 目錄
mv mycat/ /usr/
# 5.配置 MyCat 中 conf 下的配置 schema.xml
<!-- 定義MyCat的邏輯庫 -->
<schema name="test_schema" checkSQLschema="false" sqlMaxLimit="100" dataNode="testNode"></schema>
<!-- 定義MyCat的資料節點 -->
<dataNode name="testNode" dataHost="dtHost" database="test" />
<dataHost name="dtHost" maxCon="1000" minCon="10" balance="1"
writeType="0" dbType="mysql" dbDriver="native" switchType="-1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<!--寫節點-->
<writeHost host="hostM1" url="192.168.28.128:3306" user="root"
password="root">
<!--從節點-->
<readHost host="hostS1" url="192.168.28.129:3306" user="root" password="root" />
</writeHost>
</dataHost>
# 6.配置登陸 MyCat 的許可權 server.xml
<system>
<!-- 這裡配置的都是一些系統屬性,可以自己檢視mycat文-->
<property name="defaultSqlParser">druidparser</property>
<property name="charset">utf8mb4</property>
</system>
<user name="root">
<property name="password">root</property>
<property name="schemas">test_schema</property>
</user>
# 7.啟動 MyCat
./mycat console
# 8.檢視日誌
tail -f ../logs/mycat.log
# 9.資料庫連線配置,測試
11. 安裝 Nginx
11.1 Nginx 引言
Nginx
是一款輕量級的 Web 伺服器/反向代理伺服器及電子郵件(IMAP/POP3)代理伺服器,並在一個 BSD-like 協議下發行。
由俄羅斯的程式設計師 Igor Sysoev 所開發,供俄國大型的入口網站及搜尋引擎 Rambler(俄文:Рамблер)使用。其特點是佔有記憶體少,併發能力強,事實上 Nginx 的併發能力確實在同型別的網頁伺服器中表現較好。
11.2 Nginx 安裝
# 0.安裝必要依賴
yum install -y gcc pcre-devel zlib-devel
# 1.下載 Nginx
http://nginx.org/en/download.html
# 2.將 Nginx 上傳到 Linux 中並解壓縮
tar -zxvf nginx-1.11.1.tar.gz
# 3.檢視 Nginx 安裝目錄
[root@localhost nginx-1.11.1]# ls
auto CHANGES CHANGES.ru conf configure contrib html LICENSE man README src
# 4.在 Nginx 安裝目錄中執行如下命令:(指定安裝位置)
./configure --prefix=/usr/nginx
# 5.執行上述命令後,執行如下命令:
make && make install
# 6.編譯完成後進入編譯安裝目錄 /usr/nginx 目錄中檢視:
[root@localhost nginx]# ls -l
總用量 4
drwxr-xr-x. 2 root root 4096 10 月 14 21:17 conf
drwxr-xr-x. 2 root root 40 10 月 14 21:17 html
drwxr-xr-x. 2 root root 6 10 月 14 21:17 logs
drwxr-xr-x. 2 root root 19 10 月 14 21:17 sbin
# 7.啟動 Nginx,進入 Nginx 安裝目錄的 sbin 目錄中執行:
./nginx
# 8.在 windows 中瀏覽器訪問,可以看到 Nginx 歡迎頁面:
http://10.15.0.8:80/
注意:關閉網路防火牆。
# 9.關閉 Nginx,進入 Nginx 安裝目錄的 sbin 目錄中執行:
./nginx -s stop
# 10.Nginx 配置檔案在 Nginx 安裝目錄的 conf 目錄中:
[root@localhost conf]# ls -l
總用量 60
-rw-r--r--. 1 root root 2656 10 月 14 21:17 nginx.conf
.......
注意:nginx.conf 為 Nginx 的配置檔案,可以在 nginx.conf 修改 Nginx 預設配置。
12. Tomcat 負載均衡叢集
12.1 Tomcat 叢集
# 0.準備多個 Tomcat
tar -zxvf apache-Tomcat-8.5.46.tar.gz #解壓縮一個新的 tomcat 安裝包
mv apache-Tomcat-8.5.46 tomcat1 #將名稱改為 tomcat1
cp -r tomcat1/ tomcat2 #複製一份
cp -r tomcat1/ tomcat3 #複製一份
# 1.此時當前目錄中有三個伺服器,如下:
[root@localhost ~]# ls -l
總用量 12248
-rwxrwxrwx. 1 root root 11623939 10 月 13 12:25 apache-Tomcat-8.5.46.tar.gz
drwxr-xr-x. 9 root root 220 10 月 14 21:28 tomcat1
drwxr-xr-x. 9 root root 220 10 月 14 21:38 tomcat2
drwxr-xr-x. 9 root root 220 10 月 14 21:38 tomcat3
# 2.修改 tomcat1 埠號:(偽分散式)
vim tomcat1/conf/server.xml
命令修改如下內容:
a.<Server port="8001" shutdown="SHUTDOWN"> ---關閉埠
b.<Connector port="8888" protocol="HTTP/1.1" ---http 協議埠
connectionTimeout="20000"
redirectPort="8443" />
c.<Connector port="10010" protocol="AJP/1.3" redirectPort="8443" /> ---AJP 協議埠
# 3.修改 tomcat2 埠號:(偽分散式)
vim tomcat2/conf/server.xml
命令修改如下內容:
a.<Server port="8002" shutdown="SHUTDOWN">
b.<Connector port="8889" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
c.<Connector port="10011" protocol="AJP/1.3" redirectPort="8443" />
# 4.修改 tomcat3 埠號:(偽分散式)
vim tomcat2/conf/server.xml
命令修改如下內容:
a.<Server port="8003" shutdown="SHUTDOWN">
b.<Connector port="8890" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
c.<Connector port="10012" protocol="AJP/1.3" redirectPort="8443" />
# 5.將多個 Tomcat 啟動:
tomcat1/bin/startup.sh
tomcat2/bin/startup.sh
tomcat3/bin/startup.sh
# 6.檢視 Tomcat 是否啟動成功
ps -aux|grep Tomcat
# 7.在 Windows 中分別訪問 Tomcat,都看到主頁代表啟動成功:
http://10.15.0.8:8888/
http://10.15.0.8:8889/
http://10.15.0.8:8890/
注意:這步一定要關閉網路防火牆。
# 8.將多個 Tomcat 配置到 Nginx 的配置檔案中:
1、在 server 標籤上加入如下配置:
upstream Tomcat-servers {
server 10.15.0.8:8888;
server 10.15.0.8:8889;
server 10.15.0.8:8890;
}
2、將配置檔案中 location / 替換為如下配置:
location / {
proxy_pass http://Tomcat-servers;
proxy_redirect off;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_host;
proxy_next_upstream http_502 http_504 error timeout invalid_header;
}
# 9.進入 Nginx 安裝目錄 sbin 目錄啟動 Nginx
./nginx -c /usr/nginx/conf/nginx.conf
# 10.訪問 Nginx,看到其中一個 Tomcat 畫面:
http://10.15.0.8/
12.2 Nginx 負載均衡策略
# 1.輪詢
說明: 預設策略,每個請求會按時間順序逐一分配到不同的後端伺服器
# 2.weight 權重
說明:weight 引數用於指定輪詢機率,weight 的預設值為 1,weight 的數值與訪問比率成正比
upstream Tomcat-servers {
server localhost:8080 weight=2;
server localhost:8081;
server localhost:8082 backup;
}
注意:1.權重越高分配到需要處理的請求越多。2.此策略可以與 least_conn 和 ip_hash 結合使用主要用於後端伺服器效能不均。
# 3.ip_hash 4%3=1
說明:指定負載均衡器按照基於客戶端 IP 的分配方式,這個方法確保了相同的客戶端的請求一直髮送到相同的伺服器,以保證 session 會話。這樣每個訪客都固定訪問一個後端伺服器,可以解決 session 不能跨伺服器的問題。
upstream Tomcat-servers {
ip_hash; #保證每個訪客固定訪問一個後端伺服器
server localhost:8080;
......
}
# 4.least_conn
說明:把請求轉發給連線數較少的後端伺服器。輪詢演算法是把請求平均的轉發給各個後端,使它們的負載大致相同;但是,有些請求佔用的時間很長,會導致其所在的後端負載較高。
這種情況下,least_conn 這種方式就可以達到更好的負載均衡效果。
upstream Tomcat-servers{
least_conn; #把請求轉發給連線數較少的後端伺服器
server localhost:8080;
}
13. MSM 配置
Memcached Session Manager 基於 MemCache 快取的 session 共享。
即使用 CacheDB 存取 session 資訊,應用伺服器接受新請求將 session 資訊儲存在 CacheDB 中,當應用伺服器發生故障時,排程器會遍歷尋找可用節點,分發請求,當應用伺服器發現 session 不在本機記憶體時,則去 CacheDB 中查詢,如果找到則複製到本機,這樣實現 session 共享和高可用。
# 0.準備一個 MemCache 服務
# 1.安裝 memcached
yum install -y memcached
# 2.啟動 memcached
memcached -p 11211 -vvv -u root
# 3.Tomcat 安裝的 lib 目錄中放入與 MemCache 整合 Jar 包
cp _.jar tomcat1/lib
cp _.jar tomcat2/lib
cp \*.jar tomcat3/lib
# 4.配置 Tomcat 目錄中 conf 目錄中 context.xml(所有 Tomcat 均需要配置)
<Context>
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:10.15.0.8:11211"
sticky="false"
sessionBackupAsync="false"
requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
/>
</Context>
# 5.放入測試專案進行測試