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
下一篇 2016-11-07

相关推荐

  • 第九周作业

    1、写一个脚本,判断当前系统上所有用户的shell是否为可登录shell(即用户的shell不是/sbin/nologin);分别这两类用户的个数;通过字符串比较来实现; 2、写一个脚本     (1) 获取当前主机的主机名,保存于hostname变量中;     (2) 判断此变量的值是否为loc…

    2017-04-20
  • 系统管理之磁盘管理(一)

    磁盘结构 一.概论 1.操作系统的组成部分: 硬件: 根据冯诺依曼体系,计算机的组成:    运算,控制器:cpu    存储器:主存(ram);       io设备:      &nbs…

    Linux干货 2016-08-30
  • 单用户模式破解密码与密码的加密

    当你坐在一台CentOS 6主机前,但是却不知道密码,要怎样破解掉密码进入系统呢? 答案很简单: 1、启动系统,当出现如下界面时,按任意键 2、你会看到这个画面 3、敲击“a”键,执行modifiy the kernel arguments 4、键入“1”键,进入单用户模式 5、至此,你已经成功进入系统,并修改了密码! 是不是觉得Centos6的系统这样安全…

    Linux干货 2016-09-13
  • 组建RAID5重启系统,出现md127的解决办法

        我这里在组建RAID5之后重启了系统,当时/dev/md0变成了/dev/md127。出现这问题主要是我没有配置生成/etc/mdadm.conf文件,如果哪位伙伴出现类似我这种情况,而不是通过我这种方法解决的,希望能分享一下你的解决方法,谢谢。  先停止md127 [root@client3&nbs…

    Linux干货 2016-01-05
  • “Apache” 服务器中的战斗机

    一,apache世界使用排名第一的web服务器软件。它被音译为阿帕奇,与武装直升机里的佼佼者阿帕奇同名,它虽没有阿帕奇那么霸气的外观,但是它具有和它一样的强大火力,它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,是最流行的Web服务器端软件之一。它快速、可靠并且可通过简单的API扩充,将Perl/Python等解释器编译到服务器中…

    2017-08-19
  • linux程序包管理

         首先linux软件程序包和windows中的程序包是不兼容的,所以要在linux上使用windows上的程序,需要使用虚拟化工具。 库级别的虚拟化:     linux : WinE     windows: Cywin 而程序开发语言有多…

    Linux干货 2016-08-24

评论列表(1条)

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

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