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

相关推荐

  • 第一周记录

    列出Linux的发行版,描述不同发行版之间的联系与区别。    发行版多达100多种,其中主要的有Debian旗下的Ubuntu、knopix,Slackware旗下的S.u.S.E,RedHat公司旗下的RedHat、CentOS、Fedora。其中各个版本之间的区别:包管理器的区别;但其内核都是Linux内核。 ifconfig: 查…

    Linux干货 2016-08-15
  • 创建CA 和申请证书

    创建CA 和申请证书1生成私有CA的私钥:(umask 066;openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048)注:CA的私钥文件必须放在/etc/pki/CA/private/cakey.pem 这个路径里2创建序列号 ,数据库文件touch  /etc/pki/CA/index.tx…

    Linux干货 2017-07-17
  • Haproxy+keepalivd+LAMP

    目录 一、试验部署 1、实验要求 2、实验准备 3、拓扑结构 4、网络规划 二、基础设置 1、LAMP配置 2、HAProxy配置 3、Keepalived配置 三、测试 四、总结 一、试验部署 1、实验要求 (1) 动静分离部署wordpress,动静都要能实现负载均衡,要注意会话的问题; (2) 给出设计拓扑,写成博客; (3)haproxy的设定要求:…

    2017-05-18
  • VPS服务器的购买使用

           Virtual Host Server(虚拟主机)是一个云计算服务,相比于传统的购买服务器硬件方式搭建服务器,有着价格便宜,个性化定制配置,使用灵活等特点。按需求购买计算资源,只需要几分钟时间就可以在公网配置一个属于自己的服务器。         最著名的云计算服务提供商国外有Amazon,Google,vultr等等,国内有阿里云,腾讯云等等…

    2018-03-26
  • (总结)MySQL自带的性能压力测试工具mysqlslap详解

    PS:今天一同事问我有木有比较靠谱的mysql压力测试工具可用。其实mysql自带就有一个叫mysqlslap的压力测试工具,还是模拟的不错的。下面举例说说。mysqlslap是从5.1.4版开始的一个MySQL官方提供的压力测试工具。通过模拟多个并发客户端访问MySQL来执行压力测试,同时详细的提供了“高负荷攻击MySQL”的数据性能报告。并且能很好的对比…

    Linux干货 2015-02-10
  • 数据库

    数据库系统理论概述(一) –本文主要讲述: – 1.数据库和数据库管理系统 – 2.使用传统的文件系统对大量数据管理存在的问题 – 3.常见的数据库系统模型 – 4.数据库视图 – 5.数…

    Linux干货 2016-10-30

评论列表(1条)

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

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