LNPMariadb數據庫分離|web服務器集群

LNP&Mariadb數據庫分離|web服務器集群

  • 網站架構演變
    • 單機版LNMP
    • 獨立數據庫服務器
    • web服務器集群與Session保持
  • LNP與數據庫分離
    • 1. 準備一臺獨立的服務器,安裝數據庫軟件包
    • 2. 將之前的LNMP網站中的數據庫遷移到新的數據庫服務器
    • 3. 修改wordpress網站配置文件,調用新的數據庫服務器。
  • web服務器集群
    • 1. 配置web2和web3服務器
      • 安裝LNP軟件包
      • 修改nginx配置實現動靜分離(web2 和 web3操作)
    • 2. 部署NFS,將網站數據遷移至NFS共享服務器
      • 部署NFS共享服務器
      • 遷移舊網站數據到NFS共享服務器
      • 所有web服務器訪問掛載NFS共享數據 關掉服務再卸載和掛載
    • 3. 部署HAProxy代理服務器
      • 部署HAProxy 安裝軟件,手動修改配置文件,添加如下內容
    • 4.部署DNS相關軟件(192.168.4.5操作)
      • 安裝DNS相關軟件
      • 修改配置文件,添加zone
      • 修改正向解析記錄文件
      • 客戶端修改DNS

**前序文章:**https://blog.csdn.net/shengweiit/article/details/135160979

網站架構演變

單機版LNMP

用戶量少時使用,簡單,成本低
但是存在單點故障
在這里插入圖片描述

獨立數據庫服務器

獨立數據庫服務器是將網站靜態文件、代碼文件等資料與數據庫分離的架構,當用戶量增加時單機的處理能力有限,數據庫的增刪改需要大量的內存資源,將兩者分離可以減輕服務器的壓力。
在這里插入圖片描述

web服務器集群與Session保持

可以通過Nginx、Haproxy代理服務器實現Web負載均衡集群,也可以使用LVS調度器實現Web負載均衡集群。部署完Web集群后還需要考慮如何進行Session會話保持,方法很多,如:根據源IP保持,代理服務器重寫Cookie信息,共享文件系統保存session,使用數據庫共享session等等。
在這里插入圖片描述

對于網站內容而言可以分離為動態頁面和靜態頁面,靜態頁面就需要數據文件,動態頁面則需要CPU解析代碼,需要消耗大量的CPU資源,因此可以將靜態和動態分離為兩組服務器,動態頁面有腳本代碼組成,是一種基于網頁的應用程序,因此這一組服務器也稱為應用服務器
在這里插入圖片描述

LNP與數據庫分離

在這里插入圖片描述
首先要關掉防火墻和SELinux

[root@database ~]# firewall-cmd --set-default-zone=trusted
[root@database ~]# setenforce  0
[root@database ~]# sed -i  '/SELINUX/s/enforcing/permissive/'  /etc/selinux/config

1. 準備一臺獨立的服務器,安裝數據庫軟件包

[root@database ~]# yum -y install mariadb mariadb-server mariadb-devel
[root@database ~]# systemctl start mariadb
[root@database ~]# systemctl enable mariadb

在這里插入圖片描述

2. 將之前的LNMP網站中的數據庫遷移到新的數據庫服務器

登陸192.168.2.11主機 備份數據庫并拷貝給新的服務器,關閉舊的數據庫服務

#備份數據庫到文件(備份的文件名和擴展名任意)
[root@centos7 ~]# mysqldump wordpress > wordpress.bak
[root@centos7 ~]# scp wordpress.bak 192.168.2.21:/root/ # 拷貝文件到遠程主機
[root@centos7 ~]# systemctl stop mariadb
[root@centos7 ~]# systemctl disable mariadb

登陸192.168.2.21主機 創建空數據庫 使用備份文件還原數據庫

[root@database ~]# mysql
MariaDB [(none)]> create database wordpress character set utf8mb4;
#創建數據庫wordpress,該數據庫支持中文
MariaDB [(none)]> exit
#使用備份文件導入數據到wordpress數據庫
[root@database ~]# mysql wordpress < wordpress.bak        

并在192.168.2.21創建賬戶并授權訪問

[root@database ~]# mysql
MariaDB [(none)]> grant all on wordpress.* to wordpress@'%' identified by 'wordpress';
#語法格式:grant 權限 on 數據庫名.表名  to 用戶名@客戶端主機 identified by 密碼
#創建用戶并授權,用戶名為wordpress,該用戶對wordpress數據庫下的所有表有所有權限
#wordpress用戶的密碼是wordpress,授權該用戶可以從localhost主機登錄數據庫服務器
#all代表所有權限(wordpress用戶可以對wordpress數據庫中所有表有所有權限)
#wordpress.*代表wordpress數據庫中的所有表
MariaDB [(none)]> flush privileges;
#刷新權限
MariaDB [(none)]> exit

