日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

5.1linux整理

發布時間:2024/5/14 linux 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 5.1linux整理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

虛擬機下linux的安裝與使用

    • 1 虛擬機下linux的安裝與使用
      • 1.1 安裝虛擬機
      • 1.2 啟動虛擬機的linux系統
      • 1.3 Xshell與虛擬機鏈接
        • 1.3.1 為什么要用Xshell工具
        • 1.3.2 Xshell的安裝
        • 1.3.3 Xshell的使用
    • 2 linux
      • 2.1 什么是Linux
      • 2.2 常用發行版本
      • 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 開放服務器端口
        • 2.3.9 用戶添加
        • 2.3.10 查看進程
      • 2.4 軟件安裝
        • 2.4.1 安裝JDK
        • 2.4.2 安裝tomcat
        • 2.4.3 安裝Nginx
          • 1 介紹
          • 2 反向代理服務器/負載均衡服務器
          • 3 流量限制
            • 3.1 根據ip控制速率
            • 3.2 控制并發連接數
          • 4 靜態資源服務器
          • 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環境如何搭建Redis集群
            • 2.2Redis主從復制的原理
        • 2.4.5 安裝mysql
        • 2.4.6 安裝Mycat
          • 1 主從同步
            • 1.1 設置主庫mysql的配置文件
            • 1.2 設置從庫mysql的配置文件
          • 2 系統切分及解決方案
            • 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

選擇安裝位置然后無腦下一步即可。

安裝完成后桌面出現Oracle VM VirtualBox的圖標點擊進入虛擬機管理頁面。可以通過管理菜單導入導出虛擬機的linux操作系統

注意:此文檔導入的linux系統為xxx.ova文件

選擇好系統文件后,進行虛擬電腦導入設置:

  • 1.設置虛擬電腦位置
  • 2.將MAC地址設定為:為所有網卡重新生成MAC地址
  • 3.在虛擬系統中也可設置處理器、內存等,但是這些有初始默認設置,此處我們不進行修改。

設置完成后點擊導入等待導入完成即可。

創建完成后需要進入設置1.調整對應的網卡,2.全部允許混雜模式,3.刷新mac地址,此時虛擬機管理器上已經顯示有一個虛擬系統可以啟動。

1.2 啟動虛擬機的linux系統

點擊選擇管理軟件中已經準備就緒的系統,右鍵選擇或者通過菜單欄的啟動按鈕進行啟動(此處相當于windows的開機)。

自動運行至等待登錄界面顯示:localhost login:

此時輸入超級管理員root----->輸入密碼(linux命令行下輸入密碼,光標不移動且界面顯示不變,需要自己記得輸入的密碼)------>登陸成功(展示last login:(上次登錄的時間))----->進入命令行主界面[root@localhost ~]#

至此linux在虛擬機中已經成功啟動,可以開始使用linux的指令。

1.3 Xshell與虛擬機鏈接

1.3.1 為什么要用Xshell工具

  • 對于本地服務器來說,linux系統的命令行即可完成一系列操作。
  • 當下流行的云服務器和服務器托管都是服務器實際并不在自己的公司,無法或者很難去面對服務器做一些操作,因此就需要一些遠程軟件來進行操作。(服務器機房一般要求溫度、無塵、網速保證等,小公司一般不設置機房。)

1.3.2 Xshell的安裝

此處我們選用的是破解好的綠色版壓縮包Xshell_Plus_v6.0.0095.7z

解壓后出現Xshell Plus文件夾,進入該文件夾雙擊: !綠化.bat文件,按照提示在命令行輸入信息安裝,安裝完成后桌面出現:

  • Xshell圖標(用于連接虛擬機linux系統),

  • Xftp圖標(展示linux下的文件結構,可以直接按照windows的方式對其進行基本操作)

1.3.3 Xshell的使用

注意:在啟動之前可以先關閉剛才啟動的linux系統,然后通過管理頁面無界面啟動

  • 雙擊Xshell打開

  • 新建會話

  • 設置項:

    • 名稱(鏈接的名字,隨便寫)

    • 協議(SSH)

    • 主機(虛擬系統的主機:linux命令行下可以輸入ifconfig查詢。)

    • 端口號(本虛擬機默認22,有些默認80)

  • 點擊確定新建成功

  • 輸入用戶名 輸入密碼 ,點擊確認。(此處用戶名密碼為虛擬機系統的用戶名密碼)

  • 登錄完成進入主界面(可以進行linux命令操作)

