sdfsf 发表于 2017-10-25 08:57:25

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

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


大致拓扑图:

注意:
(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
    TCP172.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交替被访问


客户端测试


循环测试
   ~]# 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

客户端测试

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

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

环境部署:
serverA :调度器      VIP:172.16.1.2DIP: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
大致拓扑图:

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

调度器主机:
安装一个仅主机的网卡地址为172.16.1.100,此ip地址为DIP
VIP配置在接口的别名上,如下配置
# ifconfig eno16777736:0 172.16.1.2 netmask 255.255.255.255broadcast 172.16.1.2 up

安装lvs软件包 yum -y install ipvsadm


集群配置
设置FWH规则:
   # iptables -t mangle -A PREROUTING -p tcp --dport 80 -d 172.16.1.2 -j MARK --set-mark 6
   # ipvsadm -A -f 6 -s rr
   # ipvsadm -a -f 6 -r 172.16.1.3:80 -g
   # ipvsadm -a -f 6 -r 172.16.1.4:80 -g
   # ipvsadm -ln
   IP Virtual Server version 1.2.1 (size=4096)
   Prot LocalAddress:Port Scheduler Flags
   -> RemoteAddress:Port         Forward Weight ActiveConn InActConn
   FWM6 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 $MASKbroadcast $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///运行脚本环境即可配置成功

客户端测试






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

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

客户端测试


页: [1]
查看完整版本: 利用LVS-NAT和DR模型分别负载均衡一个php应用