備注:在MySQL和MariaDB中%代表所有,這里是授權任何主機都可以連接數據庫。
驗證:能連就可以用
在這里插入圖片描述

3. 修改wordpress網站配置文件,調用新的數據庫服務器。

Wordpress在第一次初始化操作時會自動生產配置文件:wp-config.php,登陸192.168.2.11修改該文件即可調用新的數據庫服務。

[root@centos7 ~]# vim /usr/local/nginx/html/wp-config.php
修改前內容如下:
define('DB_HOST', '192.168.2.11');
修改后內容如下:
define('DB_HOST', '192.168.2.21');

web服務器集群

使用HAProxy部署web服務器集群,實現以下目標:

  • 部署三臺web服務器
  • 遷移網站數據,使用NFS實現數據共享
  • 部署HAProxy代理服務器實現負載均衡
  • 部署DNS域名解析服務器
    在這里插入圖片描述
    在這里插入圖片描述

1. 配置web2和web3服務器

安裝LNP軟件包

[root@web2 ~]# yum -y install gcc pcre-devel openssl-devel 
[root@web2 lnmp_soft]# tar -xf nginx-1.12.2.tar.gz
[root@web2 lnmp_soft]# cd nginx-1.12.2/
[root@web2 nginx-1.12.2]# ./configure \
--with-http_ssl_module \
--with-http_stub_status_module
[root@web2 nginx-1.12.2]# make && make install
[root@web2 ~]# yum -y install php php-fpm php-mysql mariadb-devel[root@web3 ~]# yum -y install gcc pcre-devel openssl-devel
[root@web3 lnmp_soft]# tar -xf nginx-1.12.2.tar.gz
[root@web3 lnmp_soft]# cd nginx-1.12.2/
[root@web3 nginx-1.12.2]# ./configure \
--with-http_ssl_module \
--with-http_stub_status_module
[root@web3 nginx-1.12.2]# make && make install
[root@web3 ~]# yum -y install php php-fpm php-mysql mariadb-devel

修改nginx配置實現動靜分離(web2 和 web3操作)

web2修改默認首頁index.php,配置兩個location實現動靜分離。
web3修改默認首頁index.php,配置兩個location實現動靜分離。

[root@web2 ~]# vim /usr/local/nginx/conf/nginx.conf
location / {root   html;index  index.php index.html index.htm;}location ~ \.php$ {root            html;fastcgi_pass   127.0.0.1:9000;fastcgi_index  index.php;include         fastcgi.conf;}

web3修改

[root@web3 ~]# vim /usr/local/nginx/conf/nginx.conf
location / {root   html;index  index.php index.html index.htm;}
location ~ \.php$ {root            html;fastcgi_pass   127.0.0.1:9000;fastcgi_index  index.php;include         fastcgi.conf;}

在這里插入圖片描述
設置開機自啟

[root@web2 ~]# echo "/usr/local/nginx/sbin/nginx" >> /etc/rc.local
[root@web2 ~]# chmod +x /etc/rc.local
[root@web2 ~]# /usr/local/nginx/sbin/nginx
[root@web2 ~]# systemctl start  php-fpm                   #啟動php-fpm服務
[root@web2 ~]# systemctl enable php-fpm                   #設置服務開啟自啟[root@web3 ~]# echo "/usr/local/nginx/sbin/nginx" >> /etc/rc.local
[root@web3 ~]# chmod +x /etc/rc.local
[root@web3 ~]# /usr/local/nginx/sbin/nginx
[root@web3 ~]# systemctl start  php-fpm                   #啟動php-fpm服務
[root@web3 ~]# systemctl enable php-fpm                #設置服務開機自啟

源碼安裝的軟件默認無法使用systemd管理,如果需要使用systemd管理源碼安裝的軟件需要手動編寫服務的service文件(編寫是可以參考其他服務的模板文件)。以下是nginx服務最終編輯好的模板。
Service文件存儲路徑為/usr/lib/systemd/system/目錄。