2 linux

2.1 什么是Linux

  • 一種免費,開源的操作系統

  • 常作為服務器的操作系統使用

  • 在目前市面上的服務器操作系統一般使用linux,極少數使用Windows Server(微軟公司為服務器提供的應用操作系統,包含更加全面的權限管理系統以及防火墻機制).

2.2 常用發行版本

  • RedHat(紅帽子)

  • CentOS

  • Ubuntu(有一套完整的界面解決方案,可以作為個人用戶使用的操作系統)

2.3 常用命令

2.3.1 退出命令行

操作效果類型
ctrl+c退出組合鍵

2.3.2 查看IP

操作效果類型
ifconfig查看當前電腦IP地址及網卡信息命令

2.3.3 查看當前目錄文件

操作效果類型
ll顯示當前目錄下的文件以及文件信息命令
ls顯示當前目錄文件名稱命令
cd 目錄名進入目錄命令
cd …回到上層目錄命令
pwd顯示當前的目錄的絕對路徑命令
cd /進入根目錄命令
通過↑/↓查看命令歷史查看命令歷史↑/↓按鍵

2.3.4 編輯文件

操作效果類型
vim 文件名(帶后綴)vim : 編輯文件命令命令
i進入編輯模式按鍵
esc退出編輯狀態,編輯狀態下無法進行以下操作按鍵
:q退出vim編輯器命令
:q!強制退出vim,不保存修改內容命令
:w保存但停留在vim界面命令
:wq保存并退出文件
/檢索內容檢索 按n 下一個命令+按鍵
快速按兩下d刪除整行按鍵

注意:文件未保存而強制退出時,會存在臨時文件,每次打開該文件會提示,需要將該臨時文件刪除方能徹底解決。

2.3.5 操作目錄

操作效果類型
mkdir 文件夾名稱創建目錄命令
mkdir -p 文件夾1/文件夾2/文件夾3批量創建(層級創建)命令
rm [-r / -f / -rf ]文件/目錄刪除目錄/文件(-r表示目錄 -f表示強制)命令
cp [-r] 源文件/源目錄 目標文件/目標目錄拷貝目錄/文件命令
mv 源文件/源目錄 目標文件/目標目錄移動目錄/文件命令

2.3.6 查找文件

操作效果類型
grep 需要查找的字符串 文件名查找文件內容命令
n find / -name 文件名查找文件命令

2.3.7 壓縮包及解壓包

格式操作效果類型
.tartar xvf FileName.tar解包命令
.tartar cvf FileName.tar DirName打包命令
.gzgzip -d FileName.gz解包命令
.gzgzip FileName打包命令
.tar.gztar zxvf FileName.tar.gz解包命令
.tar.gztar zcvf FileName.tar.gz DirName打包命令
.zipunzip FileName.zip解包命令
.zipzip FileName.zip FileName打包命令

2.3.8 開放服務器端口

Linux默認只開放了80和22端口.其他端口需要用戶自行授權開放

操作效果類型
/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 [用戶名]切換用戶(當用戶名不填時,表示切換到系統用戶root)命令
chmod u+w 指定的文件(/etc/sudoers)給用戶添加權限(添加完權限之后,需要使用sudo 來執行命令)命令

2.3.10 查看進程

操作效果類型
ps -ef|grep tomcat根據軟件名字(此處為:tomcat)查看進程命令
netstat -unltp|grep 8080根據端口查看占用進程命令

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 和反向代理服務器, 它具有有很多非常優越的特性:

  • 作為 Web 服務器:相比 Apache,Nginx 使用更少的資源,支持更多的并發連接,體現更高的效率,這點使 Nginx 尤其受到虛擬主機提供商的歡迎。能夠支持高達 50,000 個并發連接數的響應。

  • 作為負載均衡服務器:Nginx 既可以在內部直接支持 Rails 和 PHP,也可以支持作為 HTTP代理服務器 對外進行服務。Nginx 用 C 編寫, 不論是系統資源開銷還是 CPU 使用效率很優秀。

  • 作為郵件代理服務器: Nginx 同時也是一個非常優秀的郵件代理服務器(最早開發這個產品的目的之一也是作為郵件代理服務器)。

  • Nginx 安裝非常的簡單,配置文件 非常簡潔(還能夠支持perl語法),Bugs非常少的服務器: Nginx 啟動特別容易,并且幾乎可以做到7*24不間斷運行,即使運行數個月也不需要重新啟動。你還能夠在 不間斷服務的情況下進行軟件版本的升級。

