Linux云计算 |【第三阶段】PROJECT1-DAY2

打印 上一主题 下一主题

主题 523|帖子 523|积分 1569

紧张内容:

网站架构演变、LNP+Mariadb数据库分离、Web服务器集群(部署Nginx后端web服务器、部署NFS共享存储服务器、部署Haproxy署理服务器、部署DNS域名解析服务器)

一、网站架构演变:

随着网站访问量和业务复杂度的增加,网站架构需要不停演变以应对更高的性能、可用性和扩展性需求。以下是常见的网站架构演变过程:
1、单机版LNMP


   架构描述:一台WEB服务器部署单机版LNMP
  

  • Linux 操作体系
  • Nginx Web 服务器
  • MySQL 或 MariaDB 数据库
  • PHP 应用服务器
  特点:
  

  • 简单易用,适合小型网站或初创项目。
  • 所有服务(Web、数据库、应用)运行在同一台服务器上。
  • 性能和扩展性有限,无法应对高并发和大数据量。
  题目:
  

  • 单点故障,服务器宕机会导致整个网站不可用。
  • 性能瓶颈,无法应对高并发请求。
  2、独立数据库服务器(LNMP+Mariadb)


   架构描述
  

  • Linux 操作体系
  • Nginx Web 服务器
  • MySQL 或 MariaDB 数据库
  • PHP 应用服务器
  特点
  

  • 将数据库服务从 Web 服务器中分离出来,进步数据库性能和安全性。
  • 数据库服务器可以独立扩展,增加存储和计算资源。
  题目
  

  • Web 服务器仍旧是单点故障。
  • 数据库服务器可能成为性能瓶颈。
  该架构将网站静态文件、代码文件等资料与数据库分离LNMP架构,当访问用户量增加时单机的处置处罚本领及资源有限,PHP或JAVA代码的解析和实行需要消耗大量CPU资源,数据库的增删改查需要调用大量的内存资源,将两者分离可以减轻服务器的压力;Web服务器和数据库服务器的压力得到有效改善的同时,但依然存在单点故障题目;
3、Web服务器集群(署理)与Session保持


   架构描述
  

  • Linux 操作体系
  • Nginx 或 Apache 作为反向署理服务器
  • MySQL 或 MariaDB 数据库
  • PHP 应用服务器集群
  特点
  

  • 使用反向署理服务器(如 Nginx 或 HAProxy)将请求分发到多个 Web 服务器。
  • 通过负载均衡进步网站的并发处置处罚本领。
  • 使用 Session 保持机制(如 Redis、Memcached)确保用户会话在集群中的连续性。
  题目
  

  • 数据库服务器仍旧是单点故障。
  • 需要解决 Session 同步和一致性题目。
  通过Nginx、Haproxy署理服务器实现Web负载均衡集群,也可使用LVS调度器实现Web负载均衡集群。部署完Web集群后还需要思量怎样进行Session会话保持,方法许多,如:根据源IP保持,署理服务器重写Cookie信息,共享文件体系保存session,使用数据库共享session等等;
但是如果只有一台调度器依然会导致单点故障的题目,因此还需要使用Keepalived或Heartbeat之类的软件进行高可用配置;

对于网站内容而言可以分离为动态页面和静态页面,静态页面就需要数据文件,动态页面则需要CPU解析代码,需要消耗大量的CPU资源,因此可以将静态和动态分离为两组服务器,动态页面有脚本代码组成,是一种基于网页的应用程序,因此这一组服务器也称为应用服务器;

4、动静分离、数据库集群


    架构描述
  

  • Linux 操作体系
  • Nginx 或 Apache 作为反向署理服务器
  • MySQL 或 MariaDB 数据库集群
  • PHP 应用服务器集群
  • 静态资源服务器(如 CDN、Nginx)
  特点
  

  • 使用数据库集群(如主从复制、主主复制、分片)进步数据库的可用性和性能。
  • 通过读写分离、分片等技能,分散数据库的负载。
  • 进步数据库的扩展性和容错本领。
  题目
  

  • 数据库集群的配置和管理复杂。
  • 需要解决数据一致性和同步题目。
  随着服务器的增加,固然性能与并发量得到了明显的提升,但是数据的一致性、管理的便利性成为了新的题目,因此就需要增加同一的存储服务器,实现数据的同步一致,可以使用NFS,GlusterFS、Ceph等软件实现该功能;此时所有应用服务器都连接一台数据库服务器进行读写操作,而且后期随着数据库中的数据不停增加,会导致数据库成为整个网站的瓶颈!这就需要我们对数据进行分库分表,创建数据库主从或者数据库集群,实现读写分离;