[root@centos7 ~]# vim /usr/lib/systemd/system/nginx.service
[Unit]
Description=The Nginx HTTP Server
#描述信息
After=network.target remote-fs.target nss-lookup.target
#指定啟動nginx之前需要其他的其他服務,如network.target等
[Service]
Type=forking
#Type為服務的類型,僅啟動一個主進程的服務為simple,需要啟動若干子進程的服務為forking
ExecStart=/usr/local/nginx/sbin/nginx
#設置執行systemctl start nginx后需要啟動的具體命令.
ExecReload=/usr/local/nginx/sbin/nginx -s reload
#設置執行systemctl reload nginx后需要執行的具體命令.
ExecStop=/bin/kill -s QUIT ${MAINPID}
#設置執行systemctl stop nginx后需要執行的具體命令.
[Install]
WantedBy=multi-user.target

2. 部署NFS,將網站數據遷移至NFS共享服務器

部署NFS共享服務器

[root@nfs ~]# yum install nfs-utils
[root@nfs ~]# mkdir /web_share
[root@nfs ~]# vim /etc/exports
/web_share  192.168.2.0/24(rw,no_root_squash)# NFS使用的是隨機端口,每次啟動NFS都需要將自己的隨機端口注冊到rpcbind服務,這樣客戶端訪問NFS時先到rpcbind查詢端口信息,得到端口信息后再訪問NFS服務。
[root@nfs ~]# systemctl restart rpcbind
[root@nfs ~]# systemctl enable rpcbind[root@nfs ~]# systemctl restart nfs
[root@nfs ~]# systemctl enable nfs

遷移舊網站數據到NFS共享服務器

將web1(192.168.2.11)上的wordpress代碼拷貝到NFS共享。

[root@web1 ~]# cd /usr/local/nginx/
[root@web1 nginx]# tar -czpf html.tar.gz html/  # -p代表打包時保留文件的權限 
[root@web1 nginx]# scp html.tar.gz 192.168.2.31:/web_share/

登陸nfs服務器,將壓縮包解壓

[root@nfs ~]# cd /web_share/
[root@nfs web_share]# tar -xf html.tar.gz

所有web服務器訪問掛載NFS共享數據 關掉服務再卸載和掛載

[root@web1 ~]# rm -rf /usr/local/nginx/html/*
[root@web1 ~]# yum -y install nfs-utils
[root@web1 ~]# echo "192.168.2.31:/web_share/html /usr/local/nginx/html/ nfs defaults 0 0" >> /etc/fstab
[root@web1 ~]# mount -a[root@web2 ~]# yum -y install nfs-utils
[root@web2 ~]# echo "192.168.2.31:/web_share/html /usr/local/nginx/html/ nfs defaults 0 0" >> /etc/fstab
[root@web2 ~]# mount -a[root@web3 ~]# yum -y install nfs-utils
[root@web3 ~]# echo "192.168.2.31:/web_share/html /usr/local/nginx/html/ nfs defaults 0 0" >> /etc/fstab
[root@web3 ~]# mount -a

檢查是否掛載上

showmount -e 192.168.2.31 # 查看是否有共享
df -h 
或者
mount | grep "192.168.2.31"

額外測試
在NFS主機的共享目錄 /web_share/html下編寫文件new.html (文件內容隨意) 另外三臺web主機上面都有。

3. 部署HAProxy代理服務器

使用haproxy軟件調用三臺web服務器

部署HAProxy 安裝軟件,手動修改配置文件,添加如下內容

[root@proxy ~]# yum -y install haproxy 
[root@proxy ~]# vim /etc/haproxy/haproxy.cfg
listen wordpress *:80        #監聽80端口balance roundrobin         #輪詢算法server web1 192.168.2.11:80 check inter 2000 rise 2 fall 3server web2 192.168.2.12:80 check inter 2000 rise 2 fall 3server web3 192.168.2.13:80 check inter 2000 rise 2 fall 3

在這里插入圖片描述
起服務

[root@proxy ~]# systemctl start haproxy
[root@proxy ~]# systemctl enable haproxy

在這里插入圖片描述
在客戶端192.168.4.10連接haproxy主機訪問網站服務

curl http://192.168.4.5/love.html

是否實現了負載均衡 查看三臺的日志文件
在這里插入圖片描述

4.部署DNS相關軟件(192.168.4.5操作)

安裝DNS相關軟件

[root@proxy ~]# yum install -y bind bind-chroot

修改配置文件,添加zone

[root@proxy ~]# vim /etc/named.conf
options {listen-on port 53 { any; };           #服務監聽的地址與端口directory       "/var/named";         #數據文件路徑allow-query     { any; };             #允許任何主機訪問DNS服務
... ...
};zone "lab.com" IN {                        #定義正向區域type master;file "lab.com.zone";
};#include "/etc/named.rfc1912.zones";        #注釋掉改行
#include "/etc/named.root.key";              #注釋掉改行[root@proxy ~]# named-checkconf /etc/named.conf            #檢查語法

