Nginx架構(gòu)拆分集群
1、拆分?jǐn)?shù)據(jù)庫至獨(dú)立服務(wù)器
1.1 為何要拆分?jǐn)?shù)據(jù)庫
單臺服務(wù)器運(yùn)行整個(gè)LNMP架構(gòu)會導(dǎo)致網(wǎng)站訪問緩慢,當(dāng)系統(tǒng)內(nèi)存被吃滿時(shí),很容易導(dǎo)致系統(tǒng)出現(xiàn)oom,從而kill掉MySQL數(shù)據(jù)庫,為了避免這種情況的發(fā)生,我們可以將數(shù)據(jù)庫服務(wù)拆分到獨(dú)立的服務(wù)器上部署。拆分?jǐn)?shù)據(jù)庫可以帶來以下好處:
? 1.緩解web網(wǎng)站的壓力;
? 2.增強(qiáng)數(shù)據(jù)庫讀寫性能;
? 3.提高用戶訪問的速度;
1.2 數(shù)據(jù)庫拆分架構(gòu)
image.png
1.3 數(shù)據(jù)庫拆分環(huán)境
系統(tǒng)環(huán)境 | 主機(jī)名稱 | 應(yīng)用環(huán)境 | 外網(wǎng)地址 | 內(nèi)網(wǎng)地址 |
RockyLinux9 | web01.newy.net | nginx+php | 10.0.0.7 | 172.16.1.7 |
RockyLinux9 | db01.newy.net | mysql | 10.0.0.51 | 172.16.1.51 |
1.4 拆分?jǐn)?shù)據(jù)庫實(shí)踐
要將數(shù)據(jù)庫服務(wù)遷移到一個(gè)獨(dú)立的服務(wù)器運(yùn)行,可以按照如下步驟進(jìn)行操作:
? 1、首先,我們需要備份當(dāng)前 Web 服務(wù)器上 MySQL 的數(shù)據(jù)。然后將備份的文件拷貝到新的數(shù)據(jù)庫服務(wù)器。
? 2、在新服務(wù)器上安裝 MySQL ,并導(dǎo)入剛才備份的數(shù)據(jù),確保數(shù)據(jù)庫內(nèi)容是最新的。
? 3、在新的 MySQL 服務(wù)上創(chuàng)建一個(gè)遠(yuǎn)程可以訪問數(shù)據(jù)庫的用戶,并賦予對應(yīng)的權(quán)限。
? 4、最后將應(yīng)用程序數(shù)據(jù)庫的連接地址,指向新的數(shù)據(jù)庫服務(wù)器地址。
1、備份web服務(wù)器上的數(shù)據(jù)庫,然后將備份的文件拷貝到新的數(shù)據(jù)庫服務(wù)器上;
[root@web01 ~]# mysqldump -uroot -p'newy.net'-B wordpress zh > app-database.sql [root@web01 ~]# scp app-database.sql root@172.16.1.51:/tmp
2、在新的數(shù)據(jù)庫服務(wù)器上安裝MySQL,然后導(dǎo)入數(shù)據(jù)
[root@db01 ~]# yum install mysql-server -y [root@db01 ~]# systemctlenablemysqld --now [root@db01 ~]# mysql -uroot < /tmp/app-database.sql
3、在新的MySQL服務(wù)上創(chuàng)建一個(gè)能通過遠(yuǎn)程訪問的用戶
CREATE USER'app'@'%'IDENTIFIED BY'newy.net'; grant all privileges ON *.* TO'app'@'%'; flush privileges;
4、修改代碼指向新的數(shù)據(jù)庫
# wordpress [root@web01 ~]# vim /code/wordpress/wp-config.php define('DB_NAME','wordpress'); define('DB_USER','app'); define('DB_PASSWORD','newy.net'); define('DB_HOST','172.16.1.51'); # wecenter [root@web01 zh]# grep -iR"newy.net"|grep -v cache system/config/database.php: 'password'=>'newy.net', [root@web01 zh]# vim /code/zh/system/config/database.php 'host'=>'172.16.1.51', 'username'=>'app', 'password'=>'newy.net', 'dbname'=>'zh',
2、擴(kuò)展多臺相同的Web應(yīng)用
2.1 為何要擴(kuò)展多臺web節(jié)點(diǎn)
目前站點(diǎn)僅運(yùn)行在一臺服務(wù)器上,那么它能夠同時(shí)處理的用戶數(shù)量是有限的。為了讓網(wǎng)站能夠接收更多的用戶請求,我們需要配置多臺服務(wù)器,來共同提供支撐。這樣做有幾個(gè)好處:
? 1、單臺web節(jié)點(diǎn)如果故障,會導(dǎo)致業(yè)務(wù)整體down機(jī);
? 2、多臺web節(jié)點(diǎn)能保證業(yè)務(wù)的持續(xù)穩(wěn)定,擴(kuò)展性高;
? 3、多臺web節(jié)點(diǎn)能有效的提升用戶訪問網(wǎng)站的速度;
2.2 擴(kuò)展多web節(jié)點(diǎn)架構(gòu)
image.png
2.3 擴(kuò)展多web節(jié)點(diǎn)環(huán)境
系統(tǒng)環(huán)境 | 主機(jī)名稱 | 應(yīng)用環(huán)境 | 外網(wǎng)地址 | 內(nèi)網(wǎng)地址 |
RockyLinux9 | web01.newy.net | nginx+php | 10.0.0.7 | 172.16.1.7 |
RockyLinux9 | web02.newy.net | nginx+php | 10.0.0.8 | 172.16.1.8 |
RockyLinux9 | db01.newy.net | mysql | 10.0.0.51 | 172.16.1.51 |
2.4 擴(kuò)展多web節(jié)點(diǎn)實(shí)踐
基于現(xiàn)有的web01節(jié)點(diǎn),快速擴(kuò)展一臺web02的節(jié)點(diǎn),數(shù)據(jù)庫統(tǒng)一使用db01
1、安裝LNP環(huán)境
2、將web01節(jié)點(diǎn)的Nginx、PHP配置文件拷貝至web02節(jié)點(diǎn)
3、將web01節(jié)點(diǎn)的代碼拷貝至web02節(jié)點(diǎn)
4、啟動服務(wù),而后使用客戶端進(jìn)行驗(yàn)證服務(wù);
1、安裝LNP環(huán)境(創(chuàng)建用戶、安裝軟件)
[root@web02 ~]# groupadd -g666 www [root@web02 ~]# useradd -u666 -g666 www [root@web02 ~]# scp -rp root@172.16.1.7:/etc/yum.repos.d/nginx.repo /etc/yum.repos.d/ [root@web02 ~]# yum install -y nginx php php-fpm php-cli php-common php-devel php-embedded php-gd php-mcrypt php-bcmath php-mbstring php-pdo php-xml php-mysqlnd php-opcache php-pecl-zip php-pecl-redis php-pecl-mongodb
2、使用 scp 或 rsync 將web01的nginx、php配置文件拷貝到web02
[root@web02 ~]# scp -rp root@172.16.1.7:/etc/nginx /etc/ [root@web02 ~]# scp -rp root@172.16.1.7:/etc/php-fpm.d /etc/ [root@web02 ~]# scp -rp root@172.16.1.7:/etc/php.ini /etc/
3、使用 scp 或 rsync 將web01的代碼拷貝到web02服務(wù)器上
[root@web01 ~]# tar czf code.tar.gz /code [root@web01 ~]# scp code.tar.gz root@172.16.1.8:/tmp [root@web02 ~]# tar xf /tmp/code.tar.gz -C /
4、啟動nginx與php-fpm并加入開機(jī)自啟
[root@web02 ~]# systemctlenablenginx php-fpm --now
3、拆分靜態(tài)資源至獨(dú)立服務(wù)器
3.1 為何要拆分靜態(tài)資源
當(dāng)前后端有多臺web節(jié)點(diǎn),會導(dǎo)致用戶上傳的圖片、視頻附件等內(nèi)容僅上傳到了一臺web服務(wù)器,那么其他的web服務(wù)器則無法訪問到該圖片。為了解決這個(gè)問題,我們可以使用NFS共享存儲。這么做有幾個(gè)好處:
? 1、保證了多臺web節(jié)點(diǎn)靜態(tài)資源一致。
? 2、有效節(jié)省多臺web節(jié)點(diǎn)的存儲空間。
? 3、后期通過自動化更新代碼,只需要考慮更新代碼的變動,而無需考慮靜態(tài)資源。
3.2 拆分靜態(tài)資源架構(gòu)
image.png
3.3 增加共享存儲環(huán)境
系統(tǒng)環(huán)境 | 主機(jī)名稱 | 應(yīng)用環(huán)境 | 外網(wǎng)地址 | 內(nèi)網(wǎng)地址 |
RockyLinux9 | web01.newy.net | nginx+php | 10.0.0.7 | 172.16.1.7 |
RockyLinux9 | web02.newy.net | nginx+php | 10.0.0.8 | 172.16.1.8 |
RockyLinux9 | nfs.newy.net | nfs | 10.0.0.22 | 172.16.1.22 |
RockyLinux9 | db01.newy.net | mysql | 10.0.0.51 | 172.16.1.51 |
3.4 增加共享存儲實(shí)踐
配置共享存儲實(shí)現(xiàn)思路;
? 1、首先增加一臺獨(dú)立的服務(wù)器,然后安裝好對應(yīng)的NFS,并對外共享目錄;
? 2、找到應(yīng)用存儲靜態(tài)資源的路徑,而后將靜態(tài)資源全部同步到NFS存儲中;
? 3、將應(yīng)用站點(diǎn)的靜態(tài)目錄,掛載到NFS存儲對應(yīng)的目錄上;
1、安裝NFS
[root@nfs ~]# yum install nfs-utils -y [root@nfs ~]#cat/etc/exports /data/blog 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666) /data/zh 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666) [root@nfs ~]#mkdir/data/{blog,zh} -p [root@nfs ~]#chown-R www.www /data/ [root@nfs ~]# systemctl restart nfs-server
2、將靜態(tài)資源文件同步到共享存儲中
[root@web01 ~]# scp -rp /code/wordpress/wp-content/uploads/* root@172.16.1.22:/data/blog
3、各個(gè)節(jié)點(diǎn)掛載對應(yīng)的存儲
[root@web01 ~]# mount -t nfs 172.16.1.22:/data/blog /code/wordpress/wp-content/uploads/ [root@web02 ~]# mount -t nfs 172.16.1.22:/data/blog /code/wordpress/wp-content/uploads/
4、問題思考
4.1 如何快速擴(kuò)展新節(jié)點(diǎn)
如果我們添加了一臺C應(yīng)用服務(wù)器,如何能實(shí)現(xiàn)快速擴(kuò)展?
? 1.準(zhǔn)備LNP環(huán)境,(手動 | Ansible)
? 2.拷貝任意A或B上的配置文件,代碼
? 3.掛載NFS存儲
4.2 多節(jié)點(diǎn)該如何訪問
現(xiàn)在有多個(gè)WEB服務(wù)器,該如何進(jìn)行訪問?
1、DNS輪詢
? (1)需要所有的web節(jié)點(diǎn)具備公網(wǎng)IP地址
? (2)公網(wǎng)獨(dú)立IP需要費(fèi)用,而且不便宜。
? (3)所有的web節(jié)點(diǎn)有公網(wǎng)IP,不安全。
? (4)DNS只有輪詢機(jī)制,沒有 健康檢查功能。
2、負(fù)載均衡
? (1)所有的web節(jié)點(diǎn)不需要有公網(wǎng)IP,能節(jié)省成本、并保證安全
? (2)能夠?qū)蠖说膚eb節(jié)點(diǎn)進(jìn)行健康檢查機(jī)制;
? (3)負(fù)載均衡有多種調(diào)度算法來滿足企業(yè)不同需求;
image.png
4.3 Nginx負(fù)載均衡配置
wordpress的配置
[root@proxy01 ~]#cat/etc/nginx/conf.d/proxy_blog.newy.net.conf upstream blog { server 172.16.1.7:80; server 172.16.1.8:80; } server { listen 80; server_name blog.newy.net; location / { proxy_pass http://blog; proxy_set_header Host$http_host; proxy_set_header X-Forwarded-For$proxy_add_x_forwarded_for; } }
zh的配置
[root@proxy01 ~]#cat/etc/nginx/conf.d/proxy_zh.newy.net.conf upstream zh { server 172.16.1.7:80; server 172.16.1.8:80; } server { listen 80; server_name zh.newy.net; location / { proxy_pass http://zh; proxy_set_header Host$http_host; proxy_set_header X-Forwarded-For$proxy_add_x_forwarded_for; } }
6.Nginx負(fù)載均衡會話共享
6.1 什么是會話保持
當(dāng)用戶登陸一個(gè)網(wǎng)站服務(wù)器,網(wǎng)站服務(wù)器會將用戶的登陸信息存儲下來(存儲下來的內(nèi)容叫Session),以保證我們能夠一直處于”登陸在線“狀態(tài)。
6.2 為什么需要會話保持
由于我們使用的是負(fù)載均衡輪詢機(jī)制,會導(dǎo)致用戶請求分散在不同的節(jié)點(diǎn),從而造成會話無法保持。
假設(shè)用戶A,通過負(fù)載均衡登陸了網(wǎng)站,此時(shí)會話信息存儲在A節(jié)點(diǎn),那么當(dāng)它一刷新,負(fù)載均衡會將請求分發(fā)給B節(jié)點(diǎn),那么B節(jié)點(diǎn)沒有用戶A的登陸信息,就會提示用戶A登陸,當(dāng)A用戶點(diǎn)擊登陸時(shí)又會將請求分發(fā)給C節(jié)點(diǎn),從而造成用戶A無法實(shí)現(xiàn)會話保持。
6.3 如何實(shí)現(xiàn)會話保持
? 1、粘性session:指Ngnix每次都將同一用戶的所有請求轉(zhuǎn)發(fā)至同一臺服務(wù)器上,及Nginx的 IP_hash。
? 2、session復(fù)制:每次session發(fā)生變化,就廣播給集群中的服務(wù)器,使所有的服務(wù)器上的session相同。
? 3、session持久化:將session存儲至數(shù)據(jù)庫中,像操作數(shù)據(jù)一樣操作session。
? 4、session共享:將session至內(nèi)存數(shù)據(jù)庫中,使用redis,memcached實(shí)現(xiàn)。
? 5、Cookies植入: 使用負(fù)載均衡來實(shí)現(xiàn),例如Haproxy;(在nginx中暫不實(shí)現(xiàn))
6.4 會話保持場景演示
6.4.1 配置web節(jié)點(diǎn)
1.首先安裝并配置phpmyadmin
[root@web01 ~]# wget https://files.phpmyadmin.net/phpMyAdmin/5.2.1/phpMyAdmin-5.2.1-all-languages.zip [root@web01 ~]# unzip phpMyAdmin-5.2.1-all-languages.zip -d /code/ [root@web01 ~]#ln-s /code/phpMyAdmin-5.2.1-all-languages/ /code/phpmyadmin
2.修改phpmyadmin連接遠(yuǎn)程的數(shù)據(jù)庫
[root@web01 code]#cd/code/phpmyadmin [root@web01 phpmyadmin]#cpconfig.sample.inc.php config.inc.php [root@web01 phpmyadmin]# vim config.inc.php /* Server parameters */ $cfg['Servers'][$i]['host'] ='172.16.1.51';
3.在多臺web上準(zhǔn)備phpmyadmin的nginx配置文件*
[root@web01 phpmyadmin]#cat/etc/nginx/conf.d/phpmyadmin.newy.net.conf server { listen 80; server_name admin.newy.net; root /code/phpmyadmin; location / { index index.php index.html; } location ~ .php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } } #重啟Nginx服務(wù) [root@web01 ~]# systemctl restart nginx
6.4.2 配置負(fù)載均衡
1.編寫一份proxy負(fù)載均衡的配置文件,將請求調(diào)度到后端web節(jié)點(diǎn)
[root@proxy01 ~]#cat/etc/nginx/conf.d/proxy_php.com.conf upstream php { server 172.16.1.7:80; server 172.16.1.8:80; } server { listen 80; server_name php.newy.net; location / { proxy_pass http://php; proxy_set_header Host$http_host; } }
2.檢查語法并重載nginx
[root@proxy01 conf.d]# nginx -t [root@proxy01 conf.d]# systemctl restart nginx
6.4.3 配置Redis服務(wù)
1.安裝redis內(nèi)存數(shù)據(jù)庫
[root@db01 ~]# yum install redis -y
2.配置redis監(jiān)聽在本地的內(nèi)網(wǎng)網(wǎng)卡上
[root@db01 ~]# sed -i'/^bind/c bind 127.0.0.1 172.16.1.51'/etc/redis.conf
3.啟動redis
[root@db01 ~]# systemctl start redis [root@db01 ~]# systemctlenableredis
6.4.4 配置php連接Redis
1.修改/etc/php.ini文件。[所有節(jié)點(diǎn)都需要操作]
[root@web ~]# vim /etc/php.ini session.save_handler = redis session.save_path ="tcp://172.16.1.41:6379" ;session.save_path ="tcp://172.16.1.41:6379?auth=123"#如果redis存在密碼,則使用該方式
2.注釋php-fpm.d/www.conf里面的兩條內(nèi)容,否則session內(nèi)容會一直寫入/var/lib/php/session目錄中,從而造成會話共享失敗。[所有節(jié)點(diǎn)都需要操作]
[root@web ~]# vim /etc/php-fpm.d/www.conf ;php_value[session.save_handler] = files ;php_value[session.save_path] = /var/lib/php/session
3.重啟php-fpm服務(wù)。[所有節(jié)點(diǎn)都需要操作]
[root@web ~]# php-fpm -t [root@web ~]# systemctl restart php-fpm
鏈接:https://blog.csdn.net/Sunfeiyanghtml/article/details/140270815
-
服務(wù)器
+關(guān)注
關(guān)注
13文章
9758瀏覽量
87616 -
數(shù)據(jù)庫
+關(guān)注
關(guān)注
7文章
3910瀏覽量
66002 -
nginx
+關(guān)注
關(guān)注
0文章
169瀏覽量
12551
原文標(biāo)題:零宕機(jī)!Nginx集群化部署與高可用架構(gòu)設(shè)計(jì)
文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
nginx重啟命令linux步驟是什么?
nginx重啟命令linux步驟是什么?
Linux高級架構(gòu)師資料分享
模擬集群和數(shù)字集群之間的區(qū)別和特點(diǎn)
copy模式的DRDS集群
服務(wù)器集群系統(tǒng)實(shí)現(xiàn)方案詳解
構(gòu)建實(shí)戰(zhàn):Nginx+IIS構(gòu)筑Web服務(wù)器集群負(fù)載均衡

Nginx如何和現(xiàn)有監(jiān)控系統(tǒng)集成
Nginx_LNMP架構(gòu)拆分

搭建Keepalived+Lvs+Nginx高可用集群負(fù)載均衡

評論