2 反向代理服務器/負載均衡服務器
  • 使用ftp工具將nginx-1.10.2.tar.gz文件上傳至虛擬機對的某一個目錄中。

  • 安裝nginx相關的依賴

命令作用
yum -y install zlib zlib-devel openssl openssl-devel連接網絡下載依賴
yum -y install patch連接網絡下載依賴
  • 解壓Nginx壓縮包
命令
tar zxvf nginx-1.10.3.tar.gz
  • 配置nginx編譯環境
操作效果類型
./ configure配置nginx的編譯環境命令
–pid-pathnginx的進程文件存放目錄命令
–error-log-path錯誤日志存放目錄命令
–http-log-path請求日志存放目錄命令
moduleNginx中的功能,基本上都是以module的形式存在命令
命令
  • 給依賴預設值
命令(在解壓后文件夾下運行如下命令) 注意:下面所有文字在一行
./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目錄下,編譯,執行 make編譯命令
再執行 make install安裝命令
  • 驗證Nginx是否安裝成功
命令
/usr/local/nginx/sbin/nginx -V
  • 配置nginx.conf
命令
vim /usr/local/nginx/conf/nginx.conf
  • 在配置文件中加入標注為新加入的內容 ,實際工作中,不要忘記提前把域名和服務器IP綁定在一起。
user root;#root用戶 #user nobody; worker_processes 1;#error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info;#pid logs/nginx.pid; events {worker_connections 1024; }http {include mime.types;default_type application/octet-stream;#log_format main '$remote_addr - $remote_user [$time_local] "$request" '# '$status $body_bytes_sent "$http_referer" '# '"$http_user_agent" "$http_x_forwarded_for"';#access_log logs/access.log main;sendfile on;#tcp_nopush on;#keepalive_timeout 0;keepalive_timeout 65;#gzip on;#============================新增加的用于tomcat集群=================================upstream javasm{ip_hash; #根據ip分服務器防止雪崩,一個ip固定訪問某個服務器server 192.168.14.195:8080 weight=2;#weight表示權重越大權重越大,可替換為downserver 192.168.14.196:8080 weight=2;server 192.168.14.197:8080 weight=2;# server 192.168.14.230:8080;# server 192.168.14.230:8081;# server 192.168.14.230:8082;}#=====================================結束線========================================server {#處理跨域問題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';listen 80;#nginx訪問端口server_name localhost;#nginx訪問ip#charset koi8-r;#access_log logs/host.access.log main;#靜態資源路徑方式1location /img/{root /home/data/;}#靜態資源路徑方式2location /static/ {alias /home/data/;}location / {limit_req zone=javasmlimit burst=3 nodelay;limit_conn perip 10;limit_conn perserver 100;limit_rate 1024k;root html;index index.html index.htm;#處理跨域問題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';#==========================新增加的用于tomcat集群========================proxy_pass http://javasm;#================================結束線=================================} }
  • 校驗nginx配置文件
命令
/usr/local/nginx/sbin/nginx -t
  • 創建文件夾 /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
  • 關閉

    根據端口查找進程然后殺進程(與tomcat類似,但是用根據端口號查詢)

操作效果類型
netstat -unltp\grep 80查詢80端口對應的進程號命令
kill -9 進程號殺進程命令
3 流量限制

為防止用戶惡意訪問,可以在nginx設置限流,防止發生雪崩效應。

3.1 根據ip控制速率

請求限制的功能來自于 ngx_http_limit_req_module 模塊。使用它需要首先在 http 配置段中定義限制的參照標準和狀態緩存區大小。

limit_req_zone 只能配置在 http 范圍內;

$binary_remote_addr代表客戶端ip

javasmlimit是自定義變量名

rate 請求頻率,每秒允許多少請求;rate=3r/s; 每秒只處理3次請求,超過的請求拒絕處理。

