【我的技术我做主】shell脚本:创建函数并指定目录进行下载

使用nginx做负载均衡器,代理web服务器,用户请求的数据都指向nginx负载均衡器,nginx负责调度后端的web服务器提供服务。


环境搭建及说明:

nginx负载均衡器LNMP环境或只安装nginx服务;两块网卡,192.168.11.30(模拟公网ip),192.168.20.30(内网)

web服务器LAMP环境1:ip地址为内网 192.168.20.10 apache为2.4版本

web服务器LAMP环境2:ip地址为内网 192.168.20.11

web服务器LAMP环境3:ip地址为内网 192.168.20.12

三台web服务器网站目录,程序保持一致。内网ip保持与nginx负载均衡器同一个网段。

1、只有一个站点的配置:

web1、web2、web3上操作:

httpd配置文件加入,允许网站目录访问;开启vhost虚拟配置文件。

# vi /etc/httpd/httpd.conf
Include /etc/httpd/extra/httpd-vhosts.conf
<Directory /data/www>
    Options FollowSymLinks
    AllowOverride none
    Require all granted
</Directory>

虚拟主机配置

# vi /etc/httpd/extra/httpd-vhosts.conf
<VirtualHost *:80>
    DocumentRoot "/data/www"
    ServerName  www.yong.com
</VirtualHost>

创建目录,写入index.html文件区分。

mkdir /data/www

在每一个web目录下写入index.html,内容分别为:This is LAMP 1 !;This is LAMP 2!;This is LAMP 3!

# curl 192.168.20.10
This is LAMP 1 !
# curl 192.168.20.11
This is LAMP 2!
# curl 192.168.20.12
This is LAMP 3!

nginx代理服务器操作:

写一个代理配置文件:

# cat /usr/local/nginx/conf/vhosts/nginxproxy.conf
upstream backend {
   server 192.168.20.10:80 weight=1 max_fails=3 fail_timeout=30s;
   server 192.168.20.11:80 weight=1 max_fails=3 fail_timeout=30s;
   server 192.168.20.12:80 weight=1 max_fails=3 fail_timeout=30s;
}
server {
   listen 80;
   server_name www.yong.com;
   index index.html;
   location / {
    proxy_pass http://backend;
  }
}

hosts添加本地ip地址解析,模拟公网ip对应域名;windows本地hosts也要增加解析;

# cat /etc/hosts
192.168.11.30 www.yong.com

使用curl测试,默认rr轮询,访问一次web1,一次web2,一次web3

使用for循环执行,查看访问结果:

# for n in `seq 10`;do curl www.yong.com;sleep 2;done
This is LAMP 2!
This is LAMP 1 !
This is LAMP 3!
This is LAMP 2!
This is LAMP 1 !
This is LAMP 3!
This is LAMP 2!
This is LAMP 1 !
This is LAMP 3!
This is LAMP 2!


2、多个站点的配置:

在web1,web2,web3,增加第2个站点 bbs.yong.com

httpd配置文件加入,允许网站目录访问;

<Directory /data/bbs>
    Options FollowSymLinks
    AllowOverride none
    Require all granted
</Directory>

虚拟主机配置增加

# vi /etc/httpd/extra/httpd-vhosts.conf
<VirtualHost *:80>
    DocumentRoot "/data/bbs"
    ServerName bbs.yong.com
</VirtualHost>

创建目录,写入index.html文件区分。

mkdir /data/bbs

在每一个web目录下写入index.html,内容分别为:This is BBS.yong.com 1!;This is BBS.yong.com 2!;This is BBS.yong.com 3!

nginx负载均衡服务器,虚拟主机增加server:

server {
    listen 80;
    server_name bbs.yong.com;
    index index.html;
    location / {
        proxy_pass http://backend;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $remote_addr;
    }
}

hosts添加本地ip地址解析,模拟公网ip对应域名;windows本地hosts也要增加解析;

# cat /etc/hosts
192.168.11.30 www.yong.com bbs.yong.com