修改正向解析記錄文件

注意保留文件權限

[root@proxy named]# cp -p /var/named/named.localhost /var/named/lab.com.zone
[root@proxy named]# vim /var/named/lab.com.zone
$TTL 1D
@       IN SOA  @ rname.invalid. (0       ; serial1D      ; refresh1H      ; retry1W      ; expire3H )    ; minimum
@        NS     dns.lab.com.
dns     A       192.168.4.5
www     A       192.168.4.5# 啟動服務
[root@proxy named]# systemctl start named
[root@proxy named]# systemctl enable named

在這里插入圖片描述
可以用如下命令檢查配置文件是否寫對

[root@proxy ~]# named-checkconf /etc/named.conf            #檢查語法

客戶端修改DNS

如果客戶端是Linux主機,則客戶端修改DNS解析文件

[root@room9pc01 data]# cat /etc/resolv.conf
# Generated by NetworkManager
search tedu.cn 
nameserver 192.168.4.5 # DNS服務器地址

NFS共享目錄權限 no_root_squash (生產環境不加此權限)
客戶端已NFS服務器系統管理員root的身份 訪問共享資源

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/536797.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/536797.shtml
英文地址,請注明出處:http://en.pswp.cn/news/536797.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

2023.12.24 關于 Redis 中 String 類型內部編碼 及 應用場景

目錄 String 類型內部編碼 3 種內部編碼方式 String 類型應用場景 Cache 緩存 鍵名命名規則 計數&#xff08;Counter&#xff09; 共享會話&#xff08;Session &#xff09; 手機驗證碼 總結 String 類型內部編碼 3 種內部編碼方式 int&#xff1a;用來表示 64 位 —…

vue3菜單權限管理實現

前提 你的菜單是根據路由動態生成的&#xff0c;具體可以參考這篇博客對el-menu組件進行遞歸封裝&#xff08;根據路由配置動態生成&#xff09; 描述 首先將路由分為常量路由constantRoute&#xff08;所有用戶都有的路由&#xff09;和異步路由asyncRoute&#xff08;需要動…

Gradle 插件

自定義Gradle插件 - 簡書

小天使的小難題:新生兒疝氣的關注與溫馨呵護

引言&#xff1a; 新生兒疝氣是一種在出生后可能出現的常見情況&#xff0c;雖然通常不會造成長期影響&#xff0c;但對于家長而言&#xff0c;了解如何正確應對新生兒疝氣是至關重要的。本文將深入探討新生兒疝氣的原因、癥狀&#xff0c;以及家長在面對這一問題時應該采取的…

1224. 交換瓶子(藍橋杯/圖論)

題目&#xff1a; 1224. 交換瓶子 - AcWing題庫 輸入樣例1&#xff1a; 5 3 1 2 5 4輸出樣例1&#xff1a; 3輸入樣例2&#xff1a; 5 5 4 3 2 1輸出樣例2&#xff1a; 2 思路&#xff1a;圖論 1.將對應的位置與當前的瓶子序列相連形成環。 2.最少交換次數能形成的最多…

Vue中的事件委托(事件代理)使用方法介紹

事件委托&#xff08;事件代理&#xff09; 將原本需要綁定在子元素上的事件監聽器委托在父元素上&#xff0c;讓父元素充當事件監聽的職務。 事件委托是一種利用事件冒泡的特性&#xff0c;在父節點上響應事件&#xff0c;而不是在子節點上響應事件的技術。它能夠改善性能&a…

如何理解JDK、JRE、JVM區別與聯系

摘要&#xff1a;JDK是 Java 語言的軟件開發工具包(SDK)。在JDK的安裝目錄下有一個jre目錄&#xff0c;里面有兩個文件夾bin和lib&#xff0c;在這里可以認為bin里的就是jvm&#xff0c;lib中則是jvm工作所需要的類庫&#xff0c;而jvm和 lib合起來就稱為jre。 一、JDK JDK(Ja…

【【迭代16次的CORDIC算法-verilog實現】】

迭代16次的CORDIC算法-verilog實現 -32位迭代16次verilog代碼實現 CORDIC.v module cordic32#(parameter DATA_WIDTH 8d32 , // we set data widthparameter PIPELINE 5d16 // Optimize waveform)(input …

第十四章Java博客

lambda就是數學中的“λ”的讀音&#xff0c;lambda表達式是基于λ演算而得名的&#xff0c;因為lambda抽象&#xff08;lambda abstraction&#xff09;表示一個匿名的函數&#xff0c;于是開發語言也將lambda表達式用來表示匿名函數&#xff0c;也就是沒有函數名字的函數。C#…