10m緩沖區大小,1M能存儲16000 IP地址,10M可以存儲16W IP地址訪問信息

在server {外 http模塊加上如下內容,為方便測試,每秒處理1個請求

limit_req_zone $binary_remote_addr zone=javasmlimit:10m rate=1r/s;

在location / {內 location模塊加上如下內容,表示當前請求會根據javasmlimit規則來限流,

#nodelay 不延遲處理 #burst 是配置超額處理,可簡單理解為隊列機制 # 上面配置同一個 IP 每秒只能發送一次請求(1r/s),這里配置了緩存3個請求,其它任務請求則失敗(503錯誤) limit_req zone=javasmlimit burst=3 nodelay;
3.2 控制并發連接數

http模塊添加

limit_conn_zone $binary_remote_addr zone=perip:10m; limit_conn_zone $server_name zone=perserver:10m;

location/ 模塊添加

limit_conn perip 10;#單個客戶端ip與服務器的連接數 limit_conn perserver 100; #限制與服務器的總連接數 # 限制傳輸速度(如果有N個并發連接,則是 N * limit_rate) limit_rate 1024k;

流量限制不會提高服務器性能,但是能讓服務器更加健壯。

測試過程中,我們看見系統默認的錯誤頁面,正式上線還要修改錯誤頁面的展示,我們可以修改/html/文件夾下的錯誤頁面,給自己的nginx添加一個好看的錯誤頁面。

需要配合靜態文件服務器的功能。

4 靜態資源服務器
  • 修改nginx.conf
    • 第一行#添加 user root;
    • 加入新的location提前創建好文件夾,在文件夾中傳入靜態文件 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 跨域配置

關于nginx的跨域可以配置在兩個位置

5.1 允許全局的跨域

在server模塊內,加入如下配置

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等信息,但是服務器不能信任全部域名的Cookie,如果想訪問,可以從客戶端和服務端兩種解決方案,這里說明在服務器端的設置代碼。

@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);//預檢請求的有效期,單位為秒。設置maxage,可以避免每次都發出預檢請求 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

第二階段課程中,我們學習過HttpSession的相關知識,后續項目中,我們通常在Session中存儲用戶或菜單等信息,現在我們復習一下HttpSession的知識。

瀏覽器每次訪問,服務器都會為每個用戶創建一個獨立的HttpSession對象

第一次訪問服務器時,請求中沒有攜帶任何標識,所以服務器會創建一個新的session對象,并且生成一個SessionID;

這個SessionID在響應瀏覽器的時候會被裝進cookie中,從而被保存到瀏覽器中;

當用戶再一次訪問服務器時,請求中會攜帶著cookie中的SessionID去訪問;

服務器會根據這個SessionID去查看是否有對應的Session對象;

有就拿出來使用,沒有就創建一個Session。

服務器識別Session的標識是sessionid

1.2 Session共享

1.2.1 什么是Session共享

一個瀏覽器在訪問多個web服務器時,多個服務器之間的session對象需要共享數據。

1.2.2 應用場景

在我們學過的Nginx反向代理模式中,用戶通過方向代理服務器來訪問真實服務器,如果使用隨機或輪詢策略,用戶每次訪問的服務器是不同的,那么我們無法獲取用戶存儲在Session中的數據。

1.2.3 Session共享解決方案

l Session復制

通過對應用服務器的配置開啟服務器的 Session 復制功能,在集群中的幾臺服務器之間同步 Session 對象,使得每臺服務器上都保存所有的 Session 信息,這樣任何一臺宕機都不會導致 Session 的數據丟失,服務器使用 Session 時,直接從本地獲取。這種方式的缺點也比較明顯。因為 Session 需要時時同步,并且同步過程是有應用服務器來完成,由此對服務器的性能損耗也比較大。

l Session 綁定

利用 hash 算法,比如 nginx 的 ip_hash,使得同一個 Ip 的請求分發到同一臺服務器上。 這種方式不符合對系統的高可用要求,因為一旦某臺服務器宕機,那么該機器上的 Session 也就不復存在了,用戶請求切換到其他機器后么有 Session,無法完成業務處理。

l 利用 Cookie 記錄 Session

Session 記錄在客戶端,每次請求服務器的時候,將 Session 放在請求中發送給服務器, 服務器處理完請求后再將修改后的 Session 響應給客戶端。這里的客戶端就是 cookie。 利用 cookie 記錄 Session 的也有缺點,比如受 cookie 大小的限制,能記錄的信息有限, 安全性低,每次請求響應都需要傳遞 cookie,影響性能,如果用戶關閉 cookie,訪問就不正常。

l Session 服務器

Session 服務器可以解決上面的所有的問題,利用獨立部署的 Session 服務器統一管理 Session,服務器每次讀寫 Session 時,都訪問 Session 服務器。 對于 Session 服務器,我們可以使用 Redis 或者 MongoDB 等內存數據庫來保存 Session 中的數據,以此替換掉服務中的 HttpSession。達到 Session 共享的效果。

1.3 測試無Session共享時的Session值

1.3.1 啟動多個服務器

1.3.2 配置并啟動Nginx,搭建服務器集群

1.3.3 設置Session并且嘗試獲取數據

2 SpringSession介紹

? Spring Session 是Spring家族中的一個子項目,Spring Session提供了用于管理用戶會話信息的API和實現。

? 它把servlet容器實現的httpSession替換為spring-session,專注于解決 session管理問題,Session信息存儲在Redis中,可簡單快速且無縫的集成到我們的應用中;

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: redis

3.3 測試

3.3.1 啟動Redis

3.3.2 啟動多個Tomcat服務器

發現此時已經可以達到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/src1. 進入源碼src目錄命令
make編譯redis源碼命令
make test1. 測試編譯結果命令
vim redis.conf打開配置文件命令
bind 綁定端口號注釋注釋掉自帶端口號配置信息
requirepass 打開注釋 修改密碼設置密碼配置信息
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 & (&符號表示在后臺執行)啟動redis命令
./redis-cli -h 127.0.0.1 -p 6379連接redis命令
auth javasms輸入密碼-javasm是密碼命令
輸入指令exit退出退出連接命令
ps -ef|grep redis查詢redis進程命令
kill -9 進程號殺進程停止redis服務命令
2 redis集群
2.1 Linux環境如何搭建Redis集群
  • Redis主從復制簡單介紹

    作用

    ? 1.一個master可以有多個slave

    ? 2.除了多個slave連到相同的master外,slave也可以連接其他slave形成圖狀結構

    ? 3.主從復制不會阻塞master。也就是說當一個或多個slave與master進行初次同步數據時,master可以繼續處理client發來的請求。相反slave在初次同步數據時則會阻塞不能處理client的請求。

    ? 4.主從復制可以用來提高系統的可伸縮性,我們可以用多個slave 專門用于client的讀請求,比如sort操作可以使用slave來處理。也可以用來做簡單的數據冗余

    ? 5.可以在master禁用數據持久化,只需要注釋掉master 配置文件中的所有save配置,然后只在slave上配置數據持久化。

    ? 6.可以用于讀寫分離和容災恢復。

  • Redis主從復制的常用的幾種方式

  • 一主二仆 A(B、C) 一個Master兩個Slave

  • 薪火相傳(去中心化)A - B - C ,B既是主節點(C的主節點),又是從節點(A的從節點)

  • 反客為主(主節點down掉后,手動操作升級從節點為主節點) & 哨兵模式(主節點down掉后,自動升級從節點為主節點)

這里先配置一主二仆模式,薪火相傳與一主二仆配置方式類似,之后再配置哨兵模式

Redis主從復制的搭建(一主二仆)

角色設計

? 需要搭建3個Redis環境

? 6379端口的Redis作為主(Master)

? 6380和6381端口的Redis作為仆從(Slave)

Redis主庫搭建

參照上節文檔,即6379的搭建與原來一樣,不需要變化。

從庫搭建

  • 復制主庫文件夾,修改名字

    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文件夾,執行指令./redis-server …/redis.conf &

  • 測試

    • 進入主庫客戶端

      輸入指令 info replication

      日志中可以看見,當前角色是master,兩個從庫分別是端口6380和6381

    • 進入從庫客戶端

    日志中可以看出,當前角色是slave,master的ip和port都已經顯示出來

    • conf文件中的配置,從庫只能讀取不能寫
2.2Redis主從復制的原理
  • 當設置好slave服務器后,slave會建立和master的連接,然后發送sync命令。

  • Master接到命令啟動后臺的存盤進程,同時收集所有接收到的用于修改數據集命令,在后臺進程執行完畢之后,master將傳送整個數據文件到slave,以完成一次完全同步。

  • 全量復制:而slave服務在接收到數據庫文件數據后,將其存盤并加載到內存中。(第一次全量)

  • 增量復制:Master繼續將新的所有收集到的修改命令依次傳給slave,完成同步。(之后增量)

  • 但是只要是重新連接master,一次完全同步(全量復制)將被自動執行。

Redis 主從同步有兩種方式(或者所兩個階段):全同步和部分同步。

主從剛剛連接的時候,進行全同步;全同步結束后,進行部分同步。當然,如果有需要,Slave 在任何時候都可以發起全同步。Redis 策略是,無論如何,首先會嘗試進行部分同步,如不成功,要求從機進行全同步,并啟動 BGSAVE……BGSAVE 結束后,傳輸 RDB 文件;如果成功,允許從機進行部分同步,并傳輸積壓空間(更新緩存)中的數據。

Redis主從復制(一主兩從/一主多從)的分析

  • IO劇增

    每次slave斷開以后(無論是主動斷開,還是網路故障)再連接master都要將master全部dump出來rdb,在aof,即同步的過程都要重新執行一遍;所以要記住多臺slave不要一下都啟動起來,否則master可能IO劇增(間隔1-2分)

  • 復制延遲

    由于所有的寫操作都是先在Master上操作,然后同步更新到Slave上,所以從Master同步到Slave機器有一定的延遲,當系統很繁忙的時候,延遲問題會更加嚴重,Slave機器數量的增加也會使這個問題更加嚴重。

  • 可用性不高

當有主節點發生異常情況,就會導致不能寫入,導致業務出錯!

注意:

? Redis 集群不保證數據的強一致性(strong consistency)Redis 集群的一致性保證(guarantee): 在特定條件下, Redis 集群可能會丟失已經被執行過的寫命令。

2.4.5 安裝mysql

作用命令
創建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)安裝1rpm -ivh mysql-community-common-5.7.20-1.el7.x86_64.rpm
安裝2rpm -ivh mysql-community-libs-5.7.20-1.el7.x86_64.rpm
安裝3rpm -ivh mysql-community-client-5.7.20-1.el7.x86_64.rpm
安裝4rpm -ivh mysql-community-server-5.7.20-1.el7.x86_64.rpm
啟動mysqlservice mysqld start
查找初始密碼vim /var/log/mysqld.log 或 grep password /var/log/mysqld.log
連接mysqlmysql -u root -p
修改密碼ALTER USER ‘root’@‘localhost’ IDENTIFIED BY ‘Javasm123!’;
修改mysql訪問權限:查看庫show databases;
進入mysql數據庫use mysql;
查看 庫中有哪些表show tables;
更改用戶的訪問權限update user set host=’%’ where user = ‘root’;
刷新權限緩存flush privileges;
3306加入白名單firewall-cmd --permanent --zone=public --add-port=3306/tcp
重啟防火墻firewall-cmd --reload

