实验(一)

**准备工作**




实验内容:

高可用haproxy实现动静分离,并加入varnish提供静态缓存,由NFS提供资源。

设置两台虚拟主机,分别为www.tz.com(提供wordpress),bbs.tz.com(提供discuz)

(注:由于虚拟机有限,暂没有考虑session问题)

实验环境:

CentOS 7

准备工作:

vip:172.16.61.9(www.tz.com) 172.16.61.10(bbs.tz.com)

keepalived+haproxy:172.16.61.1(node1) , 172.16.61.5(node5)

varnish:172.16.61.4(node4)

static-server:172.16.61.3(node3)(nginx)

dynamic-server:172.16.61.2(node2)(nginx+fastcgi)

NFS-server:172.16.61.6(node6)

mariadb:172.16.61.7(node7)

**配置keepalived**



[[email protected] ~]# crontab -l    #同步时间
*/5 * * * * /usr/sbin/ntpdate 172.16.0.1
[[email protected] haproxy]# crontab -l
*/5 * * * * /usr/sbin 172.16.0.1

[[email protected] keepalived]# cat keepalived.conf
! Configuration File for keepalived

global_defs {
   notification_email {
	[email protected]
   }
   notification_email_from [email protected]
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id node1
   vrrp_mcast_group4  224.61.0.18
}
vrrp_script  chk_haproxy {             #监控haproxy脚本
	script "killall -0 haproxy"
	interval 2
	weight -20
}
vrrp_instance VI_1 {                    #主(node5为备)
    state MASTER
    interface eno16777736
    virtual_router_id 161
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 2222
    }
    virtual_ipaddress {
        172.16.61.9/16
    }
    track_script {
	chk_haproxy
   }
}

vrrp_instance VI_2 {                   #备(node5为主)
    state BACKUP
    interface eno16777736
    virtual_router_id 162
    priority 90
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.16.61.10/16
    }
    track_script {
	chk_haproxy
   }
}

**配置haproxy**



(两台haproxy主机配置相同)
[[email protected] haproxy]# sed ‘[email protected]^#.*\+\|^[[:space:]]\+\#.*\[email protected]@‘ haproxy.cfg
global

    log         127.0.0.1 local2

    chroot      /var/lib/haproxy
    pidfile     /var/run/haproxy.pid
    maxconn     4000
    user        haproxy
    group       haproxy
    daemon

    stats socket /var/lib/haproxy/stats

defaults
    mode                    http
    log                     global
    option                  httplog
    option                  dontlognull
    option http-server-close
    option forwardfor       except 127.0.0.0/8
    option                  redispatch
    retries                 3
    timeout http-request    10s
    timeout queue           1m
    timeout connect         10s
    timeout client          1m
    timeout server          1m
    timeout http-keep-alive 10s
    timeout check           10s
    maxconn                 10000

frontend  main *:80                        #实现动静分离
    acl url_static       path_beg       -i /static /images /javascript /stylesheets
    acl url_static       path_end       -i .jpg .gif .png .css .js .html .htm
    use_backend static          if url_static
    default_backend             dynamic
 
listen  stats                              #提供haproxy状态页面
    bind  *:9090
    stats enable
    stats hide-version
    stats uri /haproxyadmin?stats
    stats  realm  "HAproxy\ Statistics"
    stats  auth    admin:tianzhuang
    stats  admin  if  TRUE

backend static                          #定义后端静态主机(varnish)
    balance     roundrobin
    server      static 172.16.61.4:80 check  maxconn 3000
backend dynamic                         #定义后端动态主机
    balance     roundrobin              
    server	dynamic	172.16.61.2:80 check maxconn 3000

**配置varnish**



[[email protected] varnish]# grep "^VARNISH_LISTEN" varnish.params    #修改varnish监听为80端口
VARNISH_LISTEN_PORT=80

