LVS负载均衡WordPress

LVS:

       LVS是四层协议的开源负载均衡器,工作在netfilter框架INPUT链中,它根据不同的算

       法将用户的请求调度给后端服务器,它不受sockt套接字文件限制,性能比nginx七层   

        负载均衡器性能高很多。

    

        类型:

                lvs-nat:多目标IP的DNAT,通过将请求报文中的目标地址和目标端口修改为某挑出的RS的RIP和PORT实现转发

                lvs-dr:通过为请求报文重新封装一个MAC首部进行转发,源MAC是DIP所在的接口的MAC,

                          目标MAC是某挑选出的RS的RIP所在接口的MAC地址;源IP/PORT,以及目标IP/PORT均保持不变;

                lvs-tun:在请求原报文的首部再次封装一个IP首部

                lvs-fullnat:修改请求报文的源和目标IP

           相关术语:

                    DS: Director Server,指的是前端负载均衡器节点。

                    RS:Real Server。后端提供服务的服务器。

                    VIP: 作为用户请求的目标的IP地址

                    DIP :DS与RS之间相互通讯

                     RIP: 后端服务器IP

                     CIP: Client IP 客户端IP


                     CIP <–> VIP == DIP <–> RIP 

LVS-NAT 类型的工作原理:

                   

  • 当用户请求到达Director Server,此时请求的数据报文会先到内核空间的PREROUTING链。 此时报文的源IP为CIP,目标IP为VIP
  • PREROUTING检查发现数据包的目标IP是本机,将数据包送至INPUT链
  • IPVS比对数据包请求的服务是否为集群服务,若是,根据调度算法修改数据包的目标IP地址为后端某一服务器IP,然后将数据包发至POSTROUTING链。 此时报文的源IP为CIP,目标IP为RIP
  • POSTROUTING链通过选路,将数据包发送给Real Server
  • Real Server比对发现目标为自己的IP,开始构建响应报文发回给Director Server。 此时报文的源IP为RIP,目标IP为CIP
  • Director Server在响应客户端前,此时会将源IP地址修改为自己的VIP地址,然后响应给客户端。 此时报文的源IP为VIP,目标IP为CIP

环境部署:

         1 准备三台主机    A    B    C    D

         2 主机A作为DS服务器,配置VIP:172.18.0.9 ,DIP为:192.168.10.254

         3 主机B C作为RS服务器 ,配置IP时网关指向DS服务器的192.168.10.254

            B主机IP:192.168.10.3/24 网关:192.168.10.254

            C主机IP:192.168.10.4/24 网关:192.168.10.254

            (备注:centos7用nmtui命令,centos6用setup命令)

          D主机IP:192.168.10.5(提供wordpress等)

D主机配置:(centos6)

    

            [root@node1 ~]# yum install -y nfs-utils rpcbind mysql-server nginx

                                  # service mysqld start
            [root@node1 ~]# mysql 
## 创建数据库和授权用户
            mysql> create database wpdb;
            mysql> grant all on wpdb.* to 
‘wpuser’@’192.168.10.%’ identified by ‘wppass’
            mysql> exit
            [root@node1 ~]# mkdir /data/
            [root@node1 ~]# cd /data/
            wget 
ftp://172.18.0.1/pub/Sources/sources/httpd/wordpress-4.3.1-zh_CN.zip
            [root@node1 data]# unzip wordpress-4.3.1-zh_CN.zip
            [root@node1 data]# chown -R nginx.nginx /data/wordpress
            [root@node1 data]# vim /etc/exports
            /data/wordpress 192.168.10.[34](rw)
            [root@node1 ~]# service nfs start
            [root@node1 ~]# showmount -e 172.18.99.7 
## 查看 nfs 共享目录 

B  C两台主机配置:

   [root@centos7 ~]# yum install -y nginx php-fpm php-mysql nfs-utils
            [root@centos7 ~]# mkdir -p /data/wordpress
                                    #vim /etc/nginx/conf.d/wps/conf
            server {
                        listen  80 default_server;
                        server_name www.magedu.com;
                        root  /data/wordpress/;
                        index index.php index.html index.html;
            location / {

            location ~ \.php$ {
                        fastcgi_pass 127.0.0.1:9000;
                        fastcgi_index index.php;
                        fastcgi_param SCRIPT_FILENAME
                        /data/wordpress/$fastcgi_script_name;
                        include fastcgi_params;
            }
}

               root@centos7 nginx]# vim nginx.conf
                # default server 
##注释或删除主配置文件里的 default server 
                [root@centos7 conf.d]# nginx
                [root@centos7 conf.d]# systemctl start php-fpm
                [root@centos7 conf.d]# mount 172.18.99.7:/data/wordpress /data/wordpress
 
                

             