5、缓存服务器与业务模型

对于静态数据我们可以通过varnish、squid或者nginx进行缓存,将数据缓存到间隔用户更近的位置,构建CDN(内容分发网络)架构;对于传统的SQL数据库而言,我们也可以通过增加NoSQL数据库,实现数据缓存的功能,提升数据库的访问速率;
   架构描述
  

  • Linux 操作体系
  • Nginx 或 Apache 作为反向署理服务器
  • MySQL 或 MariaDB 数据库集群
  • PHP 应用服务器集群
  • 静态资源服务器(如 CDN、Nginx)
  • 缓存服务器(如 Redis、Memcached)
  特点
  

  • 使用缓存服务器(如 Redis、Memcached)缓存频繁访问的数据和计算结果。
  • 通过缓存减少数据库的访问压力,进步网站的相应速率。
  • 根据业务模型设计缓存策略,如缓存预热、缓存失效、缓存更新等。
  题目
  

  • 缓存服务器的配置和管理复杂。
  • 需要解决缓存一致性和失效题目。
  

二、网站架构进阶项目案例

案例1:LNP+Mariadb数据库分离

部署LNP+Mariadb实现数据库与Web服务器分离,实现以下目标:


  • 1)将旧的数据库备份,迁移到新的服务器(连续DAY1案例)
  • 2)修改配置调用新的数据库服务器
实验拓扑图:

主机配置表:

步骤1:部署数据库服务器(database主机操作)
1)准备一台独立的服务器,安装数据库软件包
  1. [root@database ~]# yum -y install mariadb mariadb-server mariadb-devel
  2. [root@database ~]# systemctl start mariadb
  3. [root@database ~]# systemctl enable mariadb
  4. [root@database ~]# firewall-cmd --set-default-zone=trusted
  5. [root@database ~]# setenforce  0
  6. [root@database ~]# sed -i  '/SELINUX/s/enforcing/permissive/'  /etc/selinux/config
复制代码
2)将web1单机版的LNMP网站中的数据库迁移到新的数据库服务器
登岸192.168.2.11主机,备份数据库并拷贝给新的服务器,关闭旧的数据库服务:
  1. [root@web1 ~]# mysqldump wordpress > wordpress.bak    //备份数据库到文件(备份的文件名和扩展名任意)
  2. [root@web1 ~]# scp wordpress.bak 192.168.2.21:/root/   //拷贝备份文件到远程主机
  3. [root@web1 ~]# systemctl stop mariadb
  4. [root@web1 ~]# systemctl disable mariadb
复制代码
登岸192.168.2.21主机,创建空数据库,使用备份文件还原数据库:
  1. [root@database ~]# mysql
  2. MariaDB [(none)]> create database wordpress character set utf8mb4;   //创建数据库wordpress,该数据库支持中文
  3. MariaDB [(none)]> exit
复制代码
使用备份文件还原数据:
  1. [root@database ~]# mysql wordpress < wordpress.bak    //使用备份文件导入数据到wordpress数据库
复制代码
重新创建账户并授权访问:
  1. [root@database ~]# mysql
  2. MariaDB [(none)]> grant all on wordpress.* to wordpress@'%' identified by 'wordpress';
  3. MariaDB [(none)]> flush privileges;     //刷新权限
  4. MariaDB [(none)]> show databases;
  5. +--------------------+
  6. | Database           |
  7. +--------------------+
  8. | information_schema |
  9. | mysql              |
  10. | performance_schema |
  11. | test               |
  12. | wordpress          |
  13. +--------------------+
  14. 5 rows in set (0.00 sec)
  15. MariaDB [(none)]> exit
