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的身份 訪問共享資源