使用for循环执行,查看访问结果:

# for n in `seq 10`;do curl bbs.yong.com;sleep 2;done
This is BBS.yong.com 1!
This is BBS.yong.com 2!
This is BBS.yong.com 3!
This is BBS.yong.com 1!
This is BBS.yong.com 2!
This is BBS.yong.com 3!
This is BBS.yong.com 1!
This is BBS.yong.com 2!
This is BBS.yong.com 3!
This is BBS.yong.com 1!


3、upstream 下面增加ip_hash;

测试结果如下:保持用户连接,也会导致分配不均。

# for n in `seq 10`;do curl bbs.yong.com;sleep 2;done
This is BBS.yong.com 3!
This is BBS.yong.com 3!
This is BBS.yong.com 3!
This is BBS.yong.com 3!
This is BBS.yong.com 3!
This is BBS.yong.com 3!
This is BBS.yong.com 3!
This is BBS.yong.com 3!
This is BBS.yong.com 3!
This is BBS.yong.com 3!


4、增加一个upstream,单独针对bbs的请求进行负载均衡,并设置权重,配置文件如下:

upstream backend {
    server 192.168.20.10:80 weight=2 max_fails=3 fail_timeout=30s;
    server 192.168.20.11:80 weight=1 max_fails=3 fail_timeout=30s;
}
upstream bbs {
    server 192.168.20.11:80 weight=1 max_fails=3 fail_timeout=30s;
    server 192.168.20.12:80 weight=2 max_fails=3 fail_timeout=30s;
}
server {
    listen 80;
    server_name www.yong.com;
    index index.html;
    location / {
        proxy_pass http://backend;
    }
}
server {
    listen 80;
    server_name bbs.yong.com;
    index index.html;
    location / {
        proxy_pass http://bbs;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $remote_addr;
    }
}

实验结果如下

# for n in `seq 10`;do curl bbs.yong.com;sleep 2;done
This is BBS.yong.com 2!
This is BBS.yong.com 3!
This is BBS.yong.com 3!
This is BBS.yong.com 2!
This is BBS.yong.com 3!
This is BBS.yong.com 3!
This is BBS.yong.com 2!
This is BBS.yong.com 3!
This is BBS.yong.com 3!
This is BBS.yong.com 2!
# for n in `seq 10`;do curl www.yong.com;sleep 2;done
This is LAMP 2!
This is LAMP 1 !
This is LAMP 1 !
This is LAMP 2!
This is LAMP 1 !
This is LAMP 1 !
This is LAMP 2!
This is LAMP 1 !
This is LAMP 1 !
This is LAMP 2!

同理,如果有多台服务器,多个站点可以进行分配、关联对应。

“51cto十周年博客活动”正在进行,你也来参加吧~ 

   活动地址http://51ctoblog.blog.51cto.com/26414/1679643

时间: 2024-10-17 16:36:12

【我的技术我做主】shell脚本:创建函数并指定目录进行下载的相关文章

shell脚本:创建函数并指定目录进行下载

写一个脚本: 1.创建一个函数,能接受两个参数: 1)第一个参数为URL,即可下载的文件:第二个参数为目录,即下载后保存的位置: 2)如果用户给的目录不存在,则提示用户是否创建:如果创建就继续执行,否则,函数返回一个51的错误值给调用脚本: 3)如果给的目录存在,则下载文件:下载命令执行结束后测试文件下载成功与否:如果成功,则返回0给调用脚本,否则,返回52给调用脚本: 题目来源于51cto论坛帖子,参考大神的答案,然后自己完善做出来了,大家有更优秀的方法也不妨写出来. #!/bin/bash

shell脚本第二篇——将指定目录下大于200K的文件移动到/tmp下

shell脚本第二篇--将指定目录下大于200K的文件移动到/tmp下 # vim  /tmp/files.sh #!/bin/bash #将指定目录下大于200K的文件移动到/tmp下 read  -p  "请输入您要将目录下大于200K文件移动的目录路径:" $1 for FILE in `ls  $1` do if [ -f  $FILE ] ; then if [ `ls -l $FILE | awk `{print $5}` -gt 204800 ] ; then mv  $