A主机配置:

  ipvsadm -A -t 172.18.0.9 -s rr

  ipvsadm -a -t 172.18.0.9:80 -r 192.168.10.3 -m -w 2

  ipvsadm -a -t 172.18.0.9:80 -r 192.168.10.4 -m -w 1

   sysctl -w net.ipv4.ip_forward=1(打开核心转发功能)

LVS-dr模型工原理:

(1)每一个服务器都配有VIP

(2)Ditector转发数据包给后端RealServer时,在原有数据包上再封装一层RealServer的真是IP的mac到达。

(3)RS通过VIP回数据包时,数据必须从lo:0转发给本机的ethX物理端口后,再由本机的ethX的物理端口转发给客户端

(4)RIP和VIP不一定在哦同一个网段(不在同一网段的可能性非常大,这样可以起到隐藏后端RS的作用)

LVS-dr:

环境部署:

            1准备四台主机 A B C D

            2 A主机是DS服务器:172.18.0.9

            3 B C 主机是RS服务器

               B主机IP:172.18.0.3    C主机IP:172.18.0.4

            4 D主机提供wordpress等  IP:172.18.0.5

配置D 主机:(centos6)

            [root@node1 ~]# yum install -y nfs-utils rpcbind mysql-server nginx

                                  # service mysqld start
            [root@node1 ~]# mysql
## 创建数据库和授权用户
            mysql> create database wpdb;
            mysql> grant all on wpdb.* to
‘wpuser’@’172.18.99.%’ identified by ‘wppass’
            mysql> exit
            [root@node1 ~]# mkdir /data/
            [root@node1 ~]# cd /data/
            wget
ftp://172.18.0.1/pub/Sources/sources/httpd/wordpress-4.3.1-zh_CN.zip
            [root@node1 data]# unzip wordpress-4.3.1-zh_CN.zip
            [root@node1 data]# chown -R nginx.nginx /data/wordpress
            [root@node1 data]# vim /etc/exports
            /data/wordpress 172.18.99.1[01](rw)
            [root@node1 ~]# service nfs start
            [root@node1 ~]# showmount -e 172.18.99.7
## 查看 nfs 共享目录 

配置B主机:(centos7)
            

            [root@centos7 ~]# yum install -y nginx php-fpm php-mysql nfs-utils
            [root@centos7 ~]# mkdir -p /data/wordpress
                                    #vim /etc/nginx/conf.d/wps/conf
            server {
                        listen  80 default_server;
                        server_name www.magedu.com;
                        root  /data/wordpress/;
                        index index.php index.html index.html;
            location / {

            location ~ \.php$ {
                        fastcgi_pass 127.0.0.1:9000;
                        fastcgi_index index.php;
                        fastcgi_param SCRIPT_FILENAME
                        /data/wordpress/$fastcgi_script_name;
                        include fastcgi_params;
            }
}

               root@centos7 nginx]# vim nginx.conf
                # default server
##注释或删除主配置文件里的 default server
                [root@centos7 conf.d]# nginx
                [root@centos7 conf.d]# systemctl start php-fpm
                [root@centos7 conf.d]# mount 172.18.99.7:/data/wordpress /data/wordpress

                

                [root@centos7 ~]# vim dr.sh ## real-server 配置 vip
                #!/bin/bash
                 VIP=172.18.0.24
                case “$1” in
                    start)
                            echo “
配置 lvs Real Server 开始…”
                            ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up
## 配置 VIP
                            route add -host $VIP dev lo:0 ## 添加主机路由
                            ## 限制响应和通告级别
                            echo “1” >/proc/sys/net/ipv4/conf/lo/arp_ignore
                            echo “1” >/proc/sys/net/ipv4/conf/all/arp_ignore
                            echo “2” >/proc/sys/net/ipv4/conf/lo/arp_announce
                            echo “2” >/proc/sys/net/ipv4/conf/all/arp_announce
                            ;;
                    stop)
                            echo “
正在关闭 lvs Real server”
                            ifconfig lo:0 down
                            echo “0” >/proc/sys/net/ipv4/conf/lo/arp_ignore
                            echo “0” >/proc/sys/net/ipv4/conf/all/arp_ignore
                            echo “0” >/proc/sys/net/ipv4/conf/lo/arp_announce
                            echo “0” >/proc/sys/net/ipv4/conf/all/arp_announce
                            ;;
                    *)
                            echo “
用法: $0 {start|stop}”
                            exit 1
                   esac
            [root@centos7 ~]# bash dr.sh start
            配置 lvs Real Server 开始

