为论坛作负载均衡集群

1. 克隆虚拟机

修改IP地址
修改主机名

2. 准备工做

两台机器上开启nginx,保证能访问论坛
第二台机器上,关闭mariadb 
修改配置文件:config/config_global.php config/config_ucenter.php  uc_server/data/config.inc.php
测试,保证两台机器都能正常访问到论坛。

测试:php

[root@wangzb03 ~]# /etc/init.d/mysqld stop
[root@wangzb03 ~]# chkconfig mysqld off
[root@wangzb03 ~]# systemctl stop httpd
[root@wangzb03 ~]# systemctl enable nginx  //nginx开机启动
wangzb03上须要访问登陆wangzb01上数据库
[root@wangzb03 ~]#mysql -ubbs -pmysql -h192.168.153.133

若是报错不被容许,则须要在wangzb01机器上受权

[root@wangzb01 ~]# mysql -uroot -pmysql
MariaDB [(none)]> show grants for 'bbs'@'127.0.0.1';
+------------------------------------------------------------------------------------------------------------+
| Grants for bbs@127.0.0.1                                                                                   |
+------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'bbs'@'127.0.0.1' IDENTIFIED BY PASSWORD '*E74858DB86EBA20BC33D0AECAE8A8108C56B17FA' |
| GRANT ALL PRIVILEGES ON `bbs`.* TO 'bbs'@'127.0.0.1'                                                       |
+------------------------------------------------------------------------------------------------------------+

执行受权语句给wangzb03机器ip

MariaDB [(none)]> GRANT USAGE ON *.* TO 'bbs'@'192.168.153.135' IDENTIFIED BY PASSWORD '*E74858DB86EBA20BC33D0AECAE8A8108C56B17FA';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON `bbs`.* TO 'bbs'@'192.168.153.135';
MariaDB [(none)]> flush privilege;

配置Windows下C:\Windows\System32\drivers\etc\hosts文件中域名解析,打开浏览器输入域名bbs.wangzb.cc访问论坛,须要确保wangzb01和wangzb03均可以访问(经过查看日志/data/logs/bbs.access.log)。

[root@wangzb01 ~]# tail -f /data/logs/bbs.access.log
[root@wangzb03 ~]# tail -f /data/logs/bbs.access.log

点击浏览器论坛界面查看日志bbs.access.log是否有打印出来,若是有说明访问该主机成功。注意若是切换Windows下的hosts域名解析后,须要重启浏览器清楚缓存,否则日志仍是记录到切换前的主机里。

3. LVS负载均衡介绍

几个专业术语:DIR(分发器)DIP(DIR的IP)  RS(真实服务器)  VIP(虚拟IP,也是提供服务的IP)

