部署LAMP+NFS实现双Web服务器负载均衡

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
传统型负载均衡 CLB,每月750个小时 15LCU
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
简介: 一、需求分析1.前端需支持更大的访问量,单台Web服务器已无法满足需求了,则需扩容Web服务器;2.虽然动态内容可交由后端的PHP服务器执行,但静态页面还需要Web服务器自己解析,那是否意味着多台Web服务器都需要在各自的系统中都存有一份静态页面数据呢?那么如果能将静态页面集中存放,所有We...

img_5e71daac341b09f9e86185101a297bc8.png

一、需求分析

1.前端需支持更大的访问量,单台Web服务器已无法满足需求了,则需扩容Web服务器;
2.虽然动态内容可交由后端的PHP服务器执行,但静态页面还需要Web服务器自己解析,那是否意味着多台Web服务器都需要在各自的系统中都存有一份静态页面数据呢?那么如果能将静态页面集中存放,所有Web服务器都来集中地取文件,对于文件的一致性就有了保障,这个集中地就叫做“文件共享服务器”;

二、需求实现:

1.web1充当http服务器和DNS解析服务器,客户端到web1和web2的请求,如果是静态资源请求通过php主机的NFS服务挂载的存储返回结果
2.web1和web2对于客户端动态资源请求都反向代理到后端php服务器进行执行后返回结果
3.web1和web2实现DNS轮询,客户端访问博客网站是负载均衡的。
4.建立wordpress博客
5.数据库存储wordpress博客的各种数据

三、架构图

img_01bd1ba2b35f0fd6bbde1b5cc91f414e.png

四、步骤概述

1.部署LAMP环境、配置NFS服务器
2.web1、web2、php服务器全部挂载NFS共享目录为网站根目录
3.配置httpd实现动静分离
4.配置DNS实现负载均衡

五、详细过程

1.web1、web2服务器编译安装Apache

# 安装依赖包
yum groupinstall "development tools"
yum install openssl-devel expat-devel pcre-devel 
#
# 解压文件
tar xvf apr-1.6.2.tar.gz 
tar xvf apr-util-1.6.0.tar.gz 
tar xvf httpd-2.4.27.tar.bz2 
cp -r apr-1.6.2 httpd-2.4.27/srclib/apr
cp -r apr-util-1.6.0 httpd-2.4.27/srclib/apr-util
#
# 编译安装
cd httpd-2.4.27/
./configure \
--prefix=/app/httpd24 \
--sysconfdir=/etc/httpd24 \
--enable-so --enable-ssl \
--enable-rewrite --with-zlib \
--with-pcre --with-included-apr \
--enable-modules=most \
--enable-mpms-shared=all \
--with-mpm=prefork
#
make && make install
#
#配置环境变量
vim /etc/profile.d/lamp.sh
    PATH=/app/httpd24/bin/:$PATH
. /etc/profile.d/lamp.sh
#
# 启动服务
apachectl start

2.数据库服务器二进制安装mariadb

# 解压文件
tar xvf mariadb-10.2.8-linux-x86_64.tar.gz  -C /usr/local/
cd /usr/local
#
# 创建软连接,mariadb在/usr/local下必须名为mysql,可以创建软连接,可以改名
ln -s mariadb-10.2.8-linux-x86_64/ mysql
#
# 创建用户
useradd -r -m -d /app/mysqldb -s /sbin/nologin mysql 
cd mysql/
#
# 初始化数据库
scripts/mysql_install_db --datadir=/app/mysqldb --user=mysql
#
# 创建配置文件
mkdir /etc/mysql
cp support-files/my-large.cnf   /etc/mysql/my.cnf
#
# 修改配置文件,指定数据库存放路径
vim /etc/mysql/my.cnf
[mysqld]
datadir = /app/mysqldb             在mysqld下添加这三行
innodb_file_per_table = ON
skip_name_resolve = ON
#
# 复制启动脚本,添加开机自动启动
cp support-files/mysql.server /etc/init.d/mysqld
chkconfig --add mysqld
chkconfig --list 
service mysqld start
#
# 创建日志目录
mkdir /var/log/mariadb
chown mysql /var/log/mariadb/
#
#添加环境变量
vim /etc/profile.d/lamp.sh 
   PATH=/app/httpd24/bin/:/usr/local/mysql/bin/:$PATH
. /etc/profile.d/lamp.sh
#
#调用安全加固脚本,加固数据库。汉字为每一项的翻译
mysql_secure_installation
  是否设置root密码
  输入密码
  确认密码
  是否设置匿名用户
  是否允许root远程登录
  删除test数据库
  现在是否生效

