2019-03-22笔记—集群-LVS

集群就是多台设备一起提供服务

集群分类

  1. 高可用(不存在单点,即,如果一个机器宕机不影响服务。常见开源软件:keepalived heartbeat )

  2. 负载均衡(把负载均衡地分担到多台机器上。论坛服务器1台不够了,我们再加1台,用户请求会分摊到这两台机器上。常见开源软件:LVS Nginx haproxy)

  3. 分布式集群(它实际上是集合了高可用和负载均衡为一体的一种集群。它的特点是,可以无限制的横向扩容。)

实验环境准备:

  1. 克隆一台虚拟机(修改IP(删除uuid)、修改hostname);
    主机一(192.168.85.129);主机二(192.168.85.130);主机三(192.168.85.128)
  2. 两台机器上都开启nginx服务,并设置开机自启模式,停止httpd服务(提供tomcat);
  3. 克隆的虚拟机上关闭mysql数据库服务(保证nginx访问的是同一个数据库)—实际上可以指定任意一台mysql数据库服务器,可以提供对nginx服务的访问和数据存储即可
  4. 修改配置文件
[root@linux2019_03 config]# head /data/wwwroot/bbs.aibenwoniu.xyz/config/config_global.php 
$_config['db']['1']['dbhost'] = '192.168.85.129';
[root@linux2019_03 config]# head /data/wwwroot/bbs.aibenwoniu.xyz/config/config_ucenter.php 
define('UC_DBHOST', '192,168.85.129');
[root@linux2019_03 data]# head /data/wwwroot/bbs.aibenwoniu.xyz/uc_server/data/config.inc.php 
define('UC_DBHOST', '192.168.85.130');
  1. 为克隆主机访问数据库授权(之前在创建bbs论坛的时候创建bbs数据库和用户,指定了“127.0.0.1”的主机
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 '*931AD2E74512C7C5BDB6022A98F9587C6B50F45A' |
| GRANT ALL PRIVILEGES ON `bbs`.* TO 'bbs'@'127.0.0.1'                                                       |
+------------------------------------------------------------------------------------------------------------+
2 rows in set (0.000 sec)

MariaDB [(none)]> GRANT USAGE ON *.* TO 'bbs'@'192.168.85.130' IDENTIFIED BY PASSWORD '*931AD2E74512C7C5BDB6022A98F9587C6B50F45A';
Query OK, 0 rows affected (0.001 sec)

MariaDB [(none)]> GRANT ALL PRIVILEGES ON `bbs`.* TO 'bbs'@'192.168.85.130';
Query OK, 0 rows affected (0.001 sec)
  1. 测试从克隆主机上远程登录129主机的数据库(-h 指定主机)
  2. 测试网页登录(分别修改hosts文件中bbs论坛对应的主机域名),同时查看是否有相应的nginx登录日志出现在对应的主机上
搭建LVS负载均衡–DR模式

准备三台机器:

  • 192.168.85.129:RS1
  • 192.168.85.130:RS2
  • 192.168.85.128:DIR
  • 192.168.85.100:VIP

实验步骤:

  1. DIR机器安装LVS程序
[root@linux2019_2 ~]# yum install -y ipvsadm
  1. 在DIR机器上编辑脚本(默认80端口,因为之前nginx做了ssl配置所以采用443端口)
[root@linux2019_2 ~]# vim /usr/local/sbin/lvs_dr.sh
#! /bin/bash
ipv=/usr/sbin/ipvsadm
vip=192.168.85.100
rs1=192.168.85.129
rs2=192.168.85.130
#注意这里的网卡名字
#之所以要先重启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:443 -s wrr
#-a表示增加rs,-r指定具体的rsip和port,-g表示使用dr模式(-i表示ip tunnel模式,-m表示NAT模式),-w指定权重
$ipv -a -t $vip:443 -r $rs1:443 -g -w 1
$ipv -a -t $vip:443 -r $rs2:443 -g -w 1
[root@linux2019_2 ~]# sh  /usr/local/sbin/lvs_dr.sh #执行脚本
成功断开设备 'ens33'。
连接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/2)
[root@linux2019_2 ~]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.85.128  netmask 255.255.255.0  broadcast 192.168.85.255
        inet6 fe80::35d4:3dec:89e4:7e95  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:b3:6d:0e  txqueuelen 1000  (Ethernet)
        RX packets 3717  bytes 3991477 (3.8 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 1558  bytes 139291 (136.0 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

ens33:1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.85.100  netmask 255.255.255.255  broadcast 192.168.85.100
        ether 00:0c:29:b3:6d:0e  txqueuelen 1000  (Ethernet)
  1. 在两台RS上编辑脚本
oot@linux2019_01 ~]# vim /usr/local/sbin/lvs_rs.sh
#!/bin/bash
vip=192.168.85.100
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
scp /usr/local/sbin/lvs_rs.sh  root@192.168.85.130:/usr/local/sbin/lvs_rs.sh
  1. 两台RS机器上分别执行脚本
[root@linux2019_01 ~]# sh /usr/local/sbin/lvs_rs.sh 
[root@linux2019_01 ~]# ip add
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet 192.168.85.100/32 brd 192.168.85.100 scope global lo:0
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:4e:e9:4e brd ff:ff:ff:ff:ff:ff
    inet 192.168.85.129/24 brd 192.168.85.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::f042:4787:70bc:4ac4/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
[root@linux2019_03 ~]# sh /usr/local/sbin/lvs_rs.
[root@linux2019_03 ~]# ip add
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet 192.168.85.100/32 brd 192.168.85.100 scope global lo:0
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:25:48:a2 brd ff:ff:ff:ff:ff:ff
    inet 192.168.85.130/24 brd 192.168.85.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::12ad:1e34:d1ac:ad70/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
  1. 网页测试访问(需要把VIP绑定host),同时监测两台RS机器上的nginx访问日志,也可以使用tcpdump命令抓包查看
[root@linux2019_2 ~]# yum install -y tcpdump
[root@linux2019_2 ~]# tcpdump -i ens33 -nn port 80
[root@linux2019_2 ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.85.100:443 wrr
  -> 192.168.85.129:443           Route   1      0          0         
  -> 192.168.85.130:443           Route   1      0          0 

网页测试发现bbs打不开,lvs的活动连接数量也没有变化,排查发现是DIR机器的防火墙没有对443端口放通

[root@linux2019_2 ~]# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens33
  sources: 
  services: ssh dhcpv6-client
  ports: 10050/tcp 80/tcp 8080/tcp 8005/tcp 9999/tcp 873/tcp
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 
	
[root@linux2019_2 ~]# firewall-cmd --add-port=443/tcp --permanent
success
[root@linux2019_2 ~]# firewall-cmd --reload
success
[root@linux2019_2 ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.85.100:443 wrr
  -> 192.168.85.129:443           Route   1      13         0         
  -> 192.168.85.130:443           Route   1      14         0    

查看两台RS机器的nginx登录日志也都有不通数量的日志更新,且活动的IP也是指定的VIP

LVS负载均衡介绍

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

  1. NAT模式(Network address translation)
    用iptables的NAT表实现网络地址转换,数据包目标IP为DIP,DIR将目标IP地址转换为RS的IP,这样请求的包就到了RS上,而RS返回的数据包本来是到DIP的,也会经过DIR转换,把目标IP转换为客户端的IP
  2. DR模式(direct routing)
    DIR会改请求报文中的MAC地址,本来请求的包中的MAC地址为DIR的MAC地址,但是却被修改成了RS的MAC地址,这样数据包就到了RS上。由于数据包的源IP为客户端IP,所以它在返回数据包的时候,可以直接发给客户端,而不再经过DIR。
  3. Tunnel模式(ip tunneling)
    客户端请求的数据包发给DIR,DIR会近一步把包封装,加上了一个新的目标IP(RS的IP),这样数据包到了RS后再将封装的包拆开,获得原始数据包。返回数据包的时候也是直接发给了客户端。
LVS八种调度算法
  1. 轮叫(round Robin)

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

  1. 加权轮叫(Weighted Round Robin)

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

  1. 最少链接(Least Connections)

调度器通过"最少连接"调度算法动态地将网络请求调度到已建立的链接数最少的服务器上。如果集群系统的真实服务器具有相近的系统性能,采用"最小连接"调度算法可以较好地均衡负载。

  1. 加权最少链接(Weighted Least Connections)

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

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

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

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

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

  1. 目标地址散列(Destination Hashing)

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

  1. 源地址散列(Source Hashing)

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值