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终端的类型与linux发展历史

    一、linux console的类型与说明 说明:        1 由于虚拟终端的实现,人们可以多用户多任务的在一台计算机操作系统上工作             2 在80或90年代的旧电脑上,人们只能用分屏这样的方法来实现多用户,多任务的工作  …

    Linux干货 2013-07-03
  • 简单明了的Linux常用端口说明

    由于Linux常用端口很多,为了查看方便,所以特意整理了一些,详情如下        查看Linux常用端口   cat /etc/services # The Well Known Ports are those from 0 through 1023. 众所周知的端口是从0到1023。 # The Reg…

    Linux干货 2017-06-11
  • 第四周作业

    1、复制/etc/skel目录为/home/tuser1,要求/home/tuser1及其内部文件的属组和其它用户均没有任何访问权限。 [root@unclez ~]# cp -r /etc/skel /home/tuser1 [root@unclez ~]# chmod -R&…

    Linux干货 2016-12-24
  • 第九周作业

    1、写一个脚本,判断当前系统上所有用户的shell是否为可登录shell(即用户的shell不是/sbin/nologin);分别统计这两类用户的个数;通过字符串比较来实现;    #!/bin/bash     echo "可登录类型有有$(awk -F: '/[^\<nologin\&gt…

    Linux干货 2017-02-07
  • Quota和RAID

    高级文件系统管理 磁盘配额 quota 限制用户在某个分区的容量,创建数目的多少!一般实施在家目录 /home 下来限制用户的占用空间 限制某一群组所能使用的最大磁盘配额  (使用群组限制): 限制某一用户的最大磁盘配额  (使用用户限制):它仅能针对整个文件系统来进行设计,无法针对某个单一的目录来设计它的磁盘配额。 限制某一目录 &nb…

    Linux干货 2016-09-01
  • 文本查找与文件查找

    咬文嚼字,颠倒糊涂,善哉!善哉? 念头通达,思虑有感,言简明,意通神 文件是什么?文本是什么?文本文件是什么?      好想来碗正常的豆腐脑,可惜每天早上也只能是豆腐花。吃不到,想想还是可以的,豆腐脑是“文件”,吃豆腐脑是“看文本”,找到地,点了豆腐脑,就是“查找文件”,符合个人口味的,加盐,加咸菜,加黄豆…

    2017-06-04

评论列表(1条)

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

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