3.PHP应用服务器编译安装PHP7

# 安装依赖包
yum install libxml2-devel bzip2-devel libmcrypt-devel gcc openssl-devel
tar xvf  php-7.1.7.tar.bz2
#
#编译安装
cd php-7.1.7.tar.bz2
./configure \
--prefix=/app/php \
--enable-mysqlnd \                          #mysqlnd 指明Mysql不再本地
--with-mysqli=mysqlnd \
--with-pdo-mysql=mysqlnd \
--with-openssl \
--enable-mbstring \
--with-freetype-dir  \
--with-jpeg-dir \
--with-png-dir \
--with-zlib \
--with-libxml-dir=/usr \
--enable-xml \
--enable-sockets \
--enable-fpm \                              #用FPM模式
--with-mcrypt \
--with-config-file-path=/etc/php \
--with-config-file-scan-dir=/etc/php.d \
--with-bz2
#
# 创建PHP配置文件
mkdir /etc/php/
cp php.ini-production /etc/php/php.ini
#
# 复制服务脚本,添加开机自动启动
cp   sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
chmod +x /etc/init.d/php-fpm
chkconfig --add php-fpm
chkconfig --list  php-fpm
#
# 创建fpm的配置文件
cd /app/php/etc
cp php-fpm.conf.default php-fpm.conf
cd /app/php/etc/php-fpm.d/
cp www.conf.default www.conf
vim www.conf
    listen = 172.18.68.23:9000              #设置监听的IP,注释监听所有, 只写端口监听鄋
    ;listen.allowed_clients = 127.0.0.1.    #把这项注释掉,分号为注释
systemctl start php-fpm

4.配置NFS服务器

NFS服务器的配置特别简单,最重要的时配置完后就赶紧将NFS共享目录挂载至web1、web2、PHP服务器的网站根目录。

mkdir -pv /app/nfs/web    #创建共享目录,此目录为网站的根目录,实现统一管理。
vim /etc/exports
  /app/nfs/web 172.18.0.0/16(ro,sync,root_squash,no_all_squash)
# 允许172.18.0.1网段挂载NFS共享,如果要提高安全性应该控制到主机
  • Web1服务器

    mount 172.18.68.24:/app/nfs/web /app/httpd24/htdocs        #/app/httpd24/htdocs为httpd.conf中的根目录
  • Web2服务器

    mount 172.18.68.24:/app/nfs/web /app/httpd24/htdocs        #/app/httpd24/htdocs为httpd.conf中的根目录
  • PHP应用服务器

    mkdir /app/httpd24/htdocs                                  #PHP没有根目录,/app/httpd24/htdocs为NFS的挂载点。
    mount 172.18.68.24:/app/nfs/web /app/httpd24/htdocs        

5.配置Apache实现动静分离

  • 加载模块

    vim /etc/httpd24/httpd.conf
        LoadModule proxy_module modules/mod_proxy.so                       #取消两行的注释,加载两模块
        LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
  • 动静分离
    在配置文件的末尾追加这四行,利用代理将所有以.php结尾的文件交给PHP服务器处理,实现动静分离

    vim /etc/httpd24/httpd.conf
      AddType application/x-httpd-php .php
      AddType application/x-httpd-php-source .phps
      ProxyRequests Off 关闭正向代理
      ProxyPassMatch  ^/(.*\.php)$ fcgi://127.0.0.1:9000/app/httpd24/htdocs/$1  
    #要确保PHP服务器中有这个目录,(在NFS中创建这个目录,且将NFS挂载至此目录。)
    apachectl restart

6.部署wordpress博客

因为web1、web2、PHP服务器都使用NFS共享的目录作为根目录,所以只需要将wordpress博客系统部署在NFS服务器上即可让所有服务器得到同样的数据。

  • 安装博客程序

    # 解压博客程序
    tar xvf wordpress-4.8.1-zh_CN.tar.gz  -C /app/httpd24/htdocs
    cd /app/httpd24/htdocs
    mv wordpress/ blog/
    # 创建配置文件
    cd /app/httpd24/htdocs/blog/
    cp wp-config-sample.php  wp-config.php
  • 配置数据库
    wordpress需要数据库,所以在此先创建一个wordpress专用的数据库,且创建授权用户。

    mysql -uroot -pcentos
    create datebase wpdb;
    grant all on wpdb.* to wpuser@'172.18.68.%' identified by 'centos';
  • 配置wordpress连接数据库

    # 编辑配置文件,写入创建的IP、数据库、与用户性
    vim wp-config.php
    define('DB_NAME', 'wpdb');
    #
    /** MySQL数据库用户名 */
    define('DB_USER', 'wpuser');
    #
    /** MySQL数据库密码 */
    define('DB_PASSWORD', 'centos');
    #
    /** MySQL主机 */
    define('DB_HOST', 'localhost');