maven管理工具使用package打包的時候無法將lib文件夾下的第三方jar包打入,上線打jar包后運行異常問題

問題描述&#xff1a; 調用第三方接口的時候通過手動引入了第三方的兩個jar包到我本項目的lib文件夾下&#xff0c;并在pom文件添加入下配置&#xff1a; <dependency><groupId>cn.xxxx.xxxx.core</groupId><artifactId>xxxx-core</artifactId>…

Spring Boot 中實現跨域的幾種方式

前言 在現代Web應用中&#xff0c;由于安全性和隱私的考慮&#xff0c;瀏覽器限制了從一個域向另一個域發起的跨域HTTP請求。解決這個問題的一種常見方式是實現跨域資源共享&#xff08;CORS&#xff09;。Spring Boot提供了多種方式來處理跨域請求&#xff0c;本文將介紹其中的…

C語言字符串處理提取時間(ffmpeg返回的時間字符串)

【1】需求 需求&#xff1a;有一個 “00:01:33.90” 這樣格式的時間字符串&#xff0c;需要將這個字符串的時間值提取打印出來&#xff08;提取時、分、秒、毫秒&#xff09;。 這個時間字符串從哪里來的&#xff1f; 是ffmpeg返回的時間&#xff0c;也就是視頻的總時間。 下…

vs快捷鍵

ctrlMo 折疊代碼塊 ctrlML 打開代碼塊

電子電器架構(E/E)演化 —— 主流主機廠域集中架構概述

電子電器架構(E/E)演化 —— 主流主機廠域集中架構概述 我是穿拖鞋的漢子,魔都中堅持長期主義的汽車電子工程師。 老規矩,分享一段喜歡的文字,避免自己成為高知識低文化的工程師: 屏蔽力是信息過載時代一個人的特殊競爭力,任何消耗你的人和事,多看一眼都是你的不對。…

系列七(實戰)、發送 接收單向消息(Java操作RocketMQ)

一、發送 & 接收單向消息 1.1、概述 發送單向消息&#xff0c;適用于發送方不關心或者不在意消息的發送結果&#xff0c;這種方式的吞吐量很大&#xff0c;但是存在消息丟失的風險&#xff0c;對于重要消息要慎用&#xff01;該種方式通常適用于對消息沒有那么嚴格的場景中…

類和對象的創建和實例化

1. 類的概述 1.1 具體示例 類是描述一類事物的特征和行為的統稱&#xff0c;抽象的不存在的&#xff0c;泛指的概念&#xff0c;例如&#xff1a;描述一個人&#xff0c;從外觀上&#xff08;特征&#xff09;和言行舉止&#xff08;行為&#xff09;上進行描述外觀上&#xff…

c 語言學習:輸出階乘的算式

c 語言學習&#xff1a;輸出階乘的算式 代碼 #include "stdio.h"int fact(int num){if (num < 1){printf("1 ");return 1;} else {printf("%d x ",num);return num * fact(num-1);} }int main(){int num 10; // printf("plz inpu…

【華為OD題庫-107】編碼能力提升計劃-java

題目 為了提升軟件編碼能力&#xff0c;小王制定了刷題計劃&#xff0c;他選了題庫中的n道題&#xff0c;編號從0到n-1&#xff0c;并計劃在m天內按照題目編號順序刷完所有的題目(注意&#xff0c;小王不能用多天完成同一題) 在小王刷題計劃中&#xff0c;小王需要用time[i]的時…

老鷹目標檢測數據集VOC格式60張

老鷹是天空中的王者&#xff0c;它們擁有極佳的飛行能力。它們能以驚人的速度在天空中翱翔&#xff0c;尤其擅長高空俯沖捕食。老鷹的視力非常敏銳&#xff0c;能夠準確地發現地面上的獵物&#xff0c;并迅速下落抓取。它們的爪子強而有力&#xff0c;足以擊倒比自己體型龐大的…

云計算與大數據之間的羈絆(期末不掛科版):云計算 | 大數據 | Hadoop | HDFS | MapReduce | Hive | Spark

文章目錄 前言&#xff1a;一、云計算1.1 云計算的基本思想1.2 云計算概述——什么是云計算&#xff1f;1.3 云計算的基本特征1.4 云計算的部署模式1.5 云服務1.6 云計算的關鍵技術——虛擬化技術1.6.1 虛擬化的好處1.6.2 虛擬化技術的應用——12306使用阿里云避免了高峰期的崩…