复制代码
表明说明:
   # 格式:grant权限 on数据库名.表名 to用户名@客户端主机 identified by暗码
  # 创建用户并授权,用户名为wordpress,该用户对wordpress数据库下的所有表有所有权限
  # wordpress用户的暗码是wordpress,授权该用户可以从localhost主机登录数据库服务器
  # all代表所有权限(wordpress用户可以对wordpress数据库中所有表有所有权限)
  # wordpress.*代表wordpress数据库中的所有表
  # 在MySQL和MariaDB中%代表所有,这里是授权任何主机都可以连接数据库。
  3)修改wordpress网站配置文件,调用新的数据库服务器
Wordpress在第一次初始化操作时会主动生产配置文件wp-config.php,登岸192.168.2.11修改该文件即可调用新的数据库服务。
  1. [root@web1 ~]# vim /usr/local/nginx/html/wp-config.php
  2. # 修改前内容如下:
  3. define('DB_HOST', '192.168.2.11');   //将原指定2.11本机配置修改为DB主机2.21
  4. # 修改后内容如下:
  5. define('DB_HOST', '192.168.2.21');
  6. ...
复制代码
步骤2:客户端(真机)验证测试
1)客户端使用浏览器访问wordpress网站:http://192.168.2.11 

 

案例2:Web服务器集群

使用HAProxy部署Web服务器集群,实现以下目标:


  • 1)部署三台Web服务器(包含DAY1的web1,部署相同web2、web3)
  • 2)迁移网站数据,使用NFS实现数据共享
  • 3)部署HAProxy署理服务器实现负载均衡
  • 4)部署DNS域名解析服务器
实验拓扑图:

主机配置表:

步骤1:部署LNP架构
1)安装LNP软件包(web2、web3操作)
  1. [root@web2 ~]# yum -y install gcc pcre-devel openssl-devel
  2. [root@web2 lnmp_soft]# tar -xf nginx-1.12.2.tar.gz
  3. [root@web2 lnmp_soft]# cd nginx-1.12.2/
  4. [root@web2 nginx-1.12.2]# ./configure --user=nginx --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module
  5. [root@web2 nginx-1.12.2]# make && make install
  6. [root@web2 ~]# yum -y install php php-fpm php-mysql mariadb-devel
  7.  
  8. [root@web3 ~]# yum -y install gcc pcre-devel openssl-devel
  9. [root@web3 lnmp_soft]# tar -xf nginx-1.12.2.tar.gz
  10. [root@web3 lnmp_soft]# cd nginx-1.12.2/
  11. [root@web3 nginx-1.12.2]# ./configure --user=nginx --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module
  12. [root@web3 nginx-1.12.2]# make && make install
  13. [root@web3 ~]# yum -y install php php-fpm php-mysql mariadb-devel
复制代码
  案例1连续,Mariadb数据库服务已分离到另一台数据库服务器上,无需再安装数据库服务;
  2)修改nginx配置实现动静分离(web2、web3操作)
web2修改默认首页index.php,配置两个location实现动静分离
  1. [root@web2 ~]# vim /usr/local/nginx/conf/nginx.conf
  2. location / {
  3.             root   html;
  4.             index  index.php index.html index.htm;
  5.         }
  6. location ~ \.php$ {
  7.             root            html;
  8.             fastcgi_pass   127.0.0.1:9000;
  9.             fastcgi_index  index.php;
  10.             include         fastcgi.conf;
  11.         }
复制代码
web3修改默认首页index.php,配置两个location实现动静分离。
  1. [root@web3 ~]# vim /usr/local/nginx/conf/nginx.conf
  2. location / {
  3.             root   html;
  4.             index  index.php index.html index.htm;
  5.         }
  6. location ~ \.php$ {
  7.             root            html;
  8.             fastcgi_pass   127.0.0.1:9000;
  9.             fastcgi_index  index.php;
  10.             include         fastcgi.conf;
  11.         }
