Linux下安装与配置基于nginx的tomcat负载均衡和集群
(通过cookie分发请求)
由于最近项目组一直在搞性能,最近一直在研究HA方面的东东,看了网上很多关于NGINX替代Apache方案,于是自己也决定尝试体验一下。下面是通过网上资料以及自己总结,供大家参考。
第一步:搭建LINUX系统环境(由于家中没有所以用vmware workstation 9安装suse11)。
(1)在用Vmware安装SUSE11环境,如下图:(安装包--openSUSE-11.4-DVD-i586.iso)
(2)安装后的登录页面(里面我已经创建了多个用户):
(3)安装完LINUX系统以后,配置虚拟机网络,使虚拟机内部的系统能够通过主机电脑上网:
(编辑Vmware网络设置,你能看到三种选择)
具体介绍请参考附件《VMWare虚拟机上网设置图详解.doc》,本次使用NAT的方式连接,比较最简单。
(4)安装LINUX系统一些常用包,当时主要是为了安装xmms播放器所需要安装的,也没管那么多,后来网上查看才知道相关用处。
gtk+-2.0.0.tar.gz
glib-2.22.5.tar.gz
pkgconfig-0.18.tar.gz
libgtk-3-0-3.0.0-3.3.i586.rpm
fcitx-4.0.0.tar.gz --- Linux下非常好的小企鹅中文输入法
xmms-1.2.8.tar.gz --- 播放器
QIpmsg --- 安装linux半版飞鸽用于传输资料很方便。
下载地址:
http://rpm.pbone.net/ ------ 经典的rpm包,里面会告诉你包的依赖关系。
http://code.google.com/hosting/
http://www.freedesktop.org/wiki/Software/
在linux上安装rpm包直接点击安装就可以,对于.tar.gz这种源码包一般需要一下步骤:
./configure --- 相关参数配置 (--prefix=/usr/local/ 安装路径)
make --- 编译
make install --- 安装
第二步:创建LINUX用户,安装JDK、TOMCAT以及配置环境变量。
(1)创建用户:
用root用户登录后,执行
a、groupadd bmsys ---- 创建组
b、useradd -d /home/bmsys -g bmsys -s /bin/bash username bmsys ----创建用户,指定初始化目录、组、以及使用的shell。
c、passwd bmsys ---- 修改密码
useradd详解:
useradd [-u UID] [-g initial_group] [-G other_group] -[Mm] [-c 说明栏] [-d home] [-s shell] username
参数:
-u :后面接的是 UID ,是一组数字。直接指定一个特定的 UID 给这个帐号;
-g :后面接的那个群组名称就是我们上面提到的 initial group 啦~
该 group ID (GID) 会被放置到 /etc/passwd 的第四个栏位内。
-G :后面接的群组名称则是这个帐号还可以支援的群组。
这个参数会修改 /etc/group 内的相关资料喔!
-M :强制!不要建立使用者家目录
-m :强制!要建立使用者家目录!
-c :这个就是 /etc/passwd 的第五栏的说明内容啦~可以随便我们设定的啦~
-d :指定某个目录成为家目录,而不要使用预设值;
-r :建立一个系统的帐号,这个帐号的 UID 会有限制 (/etc/login.defs)
-s :后面接一个 shell ,预设是 /bin/bash 的啦~
(2)下载安装包:
jdk-7u10-linux-i586.tar.gz
下载地址: http://download.oracle.com/otn-pub/java/jdk/7u13-b20/jdk-7u13-linux-i586.tar.gz
apache-tomcat-6.0.18.tar.gz
apr-1.4.5.tar.gz
apr-iconv-1.2.1.tar.gz
apr-util-1.3.12.tar.gz
tomcat-native-1.1.24-src.tar.gz (一般tomcat/bin下面都自带的有)
下载地址:http://mirror.bit.edu.cn/apache/tomcat/tomcat-7/v7.0.34/bin/apache-tomcat-6.0.18.tar.gz
http://archive.apache.org/dist/apr/
(3)安装JDK与TOMCAT.:
mv jdk-7u10-linux-i586.tar.gz /home/bmsys/software/
tar -zxvf jdk-7u10-linux-i586.tar.gz
mv jdk-7u10-linux-i586 /home/bmsys/program/java/ ----- JDK安装好了。
mv apache-tomcat-6.0.18.tar.gz /home/bmsys/software/
tar -zxvf apache-tomcat-6.0.18.tar.gz
mv apache-tomcat-6.0.32 /home/bmsys/program/tomcat/ ----- TOMCAT安装好了。
(4)设置环境变量:
cat >>/etc/profile<<EOF
export JAVA_HOME=/home/bmsys/program/java/jdk1.7.0_10
export CLASS_PATH=$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=.:$PATH:$JAVA_HOME/bin
export CATALINA_HOME=/home/bmsys/program/tomcat/apache-tomcat-6.0.18
关于APR理解
APR(Apache portable Run-time libraries,Apache可移植运行库)的目的如其名称一样,主要为上层的应用程序提供一个可以跨越多操作系统平台使用的底层支持接口库。
简介
利用APR本地库提高Tomcat性能
Tomcat可以使用APR来提供超强的可伸缩性和性能,更好地集成本地服务器技术。APR(Apache Portable Runtime)是一个高可移植库,它是Apache HTTP Server 2.x的核心。APR有很多用途,包括访问高级IO功能(例如sendfile,epoll和OpenSSL),OS级别功能(随机数生成,系统状态等等),本地进程管理(共享内存,NT管道和UNIX sockets)。这些功能可以使Tomcat作为一个通常的前台WEB服务器,能更好地和其它本地web技术集成,总体上让Java更有效率作为一个高性能web服务器平台而不是简单作为后台容器。
在产品环境中,特别是直接使用Tomcat做WEB服务器的时候,您应该使用Tomcat Native来提高其性能,详细配置和安装请参考Tomcat文档。
如果没有apr技术,启动tomcat 时出现如下提示:
信 息: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: /usr/java/jdk1.6.0_06/jre/lib/i386/client:/usr/java/jdk1.6.0_06/jre/lib/i386:/usr/java/jdk1.6.0_06/jre/../lib/i386:/usr/java/packages/lib/i386:/lib:/usr/lib
按照官方说明需要:
· APR library
· OpenSSL libraries
openssl 可以用 yum install openssl-devel,apr还是下载*.gz来安装。
apr-1.4.5.tar.gz
apr-iconv-1.2.1.tar.gz
apr-util-1.3.12.tar.gz
两个可以在 http://apr.apache.org/ 找到。
tomcat-native.tar.gz 可以在tomcat/bin目录下找到。
安装 apr
1. # tar zxvf apr-1.4.5.tar.gz
2. # cd apr-1.4.5
3. # ./configure
4. # make
5. # make install
apr默认安装在/usr/local/apr 所以下面安装到其它apr时会用--with-apr指定依赖的的包路径,当然也可以通过--prefix指定安装路径。
安装 apr-iconv
# tar zxvf apr-iconv-1.2.1.tar.gz
# cd apr-iconv-1.2.1
# ./configure --prefix=/usr/local/apr-iconv-1.2.1 --with-apr=/usr/local/apr
# make
# make install
安装 apr-util
# tar zxvf apr-util-1.3.12.tar.gz
# cd apr-util-1.3.12
# ./configure --prefix=/usr/local/apr-util-1.3.12 --with-apr=/usr/local/apr
# make
# make install
安装 tomcat-native
# cd /usr/local/tomcat-6.0.18/bin
# tar zxvf tomcat-native.tar.gz
# cd tomcat-native-1.1.14-src/jni/native
# ./configure --with-apr=/usr/local/apr --with-java-home=/usr/java/jdk1.6.0_11
# make
# make install
设置 apr 的环境变量:这个用的是系统级别的环境变量,配置后所有的用户都可以生效。如果你一开始的环境变量是当前用户的,那你需要把下面的环境变量添加到.bashrc文件中。
# vi /etc/profile
// 后面添加以下内容 目录被改成安装到:/usr/local/apr-1.4.5下面了,不知道什么时候多出来个/usr/local/apr目录。一定要向下面那样指定,不能指定成:/usr/local/apr-1.4.5,否则不启作用
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/apr/lib
//使profile生效,
# source /etc/profile
启动 tomcat 后,看日志:
# bin/startup.sh
# head logs/catalina.out
// 可以看到以下结果:
信息: Loaded APR based Apache Tomcat Native library 1.1.22.
2009-1-13 11:12:51 org.apache.catalina.core.AprLifecycleListener init
信息: APR capabilities: IPv6 [true], sendfile [true], accept filters [false], random [true].
实践过成功,
另外一个配置APR环境变量方式:1.修改 tomcat 的启动 shell ( catalina.sh ),在该文件中加入启动参数: CATALINA_OPTS="-Djava.library.path=/usr/local/apr/lib" 这个没有实践。
记忆深刻的命令:chown [-cfhvR] [--help] [--version] user[:group] file...
user : 新的档案拥有者的使用者 ID
group : 新的档案拥有者的使用者群体(group)
-c : 若该档案拥有者确实已经更改,才显示其更改动作
-f : 若该档案拥有者无法被更改也不要显示错误讯息
-h : 只对于连结(link)进行变更,而非该 link 真正指向的档案
-v : 显示拥有者变更的详细资料
-R : 对目前目录下的所有档案与子目录进行相同的拥有者变更(即以递回的方式逐个变更)
--help : 显示辅助说明
--version : 显示版本
chmod -R 777 指定目录/* ---凡是权限问题 ,只要执行了它绝对好了。
注意:切忌是需要指定目录,不能把根目录 chmod..如果执行了,那么就 完了,系统就崩溃了。
第三部步:安装与配置NGINX。
(1)下载相关安装包:
pcre-8.32.tar.gz
PCRE(Perl Compatible Regular Expressions)是一个Perl库,包括 perl 兼容的正规表达式库.这些在执行正规表达式模式匹配时用与Perl 5同样的语法和语义是很有用的。Boost太庞大了,使用boost regex后,程序的编译速度明显变慢。测试了一下,同样一个程序,使用boost::regex编译时需要3秒,而使用pcre不到1秒。因此改用pcre来解决C语言中使用正则表达式的问题。
zlib-1.2.7.tar.gz --- 为了gzip压缩
下载路径:http://zlib.net/zlib-1.2.7.tar.gz
gperftools-2.0.tar.gz --- 用Tcmalloc 优化nginx
Tcmalloc原理:http://blog.163.com/cp7618@yeah/blog/static/70234777201251345350339/
nginx-1.2.6.tar.gz
官方路径:http://nginx.org/download/nginx-1.2.6.tar.gz
(2)安装pcre、gperftools、nginx:(新建一个nginx用户,在它下面安装nginx以及辅助包)
nginx可以使用各平台的默认包来安装,下面介绍使用源码编译安装,包括具体的编译参数信息。正式开始前,编译环境gcc g++ 开发库之类的需要提前装好,这里默认你已经装好。
ububtu平台可以使用以下指令
apt-get install build-essential
apt-get install libtool
nginx@linux-ihah:~>tar zxvf pcre-8.32.tar.gz
nginx@linux-ihah:~>cd pcre-8.32/
nginx@linux-ihah:~>./configure
nginx@linux-ihah:~>make
nginx@linux-ihah:~>make install
nginx@linux-ihah:~>tar -zxvf zlib-1.2.7.tar.gz
nginx@linux-ihah:~>cd zlib-1.2.7
nginx@linux-ihah:~>./configure
nginx@linux-ihah:~>make
nginx@linux-ihah:~>make install
在学习nginx的性能优化时,网上搜到了"利用TCMalloc优化nginx的性能"和“使用google-perftool优化nginx的性能”的文章。
其实,google-perftools包含四个工具,分别是:TCMalloc、heap-checker、heap-profiler和cpu-profiler,TCMalloc是google-perftools的其中一个工具,用于优化内存分配的效率和速度,帮助在高并发的情况下很好的控制内存的使用。
在mysql 和nginx 性能优化方案中,大多数教程都是使用google-perftools提供的TCMalloc工具,TCMalloc在内存的分配上效率和速度要比malloc高得多。但是,nginx的内存占用其实是很少的,一个进程占用的内存大概只有12M左右,所以google-perftools对nginx的优化效果可能不太明显。
安装配置google-perftools
安装之前需要先确定是64位的还是32位的,如果是64位的OS,需要在安装google-perftools之前安装libunwind库,查看方法:
1.[root@lvs ~]# uname -a 2.Linux lvs.master 2.6.18-164.el5 #1 SMP Tue Aug 18 15:51:54 EDT 2009 i686 i686 i386 GNU/Linux 3.[root@lvs ~]#
这则表示我的环境是32位的环境。所以libunwind的安装方法自己搜吧。
一、安装google-perftools
nginx@linux-ihah:~>tar -zxvf google-perftools-1.7.tar.gz
nginx@linux-ihah:~>cd google-perftools-1.7/
nginx@linux-ihah:~>./configure
nginx@linux-ihah:~>make
nginx@linux-ihah:~>make install
nginx@linux-ihah:~>echo “/usr/local/lib” > /etc/ld.so.conf.d/usr_local_lib.conf
nginx@linux-ihah:~>ldconfig
安装ssl(某些vps默认没装ssl,需要手动安装)
apt-get install openssl
apt-get install libssl-dev
tar zxvf nginx-1.2.6.tar.gz
cd nginx-1.2.6/
./configure
--user=nginx --group=bmsys
--prefix=/home/nginx/program/nginx #(安装路径)
--with-http_stub_status_module
--with-http_ssl_module
--with-http_flv_module
--with-http_gzip_static_module
--with-google_perftools_module
--with-pcre=/home/nginx/program/pcre-8.32 #(源码解压目录)
--with-zlib=/home/nginx/program/zlib-1.2.7 #(源码解压目录)
--add-module=/home/nginx/program/nginx_upstream_jvm_route #(源码解压目录)
make
make install
libtool: compile: unrecognized option `-DHAVE_CONFIG_H'
libtool: compile: Try `libtool --help' for more information.
make[1]: *** [pcrecpp.lo] Error 1
make[1]: Leaving directory `/usr/local/src/pcre-8.32'
make: *** [all] Error 2
解决办法:安装g++,别忘了重新configure
apt-get install g++
apt-get install build-essential
make clean
./configure
make
make: *** No rule to make target `build', needed by `default'. Stop.
./configure: error: SSL modules require the OpenSSL library.
You can either do not enable the modules, or install the OpenSSL library
into the system, or build the OpenSSL library statically from the source
with nginx by using --with-openssl=<path> option.
按照NGINX安装方法或者添加--with-openssl=<path>
cd /usr/local/src
wget http://www.openssl.org/source/openssl-1.0.1c.tar.gz
tar -zxvf openssl-1.0.1c.tar.gz
重新编译
cd ../nginx-1.2.6
../configure --user=nginx
--group=bmsys
--prefix=/home/nginx/program/
--with-http_stub_status_module
--with-http_ssl_module
--with-http_flv_module
--with-http_gzip_static_module
--with-google_perftools_module
--with-pcre=/usr/local/src/pcre-8.32
--with-zlib=/usr/local/src/zlib-1.2.7
--with-openssl=/usr/local/src/openssl-1.0.1c
--add-module=/home/nginx/program/nginx_upstream_jvm_route
make 是用来编译的,它从Makefile中读取指令,然后编译。
make install 是用来安装的,它也从Makefile中读取指令,安装到指定的位置。
configure 命令是用来检测你的安装平台的目标特征的。它定义了系统的各个方面,包括nginx的被允许使用的连接处理的方法,比如它会检测你是不是有CC或GCC,并不是需要CC或GCC,它是个shell脚本,执行结束时,它会创建一个Makefile文件。nginx的configure命令支持以下参数:
--prefix=path 定义一个目录,存放服务器上的文件 ,也就是nginx的安装目录。默认使用 /usr/local/nginx。
--sbin-path=path 设置nginx的可执行文件的路径,默认为 prefix/sbin/nginx.
--conf-path=path 设置在nginx.conf配置文件的路径。nginx允许使用不同的配置文件启动,通过命令行中的-c选项。默认为prefix/conf/nginx.conf.
--pid-path=path 设置nginx.pid文件,将存储的主进程的进程号。安装完成后,可以随时改变的文件名 , 在nginx.conf配置文件中使用 PID指令。默认情况下,文件名 为prefix/logs/nginx.pid.
--error-log-path=path 设置主错误,警告,和诊断文件的名称。安装完成后,可以随时改变的文件名 ,在nginx.conf配置文件中 使用 的error_log指令。默认情况下,文件名 为prefix/logs/error.log.
--http-log-path=path 设置主请求的HTTP服务器的日志文件的名称。安装完成后,可以随时改变的文件名 ,在nginx.conf配置文件中 使用 的access_log指令。默认情况下,文件名 为prefix/logs/access.log.
--user=name 设置nginx工作进程的用户。安装完成后,可以随时更改的名称在nginx.conf配置文件中 使用的 user指令。默认的用户名是nobody。
--group=name 设置nginx工作进程的用户组。安装完成后,可以随时更改的名称在nginx.conf配置文件中 使用的 user指令。默认的为非特权用户。
--with-select_module --without-select_module 启用或禁用构建一个模块来允许服务器使用select()方法。该模块将自动建立,如果平台不支持的kqueue,epoll,rtsig或/dev/poll。
--with-poll_module --without-poll_module 启用或禁用构建一个模块来允许服务器使用poll()方法。该模块将自动建立,如果平台不支持的kqueue,epoll,rtsig或/dev/poll。
--without-http_gzip_module 不编译压缩的HTTP服务器的响应模块。编译并运行此模块需要zlib库。
--without-http_rewrite_module 不编译重写模块。编译并运行此模块需要PCRE库支持。
--without-http_proxy_module 不编译http_proxy模块。
--with-http_ssl_module 使用https协议模块。默认情况下,该模块没有被构建。建立并运行此模块的OpenSSL库是必需的。
--with-pcre=path 设置PCRE库的源码路径。PCRE库的源码(版本4.4 - 8.30)需要从PCRE网站下载并解压。其余的工作是Nginx的./ configure和make来完成。正则表达式使用在location指令和 ngx_http_rewrite_module 模块中。
--with-pcre-jit 编译PCRE包含“just-in-time compilation”(1.1.12中, pcre_jit指令)。
--with-zlib=path 设置的zlib库的源码路径。要下载从 zlib(版本1.1.3 - 1.2.5)的并解压。其余的工作是Nginx的./ configure和make完成。ngx_http_gzip_module模块需要使用zlib 。
--with-cc-opt=parameters 设置额外的参数将被添加到CFLAGS变量。例如,当你在FreeBSD上使用PCRE库时需要使用:--with-cc-opt="-I /usr/local/include。.如需要需要增加 select()支持的文件数量:--with-cc-opt="-D FD_SETSIZE=2048".
--with-ld-opt=parameters 设置附加的参数,将用于在链接期间。例如,当在FreeBSD下使用该系统的PCRE库,应指定:--with-ld-opt="-L /usr/local/lib".
#通过第三方nginx-upstream-jvm-route实现基于JSESSIONID保持会话分发
#upstream myJvmRoute {
#server 192.168.48.128:8080 srun_id=a;
#server 192.168.0.102:8088 srun_id=b;
#jvm_route $cookie_JSESSIONID|sessionid reverse;
#}
upstream test{
server 192.168.0.1:3000;
server 192.168.0.1:3001;
}upstream bakend {
server 192.168.159.10 weight=10
3、ip_hash
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
例如:
upstream resinserver{
ip_hash;
server 192.168.159.10:8080;
server 192.168.159.11:8080;
}
4、fair(第三方)--需要安装Upstream Fair Balancer Module
按后端服务器的响应时间来分配请求,响应时间短的优先分配。
upstream resinserver{
server server1;
server server2;
fair;
}
5、url_hash(第三方)
按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。
例:在upstream中加入hash语句,server语句中不能写入weight等其他的参数,hash_method是使用的hash算法
upstream resinserver{
server squid1:3128;
server squid2:3128;
hash $request_uri;
hash_method crc32;
}
#定义负载均衡设备的Ip及设备状态
upstream resinserver{
ip_hash;
server 127.0.0.1:8000 down;
server 127.0.0.1:8080 weight=2;
server 127.0.0.1:6801;
server 127.0.0.1:6802 backup;
}
在需要使用负载均衡的server中增加
proxy_pass http://resinserver/;
每个设备的状态设置为:
1.down 表示单前的server暂时不参与负载
2.weight 默认为1.weight越大,负载的权重就越大。
3.max_fails :允许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream 模块定义的错误
4.fail_timeout:max_fails次失败后,暂停的时间。
5.backup: 其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻。
nginx支持同时设置多组的负载均衡,用来给不用的server来使用。
client_body_in_file_only 设置为On 可以讲client post过来的数据记录到文件中用来做debug
client_body_temp_path 设置记录文件的目录 可以设置最多3层目录
location 对URL进行匹配.可以进行重定向或者进行新的代理 负载均衡
分别修改为:Tomcat01:<Engine name="Catalina" defaultHost="localhost" jvmRoute="a">Tomcat02:<Engine name="Catalina" defaultHost="localhost" jvmRoute="b">NGINX基于SESSION的upstream负载配置upstream mybmsys {server 192.168.2.88:8080 srun_id=a;server 192.168.2.89:8080 srun_id=b;jvm_route $cookie_JSESSIONID|sessionid reverse;}
#设定查看Nginx状态的地址
location /NginxStatus {
stub_status on;
access_log on;
auth_basic "NginxStatus";
auth_basic_user_file conf/htpasswd;#htpasswd文件的内容可以用apache提供的htpasswd工具来产生。
allow 192.168.48.1/24; #限访问IP来控制访问的IP地址。
deny all;#全部拒绝,除了制定的IP。
}
以上这个配置以后,必须密码输入正确,同时是指定的IP访问。
Active connections: 364
server accepts handled requests
5477919 5477919 17515830
Reading: 10 Writing: 26 Waiting: 328
NginxStatus 显示的内容意思如下:
active connections – 当前 Nginx 正处理的活动连接数。
serveraccepts handled requests -- 总共处理了 5477919 个连接 , 成功创建 5477919 次握手 (证明中间没有失败的 ), 总共处理了 17515830 个请求 ( 平均每次握手处理了 3.2 个数据请求 )。
reading -- nginx 读取到客户端的 Header 信息数。
writing -- nginx 返回给客户端的 Header 信息数。
waiting -- 开启 keep-alive 的情况下,这个值等于 active - (reading + writing),意思就是 Nginx 已经处理完正在等候下一次请求指令的驻留连接。
(5)apache提供的htpasswd工具使用说明
安装Apache核心httpd(只介绍加密工具使用,其它不做介绍):
> wget http://mirrors.hust.edu.cn/apache//httpd/httpd-2.4.9.tar.gz
> tar -zxvf httpd-2.4.9.tar.gz
> cd httpd-2.4.9
> make && make install
安装结束以后,查看最后显示的安装路劲是什么(默认是:/usr/local/apache2),当然了你自己也可以指定。
使用htpasswd命令生成加密文件:
> cd /usr/local/apache2/bin/
> ./htpasswd -cb ./home/nginx/program/nginx/conf/conf/htpasswd minglei 521775
关于htpasswd命令使用说明:
apache htpasswd命令选项参数说明
-c 创建一个加密文件
-n 不更新加密文件,只将apache htpasswd命令加密后的用户名密码显示在屏幕上
-m 默认apache htpassswd命令采用MD5算法对密码进行加密
-d apache htpassswd命令采用CRYPT算法对密码进行加密
-p apache htpassswd命令不对密码进行进行加密,即明文密码
-s apache htpassswd命令采用SHA算法对密码进行加密
-b 在apache htpassswd命令行中一并输入用户名和密码而不是根据提示输入密码
-D 删除指定的用户
apache htpasswd命令用法实例
(1)利用htpasswd命令添加用户
htpasswd -bc ./home/nginx/program/nginx/conf/conf/htpasswd minglei 521775
(2)在原有密码文件中增加下一个用户
htpasswd -b ./home/nginx/program/nginx/conf/conf/htpasswd minglei 521775
(3)如何不更新密码文件,只显示加密后的用户名和密码
htpasswd -nb mignlei 1234 ----查看对用户名和密码加密后的结果。例如:minglei:$apr1$.iyB/i6u$j2p7qpXN5.IwqLnmlqD/m0
(4)利用htpasswd命令删除用户名和密码
htpasswd -D ./home/nginx/program/nginx/conf/conf/htpasswd minglei
(5)利用htpasswd命令修改密码
htpasswd -D ./home/nginx/program/nginx/conf/conf/htpasswd minglei -----提示输入密码
htpasswd -b ./home/nginx/program/nginx/conf/conf/htpasswd minglei 789456 ----直接修改密码为789456
TERM, INT | 快速关闭 |
QUIT | 从容关闭 |
HUP | 重载配置 用新的配置开始新的工作进程 从容关闭旧的工作进程 |
USR1 | 重新打开日志文件 |
USR2 | 平滑升级可执行程序。 |
WINCH | 从容关闭工作进程 |
尽管你不必自己操作工作进程,但是,它们也支持一些信号:
TERM, INT | 快速关闭 |
QUIT | 从容关闭 |
USR1 | 重新打开日志文件 |
启动Nginx
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf停止操作
停止操作是通过向nginx进程发送信号(什么是信号请参阅linux文 章)来进行的步骤1:查询nginx主进程号ps -ef | grep nginx在进程列表里 面找master进程,它的编号就是主进程号了。步骤2:发送信号从容停止Nginx:kill -QUIT 主进程号快速停止Nginx:kill -TERM 主进程号强制停止Nginx:pkill -9 nginx另外, 若在nginx.conf配置了pid文件存放路径则该文件存放的就是Nginx主进程号,如果没指定则放在nginx的logs目录下。有了pid文 件,我们就不用先查询Nginx的主进程号,而直接向Nginx发送信号了,命令如下:kill -信号类型 '/usr/nginx/logs/nginx.pid'
平滑重启如果更改了配置就要重启Nginx,要先关闭Nginx再打开?不是的,可以向Nginx 发送信号,平滑重启。平滑重启命令:kill -HUP 住进称号或进程号文件路径或者使用
/usr/nginx/sbin/nginx -s reload
注意,修改了配置文件后最好先检查一下修改过的配置文件是否正 确,以免重启后Nginx出现错误影响服务器稳定运行。判断Nginx配置是否正确命令如下:nginx -t -c /usr/nginx/conf/nginx.conf或者
/usr/nginx/sbin/nginx -t
平滑升级如果服务器正在运行的Nginx要进行升级、添加或删除模块时,我们需 要停掉服务器并做相应修改,这样服务器就要在一段时间内停止服务,Nginx可以在不停机的情况下进行各种升级动作而不影响服务器运行。步骤1:如 果升级Nginx程序,先用新程序替换旧程序文件,编译安装的话新程序直接编译到Nginx安装目录中。步 骤2:执行命令kill -USR2 旧版程序的主进程号或进程文件名此时旧的Nginx主进程将会把自己的进程文件改名为.oldbin,然后执行新版 Nginx。新旧Nginx会同市运行,共同处理请求。这时要逐步停止旧版 Nginx,输入命令:kill -WINCH 旧版主进程号慢慢旧的工作进程就都会随着任务执行完毕而退出,新版的Nginx的工作进程会逐渐取代旧版 工作进程。此 时,我们可以决定使用新版还是恢复到旧版。不重载配置启动新/旧工作进程kill -HUP 旧/新版主进程号从容关闭旧/新进程kill -QUIT 旧/新主进程号如果此时报错,提示还有进程没有结束就用下面命令先关闭旧/新工作进程,再关闭主进程号:kill -TERM 旧/新工作进程号
<%
%>
<html>
<head>
</head>
<body>
88
<!--server1 这里为 88888;server2 需要改为 99999这样才能区分是否保值会话了 -->
<%out.print(request.getSession()) ;%>
<!--输出session-->
<br />
<%out.println(request.getHeader("Cookie")); %>
<!--输出Cookie-->
</body>
</html>
刷新了N次还都是888888,也就是会话保持补丁起作用了,cookie 值也获得了,为了测试,我又打开了“火狐”(因为session 和 cookie问题所以从新打开别的浏览器)。
显示999999,刷新N次后还是999999。
第五步:性能测试
摘自:http://down.chinaz.com/server/201202/1671_1.htm
目前较为常见的网站压力测试工具有webbench、ab(apache bench)、tcpcopy、loadrunner。
webbench由Lionbridge公司开发,主要测试每秒钟请求数和每秒钟数据传输量,同时支持静态、动态、SSL,部署简单,静动态均可测试。适用于小型网站压力测试(单例最多可模拟3万并发) 。
ab(apache bench)Apache自带的压力测试工具,主要功能用于测试网站每秒钟处理请求个数,多见用于静态压力测试,功能较弱,非专业压力测试工具。
tcpcopy基于底层应用请求复制,可转发各种在线请求到测试服务器,具有分布式压力测试功能,所测试数据与实际生产数据较为接近后起之秀,主要用于中大型压力测试,所有基于tcp的packets均可测试。
loadrunner压力测试界的泰斗,可以创建虚拟用户,可以模拟用户真实访问流程从而录制成脚本,其测试结果也最为逼真模拟最为逼真,并可进行独立的单元测试,但是部署配置较为复杂,需要专业人员才可以。
以webbench为例,来讲解一下网站在上线之前压力测试是如何做的:
安装webbench
> wget http://home.tiscali.cz/~cz210552/distfiles/webbench-1.5.tar.gz
> tar -zxvf webbench-1.5.tar.gz
> cd webbench-1.5
> make && make install
进行压力测试,并发200时。
webbench-c 200-t 60 http://192.168.48.128:8088/Test/index.jsp
参数解释:-c为并发数,-t为时间(秒)
Webbench - Simple Web Benchmark 1.5Copyright(c) Radim Kolar 1997-2004, GPL Open SourceSoftware.
Benchmarking:GET http://192.168.48.128:8088/Test/index.jsp
200 clients, running 60 sec.
Speed=1454 pages/min,2153340 bytes/sec.
Requests:1454 susceed,0 failed.
当并发200时,网站访问速度正常.
并发800时
webbench-c 800-t 60 http://192.168.48.128:8088/Test/index.jsp
Webbench - Simple Web Benchmark 1.5Copyright(c) Radim Kolar 1997-2004, GPL Open SourceSoftware.
Benchmarking:GET http://192.168.48.128:8088/Test/index.jsp
800 clients, running 60 sec.
Speed=1194 pages/min,2057881 bytes/sec.
Requests:1185 susceed,9 failed.
当并发连接为800时,网站访问速度稍慢.
并发1600时
webbench-c 1600-t 60 http://192.168.48.128:8088/Test/index.jsp
Webbench - Simple Web Benchmark 1.5Copyright(c) Radim Kolar 1997-2004, GPL Open SourceSoftware.
Benchmarking:GET http://192.168.48.128:8088/Test/index.jsp
1600 clients, running 60 sec.
Speed=1256 pages/min,1983506 bytes/sec.
Requests:1183 susceed,73 failed.
当并发连接为1600时,网站访问速度便非常慢了.
并发2000时
webbench-c 2000-t 60 http://192.168.48.128:8088/Test/index.jsp
Webbench - Simple Web Benchmark 1.5Copyright(c) Radim Kolar 1997-2004, GPL Open SourceSoftware.
Benchmarking:GET http://192.168.48.128:8088/Test/index.jsp
2000 clients, running 60 sec.
Speed=2154 pages/min,1968292 bytes/sec.
Requests:2076 susceed,78 failed.
当并发2000时,网站便出现"502 Bad Gateway",由此可见web服务器已无法再处理用户访问请求.
总结:
1、压力测试工作应该放到产品上线之前,而不是上线以后。
2、测试时尽量跨公网进行,而不是内网。
3、测试时并发应当由小逐渐加大,比如并发100时观察一下网站负载是多少、打开是否流程,并发200时又是多少、网站打开缓慢时并发是多少、网站打不开时并发又是多少。
4、 应尽量进行单元测试,如B2C网站可以着重测试购物车、推广页面等,因为这些页面占整个网站访问量比重较大。