[[email protected] varnish]# sed ‘[email protected]^#.*\+\|^[[:space:]]\+#.*@@‘ default.vcl
vcl 4.0;
backend default {
    .host = "172.16.61.3";      #指明后端静态资源主机
    .port = "80";
}

sub vcl_recv {

    if (req.restarts == 0) {
		if (req.http.x-forwarded-for) {
			set req.http.X-Forwarded-For = req.http.X-Forwarded-For + ", " + client.ip;
		} else {
			set req.http.X-Forwarded-For = client.ip;
		}
    }
    if (req.request != "GET" &&
    	req.request != "HEAD" &&
    	req.request != "POST" ) {
			return (pipe);
	}
	if (req.request != "GET" && req.request != "HEAD") {
			return (pass);
	}
	return (lookup);
}
 
sub vcl_pipe {
	return (pipe);
}

sub vcl_pass {
	return (pass);
}
sub vcl_hash {
	hash_data(req.url);
	return (hash);
}

sub vcl_hit {
	return (deliver);
}

sub vcl_miss {
	return (fetch);
}

sub vcl_fetch {
	unset beresp.http.Set-Cookie;
	if (req.url !~ "\.(png|gif|jpg|ico)$") {
		return (hit_for_pass);
	}
	if (beresp.status != 200) {
		return (hit_for_pass);
	}
	if (req.url ~ "\.(png|gif|jpg|ico)$") {
		set beresp.ttl = 7d;
	}
	return (deliver);
}

sub vcl_deliver {
    if (obj.hits>0) {
	set resp.http.X-Cache = "HIT FROM NODE4";
	} else {
	set resp.http.X-Cache = "MISS FROM NODE4";
    }
}

**配置NFS**



[[email protected] ~]# vim /etc/exports            #为两个虚拟主机分别共享两个目录

/www            172.16.0.0/16(rw,no_root_squash)
/bbs            172.16.0.0/16(rw,no_root_squash)

**配置静态服务器**



[[email protected] nginx]# sed ‘[email protected]^#.*\+\|^[[:space:]]\+#.*\[email protected]@‘ nginx.conf

user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

events {
    worker_connections 1024;
    use epoll;
}

