5.1linux整理
虛擬機下linux的安裝與使用
- 1 虛擬機下linux的安裝與使用
- 1.1 安裝虛擬機
- 1.2 啟動虛擬機的linux系統(tǒng)
- 1.3 Xshell與虛擬機鏈接
- 1.3.1 為什么要用Xshell工具
- 1.3.2 Xshell的安裝
- 1.3.3 Xshell的使用
- 2 linux
- 2.1 什么是Linux
- 2.2 常用發(fā)行版本
- 2.3 常用命令
- 2.3.1 退出命令行
- 2.3.2 查看IP
- 2.3.3 查看當前目錄文件
- 2.3.4 編輯文件
- 2.3.5 操作目錄
- 2.3.6 查找文件
- 2.3.7 壓縮包及解壓包
- 2.3.8 開放服務(wù)器端口
- 2.3.9 用戶添加
- 2.3.10 查看進程
- 2.4 軟件安裝
- 2.4.1 安裝JDK
- 2.4.2 安裝tomcat
- 2.4.3 安裝Nginx
- 1 介紹
- 2 反向代理服務(wù)器/負載均衡服務(wù)器
- 3 流量限制
- 3.1 根據(jù)ip控制速率
- 3.2 控制并發(fā)連接數(shù)
- 4 靜態(tài)資源服務(wù)器
- 5 跨域配置
- 5.1 允許全局的跨域
- 5.2 允許指定路徑跨域
- 6 SpringSession
- 1. HttpSession介紹
- 2 SpringSession介紹
- 3 SpringBoot+SpringSession+Redis示例
- 2.4.4 安裝redis
- 1 redis的安裝與基本測試
- 2 redis集群
- 2.1 Linux環(huán)境如何搭建Redis集群
- 2.2Redis主從復(fù)制的原理
- 2.4.5 安裝mysql
- 2.4.6 安裝Mycat
- 1 主從同步
- 1.1 設(shè)置主庫mysql的配置文件
- 1.2 設(shè)置從庫mysql的配置文件
- 2 系統(tǒng)切分及解決方案
- 2.1 垂直切分
- 2.2 水平切分
- 2.4.7 安裝solr
- 1 安裝流程
- 2 SpringBoot中的使用
- 2.4.8 yum
- yum常用命令
1 虛擬機下linux的安裝與使用
1.1 安裝虛擬機
此處我們選用的虛擬機是:VirtualBox-6.1.18-142142-Win.exe
選擇安裝位置然后無腦下一步即可。
安裝完成后桌面出現(xiàn)Oracle VM VirtualBox的圖標點擊進入虛擬機管理頁面。可以通過管理菜單導(dǎo)入導(dǎo)出虛擬機的linux操作系統(tǒng)
注意:此文檔導(dǎo)入的linux系統(tǒng)為xxx.ova文件
選擇好系統(tǒng)文件后,進行虛擬電腦導(dǎo)入設(shè)置:
- 1.設(shè)置虛擬電腦位置
- 2.將MAC地址設(shè)定為:為所有網(wǎng)卡重新生成MAC地址
- 3.在虛擬系統(tǒng)中也可設(shè)置處理器、內(nèi)存等,但是這些有初始默認設(shè)置,此處我們不進行修改。
設(shè)置完成后點擊導(dǎo)入等待導(dǎo)入完成即可。
創(chuàng)建完成后需要進入設(shè)置1.調(diào)整對應(yīng)的網(wǎng)卡,2.全部允許混雜模式,3.刷新mac地址,此時虛擬機管理器上已經(jīng)顯示有一個虛擬系統(tǒng)可以啟動。
1.2 啟動虛擬機的linux系統(tǒng)
點擊選擇管理軟件中已經(jīng)準備就緒的系統(tǒng),右鍵選擇或者通過菜單欄的啟動按鈕進行啟動(此處相當于windows的開機)。
自動運行至等待登錄界面顯示:localhost login:
此時輸入超級管理員root----->輸入密碼(linux命令行下輸入密碼,光標不移動且界面顯示不變,需要自己記得輸入的密碼)------>登陸成功(展示last login:(上次登錄的時間))----->進入命令行主界面[root@localhost ~]#
至此linux在虛擬機中已經(jīng)成功啟動,可以開始使用linux的指令。
1.3 Xshell與虛擬機鏈接
1.3.1 為什么要用Xshell工具
- 對于本地服務(wù)器來說,linux系統(tǒng)的命令行即可完成一系列操作。
- 當下流行的云服務(wù)器和服務(wù)器托管都是服務(wù)器實際并不在自己的公司,無法或者很難去面對服務(wù)器做一些操作,因此就需要一些遠程軟件來進行操作。(服務(wù)器機房一般要求溫度、無塵、網(wǎng)速保證等,小公司一般不設(shè)置機房。)
1.3.2 Xshell的安裝
此處我們選用的是破解好的綠色版壓縮包Xshell_Plus_v6.0.0095.7z
解壓后出現(xiàn)Xshell Plus文件夾,進入該文件夾雙擊: !綠化.bat文件,按照提示在命令行輸入信息安裝,安裝完成后桌面出現(xiàn):
-
Xshell圖標(用于連接虛擬機linux系統(tǒng)),
-
Xftp圖標(展示linux下的文件結(jié)構(gòu),可以直接按照windows的方式對其進行基本操作)
1.3.3 Xshell的使用
注意:在啟動之前可以先關(guān)閉剛才啟動的linux系統(tǒng),然后通過管理頁面無界面啟動
-
雙擊Xshell打開
-
新建會話
-
設(shè)置項:
-
名稱(鏈接的名字,隨便寫)
-
協(xié)議(SSH)
-
主機(虛擬系統(tǒng)的主機:linux命令行下可以輸入ifconfig查詢。)
-
端口號(本虛擬機默認22,有些默認80)
-
-
點擊確定新建成功
-
輸入用戶名 輸入密碼 ,點擊確認。(此處用戶名密碼為虛擬機系統(tǒng)的用戶名密碼)
-
登錄完成進入主界面(可以進行l(wèi)inux命令操作)
2 linux
2.1 什么是Linux
-
一種免費,開源的操作系統(tǒng)
-
常作為服務(wù)器的操作系統(tǒng)使用
-
在目前市面上的服務(wù)器操作系統(tǒng)一般使用linux,極少數(shù)使用Windows Server(微軟公司為服務(wù)器提供的應(yīng)用操作系統(tǒng),包含更加全面的權(quán)限管理系統(tǒng)以及防火墻機制).
2.2 常用發(fā)行版本
-
RedHat(紅帽子)
-
CentOS
-
Ubuntu(有一套完整的界面解決方案,可以作為個人用戶使用的操作系統(tǒng))
2.3 常用命令
2.3.1 退出命令行
| ctrl+c | 退出 | 組合鍵 |
2.3.2 查看IP
| ifconfig | 查看當前電腦IP地址及網(wǎng)卡信息 | 命令 |
2.3.3 查看當前目錄文件
| ll | 顯示當前目錄下的文件以及文件信息 | 命令 |
| ls | 顯示當前目錄文件名稱 | 命令 |
| cd 目錄名 | 進入目錄 | 命令 |
| cd … | 回到上層目錄 | 命令 |
| pwd | 顯示當前的目錄的絕對路徑 | 命令 |
| cd / | 進入根目錄 | 命令 |
| 通過↑/↓查看命令歷史 | 查看命令歷史 | ↑/↓按鍵 |
2.3.4 編輯文件
| vim 文件名(帶后綴) | vim : 編輯文件命令 | 命令 |
| i | 進入編輯模式 | 按鍵 |
| esc | 退出編輯狀態(tài),編輯狀態(tài)下無法進行以下操作 | 按鍵 |
| :q | 退出vim編輯器 | 命令 |
| :q! | 強制退出vim,不保存修改內(nèi)容 | 命令 |
| :w | 保存但停留在vim界面 | 命令 |
| :wq | 保存并退出文件 | |
| /檢索內(nèi)容 | 檢索 按n 下一個 | 命令+按鍵 |
| 快速按兩下d | 刪除整行 | 按鍵 |
注意:文件未保存而強制退出時,會存在臨時文件,每次打開該文件會提示,需要將該臨時文件刪除方能徹底解決。
2.3.5 操作目錄
| mkdir 文件夾名稱 | 創(chuàng)建目錄 | 命令 |
| mkdir -p 文件夾1/文件夾2/文件夾3 | 批量創(chuàng)建(層級創(chuàng)建) | 命令 |
| rm [-r / -f / -rf ]文件/目錄 | 刪除目錄/文件(-r表示目錄 -f表示強制) | 命令 |
| cp [-r] 源文件/源目錄 目標文件/目標目錄 | 拷貝目錄/文件 | 命令 |
| mv 源文件/源目錄 目標文件/目標目錄 | 移動目錄/文件 | 命令 |
2.3.6 查找文件
| grep 需要查找的字符串 文件名 | 查找文件內(nèi)容 | 命令 |
| n find / -name 文件名 | 查找文件 | 命令 |
2.3.7 壓縮包及解壓包
| .tar | tar xvf FileName.tar | 解包 | 命令 |
| .tar | tar cvf FileName.tar DirName | 打包 | 命令 |
| .gz | gzip -d FileName.gz | 解包 | 命令 |
| .gz | gzip FileName | 打包 | 命令 |
| .tar.gz | tar zxvf FileName.tar.gz | 解包 | 命令 |
| .tar.gz | tar zcvf FileName.tar.gz DirName | 打包 | 命令 |
| .zip | unzip FileName.zip | 解包 | 命令 |
| .zip | zip FileName.zip FileName | 打包 | 命令 |
2.3.8 開放服務(wù)器端口
Linux默認只開放了80和22端口.其他端口需要用戶自行授權(quán)開放
| /sbin/iptables -I INPUT -p tcp --dport 8080 -j ACCEPT | 對外開放端口(臨時) | 命令 |
| firewall-cmd --permanent --zone=public --add-port=8080/tcp | 端口加入防火墻白名單(永久) | 命令 |
| firewall-cmd --reload | 重啟防火墻 | 命令 |
2.3.9 用戶添加
| useradd 用戶賬戶名 | 添加用戶 | 命令 |
| passwd 用戶賬戶名 | 修改用戶密碼 | 命令 |
| su [用戶名] | 切換用戶(當用戶名不填時,表示切換到系統(tǒng)用戶root) | 命令 |
| chmod u+w 指定的文件(/etc/sudoers) | 給用戶添加權(quán)限(添加完權(quán)限之后,需要使用sudo 來執(zhí)行命令) | 命令 |
2.3.10 查看進程
| ps -ef|grep tomcat | 根據(jù)軟件名字(此處為:tomcat)查看進程 | 命令 |
| netstat -unltp|grep 8080 | 根據(jù)端口查看占用進程 | 命令 |
2.4 軟件安裝
2.4.1 安裝JDK
使用ftp工具將jdk的rpm安裝包上傳至某一個目錄中.
| rpm -ivh jdk的rpm安裝包 | 安裝命令 | 命令 |
| Java -version | 驗證安裝 | 命令 |
2.4.2 安裝tomcat
| tar zxvf apache-tomcat-7.0.82.tar.gz | 解壓tomcat的壓縮包 | 命令 |
| mv apache-tomcat-7.0.82 /usr/local | 將解壓縮的文件移動到/usr/local目錄 | 命令 |
| ./startup.sh | 啟動tomcat(在tomcat的bin目錄下) | 命令 |
| tail -f …/logs/catalina.out | 輸出tomcat日志 | 命令 |
| ps -ef|grep tomcat | 查看tomcat進程(可顯示tomcat進程號) | 命令 |
| kill -9 進程號 | 強制終止tomcat(進程號由上邊命令查詢) | 命令 |
| /sbin/iptables -I INPUT -p tcp --dport 8080 -j ACCEPT | 對外開放端口(臨時) | 命令 |
| firewall-cmd --permanent --zone=public --add-port=8080/tcp | 端口加入防火墻白名單(永久) | 命令 |
2.4.3 安裝Nginx
1 介紹
-
Nginx 是一個高性能的 Web 和反向代理服務(wù)器, 它具有有很多非常優(yōu)越的特性:
-
作為 Web 服務(wù)器:相比 Apache,Nginx 使用更少的資源,支持更多的并發(fā)連接,體現(xiàn)更高的效率,這點使 Nginx 尤其受到虛擬主機提供商的歡迎。能夠支持高達 50,000 個并發(fā)連接數(shù)的響應(yīng)。
-
作為負載均衡服務(wù)器:Nginx 既可以在內(nèi)部直接支持 Rails 和 PHP,也可以支持作為 HTTP代理服務(wù)器 對外進行服務(wù)。Nginx 用 C 編寫, 不論是系統(tǒng)資源開銷還是 CPU 使用效率很優(yōu)秀。
-
作為郵件代理服務(wù)器: Nginx 同時也是一個非常優(yōu)秀的郵件代理服務(wù)器(最早開發(fā)這個產(chǎn)品的目的之一也是作為郵件代理服務(wù)器)。
-
Nginx 安裝非常的簡單,配置文件 非常簡潔(還能夠支持perl語法),Bugs非常少的服務(wù)器: Nginx 啟動特別容易,并且?guī)缀蹩梢宰龅?*24不間斷運行,即使運行數(shù)個月也不需要重新啟動。你還能夠在 不間斷服務(wù)的情況下進行軟件版本的升級。
2 反向代理服務(wù)器/負載均衡服務(wù)器
-
使用ftp工具將nginx-1.10.2.tar.gz文件上傳至虛擬機對的某一個目錄中。
-
安裝nginx相關(guān)的依賴
| yum -y install zlib zlib-devel openssl openssl-devel | 連接網(wǎng)絡(luò)下載依賴 |
| yum -y install patch | 連接網(wǎng)絡(luò)下載依賴 |
- 解壓Nginx壓縮包
| tar zxvf nginx-1.10.3.tar.gz |
- 配置nginx編譯環(huán)境
| ./ configure | 配置nginx的編譯環(huán)境 | 命令 |
| –pid-path | nginx的進程文件存放目錄 | 命令 |
| –error-log-path | 錯誤日志存放目錄 | 命令 |
| –http-log-path | 請求日志存放目錄 | 命令 |
| module | Nginx中的功能,基本上都是以module的形式存在 | 命令 |
| 命令 |
- 給依賴預(yù)設(shè)值
| ./configure --prefix=/usr/local/nginx --pid-path=/usr/local/nginx/nginx.pid --error-log-path=/usr/local/nginx/logs/error.log --http-log-path=/usr/local/nginx/logs/access.log --with-http_stub_status_module --with-http_ssl_module --with-http_gzip_static_module --with-http_realip_module --with-stream --http-client-body-temp-path=/usr/local/nginx/tmp/client/ --http-proxy-temp-path=/usr/local/nginx/tmp/proxy/ |
- 編譯安裝
| 在nginx目錄下,編譯,執(zhí)行 make | 編譯 | 命令 |
| 再執(zhí)行 make install | 安裝 | 命令 |
- 驗證Nginx是否安裝成功
| /usr/local/nginx/sbin/nginx -V |
- 配置nginx.conf
| vim /usr/local/nginx/conf/nginx.conf |
- 在配置文件中加入標注為新加入的內(nèi)容 ,實際工作中,不要忘記提前把域名和服務(wù)器IP綁定在一起。
- 校驗nginx配置文件
| /usr/local/nginx/sbin/nginx -t |
- 創(chuàng)建文件夾 /usr/local/nginx/tmp/client/
| mkdir -p /usr/local/nginx/tmp/client/ |
- 啟動nginx
| /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf |
- 如果無法訪問,80端口加入防火墻白名單
| firewall-cmd --permanent --zone=public --add-port=80/tcp |
- 重啟nginx
| /usr/local/nginx/sbin/nginx -s reload |
-
關(guān)閉
根據(jù)端口查找進程然后殺進程(與tomcat類似,但是用根據(jù)端口號查詢)
| netstat -unltp\grep 80 | 查詢80端口對應(yīng)的進程號 | 命令 |
| kill -9 進程號 | 殺進程 | 命令 |
3 流量限制
為防止用戶惡意訪問,可以在nginx設(shè)置限流,防止發(fā)生雪崩效應(yīng)。
3.1 根據(jù)ip控制速率
請求限制的功能來自于 ngx_http_limit_req_module 模塊。使用它需要首先在 http 配置段中定義限制的參照標準和狀態(tài)緩存區(qū)大小。
limit_req_zone 只能配置在 http 范圍內(nèi);
$binary_remote_addr代表客戶端ip
javasmlimit是自定義變量名
rate 請求頻率,每秒允許多少請求;rate=3r/s; 每秒只處理3次請求,超過的請求拒絕處理。
10m緩沖區(qū)大小,1M能存儲16000 IP地址,10M可以存儲16W IP地址訪問信息
在server {外 http模塊加上如下內(nèi)容,為方便測試,每秒處理1個請求
limit_req_zone $binary_remote_addr zone=javasmlimit:10m rate=1r/s;在location / {內(nèi) location模塊加上如下內(nèi)容,表示當前請求會根據(jù)javasmlimit規(guī)則來限流,
#nodelay 不延遲處理 #burst 是配置超額處理,可簡單理解為隊列機制 # 上面配置同一個 IP 每秒只能發(fā)送一次請求(1r/s),這里配置了緩存3個請求,其它任務(wù)請求則失敗(503錯誤) limit_req zone=javasmlimit burst=3 nodelay;3.2 控制并發(fā)連接數(shù)
http模塊添加
limit_conn_zone $binary_remote_addr zone=perip:10m; limit_conn_zone $server_name zone=perserver:10m;location/ 模塊添加
limit_conn perip 10;#單個客戶端ip與服務(wù)器的連接數(shù) limit_conn perserver 100; #限制與服務(wù)器的總連接數(shù) # 限制傳輸速度(如果有N個并發(fā)連接,則是 N * limit_rate) limit_rate 1024k;流量限制不會提高服務(wù)器性能,但是能讓服務(wù)器更加健壯。
測試過程中,我們看見系統(tǒng)默認的錯誤頁面,正式上線還要修改錯誤頁面的展示,我們可以修改/html/文件夾下的錯誤頁面,給自己的nginx添加一個好看的錯誤頁面。
需要配合靜態(tài)文件服務(wù)器的功能。
4 靜態(tài)資源服務(wù)器
- 修改nginx.conf
- 第一行#添加 user root;
- 加入新的location提前創(chuàng)建好文件夾,在文件夾中傳入靜態(tài)文件 mkdir -p /home/data
兩種配置方式:
(1) root配置
location /img/ {root /home/data/; }root是指定目錄的上級目錄,并且在指定的文件夾必須包含location指定名稱的同名目錄。
上面例子中,/home/data/目錄下,必須有img文件夾才可以訪問
請求路徑:http://192.168.2.238/img/xxx.jpg
(2) alias配置
location /static/ {alias /home/data/; }alias是指定目錄的虛擬路徑,location指定的名稱是代替文件目錄的訪問路徑
上面例子中,瀏覽器中輸入static可以代替/home/data路徑
請求路徑:http://192.168.2.238/static/img/xxx.jpg
5 跨域配置
關(guān)于nginx的跨域可以配置在兩個位置
5.1 允許全局的跨域
在server模塊內(nèi),加入如下配置
add_header Access-Control-Allow-Origin *; add_header Access-Control-Allow-Methods 'GET,POST'; add_header Access-Control-Allow-Headers 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization';5.2 允許指定路徑跨域
add_header Access-Control-Allow-Origin *; add_header Access-Control-Allow-Methods 'GET,POST'; add_header Access-Control-Allow-Headers 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization';再有一種,在代碼種加入跨域配置,這里以springboot項目為例
如果使用vue等前后端分離請求,會攜帶Cookie等信息,但是服務(wù)器不能信任全部域名的Cookie,如果想訪問,可以從客戶端和服務(wù)端兩種解決方案,這里說明在服務(wù)器端的設(shè)置代碼。
@Configuration public class CorsConfig { private CorsConfiguration buildConfig() { CorsConfiguration corsConfiguration = new CorsConfiguration(); corsConfiguration.addAllowedOrigin("*"); // 1允許任何域名使用 corsConfiguration.addAllowedHeader("*"); // 2允許任何頭 corsConfiguration.addAllowedMethod("*"); // 3允許任何方法(post、get等) corsConfiguration.setAllowCredentials(true);//支持安全證書。跨域攜帶cookie需要配置這個 corsConfiguration.setMaxAge(3600L);//預(yù)檢請求的有效期,單位為秒。設(shè)置maxage,可以避免每次都發(fā)出預(yù)檢請求 return corsConfiguration; } @Bean public CorsFilter corsFilter() { UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); source.registerCorsConfiguration("/**", buildConfig()); // 4 return new CorsFilter(source); } }6 SpringSession
1. HttpSession介紹
1.1 什么是HttpSession
第二階段課程中,我們學(xué)習(xí)過HttpSession的相關(guān)知識,后續(xù)項目中,我們通常在Session中存儲用戶或菜單等信息,現(xiàn)在我們復(fù)習(xí)一下HttpSession的知識。
瀏覽器每次訪問,服務(wù)器都會為每個用戶創(chuàng)建一個獨立的HttpSession對象
第一次訪問服務(wù)器時,請求中沒有攜帶任何標識,所以服務(wù)器會創(chuàng)建一個新的session對象,并且生成一個SessionID;
這個SessionID在響應(yīng)瀏覽器的時候會被裝進cookie中,從而被保存到瀏覽器中;
當用戶再一次訪問服務(wù)器時,請求中會攜帶著cookie中的SessionID去訪問;
服務(wù)器會根據(jù)這個SessionID去查看是否有對應(yīng)的Session對象;
有就拿出來使用,沒有就創(chuàng)建一個Session。
服務(wù)器識別Session的標識是sessionid
1.2 Session共享
1.2.1 什么是Session共享
一個瀏覽器在訪問多個web服務(wù)器時,多個服務(wù)器之間的session對象需要共享數(shù)據(jù)。
1.2.2 應(yīng)用場景
在我們學(xué)過的Nginx反向代理模式中,用戶通過方向代理服務(wù)器來訪問真實服務(wù)器,如果使用隨機或輪詢策略,用戶每次訪問的服務(wù)器是不同的,那么我們無法獲取用戶存儲在Session中的數(shù)據(jù)。
1.2.3 Session共享解決方案
l Session復(fù)制
通過對應(yīng)用服務(wù)器的配置開啟服務(wù)器的 Session 復(fù)制功能,在集群中的幾臺服務(wù)器之間同步 Session 對象,使得每臺服務(wù)器上都保存所有的 Session 信息,這樣任何一臺宕機都不會導(dǎo)致 Session 的數(shù)據(jù)丟失,服務(wù)器使用 Session 時,直接從本地獲取。這種方式的缺點也比較明顯。因為 Session 需要時時同步,并且同步過程是有應(yīng)用服務(wù)器來完成,由此對服務(wù)器的性能損耗也比較大。
l Session 綁定
利用 hash 算法,比如 nginx 的 ip_hash,使得同一個 Ip 的請求分發(fā)到同一臺服務(wù)器上。 這種方式不符合對系統(tǒng)的高可用要求,因為一旦某臺服務(wù)器宕機,那么該機器上的 Session 也就不復(fù)存在了,用戶請求切換到其他機器后么有 Session,無法完成業(yè)務(wù)處理。
l 利用 Cookie 記錄 Session
Session 記錄在客戶端,每次請求服務(wù)器的時候,將 Session 放在請求中發(fā)送給服務(wù)器, 服務(wù)器處理完請求后再將修改后的 Session 響應(yīng)給客戶端。這里的客戶端就是 cookie。 利用 cookie 記錄 Session 的也有缺點,比如受 cookie 大小的限制,能記錄的信息有限, 安全性低,每次請求響應(yīng)都需要傳遞 cookie,影響性能,如果用戶關(guān)閉 cookie,訪問就不正常。
l Session 服務(wù)器
Session 服務(wù)器可以解決上面的所有的問題,利用獨立部署的 Session 服務(wù)器統(tǒng)一管理 Session,服務(wù)器每次讀寫 Session 時,都訪問 Session 服務(wù)器。 對于 Session 服務(wù)器,我們可以使用 Redis 或者 MongoDB 等內(nèi)存數(shù)據(jù)庫來保存 Session 中的數(shù)據(jù),以此替換掉服務(wù)中的 HttpSession。達到 Session 共享的效果。
1.3 測試無Session共享時的Session值
1.3.1 啟動多個服務(wù)器
1.3.2 配置并啟動Nginx,搭建服務(wù)器集群
1.3.3 設(shè)置Session并且嘗試獲取數(shù)據(jù)
2 SpringSession介紹
? Spring Session 是Spring家族中的一個子項目,Spring Session提供了用于管理用戶會話信息的API和實現(xiàn)。
? 它把servlet容器實現(xiàn)的httpSession替換為spring-session,專注于解決 session管理問題,Session信息存儲在Redis中,可簡單快速且無縫的集成到我們的應(yīng)用中;
3 SpringBoot+SpringSession+Redis示例
Spring+SpringSession配置較為繁瑣,我們以配置簡單的SpringBoot為例。
3.1 添加依賴
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <dependency><groupId>org.springframework.session</groupId><artifactId>spring-session-data-redis</artifactId> </dependency>3.2 修改配置文件
spring:redis:host: 127.0.0.1password: javasmport: 6379timeout: 3000session: store-type: redis3.3 測試
3.3.1 啟動Redis
3.3.2 啟動多個Tomcat服務(wù)器
發(fā)現(xiàn)此時已經(jīng)可以達到Session共享
2.4.4 安裝redis
1 redis的安裝與基本測試
- 上傳redis-3.2.9.tar.gz文件到opt文件夾
| tar zxvf redis-3.2.9.tar.gz | 解壓redis壓縮包 | 命令 |
| mv redis-3.2.9 /usr/local/ | 移動redis文件夾到指定位置 | 命令 |
| cd /usr/local/redis-3.2.9/src | 1. 進入源碼src目錄 | 命令 |
| make | 編譯redis源碼 | 命令 |
| make test | 1. 測試編譯結(jié)果 | 命令 |
| vim redis.conf | 打開配置文件 | 命令 |
| bind 綁定端口號注釋 | 注釋掉自帶端口號 | 配置信息 |
| requirepass 打開注釋 修改密碼 | 設(shè)置密碼 | 配置信息 |
| firewall-cmd --permanent --zone=public --add-port=6379/tcp | 開放端口號 | 命令 |
| firewall-cmd --reload | 重啟防火墻 | 命令 |
| cd /usr/local/redis-3.2.9/src | 進入redis啟動 命令目錄 | 命令 |
| ./redis-server …/redis.conf & (&符號表示在后臺執(zhí)行) | 啟動redis | 命令 |
| ./redis-cli -h 127.0.0.1 -p 6379 | 連接redis | 命令 |
| auth javasm | s輸入密碼-javasm是密碼 | 命令 |
| 輸入指令exit退出 | 退出連接 | 命令 |
| ps -ef|grep redis | 查詢redis進程 | 命令 |
| kill -9 進程號 | 殺進程停止redis服務(wù) | 命令 |
2 redis集群
2.1 Linux環(huán)境如何搭建Redis集群
-
Redis主從復(fù)制簡單介紹
作用
? 1.一個master可以有多個slave
? 2.除了多個slave連到相同的master外,slave也可以連接其他slave形成圖狀結(jié)構(gòu)
? 3.主從復(fù)制不會阻塞master。也就是說當一個或多個slave與master進行初次同步數(shù)據(jù)時,master可以繼續(xù)處理client發(fā)來的請求。相反slave在初次同步數(shù)據(jù)時則會阻塞不能處理client的請求。
? 4.主從復(fù)制可以用來提高系統(tǒng)的可伸縮性,我們可以用多個slave 專門用于client的讀請求,比如sort操作可以使用slave來處理。也可以用來做簡單的數(shù)據(jù)冗余
? 5.可以在master禁用數(shù)據(jù)持久化,只需要注釋掉master 配置文件中的所有save配置,然后只在slave上配置數(shù)據(jù)持久化。
? 6.可以用于讀寫分離和容災(zāi)恢復(fù)。
-
Redis主從復(fù)制的常用的幾種方式
-
一主二仆 A(B、C) 一個Master兩個Slave
-
薪火相傳(去中心化)A - B - C ,B既是主節(jié)點(C的主節(jié)點),又是從節(jié)點(A的從節(jié)點)
-
反客為主(主節(jié)點down掉后,手動操作升級從節(jié)點為主節(jié)點) & 哨兵模式(主節(jié)點down掉后,自動升級從節(jié)點為主節(jié)點)
這里先配置一主二仆模式,薪火相傳與一主二仆配置方式類似,之后再配置哨兵模式
Redis主從復(fù)制的搭建(一主二仆)
角色設(shè)計
? 需要搭建3個Redis環(huán)境
? 6379端口的Redis作為主(Master)
? 6380和6381端口的Redis作為仆從(Slave)
Redis主庫搭建
參照上節(jié)文檔,即6379的搭建與原來一樣,不需要變化。
從庫搭建
-
復(fù)制主庫文件夾,修改名字
cp -r /usr/local/redis-3.2.9/redis.conf /usr/local/redis-3.2.9/redis.6380.conf
-
修改配置文件
以6380為例,進行修改
打開redis.config
vim /usr/local/redis-3.2.9_6380/redis.conf
-
端口進行修改
port 6380 -
主庫配置
下面host為ip地址port為端口號 slaveof <host> <port> -
主庫密碼
下面master-password為主庫的密碼 masterauth<master-password>6380和6381加入防火墻白名單
操作效果類型 firewall-cmd --permanent --zone=public --add-port=6380/tcp 開放端口 命令 firewall-cmd --permanent --zone=public --add-port=6381/tcp 開放端口 命令 firewall-cmd --reload 重啟防火墻 命令 -
啟動
先啟動主庫,后啟動從庫,啟動方式與之前一致
Linux啟動
進入src文件夾,執(zhí)行指令./redis-server …/redis.conf &
-
測試
-
進入主庫客戶端
輸入指令 info replication
日志中可以看見,當前角色是master,兩個從庫分別是端口6380和6381
-
進入從庫客戶端
日志中可以看出,當前角色是slave,master的ip和port都已經(jīng)顯示出來
- conf文件中的配置,從庫只能讀取不能寫
-
2.2Redis主從復(fù)制的原理
-
當設(shè)置好slave服務(wù)器后,slave會建立和master的連接,然后發(fā)送sync命令。
-
Master接到命令啟動后臺的存盤進程,同時收集所有接收到的用于修改數(shù)據(jù)集命令,在后臺進程執(zhí)行完畢之后,master將傳送整個數(shù)據(jù)文件到slave,以完成一次完全同步。
-
全量復(fù)制:而slave服務(wù)在接收到數(shù)據(jù)庫文件數(shù)據(jù)后,將其存盤并加載到內(nèi)存中。(第一次全量)
-
增量復(fù)制:Master繼續(xù)將新的所有收集到的修改命令依次傳給slave,完成同步。(之后增量)
-
但是只要是重新連接master,一次完全同步(全量復(fù)制)將被自動執(zhí)行。
Redis 主從同步有兩種方式(或者所兩個階段):全同步和部分同步。
主從剛剛連接的時候,進行全同步;全同步結(jié)束后,進行部分同步。當然,如果有需要,Slave 在任何時候都可以發(fā)起全同步。Redis 策略是,無論如何,首先會嘗試進行部分同步,如不成功,要求從機進行全同步,并啟動 BGSAVE……BGSAVE 結(jié)束后,傳輸 RDB 文件;如果成功,允許從機進行部分同步,并傳輸積壓空間(更新緩存)中的數(shù)據(jù)。
Redis主從復(fù)制(一主兩從/一主多從)的分析
-
IO劇增
每次slave斷開以后(無論是主動斷開,還是網(wǎng)路故障)再連接master都要將master全部dump出來rdb,在aof,即同步的過程都要重新執(zhí)行一遍;所以要記住多臺slave不要一下都啟動起來,否則master可能IO劇增(間隔1-2分)
-
復(fù)制延遲
由于所有的寫操作都是先在Master上操作,然后同步更新到Slave上,所以從Master同步到Slave機器有一定的延遲,當系統(tǒng)很繁忙的時候,延遲問題會更加嚴重,Slave機器數(shù)量的增加也會使這個問題更加嚴重。
-
可用性不高
當有主節(jié)點發(fā)生異常情況,就會導(dǎo)致不能寫入,導(dǎo)致業(yè)務(wù)出錯!
注意:
? Redis 集群不保證數(shù)據(jù)的強一致性(strong consistency)Redis 集群的一致性保證(guarantee): 在特定條件下, Redis 集群可能會丟失已經(jīng)被執(zhí)行過的寫命令。
2.4.5 安裝mysql
| 創(chuàng)建mysql文件夾 | ./mycat start |
| 解壓mysql的壓縮包(-C 表示解壓到指定的目錄) | tar xvf mysql-5.7.20-1.el7.x86_64.rpm-bundle.tar -C mysql/ |
| 刪除Mysql的MariaDB依賴 | rpm -qa|grep mariadb [查找mariadb] |
| rpm -e mariadb包全名 --nodeps | |
| 依次安裝mysql的rpm包(common,libs,client,server)安裝1 | rpm -ivh mysql-community-common-5.7.20-1.el7.x86_64.rpm |
| 安裝2 | rpm -ivh mysql-community-libs-5.7.20-1.el7.x86_64.rpm |
| 安裝3 | rpm -ivh mysql-community-client-5.7.20-1.el7.x86_64.rpm |
| 安裝4 | rpm -ivh mysql-community-server-5.7.20-1.el7.x86_64.rpm |
| 啟動mysql | service mysqld start |
| 查找初始密碼 | vim /var/log/mysqld.log 或 grep password /var/log/mysqld.log |
| 連接mysql | mysql -u root -p |
| 修改密碼 | ALTER USER ‘root’@‘localhost’ IDENTIFIED BY ‘Javasm123!’; |
| 修改mysql訪問權(quán)限:查看庫 | show databases; |
| 進入mysql數(shù)據(jù)庫 | use mysql; |
| 查看 庫中有哪些表 | show tables; |
| 更改用戶的訪問權(quán)限 | update user set host=’%’ where user = ‘root’; |
| 刷新權(quán)限緩存 | flush privileges; |
| 3306加入白名單 | firewall-cmd --permanent --zone=public --add-port=3306/tcp |
| 重啟防火墻 | firewall-cmd --reload |
2.4.6 安裝Mycat
-
從定義和分類來看,它是一個開源的分布式數(shù)據(jù)庫系統(tǒng),是一個實現(xiàn)了 MySQL 協(xié)議的Server,前端用戶可以把它看作是一個數(shù)據(jù)庫代理,用 MySQL客戶端和命令行訪問,MySQL 原生(Native)協(xié)議與多個 MySQL 服務(wù)器通信,也可以用 JDBC 協(xié)議與大多數(shù)主流數(shù)據(jù)庫服務(wù)器通信,其核心功能是讀寫分離,分表分庫,即將一個大表水平分割為 N 個小表,存儲在后端 MySQL 服務(wù)器里或者其他數(shù)據(jù)庫里。
-
Mycat是一個Java應(yīng)用,所以安裝環(huán)境需要依賴JDK.
-
Mycat是阿里巴巴開源的一個項目
| 解壓Mycat安裝包 | tar zxvf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz |
| 將文件夾移至/usr/local/ | mv mycat /usr/local/ |
| 進入mycat/conf目錄 | vim server.xml 修改user相關(guān)信息(也可以使用默認信息) |
server.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mycat:server SYSTEM "server.dtd"> <mycat:server xmlns:mycat="http://io.mycat/"><system><property name="useSqlStat">0</property><property name="useGlobleTableCheck">0</property> <property name="sequnceHandlerType">2</property><property name="processorBufferPoolType">0</property><property name="handleDistributedTransactions">0</property><property name="useOffHeapForMerge">1</property><property name="memoryPageSize">1m</property><property name="spillsFileBufferSize">1k</property><property name="useStreamOutput">0</property><property name="systemReserveMemorySize">384m</property><property name="useZKSwitch">true</property></system><!-- 全局SQL防火墻設(shè)置 --><!-- <firewall> <whitehost><host host="127.0.0.1" user="mycat"/><host host="127.0.0.2" user="mycat"/></whitehost><blacklist check="false"></blacklist></firewall>--><!-- =====================以下內(nèi)容為需要修改===================== --><user name="root"><!-- mycat用戶名 --><property name="password">root</property><!-- mycat用戶密碼 --><property name="schemas">javasm</property><!-- mycat數(shù)據(jù)庫名 --></user><user name="user"><property name="password">123456</property><property name="schemas">javasm</property><property name="readOnly">true</property></user><!-- 注意每個user都需要修改即使不使用 --><!-- =====================以上內(nèi)容為需要修改===================== --> </mycat:server>schema.xml
- schema配置文件是用來描述邏輯數(shù)據(jù)庫中的數(shù)據(jù)節(jié)點和讀寫庫配置信息
- 測試Mycat
- bin目錄下Mycat 運行命令
| 啟動 | ./mycat start |
| 停止 | ./mycat stop |
| 重新啟動 | ./mycat restart |
| 查看Mycat運行日志 | tail –f mycat.log |
| 調(diào)整日志等級 | 修改log4j2.xml的日志等級為debug |
- 連接命令
| 使用mysql命令登入Mycat | mysql -u root -p -P8066 -h 127.0.0.1 |
| n mycat默認端口號為8066 | |
| 開放端口 | firewall-cmd --permanent --zone=public --add-port=8066/tcp |
| 重啟防火墻 | firewall-cmd --reload |
- 常見錯誤
- Schema標簽里的dataNote屬性不要忘記
- 主從數(shù)據(jù)庫中都要有配置的庫
1 主從同步
1.1 設(shè)置主庫mysql的配置文件
- 編輯/etc/my.cnf
| 添加服務(wù)id配置 在/etc/my.cnf里面添加 | server-id=1 (保證唯一) |
| 開啟二進制日志文件 在/etc/my.cnf里面添加 | log-bin=/var/lib/mysql/mysql-bin |
- sql操作
| 重啟mysql | service mysqld restart |
| 連接數(shù)據(jù)庫 | mysql -u root -p [密碼] |
| 執(zhí)行sql查詢信息 | show master status; |
注意:復(fù)制File和Position的值,需要給slave(從庫)使用
1.2 設(shè)置從庫mysql的配置文件
- 編輯/etc/my.cnf
| 添加服務(wù)id配置 在/etc/my.cnf里面添加 | server-id=2(保證唯一) |
- sql操作
| 重啟mysql | service mysqld restart |
| 連接數(shù)據(jù)庫 | mysql -u root -p [密碼] |
| 執(zhí)行sql關(guān)閉slave | stop slave; |
- 執(zhí)行下邊指令注意漢字部分需要替換,File和Position的值為配置主庫時復(fù)制的信息
- 重新打開slave
| 啟動slave | start slave; |
| 查看slave狀態(tài) | show slave status\G; |
注意:上邊查看重點是Slave_IO_Running=yes Slave_SQL_Running=yes和配置的主庫信息是否正確。
2 系統(tǒng)切分及解決方案
-
數(shù)據(jù)切分:
簡單來說,就是指通過某種特定的條件,按照某個維度,將我們存放在同一個數(shù)據(jù)庫中的數(shù)據(jù)分散存放到多個數(shù)據(jù)庫(主機)上面以達到分散單庫(主機)負載的效果。
mycat來進行數(shù)據(jù)切分十分簡單只需要修改xml格式配置文件即可。修改mycat安裝路徑下conf下的shema.xml文件。
2.1 垂直切分
<?xml version="1.0"?> <!DOCTYPE mycat:schema SYSTEM "schema.dtd"> <mycat:schema xmlns:mycat="http://io.mycat/"><schema name="javasm" checkSQLschema="false" sqlMaxLimit="100"><!--menu_test表 會在dn1和dn2兩個庫中隨機訪問 --><table name="menu_test" primaryKey="ID" type="global" dataNode="dn1,dn2" /><!--goods_test表 只訪問dn1 --><table name="goods_test" primaryKey="ID" type="global" dataNode="dn1" /></schema><!--database是必須真實存在的 庫 上面配置的表 必須真實存在庫里--><dataNode name="dn1" dataHost="localhost1" database="goods" /><dataNode name="dn2" dataHost="localhost2" database="menu" /><dataHost name="localhost1" maxCon="1000" minCon="10" balance="3"writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100"><heartbeat>select user()</heartbeat><writeHost host="hostM1" url="192.168.12.173:3306" user="root"password="Javasm123!"></writeHost></dataHost><dataHost name="localhost2" maxCon="1000" minCon="10" balance="3"writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100"><heartbeat>select user()</heartbeat><writeHost host="hostM1" url="192.168.12.174:3306" user="root"password="Javasm123!"></writeHost></dataHost> </mycat:schema>2.2 水平切分
<?xml version="1.0"?> <!DOCTYPE mycat:schema SYSTEM "schema.dtd"> <mycat:schema xmlns:mycat="http://io.mycat/"><schema name="javasm" checkSQLschema="false" sqlMaxLimit="100"><table name="goods_test" primaryKey="ID" type="global" dataNode="dn1,dn2,dn3" /></schema><dataNode name="dn1" dataHost="localhost1" database="goods-1" /><dataNode name="dn2" dataHost="localhost1" database="goods-2" /><dataNode name="dn3" dataHost="localhost1" database="goods-3" /><dataHost name="localhost1" maxCon="1000" minCon="10" balance="3"writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100"><heartbeat>select user()</heartbeat><writeHost host="hostM1" url="192.168.12.173:3306" user="root"password="Javasm123!"><readHost host="hostS2" url="192.168.12.174:3306" user="root" password="Javasm123!" /> </writeHost></dataHost> </mycat:schema>2.4.7 安裝solr
通過工具將solr壓縮包放入linux下
1 安裝流程
- 準備安裝包
| 解壓solr壓縮包 | tar zxvf solr-5.5.5.tgz |
| 創(chuàng)建Solr數(shù)據(jù)和安裝目錄 | mkdir -p /data/solr /usr/local/solr |
| 安裝Solr(進入 solr-5.5.5/bin/ 目錄) | ./install_solr_service.sh /opt/solr-5.5.5.tgz -d /data/solr -i /usr/local/solr/ |
-
Solr安裝時,會自動創(chuàng)建一個solr用戶,可以進入/etc/passwd中查看
如果未創(chuàng)建則執(zhí)行如下命令手動創(chuàng)建
| 創(chuàng)建用戶組 | groupadd solr |
| 創(chuàng)建用戶 | useradd -g solr solr |
| 給solr用戶授權(quán) | chown -R solr.solr /data/solr /usr/local/solr |
- 啟動命令
| 啟動 | service solr start |
| 停止 | service solr stop |
| 重新啟動 | service solr restart |
| n 創(chuàng)建一個新的core(javasm) | su - solr -c “/usr/local/solr/solr/bin/solr create -c javasm -n data_driven_schema_configs” |
注意:core相當于一個文檔集,存放著文檔,文檔字段類型配置,索引等等信息。
- 訪問Solr管理界面
- http://localhost:8983/solr
2 SpringBoot中的使用
- 引入SpringBootStart
- 配置文件
2.4.8 yum
yum(全稱為 Yellow dog Updater, Modified)是一個在Fedora和RedHat以及CentOS中的Shell前端軟件包管理器。基于RPM包管理,能夠從指定的服務(wù)器自動下載RPM包并且安裝,可以自動處理依賴性關(guān)系,并且一次安裝所有依賴的軟件包,無須繁瑣地一次次下載、安裝。
yum常用命令
| 查找包 | yum search 指令名 |
| 安裝包 | yum install 搜索出來的包名 |
| 卸載包 | yum remove 包名 |
| 默認yes安裝 | yum -y install 包名 |
總結(jié)
以上是生活随笔為你收集整理的5.1linux整理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: DM8:Linux下实现disql命令上
- 下一篇: Linux下实现达梦数据库disql 命