复制代码
3)启动LNP所有干系服务、设置防火墙和SELinux
  1. [root@web2 ~]# echo "/usr/local/nginx/sbin/nginx" >> /etc/rc.local
  2. [root@web2 ~]# chmod +x /etc/rc.local
  3. [root@web2 ~]# /usr/local/nginx/sbin/nginx
  4. [root@web2 ~]# systemctl start php-fpm
  5. [root@web2 ~]# systemctl enable php-fpm
  6. [root@web2 ~]# firewall-cmd --set-default-zone=trusted
  7. [root@web2 ~]# setenforce  0
  8. [root@web2 ~]# sed -i  '/SELINUX/s/enforcing/permissive/'  /etc/selinux/config
  9. [root@web3 ~]# echo "/usr/local/nginx/sbin/nginx" >> /etc/rc.local
  10. [root@web3 ~]# chmod +x /etc/rc.local
  11. [root@web3 ~]# /usr/local/nginx/sbin/nginx
  12. [root@web3 ~]# systemctl start php-fpm
  13. [root@web3 ~]# systemctl enable php-fpm
  14. [root@web3 ~]# firewall-cmd --set-default-zone=trusted
  15. [root@web3 ~]# setenforce  0
  16. [root@web3 ~]# sed -i  '/SELINUX/s/enforcing/permissive/'  /etc/selinux/config
复制代码
扩展知识:Service文件存储路径为/usr/lib/systemd/system/目录
  1. [root@web1 ~]# cp /usr/lib/systemd/system/httpd.service /usr/lib/systemd/system/nginx.service
  2. [root@web1 ~]# vim /usr/lib/systemd/system/nginx.service
  3. [Unit]
  4. Description=The Nginx HTTP Server    //描述信息
  5. After=network.target remote-fs.target nss-lookup.target   //指定启动nginx之前需要其他的其他服务,如network.target等
  6.  
  7. [Service]
  8. Type=forking
  9. ExecStart=/usr/local/nginx/sbin/nginx
  10. ExecReload=/usr/local/nginx/sbin/nginx -s reload
  11. ExecStop=/bin/kill -s QUIT ${MAINPID}
  12.  
  13. [Install]
  14. WantedBy=multi-user.target
  15. [root@web1 ~]# systemctl start nginx
  16. [root@web1 ~]# ss -nlptu | grep :80
复制代码
步骤2:部署NFS,将Wordpress网站数据迁移至NFS共享服务器
1)部署NFS共享服务器
  1. [root@nfs ~]# yum install nfs-utils rpcbind
  2. [root@nfs ~]# mkdir /web_share    //创建NFS共享目录
  3. [root@nfs ~]# vim /etc/exports
  4. /web_share  192.168.2.0/24(rw,no_root_squash)
  5. [root@nfs ~]# systemctl restart rpcbind
  6. [root@nfs ~]# systemctl enable rpcbind
  7. [root@nfs ~]# systemctl restart nfs
  8. [root@nfs ~]# systemctl enable nfs
  9. [root@nfs ~]# firewall-cmd --set-default-zone=trusted
  10. [root@nfs ~]# setenforce 0
  11. [root@nfs ~]# sed -i '/SELINUX/s/enforcing/permissive/' /etc/selinux/config
复制代码
  增补:NFS使用的是随机端口,启动NFS都需要将本身的随机端口注册到rpcbind服务,当客户端访问NFS时,先到rpcbind查询端口信息,得到端口信息后再访问NFS服务
  增补:/etc/exports配置文件的no_root_squash(squash压缩压扁的意思)
  

  • no_root_squash:登入NFS的主机使用共享目录的使用者如果是root时,那么对于这个目录来说,该主机就具有root的权限;
  • root_squash:登入NFS主机使用共享目录的使用者如果是root时,那么使用者的权限将被压缩成为NFS体系账号:nfs匿名身份(UID与GID都会酿成nfsnobody)
  1. [root@nfs ~]# id nfsnobody
  2. uid=65534(nfsnobody) gid=65534(nfsnobody) 组=65534(nfsnobody)