http {
  log_format  main  ‘$remote_addr - $remote_user [$time_local] "$request" ‘
             ‘$status $body_bytes_sent "$http_referer" ‘
             ‘"$http_user_agent" "$http_x_forwarded_for"‘;

    access_log  /var/log/nginx/access.log  main;

    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 2048;

    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;

    include /etc/nginx/conf.d/*.conf;

    server {                         #定义两台虚拟主机
        listen       *:80;      
        server_name  www.tz.com;
        root         /var/www/html;

        include /etc/nginx/default.d/*.conf;
    }
    server {
	listen 80;
        server_name bbs.tz.com;
	root /bbs;
    }
}  
[[email protected] nginx]# mount | tail -2 
172.16.61.6:/www on /var/www/html type nfs4 (rw,relatime,vers=4.0,rsize=65536,wsize=65536,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=172.16.61.3,local_lock=none,addr=172.16.61.6)
172.16.61.6:/bbs on /bbs type nfs4 (rw,relatime,vers=4.0,rsize=65536,wsize=65536,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=172.16.61.3,local_lock=none,addr=172.16.61.6)

**配置动态服务器**



[[email protected] nginx]# sed ‘[email protected]^#.*\+\|^[[:space:]]\+#.*\[email protected]@‘ nginx.conf
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

events {
    worker_connections 1024;
    use epoll;
}

http {
    log_format  main  ‘$remote_addr - $remote_user [$time_local] "$request" ‘
                      ‘$status $body_bytes_sent "$http_referer" ‘
                      ‘"$http_user_agent" "$http_x_forwarded_for"‘;

    access_log  /var/log/nginx/access.log  main;

    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 2048;

    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;
    include /etc/nginx/conf.d/*.conf;

    server {
        listen       80;
        server_name  www.tz.com;
        root         /var/www/html;

        include /etc/nginx/default.d/*.conf;

        location / {                             #此处使用套接字方式与本地fastcgi进行通信
			root /var/www/html;
			fastcgi_pass  unix:/var/run/php-fpm.sock;
			include fastcgi.conf;
			fastcgi_index index.php;
        }
    }
	server {
		listen	     80;

		server_name  bbs.tz.com;
		root     /bbs;
		index index.html index.php;
		location ~* \.php$ {

		fastcgi_pass  unix:/var/run/php-fpm.sock;
		include  fastcgi.conf;
		fastcgi_index  index.php;
	}
}
}

**为虚拟主机配置资源**



[[email protected] ~]# ls /www         #在NFS上为www.tz.com配置wordpress
index.html   wp-activate.php       wp-content         wp-login.php      xmlrpc.php
index.php    wp-admin              wp-cron.php        wp-mail.php
license.txt  wp-blog-header.php    wp-includes        wp-settings.php
readme.html  wp-comments-post.php  wp-links-opml.php  wp-signup.php
wordpress    wp-config.php         wp-load.php        wp-trackback.php

 [[email protected] ~]# ls /bbs       #为bbs.tz.com配置discuz
admin.php  connect.php              favicon.ico  install     readme      template     utility
api        cp.php                   forum.php    member.php  robots.txt  uc_client
api.php    crossdomain.xml          group.php    misc.php    search.php  uc_server
archiver   data                     home.php     plugin.php  source      upload
config     Discuz_X3.2_SC_UTF8.zip  index.php    portal.php  static      userapp.php

**启动服务并测试**




修改windows本地hosts文件:

时间: 2024-10-22 11:48:02

实验(一)的相关文章

如何使用GNS3和Cisco IOU搭建路由交换实验-IOU篇

前面介绍了GNS3的概念,安装,配置和使用,本篇将介绍怎么利用GNS3配置IOU从而实现使用GNS3和Cisco IOU搭建路由交换实验. 由于本篇篇幅较长,所以先过一下大纲: 1. IOU模拟环境介绍 2. IOU软件环境的准备 3. VMware虚拟机的安装.导入和配置 4. IOU镜像的上传 5. GNS3的配置 6. IOU模拟环境的实现 IOU模拟环境介绍 IOU即IOS running in Unix,最初是由思科内部人员开发来测试IOS的平台,后来流传到互联网经网友改进有了后来的W

广外第二周的实验报告来这里分享一下

虽然有很多还不知道怎么改,可能也有很多测试不到的地方,但是通过这个星期我好歹了解了好多东西啊 实验报告 通过本次学习,能了解到VC6.0.是用于将已生成的C++语言源程序代码转换为计算机能读懂的目标代码,计算机用的均是二进制代码.编辑完成后它首先生成扩展名为obj的文件(程序编译后的二进制文件),若想进行之后的链接.运行过程,必须不断修改源程序文件至完全正确. 在文件→新建→源代码这里可以新建源代码:新建→打开项目或文件中可以打开以前写过的源代码或者程序:运行→编译中即把所打源文件转换为二进制代

webservice实验一

实验目的:安装jdk1.6_21以后的版本,利用JAX-WS API自己发布webservice并调用,以及用wsimport生成webservice客户端代码调用一个免费的web服务(如webxml.com.cn上的获取手机归属地的服务). 一.webservice原理了解 webservice是一种通用的跨语言跨平台的数据交互方式,之所以能够做到这一点,是因为它的底层实现机制是依赖于HTTP协议以及XML格式这些开发的标准.webservice使用SOAP(simple object acc

Cisco ISE + Windows Server 2008 实验

实验说明:此实验参考生产环境中某部分环境搭建而成,此环境Windows Server 2008用于登录用户.MAC等账号的认证,Cisco ISE用于认证授权等,无线部分利用VMWLC + Cisco 1702AP测试测试.因为为实验环境,整体网络架构所有节点为单点:Cisco ISE部分功能没有应用上,如测试PC端的补丁.防毒补丁.设备认证等(此部分在生产环境上实施),下图为此实验的网络架构图. Windows AD:  172.16.1.199 Cisco VMISE: 172.16.1.1

CentOS系统启动及内核大破坏模拟实验

讲过了centos的启动流程,此时是不是想来点破坏呢?那就尽情的玩耍吧,记得在实验之前拍个快照,万一哪个环节错误恢复不回来了呢,毕竟数据无价,话不多说,开始. 一.删除伪系统根.(ramdisk文件) (1)模拟误操作删除ramdisk文件. ①模拟误删除initramfs-3.10.0-514.el7.x86_64.img文件. ②为当前正在使用的内核重新制作ramdisk文件 格式为:mkinitrd /boot/initramfs-$(uname -r).img $(uname -r) (

PCB实验与检修杂记

2017-08-24 有ABCD四个焊点,diagram上A与B相连,C与D相连,B与C属于同一组引脚.现根据实验要求将B.C短接,结果测得,B与C导通而A与C不导通,这与常识违背. 经过逐步缩小范围发现,C点上方留出的测量点和焊台的测量结果有所不同,经过分析,可知C点焊脚与焊台虚焊,测量时再表笔的压力下两者导通:而表笔一但离开C点,则两者不导通.即测量引入了误差. 对于此问题解决的思路: 1.稳扎稳打,逻辑分析,逐步缩小范围.2.测量引脚上方留出的点比直接测量引脚更可靠.

2062326 齐力锋 实验四《Java面向对象程序设计Android开发》实验报告

北京电子科技学院(BESTI) 实 验 报 告 课程: 程序设计与数据结构  班级: 1623  姓名: 齐力锋 学号: 20162326 成绩: 指导教师: 娄嘉鹏/王志强 实验日期: 2017年5月26日 实验密级:非密级 预习程度: 优良 实验时间: 2 Hours 仪器组次: 必修/选修: 必修 实验序号: 04 实验名称:Java面向对象程序设计Android开发 实验内容 1.Android Stuidio的安装测试: 参考<Java和Android开发学习指南(第二版)(EPUBI

实验三+036+吴心怡

1)被测项目界面. 2)测试用例设计表 等价类 输入条件 有效等价类 编号 无效等价类 编号 年 1912≤year≤2050 ① year<1912 ② Year>2050 ③ 非数字 月 Month= 1,3,5,7,8,10,12 ④ Month<1 ⑤ Month= 4,6,9,11 month>12 ⑥ Month= 2 非数字 日 1≤ day ≤31 ⑦ day<1 ⑧ Day>311 ⑨ 非数字 测试用例表 测试用例编号 输入数据 预期输出 实际结果 通

实验三+018+李滨

1)被测项目界面. 2)测试用例设计表 等价类 输入条件 有效等价类 编号 无效等价类 编号 年 1912≤year≤2050 ① year<1912 ② Year>2050 ③ 非数字 月 Month= 1,3,5,7,8,10,12 ④ Month<1 ⑤ Month= 4,6,9,11 month>12 ⑥ Month= 2 非数字 日 1≤ day ≤31 ⑦ day<1 ⑧ Day>311 ⑨ 非数字 测试用例表 测试用例编号 输入数据 预期输出 实际结果 通

实验三+099+吴丹丹

一.实验目的 掌握黑盒测试用例设计方法 二.实验要求 (1)对被测程序进行黑盒测试用例设计 (2)运用等价类.边界值.决策表.状态图法等进行测试用例设计. (3)对手机上任意一款音乐软件进行黑盒测试实践.(作业若雷同,后上传者判定0分) 三.实验内容 1.对被测程序运用不同的测试技巧进行测试用例设计,并执行测试,撰写测试小结. 要求写出测试用例表.执行情况和测试小结. 2.对手机上任意一款音乐软件进行黑盒测试. 要求:1)使用思维导图 2)根据场景法.状态图法 设计测试用例. 3)附加题:如有可