2.4.6 安裝Mycat

  • 從定義和分類來看,它是一個開源的分布式數據庫系統,是一個實現了 MySQL 協議的Server,前端用戶可以把它看作是一個數據庫代理,用 MySQL客戶端和命令行訪問,MySQL 原生(Native)協議與多個 MySQL 服務器通信,也可以用 JDBC 協議與大多數主流數據庫服務器通信,其核心功能是讀寫分離,分表分庫,即將一個大表水平分割為 N 個小表,存儲在后端 MySQL 服務器里或者其他數據庫里。

  • Mycat是一個Java應用,所以安裝環境需要依賴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相關信息(也可以使用默認信息)

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防火墻設置 --><!-- <firewall> <whitehost><host host="127.0.0.1" user="mycat"/><host host="127.0.0.2" user="mycat"/></whitehost><blacklist check="false"></blacklist></firewall>--><!-- =====================以下內容為需要修改===================== --><user name="root"><!-- mycat用戶名 --><property name="password">root</property><!-- mycat用戶密碼 --><property name="schemas">javasm</property><!-- mycat數據庫名 --></user><user name="user"><property name="password">123456</property><property name="schemas">javasm</property><property name="readOnly">true</property></user><!-- 注意每個user都需要修改即使不使用 --><!-- =====================以上內容為需要修改===================== --> </mycat:server>