复制代码
2)迁移旧的网站数据到NFS共享服务器
将web1(192.168.2.11)上的wordpress代码拷贝到NFS共享
  1. [root@web1 ~]# cd /usr/local/nginx/html/
  2. [root@web1 html]# tar -czpf html.tar.gz ./*    // [-p]代表打包时保留文件的权限
  3. [root@web1 html]# scp html.tar.gz 192.168.2.31:/web_share/
  4. [root@web1 html]# rm -rf /usr/local/nginx/html/*     //清空本机的网页目录
复制代码
登录nfs(192.168.2.31),将压缩包解压
  1. [root@nfs ~]# cd /web_share/
  2. [root@nfs web_share]# ls
  3. html.tar.gz
  4. [root@nfs web_share]# tar -xf html.tar.gz
  5. [root@nfs web_share]# ls
  6. html.tar.gz  wp-activate.php       wp-config.php         wp-includes        wp-mail.php       xmlrpc.php
  7. index.php    wp-admin              wp-config-sample.php  wp-links-opml.php  wp-settings.php
  8. license.txt  wp-blog-header.php    wp-content            wp-load.php        wp-signup.php
  9. readme.html  wp-comments-post.php  wp-cron.php           wp-login.php       wp-trackback.php
复制代码
3)所有web服务器访问挂载NFS共享数据(web1、web2、web3)
  1. [root@web1 ~]# yum -y install nfs-utils
  2. [root@web1 ~]# showmount -e 192.168.2.31
  3. Export list for 192.168.2.31:
  4. /web_share 192.168.2.0/24
  5. [root@web1 ~]# echo "192.168.2.31:/web_share /usr/local/nginx/html/ nfs defaults 0 0" >> /etc/fstab
  6. [root@web1 ~]# mount -a
  7. [root@web1 ~]# ls /usr/local/nginx/html
  8. html.tar.gz  wp-activate.php       wp-config.php         wp-includes        wp-mail.php       xmlrpc.php
  9. index.php    wp-admin              wp-config-sample.php  wp-links-opml.php  wp-settings.php
  10. license.txt  wp-blog-header.php    wp-content            wp-load.php        wp-signup.php
  11. readme.html  wp-comments-post.php  wp-cron.php           wp-login.php       wp-trackback.php
  12.  
  13. [root@web2 ~]# yum -y install nfs-utils
  14. [root@web2 ~]# echo "192.168.2.31:/web_share/html /usr/local/nginx/html/ nfs defaults 0 0" >> /etc/fstab
  15. [root@web2 ~]# mount -a
  16. [root@web3 ~]# yum -y install nfs-utils
  17. [root@web3 ~]# echo "192.168.2.31:/web_share/html /usr/local/nginx/html/ nfs defaults 0 0" >> /etc/fstab
  18. [root@web3 ~]# mount -a
复制代码
4)使用浏览器测试访问每个web服务器,检察是否有相同的网页数据结果;

   表明:当前所有的WEB服务器已部署LNP架构,每台WEB服务器能提供动静态的页面解析;然后分离出的database服务器部署Mariadb服务,并备份及恢复原web1数据库的数据,并提供了wordpress网站访问数据库的用户和所有权限;其次将网站的数据存放在NFS服务器的共享目录中,并把每台WEB服务器挂载了共享目录,实现网页数据访问;
  步骤3:部署HAProxy署理服务器
1)部署HAProxy(80端口)
  1. [root@proxy ~]# yum -y install haproxy
  2. [root@proxy ~]# vim /etc/haproxy/haproxy.cfg
  3. listen wordpress *:80    //监听80端口
  4.   balance roundrobin     //轮询算法
  5.   server web1 192.168.2.11:80 check inter 2000 rise 2 fall 3
  6.   server web2 192.168.2.12:80 check inter 2000 rise 2 fall 3
  7.   server web3 192.168.2.13:80 check inter 2000 rise 2 fall 3
  8. [root@proxy ~]# systemctl start haproxy
  9. [root@proxy ~]# systemctl enable haproxy
  10. [root@proxy ~]# ss -nlptu | grep :80
  11. tcp    LISTEN     0      128       *:80                    *:*                   users:(("haproxy",pid=981,fd=7))
  12. [root@proxy ~]# firewall-cmd --set-default-zone=trusted
  13. [root@proxy ~]# setenforce  0
  14. [root@proxy ~]# sed -i  '/SELINUX/s/enforcing/permissive/'  /etc/selinux/config
