17周博客作业 LVS+nginx+php(nginx与php分离)

1、结合图形描述LVS的工作原理;

blob.png

LVS是一种用软件实现的LB集群;
作用于传输层;
LVS工作原理:通过Director调度把用户请求按照分配算法分配给后端的Real server,然后由后端Real server响应客户请求;


lvs模式分为三种。
lvs-nat:
	多目标的DNAT:通过将请求报文的目标地址和目标端口修改为挑选出某RS的RIP和PORT来实现; 
	
	(1) RIP和DIP应该使用私网地址,RS的网状应该指向DIP;	
	(2) 请求和响应报文都要经由director转发;极高负载的场景中,Director可能会成为系统瓶颈;	
	(3) 支持端口映射;	
	(4) VS必须为Linux,RS可以是任意的OS;
	(5) RS的RIP与Director的DIP必须在同一IP网络;
	
lvs-dr:
    通过修改请求报文的MAC地址进行转发;IP首部不会发生变化(源IP为CIP,目标IP始终为VIP);
    
    (1) 确保前端路由器将目标IP为VIP的请求报文一定会发送给Director;
    	解决方案:
    		静态绑定;
    		禁止RS响应VIP的ARP请求;    			
    		        (a) arptables; 
    			(b) 修改各RS的内核参数,并把VIP配置在特定的接口上实现禁止其响应;    
    	(2) RS的RIP可以使用私有地址,也可以使用公网地址;    
    	(3) RS跟Director必须在同一物理网络中;    
    	(4) 请求报文必须由Director调度,但响应报文必须不能经由Director;    
    	(5) 不支持端口映射;    
    	(6) 各RS可以使用大多数的OS;
    
lvs-tun
转发方式:不修改请求报文的IP首部(源IP为CIP,目标IP为VIP),而是在原有的IP首部这外再次封装一个IP首部(源IP为DIP,目标IP为RIP);
	
	(1) RIP,DIP,VIP全得是公网地址;	
	(2) RS的网关不能也不可能指向DIP;	
	(3) 请求报文经由Director调度,但响应报文将直接发给CIP;	
	(4) 不支持端口映射;	
	(5) RS的OS必须支持IP隧道功能;


lvs调度后端Real server方法:
		根据其调度时是否考虑后端主机的当前负载,可分为静态方法和动态方法;
静态方法:仅根据算法本身进行调度;
		RR:Round Robin,轮询/论调;
		WRR:Weighted RR,加权轮询;
		SH:Source Hashing,源地址哈希;(短链接,需要保持持久链接时使用;如电商购物;把源地址跟原来挑选车来rs绑定,使得下次能继续访问这台rs)
		DH:Destination Hashing,目标地址哈希;
			正向的web代理(缓存)。负载均衡内网用户对外部服务器的请求
			哈希目标地址;
动态方法:根据算法及各RS当前的负载状态进行评估调度;			
			
			LC:least connections,最少链接;(如果没有最少的,根据rs表至上而下轮询)				
			OVerhead=Active*256+Inactive
			WLC:Weighted LC,加权最少链接;				
			OVerhead=(Active*256+Inactive)/weight			
			    SED:Shortest Expections Delay
			OVerhead=(Active+1)*256+Inactive
			NQ:Never Queue
				每个rs先分配一个,然后再SED
			LBLC:Locality-Based LC
				动态的DH算法;			
				LBLCR:LBLC with Replication,
				    带复制功能的LBLC;

2、搭建一套LVS-DR模型的高性能集群,并实现以下功能:

(1)、wordpress程序通过nfs共享给各个realserver;

(2)、后端realserver中的nginx和php分离

准备三台服务器,两台Real server(Centos 6.6)分别搭建nginx和php+nfs+wordpress,另一台服务器搭建+Director(Centos 7.1) 所有服务器统一安装编译环境 yum groupinstall "Development Tools" "Server Platform Development" -y

Real server1配置:

IP地址:192.168.10.100做nginx服务器,系统:Centos 6.6选择nginx-1.10.1版本,从官网获取到安装包,放置服务器/root目录下
安装依赖包:
yum install -y openssl-devel pcre-devel zlib-devel

