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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

项目:网站架构,集群

發布時間:2025/3/21 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 项目:网站架构,集群 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

網站架構的演變

問題

  • 單機版LNMP
  • 獨立數據庫服務器
  • Web服務器集群與Session保持
  • 動靜分離、數據庫集群
  • 各種緩存服務器
  • 業務模型
單機版LNMP

單機版網站,拓撲如圖所示。

用戶量少時使用,簡單、成本低、存在單點故障。

獨立數據庫服務器

獨立數據庫服務器是將網站靜態文件、代碼文件等資料與數據庫分離的架構,當用戶量增加時單機的處理能力有限,PHP或JAVA代碼的執行需要消耗大量CPU資源,數據庫的增刪改查需要調用大量的內存資源,將兩者分離可以減輕服務器的壓力,其拓撲結構如圖所示。

Web服務器和數據庫服務器的壓力都可以得到有效改善,訪問量有所增加。但是服務器依然存在單點故障問題。

Web服務器集群與Session保持

我們可以通過Nginx、Haproxy代理服務器實現Web負載均衡集群,也可以使用LVS調度器實現Web負載均衡集群。部署完Web集群后還需要考慮如何進行Session會話保持,方法很多,如:根據源IP保持,代理服務器重寫Cookie信息,共享文件系統保存session,使用數據庫共享session等等。
該架構拓撲如圖所示。
但是如果只有一臺調度器依然會導致單點故障的問題,因此還需要使用Keepalived或Heartbeat之類的軟件進行高可用配置,如圖所示。

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

動靜分離、數據庫集群

隨著服務器的增加,雖然性能與并發量得到了明顯的提升,但是數據的一致性、管理的便利性成為了新的問題,因此就需要增加統一的存儲服務器,實現數據的同步一致,可以使用NFS,GlusterFS、Ceph等軟件實現該功能,其架構如圖所示。

此時所有應用服務器都連接一臺數據庫服務器進行讀寫操作,而且后期隨著數據庫中的數據不斷增加,會導致數據庫成為整個網站的瓶頸!這就需要我們對數據進行分庫分表,創建數據庫主從或者數據庫集群,實現讀寫分離,其拓撲如圖所示。

緩存服務器與業務模型

對于靜態數據我們可以通過varnish、squid或者nginx進行緩存,將數據緩存到距離用戶更近的位置,構建CDN(內容分發網絡)架構。

對于傳統的SQL數據庫而言,我們也可以通過增加NoSQL數據庫,實現數據緩存的功能,提升數據庫的訪問速度。

備注:數據庫相關知識在第三階段課程有詳細介紹,第二階段項目暫時不做數據庫優化。

最后,基于前面的架構,我們還可以將網站按照公司的業務進行分離,每個業務都可以是一個獨立的集群,如圖所示。

LNP+Mariadb數據庫分離

問題
部署LNP+Mariadb實現數據庫與Web服務器分離,實現以下目標:

  • 將舊的數據庫備份,遷移到新的服務器
  • 修改配置調用新的數據庫服務器

方案
實驗拓撲如圖所示,做具體實驗前請先配置好環境。

主機配置如表所示。

步驟

  • 步驟一:部署數據庫服務器

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; MariaDB [(none)]> exit

使用備份文件還原數據:

[root@database ~]# mysql wordpress < wordpress.bak

重新創建賬戶并授權訪問:

[root@database ~]# mysql MariaDB [(none)]> grant all on wordpress.* to wordpress@'%' identified by 'wordpress'; MariaDB [(none)]> flush privileges; MariaDB [(none)]> exit

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');
  • 步驟二:客戶端測試

1)客戶端使用瀏覽器訪問wordpress網站。

[root@client ~]# firefox http://192.168.2.11

Web服務器集群

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

  • 部署三臺Web服務器
  • 遷移網站數據,使用NFS實現數據共享
  • 部署HAProxy代理服務器實現負載均衡
  • 部署DNS域名解析服務器
    方案
    實驗拓撲如圖所示,做具體實驗前請先配置好環境。

    備注:實際操作中DNS服務代理服務器部署在同一臺主機上(節約虛擬機資源)。

主機配置如表所示。

步驟

  • 步驟一:部署web2和web3服務器

1)安裝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 instal [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 instal [root@web3 ~]# yum -y install php php-fpm php-mysql mariadb-devel

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

web2修改默認首頁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修改默認首頁index.php,配置兩個location實現動靜分離。

[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;}

3)啟動相關服務

[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管理,如果需要使用systemd管理源碼安裝的軟件需要手動編寫服務的service文件(編寫是可以參考其他服務的模板文件)。以下是nginx服務最終編輯好的模板。

Service文件存儲路徑為/usr/lib/system/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
  • 步驟二:部署NFS,將網站數據遷移至NFS共享服務器

1)部署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) [root@nfs ~]# systemctl restart rpcbind [root@nfs ~]# systemctl eanble rpcbind

NFS使用的是隨機端口,每次啟動NFS都需要將自己的隨機端口注冊到rpcbind服務,這樣客戶端訪問NFS時先到rpcbind查詢端口信息,得到端口信息后再訪問NFS服務。

[root@nfs ~]# systemctl restart nfs [root@nfs ~]# systemctl enable nfs

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

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

[root@web1 ~]# cd /usr/local/nginx/ [root@web1 nginx]# tar -czpf html.tar.gz html/ [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

3)所有web服務器訪問掛載NFS共享數據。

[root@web1 ~]# /usr/local/ngix/sbin/nginx -s stop [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
  • 步驟三:部署HAProxy代理服務器

1)部署HAProxy

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

[root@proxy ~]# yum -y install haproxy [root@proxy ~]# vim /etc/haproxy/haproxy.cfg listen wordpress *:80balance roundrobinserver 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
  • 步驟三:部署DNS域名服務器

1)安裝DNS相關軟件(192.168.4.5操作)

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

2)修改主配置文件,添加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

3)修改正向解析記錄文件。

注意:保留文件權限。

[root@proxy named]# cp -p /var/named/named.localhost /var/named/lab.com.zone [root@proxy named]# vim /var/named/lab.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

4)啟動服務

[root@proxy named]# systemctl start named [root@proxy named]# systemctl enable named

5)客戶端修改DNS解析文件

提示:做完實驗修改回原始內容。

[root@room9pc01 data]# cat /etc/resolv.conf # Generated by NetworkManager search tedu.cn nameserver 192.168.4.5 nameserver 172.40.1.10 nameserver 192.168.0.220 ############################################ 如果用Windows系統可以在C盤Windows/System32/dirvers/etc/hosts文件修改 !!!注意,要用管理員權限打開文件喲
  • 步驟四:修改wordpress配置文件

1)修改wp-config.php

在define(‘DB_NAME’, ‘wordpress’)這行前面添加如下兩行內容:

[root@web3 html]# vim /usr/local/nginx/html/wp-config.php define('WP_SITEURL', 'http://www.lab.com'); define('WP_HOME', 'http://www.lab.com');

如果不添加這兩行配置,瀏覽器訪問網站某個子頁面后,URL會固定到某一臺后端服務器不輪詢。

總結

以上是生活随笔為你收集整理的项目:网站架构,集群的全部內容,希望文章能夠幫你解決所遇到的問題。

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