利用LVS-NAT和DR模型分别负载均衡一个php应用

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
应用型负载均衡 ALB,每月750个小时 15LCU
简介:

1.使用NAT模型的TCP协议类型的lvs服务负载均衡一个php应用,如Discuz!论坛或者phpMyAdmin;

2.使用DR模型的FWM类型的lvs服务负载均衡一个php应用,如Discuz!论坛或者phpMyAdmin;

注意:以上两个集群需要考虑两个问题:

1) 是否需要会话保持;

2) 是否需要共享存储;

-------------------------------------------------------------------------------------------

1.使用NAT模型负载均衡wordpress


环境部署:

serverA :调度器     外网:172.16.1.2   内网:192.168.100.7

serverB :rs1       内网:192.168.100.8

serverC :rs2       内网:192.168.100.9

serverD :nfs服务器   内网:192.168.100.6


大致拓扑图:

80050122e29f033afaee58e09baafdf1.png

注意:

(1)配置之前把所有主机的防火墙和SElinux关闭,方便实验

   ~]# iptables -F && setenforce 0 && systemctl stop firewalld.service

(2)同步时间

  时间同步是最重要的环节,Director和后台的RealServer的时间必须同步,并且时间差小于1秒钟。 本次我们使用Director服务器作为时间服务器,全部都向它来同步时间。

   ~]# service ntpd restart # 重启ntp服务器

       Shutting down ntpd: [ OK ]

       Starting ntpd: [ OK ]

   ~]# ntpdate 192.168.100.7 # 客户端同步三台都要同步这里我们就不多说了


rs1配置

 安装服务 yum -y install httpd php php-mysql

 设置网关

  route add default gw 192.168.100.7

 配置主页信息

  echo "rs1.zrs.com" > /var/www/html/index.html

 启动服务

  systemctl start httpd.service

 查看一下

 ~]# curl http://localhost

   rs1.zrs.com


rs2配置

 安装服务 yum -y install httpd php php-mysql

 设置网关

 route add default gw 192.168.100.7

 配置主页信息

 echo "rs2.zrs.com" > /var/www/html/index.html

 启动服务

 systemctl start httpd.service

 查看一下

 ~]# curl http://localhost

   rs2.zrs.com

 

调度器配置

  测试rs1和rs2主机能否正常通信:

   ping 192.168.100.8

   ping 192.168.100.9

   curl http://192.168.10.8

   curl http://192.168.10.9

  安装lvs软件包 yum -y install ipvsadm

  开启核心转发功能 

  ~]# echo 1 > /proc/sys/net/ipv4/ip_forward

  创建集群

  ~]# ipvsadm -A -t 172.16.1.2:80 -s rr

  ~]# ipvsadm -a -t 172.16.1.2:80 -r 192.168.100.8 -m

  ~]# ipvsadm -a -t 172.16.1.2:80 -r 192.168.100.9 -m

  查看集群

  ~]# ipvsadm -l -n

   IP Virtual Server version 1.2.1 (size=4096)

   Prot LocalAddress:Port Scheduler Flags

  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn

    TCP  172.16.1.2:80 rr

  -> 192.168.100.8:80             Masq    1      0          0   

  -> 192.168.100.9:80             Masq    1      0          0     


 由于这个集群使用的是rr(轮询)算法,所以rs1和rs2交替被访问


客户端测试

ee91477c9e9ba7822b24da77a5e687e9.png

d6703d65b968673b1389966f383a8191.png

循环测试

   ~]# for i in {1..10};do curl http://172.16.1.2 ;done

rs1.zrs.com

rs2.zrs.com

rs1.zrs.com

rs2.zrs.com

rs1.zrs.com

rs2.zrs.com

rs1.zrs.com

rs2.zrs.com

rs1.zrs.com

rs2.zrs.com


 可以保存一下规则,重启后可继续适用

  ipvsadm -S > /etc/sysconfig/ipvsadm.web

 重载规则

  ipvsadm -R < /etc/sysconfig/ipvsadm.web