做好准备工作下面开始安装
[root@caicai ~]# tar xf nginx-1.10.1.tar.gz [root@caicai ~]# cd nginx-1.10.1[root@caicai ~]# ./configure --prefix=/usr/local/nginx --conf-path=/etc/nginx/nginx.conf --user=nginx --group=nginx --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx/nginx.pid --lock-path=/var/lock/nginx.lock --with-http_ssl_module --with-http_gzip_static_module --with-debug --with-http_stub_status_module --http-client-body-temp-path=/var/tmp/nginx/client/ --http-proxy-temp-path=/var/tmp/nginx/proxy/ --http-fastcgi-temp-path=/var/tmp/nginx/fcgi/ --http-uwsgi-temp-path=/var/tmp/nginx/uwsg --http-scgi-temp-path=/var/tmp/nginx/scgi --with-pcre
[root@caicai nginx-1.10.1]# make && make install
编译安装好以后创建用户
[root@caicai ~]# groupadd -r -g 501 nginx
[root@caicai ~]# useradd -r -g nginx -u 501 nginx

接下来就可以启动nginx了,但是为了方便我们应该把nginx脚本加入PATH中
[root@caicai ~]# vim /etc/profile.d/nginx.sh
    export PATH=/usr/local/nginx/sbin:$PATH
[root@caicai ~]# exec bash /etc/profile.d/nginx.sh (执行此命令会断开ssh,重新连接就好)配置好以后就可以直接使用nginx命令启动nginx服务了 Ye~!
[root@caicai ~]# nginx查看下是否正常启动
[root@caicai ~]# ss -tnl | grep :80LISTEN     0      128                       *:80                       *:*  
[root@caicai ~]# lsof -i:80COMMAND  PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
nginx   6444  root    6u  IPv4  55359      0t0  TCP *:http (LISTEN)
nginx   6445 nginx    6u  IPv4  55359      0t0  TCP *:http (LISTEN)

待Real server2配置完第4部回来配置:
[root@caizhijian ~]# mkdir /www
[root@caicai ~]# chown -R nginx:nginx /www/
[root@caicai ~]# chown -R nginx:nginx /www
[root@caicai ~]# mount -t nfs 192.168.10.101:/www /www

[root@caicai ~]# vim /etc/nginx/nginx.conf
            location / {
            root   /www;
            index index.php index.html index.htm;
        }        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

        location ~ \.php$ {
            root           /www;
            fastcgi_pass   192.168.10.101:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  /www$fastcgi_script_name;
            include        fastcgi_params;
        }
 检查下配置语法是否有问题:       
[root@caicai ~]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
没问题reload重新加载一下配置文件:
[root@caicai ~]# nginx -s reload

Real server2配置:

IP地址:192.168.10.101 做php服务器 为了方便这里就直接使用yum安装了;

1、安装php-fpm和一些插件
[root@caizhijian ~]# yum install -y php-fpm php-mysql php-mbstring php-gd php-xml
2、编辑配置文件
[root@caizhijian ~]# vim /etc/php-fpm.d/www.conf 
    ;listen.allowed_clients = 127.0.0.1  //注释掉只能本地访问,默认所有ip都可以访问
    user = nginx    //更改使用的用户
    user = nginx    //更改使用的组
    listen = 192.168.10.101:9000    //修改监控地址

3、开启nfs功能(默认Centos 5以上的版本已经默认安装了,可直接启用)
[root@caizhijian ~]# vim /etc/exports 
    /www    *(rw)
[root@caizhijian ~]# service nfs start

4、新建用户和共享文件
[root@caicai ~]# groupadd -r -g 501 nginx
[root@caicai ~]# useradd -r -g nginx -u 501 nginx
[root@caizhijian ~]# mkdir /www
[root@caicai ~]# chown -R nginx:nginx /www/
[root@caicai ~]# chown -R nginx:nginx /www

5、建测试页做测试
[root@caizhijian ~]# vim /www/index.php 
    <?php        phpinfo();
    ?>
打浏览器访问http://192.168.10.100测试能否访问6、安装wordpress程序
获取wordpress程序程序包wordpress-4.5.3-zh_CN.tar.gz,放置/root目录下
[root@caizhijian ~]# tar xf wordpress-4.5.3-zh_CN.tar.gz -C /www
[root@caizhijian ~]# chown -R nginx:nginx /www
访问下http://192.168.10.100/wordpress

LVS-dr配置:

准备2张网卡配置VIP、DIP
VIP地址:192.168.10.99
DIP地址:192.168.10.98

用虚拟机克隆一台Real server1,多装一台nginx服务器做验证命名为Real server3;
设置ip地址为:192.168.10.102
[root@caicai ~]# ifconfig eth1 192.168.10.102 netmask 255.255.255.0

挂载nfs
[root@caicai ~]# mount -t nfs 192.168.10.101:/www /usr/local/nginx/html/www/
在各主机(Director,RS)均需要配置VIP;因此,要解决地址冲突问题,这里采用修改内核参数限制arp响应通告;
建立一个bash脚本分别在Real server1和Real server3上执行

