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)
上一篇 2016-11-07 09:54
下一篇 2016-11-07 10:05

相关推荐

  • 搜索引擎-处理查询

     我们从用户的角度来看,用户不关心什么索引结构是倒排还是签名文件,也不需要知道相关排序算法。用户提交了查询,就需要获取满意的搜索结果。这个搜索结果就是搜索引擎是否提供有效的服务。 1.查询流程 查询流程图: 1)用户提交查询 2)分析查询      查询预处理:    …

    Linux干货 2015-12-10
  • Linxux运维基础小计

    常用cat、ls、touch、mkdir、cp、mv小结 ·cat连续的将文件的内容显示在银幕上 用法:cat[OPTION]…[FILE]… 参数 -A显示所有非正常的所有符号 -E显示行结束符 -T显示制表符 -v显示其他的非打印字符 -n对显示的行进行编号,与文件内容没有关系 -b:打印出行号(空白行不标行号) 直接输入cat命令表示等待用户的输入并打…

    2017-02-18
  • Python

    Python中os和shutil模块
    csv文件和ini文件简介

    Linux干货 2017-10-30
  • rpm包管理

    一、概述 RPM 是RPM Package Manager(RPM软件包管理器)的缩写。由redhat公司的Redhat package manager改名而来,成了RedHat的工业标准 二、rpm的命名格式: rpm包的命名格式:name-version-relase.arch.rpm version: major.minor.release,同源代码 …

    Linux干货 2015-10-07
  • 两张盘合并做yum源

    第一步 先把两张光盘都连接到系统中 连接上iso文件后重启电脑 这时桌面会显示已将连接上的iso文件   然后创建两个文件夹分别挂载这两个光盘   mkdir centos6.9-{1,2} 创建两个文件夹 df 查看系统硬盘   然后把两个光盘分别挂载到文件中 mount -o ro,loop /dev/sr0 centos6…

    2017-07-12
  • 第二周作业

    1、Linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例演示。 目录管理类命令: cd:变更目录   命令格式:cd [DIRECTORY] pwd:显示当前目录的绝对路径 ls:显示文件或目录内容     命令格式:ls [OPTION]… [FILE]… &…

    Linux干货 2017-01-08

评论列表(1条)

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

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