配置C主机:(centos7)

                

                [root@centos7 ~]# yum install -y nginx php-fpm php-mysql nfs-utils
                [root@centos7 ~]# mkdir -p /data/wordpress
                [root@centos7 ~]# mount 172.18.99.7:/data/wordpress /data/wordpress

                                        #systemctl start php-fpm

                    #vim /etc/nginx/conf.d/wps/conf
            server {
                        listen  80 default_server;
                        server_name www.magedu.com;
                        root  /data/wordpress/;
                        index index.php index.html index.html;
            location / {

            location ~ \.php$ {
                        fastcgi_pass 127.0.0.1:9000;
                        fastcgi_index index.php;
                        fastcgi_param SCRIPT_FILENAME
                        /data/wordpress/$fastcgi_script_name;
                        include fastcgi_params;
            }
}

            
               root@centos7 nginx]# vim nginx.conf
                # default server 
##注释或删除主配置文件里的 default server         

                 [root@centos7 ~]# bash dr.sh start
                 配置 lvs Real Server 开始

配置A主机:

                [root@node2 ~]# yum install ipvsadm -y
                                      #ifconfig eth1 192.18.0.24 netmask 255.255.255.255 broadcast 172.18.0.24 up
                                      #ifconfig
                [root@node2 ~]# ipvsadm -A -t 172.18.0.24:80 -s rr
##新增一个集群服务
                [root@node2 ~]# ipvsadm -a -t 172.18.0.24:80 -r 172.18.99.10:80 -g
                ## 为集群添加 real-server
                [root@node2 ~]# ipvsadm -a -t 172.18.0.24:80 -r 172.18.99.11:80 -g
                [root@node2 ~]# ipvsadm -Ln
## 查看集群规则
备注:route add -host 172.18.0.24 dev lo:0(可以在俩台RS主机上设置,目的是为了让响应报文从lo出去,但这不是必须的。

 

                

原创文章,作者:m22shanyongguo,如若转载,请注明出处:http://www.178linux.com/75103

(1)
m22shanyongguom22shanyongguo
上一篇 2017-05-17
下一篇 2017-05-18

相关推荐

  • Vim编辑工具用法的总结

    描述:    Vim是一款强大的命令行界面的文本编辑器,是vi的高级版本,先说下学习它的原因:  1,所有的UNIX Like 系统都会内置vi文本编辑器,其他的文本编辑器则不一定会存在;  2,很多软件的编辑接口都会主动调用vi  3,vim具有程序编辑的能力,可以主动以字体颜色辨别语法的正确性,方便程序设…

    Linux干货 2016-08-11
  • 正则表达式

    1、复制/etc/skel目录为/home/tuser1,要求/home/tuser1及其内部文件的属组和其他用户都没有任何访问权限 [root@localhost ~]#  mkdir /home/tuser1======>创建/home/tuser1目录 [root@localhost ~]#   cp  -a  /etc/skel/   /hom…

    2017-10-10
  • shell脚本初步

    shell脚本编程初步 程序:由数据和指令组成, 指令:由程序文件提供 数据:可以通过IO设备、文件、管道来得到, 程序:算法+数据结构 变量:变量名+变量名指向的内存空间 变量赋值: name = value变量类型:存储格式:字符 数值(精确数值 近似数值)   表示数据范围  &nb…

    Linux干货 2016-08-15
  • 发送mail的几种方法

    mail,顾名思义就是邮件。在这两天上课中,接触了发送mail的一些用法,课下自己在网上又查询补充了一下,总结出来,增加印像。 为了显示清晰,首先我们分别使用两个用户在不同的终端下登录,一个超级管理员root,一个是刚刚创建的用户zhangsan,看下图: 首先先来看一下发送mail用到什么选项:  -s<邮件主题>:指定邮件的主题; …

    2017-07-20
  • N22-第一周练习作业-冥界之王

    1.描述计算机系统的组成及功能硬件组成(输入设备,输出设备,存储器,运算器,控制器) 输入设备:鼠标,键盘,麦克,声卡(输入声音),扫描仪,手写板等输出设备:显示器,声卡(输出声音),音箱,投影仪等存储器:内存,硬盘,磁带,CPU内部还可以分1,2,3级缓存运算器:主要完成对二进制数据的定点算术运算(加减乘除)、逻辑运算(与或非异或)以及移位操作。在某些CP…

    Linux干货 2016-08-15
  • PHP的类自动加载机制

    在PHP开发过程中,如果希望从外部引入一个class,通常会使用include和require方法,去把定义这个class的文件包含进来。这个在小规模开发的时候,没什么大问题。但在大型的开发项目中,这么做会产生大量的require或者include方法调用,这样不因降低效率,而且使得代码难以维护,况且require_once的代价很大。 在PHP5之前,各个…

    Linux干货 2015-04-10