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
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交替被访问
客户端测试
循环测试
~]# 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.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
大致拓扑图:
注意:
和上面的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
安装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 "rs1.zrs.com
" > /var/www/html/index.html
echo "rs2.zrs.com
" > /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 ///运行脚本环境即可配置成功
客户端测试
nfs共享存储服务器配置
和上面的nat模型基本一样,在这里就不再赘述,需要注意的是更改/etc/exports此文件中的网段为本次dr模型实验的网段。
最后同样将共享目录分别挂载到rs1和rs2中,可以用mount命令查看挂载信息:
客户端测试