用shell脚本创建用户

用shell脚本创建20个用户,要求给20个用户指定家目录为/share/home/中,并且给每一个用户随机指定一个密码,最后把这些用户信息记录在日志里! [[email protected] sbin]# vim 2.sh          mkdir -p  /share/home else         mkdir -p  /share/home fi create_user(){ for i in `seq 3 6` ;do         useradd -d /share/home

shell脚本中获取当前所在目录地址

shell脚本中获取当前所在目录如下 #!/bin/bash work_path=$(dirname $0) cd ${work_path} work_path=$(pwd) cd ${work_path}/src 原文地址:https://www.cnblogs.com/zhangshiwen/p/9064161.html

使用linux客户端执行shell脚本创建数据库初始化数据库中文乱码问题

定义了一个shell脚本,可以根据其他的多个sql文件创建数据库,并且使用包含初始化数据的sql文件初始化数据库. 在windows下使用linux客户端连接到linux服务器,执行shell脚本后,发现创建出的数据库有中文乱码. 确定是字符集设置问题.查看数据库,发现字符集设置如下,很多还是 latin1. mysql> show variables like 'character_set_%';+--------------------------+---------------------

工程师技术(五):Shell脚本的编写及测试、重定向输出的应用、使用特殊变量、编写一个判断脚本、编写一个批量添加用户脚本

一.Shell脚本的编写及测 目标: 本例要求两个简单的Shell脚本程序,任务目标如下: 1> 编写一个面世问候 /root/helloworld.sh 脚本,执行后显示出一段话"Hello World!!"   2> 编写一个能输出系统信息的 /root/sysinfo 脚本,执行后依次输出当前红帽系统的版本信息.当前使用的内核版本.当前系统的主机名 方案: 规范Shell脚本的一般组成: 1> #! 环境声明(Sha-Bang)    2> # 注释文本 

Linux编程 20 shell编程(shell脚本创建,echo显示信息)

一概述 前面19章里已经掌握了linux系统和命令行的基础知识,从本章开始继续学习shell脚本的基础知识.在大量编辑shell脚本前,先来学习下一些基本概念. 1.1    使用多个命令 Shell可以让多个命令串起来,一次执行完成,可以把它们放在同一行中,用分号隔开,如下所示: 上面就是一个简单的脚本了,用到了两个bash shell命令,但每次运行之前,都必须在命令提示符下输入整个命令.如果将命令组合成一个简单的文本文件,需要时运行这个文本文件就行了. 1.2    创建shell 脚本文

Linux中的shell脚本编程——函数

概述: 本章节将总结while,for循环语句的特殊用法,在不同的场景当中,更能发挥其功能和价值.除此之外,还会介绍一种特殊的循环语句select语句,实现菜单的作用.最重要的是讲解shell脚本编程中函数的用法.这些内容都要熟练掌握. 一.循环语句的特殊用法: 1.while循环的特殊用法(遍历文件的每一行): □语法:while read line; do 循环体 done < /PATH/FROM/SOMEFILE □意义:依次读取/PATH/FROM/SOMEFILE文件中的每一行,且将

Shell脚本:使用rsync备份文件/目录

本文我们介绍一个shell脚本,用来使用rsync命令将你本地Linux机器上的文件/目录备份到远程Linux服务器上.使用该脚本会以交互的方式实施备份,你需要提供远程备份服务器的主机名/ip地址和文件夹位置.我们使用一个单独的列表文件,在这个文件中你需要列出要备份的文件/目录.我们添加了两个脚本,第一个脚本在每次拷贝完一个文件后询问密码(如果你启用了ssh密钥验证,那么就不会询问密码),而第二个脚本中,则只会提示一次输入密码. 我们打算备份bckup.txt,dataconfig.txt,do