schema.xml

  • schema配置文件是用來描述邏輯數據庫中的數據節點和讀寫庫配置信息
<?xml version="1.0"?> <!DOCTYPE mycat:schema SYSTEM "schema.dtd"> <mycat:schema xmlns:mycat="http://io.mycat/"><!-- name表示的是數據庫名需要和上面service.xml的對應 --><schema name="javasm" checkSQLschema="true" sqlMaxLimit="100" dataNode="dn1"></schema><dataNode name="dn1" dataHost="localhost1" database="supermarket110" /><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.14.196:3306" user="root"password="Javasm123!"><readHost host="hostS2" url="192.168.14.164:3306" user="root" password="Javasm123!" /></writeHost></dataHost> </mycat:schema>
  • 測試Mycat
    • bin目錄下Mycat 運行命令
作用命令
啟動./mycat start
停止./mycat stop
重新啟動./mycat restart
查看Mycat運行日志tail –f mycat.log
調整日志等級修改log4j2.xml的日志等級為debug
  • 連接命令
作用
使用mysql命令登入Mycatmysql -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屬性不要忘記
    • 主從數據庫中都要有配置的庫
1 主從同步
1.1 設置主庫mysql的配置文件
  • 編輯/etc/my.cnf
操作內容
添加服務id配置 在/etc/my.cnf里面添加server-id=1 (保證唯一)
開啟二進制日志文件 在/etc/my.cnf里面添加log-bin=/var/lib/mysql/mysql-bin
  • sql操作