7.登录测试

8.配置DNS负载均衡

购买了单独域名后,在后台控制面板中添加两条A记录,就可以达到负载均衡。

到这里基于LAMP+NFS架构的双Web服务器、动静分离网站就搭建完成了。
双WEB服务器架构的好处在于如果有一台服务器宕机不会是整个网站瘫痪。
NFS共享存储的好处在于,DNS负载均衡后,不论用户被分配到哪台主机上,都能看到相同的页面得到相同的结果。

相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
目录
相关文章
|
16天前
|
弹性计算 监控 负载均衡
|
20天前
|
监控 负载均衡 算法
slb管理后端服务器
【10月更文挑战第18天】
20 5
|
20天前
|
负载均衡 监控 算法
论负载均衡技术在Web系统中的应用
【11月更文挑战第4天】在当今高并发的互联网环境中,负载均衡技术已经成为提升Web系统性能不可或缺的一环。通过有效地将请求分发到多个服务器上,负载均衡不仅能够提高系统的响应速度和处理能力,还能增强系统的可扩展性和稳定性。本文将结合我参与的一个实际软件项目,从项目概述、负载均衡算法原理以及实际应用三个方面,深入探讨负载均衡技术在Web系统中的应用。
48 2
|
1月前
|
弹性计算 负载均衡 算法
负载均衡如何帮助阿里云国际服务器搭建的网站或应用程序?
负载均衡如何帮助阿里云国际服务器搭建的网站或应用程序?
|
1月前
|
存储 数据采集 分布式计算
Hadoop-17 Flume 介绍与环境配置 实机云服务器测试 分布式日志信息收集 海量数据 实时采集引擎 Source Channel Sink 串行复制负载均衡
Hadoop-17 Flume 介绍与环境配置 实机云服务器测试 分布式日志信息收集 海量数据 实时采集引擎 Source Channel Sink 串行复制负载均衡
44 1
|
3月前
|
负载均衡 监控 算法
揭秘负载均衡的五大算法秘籍:让你的服务器轻松应对亿万流量,不再崩溃!
【8月更文挑战第31天】在互联网快速发展的今天,高可用性和可扩展性成为企业关注的重点。负载均衡作为关键技术,通过高效分配网络流量提升系统处理能力。本文介绍了轮询、加权轮询、最少连接及IP哈希等常见负载均衡算法及其应用场景,并提供Nginx配置示例。此外,还探讨了如何根据业务需求选择合适算法、配置服务器权重、实现高可用方案、监控性能及定期维护等最佳实践,助力系统优化与用户体验提升。
68 2
|
3月前
|
负载均衡 算法 应用服务中间件
负载均衡技术在Web服务器集群中的应用
【8月更文第28天】随着互联网的发展和用户对Web服务需求的增长,单台服务器很难满足大规模访问的需求。为了提高系统的稳定性和扩展性,通常会采用Web服务器集群的方式。在这种架构中,负载均衡器扮演着至关重要的角色,它能够合理地分配客户端请求到不同的后端服务器上,从而实现资源的最优利用。
127 2
|
3月前
|
负载均衡 应用服务中间件 Linux
"揭晓nginx的神秘力量:如何实现反向代理与负载均衡,拯救服务器于水火?"
【8月更文挑战第20天】在Linux环境下,nginx作为高性能HTTP服务器与反向代理工具,在网站优化及服务器负载均衡中扮演重要角色。本文通过电商平台案例,解析nginx如何解决服务器压力大、访问慢的问题。首先介绍反向代理原理,即客户端请求经由代理服务器转发至内部服务器,隐藏真实服务器地址;并给出配置示例。接着讲解负载均衡原理,通过将请求分发到多个服务器来分散负载,同样附有配置实例。实践表明,采用nginx后,不仅服务器压力得到缓解,还提升了访问速度与系统稳定性。
82 3
|
5月前
|
存储 负载均衡 应用服务中间件
Web架构&OSS存储&负载均衡&CDN加速&反向代理&WAF防护
Web架构&OSS存储&负载均衡&CDN加速&反向代理&WAF防护
|
6月前
|
负载均衡 应用服务中间件 nginx
服务器架构、分布式系统、负载均衡、微服务、高可用性
**分布式系统取代单体架构,以微服务实现高扩展性和灵活性。通过负载均衡技术增强性能,防止单点故障,结合冗余备份与故障切换保障高可用性,这种架构是支撑大规模在线业务的关键。**
142 3