nfs服务器配置

 1.安装所需软件包

  yum -y install nfs-utils

 2.准备用户apache(访问NFS服务时映射为的用户)

  useradd -u 48 apache

 3.准备需要导出的目录,且其属主、属组为apahce

  install -o apache -g apache -d /data/application/web

 4.下载wordpress程序包并解压至/data/application/web目录下,并将其属主、属组改为apache,wordpress目录下的wp-content目录的权限改为777(上传图片时需要写权限)

 unzip wordpress-4.3.1.-zh_CN.zip

 mv wordpress /data/application/web

 cd /data/application/web

 chown -R apache.apache wordpress

 chmod 777 wordpress/wp-content

 5.在wordpress目录下,修改配置文件 :

 mv wp-config-sample.php wp-config.php

 vim wp-config.php  

 /** WordPress数据库的名称*/

    define('DB_NAME', 'wpdb');

 

    /** MySQL数据库用户名 */

    define('DB_USER', 'wpuser');

 

    /** MySQL数据库密码 */

    define('DB_PASSWORD', '123456');

 

    /** MySQL主机 */

    define('DB_HOST', '192.168.100.6');


 6.编辑nfs配置文件,将/data/application/web目录导出,允许192.168.10.0/24网段连接,导出属性为rw,async,用户映射为apache。

  vim /etc/exports

    /data/application/web 192.168.10.0/24(rw,async,anonuid=48,anongid=48)

    

 7.启动mysql服务,创建数据库wpdb和dzdb,并分别授权用户wpuser对wpdb数据库下的所有表拥有所有权限,dzuser对dzdb数据库下的所有表拥有所有权限;

  yum -y install mariadb-server php-mysql

  systemctl start mariadb.service

  MariaDB [(none)]> CREATE DATABASE wpdb;

  MariaDB [(none)]> grant all on wpdb.* to 'wpuser'@'192.168.%.%' identified by '123456';

  MariaDB [(none)]> FLUSH PRIVILEGES;


rs1和rs2

 创建session目录,存放会话,更改属组属主为apache

  ~]# ll -d /var/lib/php/session/

   drwxr-xr-x. 2 apache apache 4096 10月 21 10:28 /var/lib/php/session/

 将D主机nfs服务器上导出的目录挂载至/var/www/html目录下

  mount.nfs 192.168.100.6:/data/application/web /var/www/html


客户端测试

e776401c92b9a325d6d22d4387c17e99.png

-------------------------------------------------------------------------------------------


2.使用DR模型的FWM类型的lvs服务负载均衡wordpress


环境部署:

serverA :调度器      VIP:172.16.1.2  DIP:172.16.1.100

serverB :rs1        RIP1:172.16.1.3

serverC :rs2        RIP2:172.16.1.4

serverD :nfs服务器    nfs:172.16.1.5

大致拓扑图:

76d35b0d9baf59af63ae2677524a0a89.png

注意:

  和上面的nat模型一样需要注意时间同步和防火墙及SElinux的设置,在这里就不再赘述。


调度器主机:

  安装一个仅主机的网卡地址为172.16.1.100,此ip地址为DIP

  VIP配置在接口的别名上,如下配置

  [root@zj02 ~]# ifconfig eno16777736:0 172.16.1.2 netmask 255.255.255.255  broadcast 172.16.1.2 up

c9a43c689079fd6b2b0f72d040a3523a.png

 安装lvs软件包 yum -y install ipvsadm


 集群配置

  设置FWH规则:

   [root@zj02 ~]# iptables -t mangle -A PREROUTING -p tcp --dport 80 -d 172.16.1.2 -j MARK --set-mark 6

   [root@zj02 ~]# ipvsadm -A -f 6 -s rr

   [root@zj02 ~]# ipvsadm -a -f 6 -r 172.16.1.3:80 -g

   [root@zj02 ~]# ipvsadm -a -f 6 -r 172.16.1.4:80 -g

   [root@zj02 ~]# ipvsadm -ln

   IP Virtual Server version 1.2.1 (size=4096)

   Prot LocalAddress:Port Scheduler Flags

   -> RemoteAddress:Port           Forward Weight ActiveConn InActConn

     FWM  6 rr

   -> 172.16.1.3:80                Route   1      0          0   

   -> 172.16.1.4:80                Route   1      0          0 


 开启核心转发功能 

   ~]# echo 1 > /proc/sys/net/ipv4/ip_forward

  