复制代码
2)使用浏览器测试访问proxy署理服务器,检察网页数据结果;

步骤4:部署DNS域名服务器
1)安装DNS干系软件
  1. [root@dns ~]# yum -y install bind bind-chroot
复制代码
2)修改主配置文件,添加zone
  1. [root@dns ~]# vim /etc/named.conf
  2. options {
  3.         listen-on port 53 { any; };          //服务监听的地址与端口
  4.         directory       "/var/named";      //数据文件路径
  5.         allow-query     { any; };          //允许任何主机访问DNS服务
  6. ... ...
  7. };
  8. zone "lab.com" IN {                        //定义正向区域
  9.         type master;
  10.         file "lab.com.zone";
  11. };
  12. #include "/etc/named.rfc1912.zones";      //注释掉改行
  13. #include "/etc/named.root.key";            //注释掉改行
  14. [root@dns ~]# named-checkconf /etc/named.conf       //检查配置文件语法
复制代码
3)修改正向解析记录文件
  1. [root@dns ~]# cp -p /var/named/named.localhost /var/named/lab.com.zone
  2. [root@dns ~]# vim /var/named/lab.com.zone
  3. $TTL 1D
  4. @       IN SOA  @ rname.invalid. (
  5.                                         0       ; serial
  6.                                         1D      ; refresh
  7.                                         1H      ; retry
  8.                                         1W      ; expire
  9.                                         3H )    ; minimum
  10. @        NS     dns.lab.com.
  11. dns     A       192.168.2.10
  12. www     A       192.168.2.10
复制代码
4)启动DNS服务
  1. [root@dns ~]# systemctl start named
  2. [root@dns ~]# systemctl enable named
  3. [root@dns~]# firewall-cmd --set-default-zone=trusted
  4. [root@dns ~]# setenforce  0
  5. [root@dns ~]# sed -i  '/SELINUX/s/enforcing/permissive/'  /etc/selinux/config
复制代码
5)修改DNS解析文件
  1. [root@dns ~]# vim /etc/resolv.conf
  2. nameserver 192.168.2.10
复制代码
— 验证:
  1. [root@dns ~]# nslookup www.lab.com
  2. Server: 192.168.2.10
  3. Address: 192.168.2.10#53
  4.  
  5. Name: www.lab.com
  6. Address: 192.168.2.10
复制代码
备注:


  • 如果不做DNS,也可直接修改hosts解析文件;
  • 如果是Linux客户端,则修改/etc/hosts文件;
  • 怎样客户端是Windows则需要在图形中配置网卡的DNS服务器;

步骤5:修改wordpress配置文件
1)修改wp-config.php
在define('DB_NAME', 'wordpress')这行前面添加如下两行内容:
  1. [root@nfs ~]# vim /usr/local/nginx/html/wp-config.php
  2. define('WP_SITEURL', 'http://www.lab.com');
  3. define('WP_HOME', 'http://www.lab.com');
  4. ...
复制代码
  增补:如果不添加这两行配置,浏览器访问网站某个子页面后,URL会固定到某一台后端服务器不轮询。
  警告:添加的这两行必须与前面的域名解析一致!!!!
  
小结:

本篇章节为【第三阶段】PROJECT1-DAY2 的学习条记,这篇条记可以开端相识到 网站架构演变、LNP+Mariadb数据库分离、Web服务器集群(部署Nginx后端web服务器、部署NFS共享存储服务器、部署Haproxy署理服务器、部署DNS域名解析服务器)

Tip:毕竟两个人的智慧大于一个人的智慧,如果你不理解本章节的内容或需要干系条记、视频,可私信小安,请不关键羞和回避,可以向他人讨教,花点时间直到你真正的理解

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

伤心客

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表