LVS三种模式(http://www.it165.net/admin/html/201401/2248.html)

NAT模式(Network address translation)

用iptables的NAT表实现网络地址转换,数据包目标IP为DIP,DIR将目标IP地址转换为RS的IP,
这样请求的包就到了RS上,而RS返回的数据包原本是到DIP的,也会通过DIR转换,
把目标IP转换为客户端的IP

DR模式(direct routing)

DIR会改请求报文中的MAC地址,原本请求的包中的MAC地址为DIR的MAC地址,可是却被修改为了
RS的MAC地址,这样数据包就到了RS上。因为数据包的源IP为客户端IP,因此它在返回数据包的时候,
能够直接发给客户端,而再也不通过DIR。

Tunnel模式(ip tunneling)

客户端请求的数据包发给DIR,DIR会近一步把包封装,加上了一个新的目标IP(RS的IP),这样
数据包到了RS后再将封装的包拆开,得到原始数据包。返回数据包的时候,也是直接发给了客户端。

LVS八种调度算法

轮叫(round Robin)

调度器经过"轮叫"调度算法将外部请求按顺序轮流分配到集群中的真实服务器上,
它均等地对待每一台服务器,而无论服务器上实际的链接数和系统负载。

加权轮叫(Weighted Round Robin)

调度器经过"加权轮叫"调度算法根据真实服务器的不一样处理能力来调度访问请求。
这样能够保证处理能力强的服务器处理更多的访问流量。调度器能够自动问询真实服务器的负载状况,
并动态地调整其权值。

最少连接(Least Connections)

调度器经过"最少链接"调度算法动态地将网络请求调度到已创建的连接数最少的服务器上。
若是集群系统的真实服务器具备相近的系统性能,采用"最小链接"调度算法能够较好地均衡负载。

加权最少连接(Weighted Least Connections)

在集群系统中的服务器性能差别较大的状况下,调度器采用"加权最少连接"调度算法优化负载均衡性能,
具备较高权值的服务器将承受较大比例的活动链接负载。调度器能够自动问询真实服务器的负载状况,
并动态地调整其权值。

基于局部性的最少连接(Locality-Based Least Connections)

"基于局部性的最少连接" 调度算法是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。
该算法根据请求的目标IP地址找出该目标IP地址最近使用的服务器,若该服务器 是可用的且没有超载,
将请求发送到该服务器;若服务器不存在,或者该服务器超载且有服务器处于一半的工做负载,
则用"最少连接"的原则选出一个可用的服务 器,将请求发送到该服务器。

带复制的基于局部性最少连接(Locality-Based Least Connections with Replication)

"带复制的基于局部性最少连接"调度算法也是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。
它与LBLC算法的不一样之处是它要维护从一个 目标IP地址到一组服务器的映射,
而LBLC算法维护从一个目标IP地址到一台服务器的映射。该算法根据请求的目标IP地址找出该目标IP地址
对应的服务 器组,按"最小链接"原则从服务器组中选出一台服务器,若服务器没有超载,
将请求发送到该服务器,若服务器超载;则按"最小链接"原则从这个集群中选出一 台服务器,
将该服务器加入到服务器组中,将请求发送到该服务器。同时,当该服务器组有一段时间没有被修改,
将最忙的服务器从服务器组中删除,以下降复制的 程度。

目标地址散列(Destination Hashing)

"目标地址散列"调度算法根据请求的目标IP地址,做为散列键(Hash Key)从静态分配的散列表
找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,不然返回空。

源地址散列(Source Hashing)

"源地址散列"调度算法根据请求的源IP地址,做为散列键(Hash Key)从静态分配的散列表找出对应的服务器,
若该服务器是可用的且未超载,将请求发送到该服务器,不然返回空。

4. 搭建LVS负载均衡 - DR模式

准备

三台机器: 
wangzb01(133)  -> RS1
wangzb03(135)  -> RS2
wangzb02(35)  -> DIR

VIP: 35

在DIR上操做:

安装ipvsadm:

yum install -y ipvsadm

编辑脚本

vim /usr/local/sbin/lvs_dr.sh //内容以下html

#! /bin/bash
ipv=/usr/sbin/ipvsadm
vip=192.168.153.35
rs1=192.168.153.133
rs2=192.168.153.135
#注意这里的网卡名字
#之因此要先重启ens33网卡,是为了防止脚本重复执行时和以前的配置冲突
ifdown ens33
ifup ens33
#增长ens33:1虚拟网卡,并把vip配置在ens33:1上
ifconfig ens33:1 $vip broadcast $vip netmask 255.255.255.255 up
#增长路由
route add -host $vip dev ens33:1
#-C表示清空以前的规则
$ipv -C
#-A表示增长规则,-t指定vip以及port,-s指定调度算法,这里还有一个-p选项,后面跟时间(单位s),表示保持长链接
$ipv -A -t $vip:80 -s wrr
#-a表示增长rs,-r指定具体的rsip和port,-g表示使用dr模式(-i表示ip tunnel模式,-m表示NAT模式),-w指定权重
$ipv -a -t $vip:80 -r $rs1:80 -g -w 1
$ipv -a -t $vip:80 -r $rs2:80 -g -w 1
# 脚本内容到此结束

执行脚本

sh /usr/local/sbin/lvs_dr.shmysql

检查:ip addlinux

在两台RS上编辑脚本

vim /usr/local/sbin/lvs_rs.sh //内容以下:nginx

#!/bin/bash
vip=192.168.153.35
ifdown lo
ifup lo
ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up
route add -host $vip lo:0
#更改arp内核参数,目的是为了让rs顺利发送mac地址给客户端
#参考文档https://www.imooc.com/article/79661
echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce

执行脚本

sh /usr/local/sbin/lvs_rs.sh算法

测试

windows hosts 浏览器sql

linux curl vip数据库

相关文章
相关标签/搜索