效果命令
重啟mysqlservice mysqld restart
連接數據庫mysql -u root -p [密碼]
執行sql查詢信息show master status;

注意:復制File和Position的值,需要給slave(從庫)使用

1.2 設置從庫mysql的配置文件
  • 編輯/etc/my.cnf
操作內容
添加服務id配置 在/etc/my.cnf里面添加server-id=2(保證唯一)
  • sql操作
效果命令
重啟mysqlservice mysqld restart
連接數據庫mysql -u root -p [密碼]
執行sql關閉slavestop slave;
  • 執行下邊指令注意漢字部分需要替換,File和Position的值為配置主庫時復制的信息
change master to master_host='主庫IP', master_port=3306, master_user='主庫用戶名', master_password='主庫密碼', master_log_file='主庫剛剛查到的File值', master_log_pos= Position值;
  • 重新打開slave
效果命令
啟動slavestart slave;
查看slave狀態show slave status\G;

注意:上邊查看重點是Slave_IO_Running=yes Slave_SQL_Running=yes和配置的主庫信息是否正確。

2 系統切分及解決方案
  • 數據切分:

    簡單來說,就是指通過某種特定的條件,按照某個維度,將我們存放在同一個數據庫中的數據分散存放到多個數據庫(主機)上面以達到分散單庫(主機)負載的效果。

mycat來進行數據切分十分簡單只需要修改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
創建Solr數據和安裝目錄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安裝時,會自動創建一個solr用戶,可以進入/etc/passwd中查看

    如果未創建則執行如下命令手動創建

作用命令
創建用戶組groupadd solr
創建用戶useradd -g solr solr
給solr用戶授權chown -R solr.solr /data/solr /usr/local/solr
  • 啟動命令
作用命令
啟動service solr start
停止service solr stop
重新啟動service solr restart
n 創建一個新的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
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-solr</artifactId> </dependency>
  • 配置文件
spring:data:solr:host: http://192.168.11.217:8983/solr

2.4.8 yum

yum(全稱為 Yellow dog Updater, Modified)是一個在Fedora和RedHat以及CentOS中的Shell前端軟件包管理器。基于RPM包管理,能夠從指定的服務器自動下載RPM包并且安裝,可以自動處理依賴性關系,并且一次安裝所有依賴的軟件包,無須繁瑣地一次次下載、安裝。

yum常用命令
作用命令
查找包yum search 指令名
安裝包yum install 搜索出來的包名
卸載包yum remove 包名
默認yes安裝yum -y install 包名

總結

以上是生活随笔為你收集整理的5.1linux整理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。