rs1&rs2配置

 安装服务 yum -y install httpd php php-mysql

 配置主页信息

   echo "<h1>rs1.zrs.com</h1>" > /var/www/html/index.html

   echo "<h1>rs2.zrs.com</h1>" > /var/www/html/index.html

 启动服务

   systemctl start httpd.service

 在DR模型中,各个主机均需要配置VIP;为了解决地址冲突可以修改对应的内核参数,来限制ARP的通告和应答的级别

  arp_ignore:

   0:默认值,对于从任何网络接口接收到对本机任意IP地址的ARP查询请求均予以回应;

   1:只应答目标IP地址是入站接口上配置的IP地址所在网段的IP地址的ARP请求;

   2:只应答目标IP地址是入站接口上配置的IP地址所在网段的IP地址的ARP请求,且来访IP地址也必须与该接口的IP地址在同一子网中;

   3:不响应该网络接口的ARP请求,而只对设置为全局的IP地址做应答;

   4-7:保留;

   8:不应答所有的ARP请求;

 arp_announce:

   0:默认值,将本机所有接口的信息向所有接口所连接的网络中通告;

   1:尽量避免向与本接口不同网络中的其他接口通告;

   2:绝对避免向非本网络的主机通告;


 可以用脚本实现

 ~]# vim arp_para.sh


#!/bin/bash

#

VIP=172.16.1.2

MASK=255.255.255.255


case $1 in

start)

echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore

echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore

echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce

echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce


ifconfig lo:0 $VIP netmask $MASK  broadcast $VIP up


route add -host $VIP dev lo:0

;;

stop)

ifconfig lo:0 down


echo 0 > /proc/sys/net/ipv4/conf/all/arp_ignore

echo 0 > /proc/sys/net/ipv4/conf/lo/arp_ignore

echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce

echo 0 > /proc/sys/net/ipv4/conf/lo/arp_announce

;;

*)

echo "Usage: $(basename $0) { start | stop }"

;;

esac


 ~]# chmod +x arp_para.sh ///赋予执行权限

 ~]# ./arp_para.sh start  ///运行脚本环境即可配置成功


客户端测试

49f74c96f395815a30a32890c37fd181.png

87cd8bacb5534ed936a14057153a0763.png



nfs共享存储服务器配置

  和上面的nat模型基本一样,在这里就不再赘述,需要注意的是更改/etc/exports此文件中的网段为本次dr模型实验的网段。


最后同样将共享目录分别挂载到rs1和rs2中,可以用mount命令查看挂载信息:

ebfc50bc9d8838b0039e197ed5d243e5.png

客户端测试

3aaa0b2ac6eb190d311ca03eafe76985.png



