负载均衡基础实践

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

    首先了解nat模型:用户端,通过访问172.16.0.146端口,调度器会将请求随机转换到,后端的连个服务器,本次采用轮回调度的方式

    图片.png

  2. 在调度器上的,配置

    a.创建集群服务,并添加服务器

     

  3.  [root@www ~]# ipvsadm -A -t 172.16.0.146:80 -s rr
    
     [root@www ~]# ipvsadm -a -t 172.16.0.146:80 -r 192.168.100.100:80 -m
     [root@www ~]# ipvsadm -a -t 172.16.0.146:80 -r 192.168.100.200:8000 -m

     b.开启此主机的核心转发功能

[root@www ~]# echo 1 > /proc/sys/net/ipv4/ip_forward

4.服务器上的配置,192.168.100.100服务器上配置,安装httpd,php,php-mysql,mysql-server

    a.为此主机配置,phpmyadmin服务,并在资源目录下做测试页面index.html

<VirtualHost 192.168.100.100:80>
        ServerName www.admin.com
        DocumentRoot "/myweb/admin/"
        <Directory "/myweb/admin/">
                Options None
                AllowOverRide None
                Order deny,allow
                Allow from all
        </Directory>
</VirtualHost>

    b.给此服务器的数据库创建新用户并授权

mysql> grant all on *.* to 'wang'@'localhost' identifide by '111111';

    c.修改此主机的防火墙策略,让此服务器可以给调度器的请求做响应

扫描二维码关注公众号,回复: 1531032 查看本文章

    d.给此主机做默认网关,网关为192.168.100.1

[root@localhost ~]# route add default gw 192.168.100.1

5.给192.168.100.200:8000服务器也做同样的操作

6.在客户端172.16.0.150做网关172.16.0.146,并对调度器进行访问测试

[root@localhost ~]# for i in {1..10};do curl 172.16.0.146/index.html;done
192.168.100.200:8000
192.168.100.100:80
192.168.100.200:8000
192.168.100.100:80
192.168.100.200:8000
192.168.100.100:80
192.168.100.200:8000
192.168.100.100:80
192.168.100.200:8000
192.168.100.100:80

7。使用网页访问phpmyadmin,因为没有建立持久连接,所以会一直保留在此页面上,

图片.png

但是在调度器上,使用ipvsadm -ln,可以看到,后端real server被访问的次数,每登录一次则,会自动跳到另一个服务器

图片.png

8.当我们建立持久连接时,则可以访问此程序,为了显示更直观,俩台服务器,数据库不同

图片.png

因为长连接是有时间限制的,所以我们需要等一段时间,然后重新访问,可以看到数据库发生变化,证明负载均衡成功

图片.png

9.为了使俩个服务器提供内容一样,需要做数据库共享;

使用samba,做目录共享,共享/mydata目录,并赋予mysql用户写权限,同时在文件系统上让/mydata文件系统对mysql用户有写权限,将192.168.100.100服务器的数据库复制到/mydata下,使用192.168.100.200,用mysql用户挂载到/data/下

图片.png

[root@bogon ~]# mount -t cifs -o username=mysql //192.168.100.100/discuz /data

更改192.168.100.200数据库目录,修改/etc/my.cnf的datadir=/data

重启mysql服务,这样无论使用哪台服务器访问,都是同一个数据库


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

所谓FWM类型,是利用防火墙标记进行,然后利用此标记填加集群服务

所谓DR模型:是对报文的MAC地址进行重新封装,转发,但在整个过程中ip地址,端口号不会发生变化

----DR原理简析:

  1. 客户端向调度器VIP发送请求报文

  2. 调度器会对请求报文重新封装,使得源MAC地址变为DIP,目标MAC地址为后端RIP

  3. 后端的real server,将请求报文解封装后,对资源进行处理

  4. 后端real server在发送响应报文时,不再通过调度器,发送给客户端,而是利用自己的环回接口为VIP的地址进行相应给客户端

    a.首先观察其拓扑图

    图片.png

    b.对调度器进行设置:

        1.设置DIP与VIP,DIP和VIP在同一个网卡上,且VIP应该设在标签端口上(保证DIP和VIP是同一个MAC地址)

 

        2.做防火墙标记,在mangle表上标记

        3.使用该标记做集群服务

        4.给集群添加服务器

图片.png

[root@localhost ~]# iptables -t mangle -A PREROUTING -d 172.16.0.150 -p tcp --dport 80 -j MARK --set-mark 2
localhost ~]# ipvsadm -A -f 2 -s rr 
[root@localhost ~]# ipvsadm -a -f 2 -r 172.16.0.151 -g -w 1
[root@localhost ~]# ipvsadm -a -f 2 -r 172.16.0.152 -g -w 1
[root@localhost ~]#

    c.对real server的配置:

        1.配置相应的RIP

        2.在环回接口上配置VIP,

        3.配置http,php,mysql服务

        4.设置合理的安全策略

        5.修改内核参数

        6.给lo接口做特定路由


   13  echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore  //只响应目的IP地址为接收网卡上的本地地址的ARP请求
   14  echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
   15  echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
   16  echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce  //忽略IP数据包的源IP地址,选择该发送网卡上最合适的本地地址作为ARP请求的源IP地址
   17  route add -host 172.16.72.254 dev lo:0 //使响应报文从lo:0标签接口向外封装发送数据

          

d.同样使用客户端先进行测试访问

图片.png

e.建立长连接

f.使用网页进行测试访问

图片.png

图片.png

注意:使用网页访问时,应该使用VIP作为目标IP

           添加集群服务器时,后端real server 不可以添加端口

猜你喜欢

转载自blog.51cto.com/wangchaode/2126600
今日推荐