#!/bin/bash

    case $1 in
    start)
     echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
     echo 2 > /proc/sys/net/ipv4/conf/all/arp_annouce
     echo 1 > /proc/sys/net/ipv4/conf/lo/arp_annouce
     echo 2 > /proc/sys/net/ipv4/conf/lo/arp_annouce
          ifconfig lo:0 192.168.10.99 netmask 255.255.255.0 broadcast 192.168.10.99 up
     route add -host 192.168.10.99 dev lo:0
    ;;
    stop)
     echo 0 > /proc/sys/net/ipv4/conf/all/arp_ignore
     echo 0 > /proc/sys/net/ipv4/conf/all/arp_annouce
     echo 0 > /proc/sys/net/ipv4/conf/lo/arp_annouce
     echo 0 > /proc/sys/net/ipv4/conf/lo/arp_annouce
     ifconfig lo:0 down
     ;;
     esac
     
接下来配置Director主机
[root@localhost ~]# yum install ipvsadm -y添加规则
[root@localhost ~]# ipvsadm -A -t 192.168.10.99:80 -s rr
[root@localhost ~]# ipvsadm -a -t 192.168.10.99:80 -r 192.168.10.100 -g -w 1
[root@localhost ~]# ipvsadm -a -t 192.168.10.99:80 -r 192.168.10.102 -g -w 2
到这就配置完了,还有很多东西需要改进(例如数据库等)

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

(0)
N21_志建N21_志建
上一篇 2016-11-07 09:54
下一篇 2016-11-07 10:05

相关推荐

  • 【推荐】Linux 简单部署LAMP

    Linux 简单部署LAMP: 实验环境: 1、主机系统Centos6.7_X86_64 2、DNS&CA:192.168.3.10 3、LAMP安装方式为rpm 4、主机IP:192.168.3.11提供web站点:     http://wp.neolinux.com     &nbsp…

    Linux干货 2016-06-22
  • 五大主流数据库模型

    导读:无论是关系型数据库还是非关系型数据库,都是某种数据模型的实现。本文将为大家简要介绍5种常见的数据模型,让我们来追本溯源,窥探现在流行的数据库解决方案背后的神秘世界。 什么是数据模型? 访问数据库中的数据取决于数据库实现的数据模型。数据模型会影响客户端通过API对数据的操作。不同的数据模型可能会提供或多或少的功能。一般而言,数据模型不会直接提供过多的功能…

    Linux干货 2015-04-04
  • 记一次CentOS7内核kernel的删除重装

    人生在于折腾,学习Linux更要多多折腾。在一次折腾中吸取教训,更易于记忆。 今天我们来折腾Linux的内核:删除系统内核后,通过光盘进行kernel的重安装。 友情提示:请在虚拟机环境进行,折腾前务必做好系统快照。慎重! 环境 本次系统环境是如下图: 删除 我们先到/boot目录下,强制删除kernel文件: 重启PC,此时系统报错找不到内核文件,无法登录…

    Linux干货 2016-08-24
  • 马哥教育网络班20期+第一周课程练习

    一、计算机的组成及其功能。 计算机是由几个单元所组成,输入单元,输出单元,运算器,控制器,存储器,5大单元组成  1、运算器 又称运算器又称算术逻辑单元,它是计算机对数据进行加工处理的部件,包括算术运算(加、减、乘、除等)和逻辑运算(与、或、非、异或、比较等)。 2、控制器 负责从存储器中取出指令,并对指令进行译码;根据指令的要求,按时间的先后顺序…

    Linux干货 2016-06-23
  • 用户组和权限管理知识总结

    在介绍本期内容之前呢,有一个小插曲.就是由于昨天晚上我没有正常关闭虚拟机,今天早上打开的时候一直显示正在使用中,弹 出来个小框框,如下图,马赛克部分呢就是提示的路径,安装路径不一样,提示的就也不一样. 此虚拟机似乎正在使用中。 如果此虚拟机已在使用中,请按“取消”按钮,以免损坏它。如果此虚拟机未使用,请按“取得所有权(T)”按钮以获取它的所有权。&…

    2017-07-28
  • #招聘福利#饿了么/运维核心岗位/上海

    饿了么/运维核心岗位/上海 待遇面谈 具体岗位:         应用运维,核心岗位,负责商家订单系统,有之前的学长带着成长 要求:     1、1-2年以上工作经验,     2、熟悉shell和python,    &nbsp…

    Linux干货 2016-03-18

评论列表(1条)

  • 马哥教育
    马哥教育 2016-11-10 15:29

    赞,又是一位比较超前的。LVS现在的话应该说是四种,课程里面也讲解了这四种的区别和使用场景,建议再细化下~~继续加油~