本文转自 Runs_ 51CTO博客,原文链接:http://blog.51cto.com/12667170/1975782,如需转载请自行联系原作者

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
4月前
|
PHP 开发工具 开发者
Xdebug在PHP中的应用
Xdebug 是一款非常实用的 PHP 调试工具,它为开发者提供了丰富的功能和便利,帮助开发者更高效地进行调试工作。熟练掌握 Xdebug 的使用方法,对于提高 PHP 开发质量和效率具有重要意义。
107 1
|
24天前
|
负载均衡 网络协议 Linux
LVS,软负载均衡
LVS(Linux Virtual Server)是一项广泛应用的负载均衡技术,由章文嵩博士于1998年发起,自Linux 2.4.24版本起成为官方内核的一部分。LVS通过四层负载均衡技术实现高性能、高可用的服务器集群,支持多种调度算法和工作模式(如D-NAT、full-NAT、IP隧道、DR),适用于HTTP、数据库等应用。相比7层负载均衡器(如Nginx、HAProxy),LVS具有更高的并发处理能力和更低的资源消耗,适合大规模流量分发。本期文章详细介绍了LVS的工作原理、优势与不足,并对比了常见的负载均衡产品,帮助读者根据具体需求选择合适的解决方案。
105 7
LVS,软负载均衡
|
10天前
|
缓存 NoSQL PHP
用装饰器模式实现多层缓存:让PHP应用更快更稳
通过装饰器模式实现PHP多层缓存架构,详解如何利用内存、Redis、文件缓存组合提升应用性能。包含设计思路、代码示例与实战效果对比,助您构建高效缓存策略。
|
4月前
|
PHP 开发者 UED
PHP中的异常处理:理解与应用
在编程的世界中,错误和异常就像是不请自来的客人——总是在你最不希望它们出现的时候敲门。对于PHP开发者来说,学会优雅地处理这些“不速之客”是提升代码质量和用户体验的关键。本文将带你深入理解PHP中的异常处理机制,通过实际的代码示例,展示如何捕获、处理以及自定义异常,让你的应用程序更加健壮和灵活。准备好迎接挑战,让我们共同探索PHP异常处理的奥秘吧!
120 66
|
3月前
|
负载均衡 算法 Linux
LVS+Keepalived:实现高效软负载均衡的利器
本文介绍了如何使用LVS(Linux Virtual Server)和Keepalived搭建高可用负载均衡集群。LVS通过不同调度算法将请求转发给后端服务器,而Keepalived基于VRRP协议实现服务高可用,避免IP单点故障。具体步骤包括环境准备、安装配置ipvsadm和Keepalived、启动服务及测试。文中还详细解释了配置文件中的关键参数,并提供了故障转移测试方法。最后,文章简要对比了软件、硬件和云负载均衡方案的特点,帮助读者选择合适的负载均衡策略。
560 4
|
4月前
|
编译器 PHP 开发者
PHP 8新特性解析与实战应用####
随着PHP 8的发布,这一经典编程语言迎来了诸多令人瞩目的新特性和性能优化。本文将深入探讨PHP 8中的几个关键新功能,包括命名参数、JIT编译器、新的字符串处理函数以及错误处理改进等。通过实际代码示例,展示如何在现有项目中有效利用这些新特性来提升代码的可读性、维护性和执行效率。无论你是PHP新手还是经验丰富的开发者,本文都将为你提供实用的技术洞察和最佳实践指导。 ####
69 1
|
4月前
|
缓存 NoSQL PHP
Redis作为PHP缓存解决方案的优势、实现方式及注意事项。Redis凭借其高性能、丰富的数据结构、数据持久化和分布式支持等特点,在提升应用响应速度和处理能力方面表现突出
本文深入探讨了Redis作为PHP缓存解决方案的优势、实现方式及注意事项。Redis凭借其高性能、丰富的数据结构、数据持久化和分布式支持等特点,在提升应用响应速度和处理能力方面表现突出。文章还介绍了Redis在页面缓存、数据缓存和会话缓存等应用场景中的使用,并强调了缓存数据一致性、过期时间设置、容量控制和安全问题的重要性。
88 5
|
4月前
|
SQL 安全 前端开发
PHP与现代Web开发:构建高效的网络应用
【10月更文挑战第37天】在数字化时代,PHP作为一门强大的服务器端脚本语言,持续影响着Web开发的面貌。本文将深入探讨PHP在现代Web开发中的角色,包括其核心优势、面临的挑战以及如何利用PHP构建高效、安全的网络应用。通过具体代码示例和最佳实践的分享,旨在为开发者提供实用指南,帮助他们在不断变化的技术环境中保持竞争力。
|
4月前
|
SQL 安全 数据挖掘
PHP表单的多方面应用与实践
通过本文的介绍,我们详细探讨了PHP表单的多方面应用与实践。从表单创建、数据验证、安全性、文件上传到多步表单处理,每个方面都有具体的示例和说明。通过掌握这些技术,开发者可以有效地处理表单数据,确保应用的安全性和可靠性。希望本文能为您在PHP开发中提供有价值的参考和指导。
55 2
|
4月前
|
IDE PHP 开发工具
【PHP开发专栏】Xdebug在PHP调试中的应用
Xdebug 是一个功能强大的 PHP 扩展,提供调试、代码分析和性能分析等功能。本文介绍了 Xdebug 的基本概念、安装配置方法及在 PHP 调试中的应用技巧,包括断点调试、堆栈跟踪、远程调试和性能分析等。通过合理使用 Xdebug,可以显著提高调试效率和代码质量。
125 3