#!/bin/bash
# BY kerryhu # MAIL:king_819@163.com # BLOG:http://kerry.blog.51cto.com # Please manual operation yum of before Operation.....#yum -y install gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel \
#freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel \ #glib2 glib2-devel bzip2 bzip2-devel ncurses ncurses-devel curl curl-devel e2fsprogs \ #e2fsprogs-devel krb5 krb5-devel libidn libidn-devel openssl openssl-devel openldap \ #openldap-devel nss_ldap openldap-clients openldap-servers一、网络拓扑:
lvs-master: 192.168.9.201
LVS-backup: 192.168.9.202 LVS-VIP: 192.168.9.200web_1: 192.168.9.203
web_2: 192.168.9.204目的:搭建高可用、高性能的jsp集群
二、初始化系统
#init system 系统环境: CentOS 5.5(定制安装) 组件: Base Development Libraries Development Tools Editors Text-based Internet./init_system.sh #此脚本参见
三、LVS+keeplived
#关于LVS+keeplived的配置请参考我的另一篇博文《CentOS5.5环境下布署LVS+keepalived 》
四、nginx、tomcat整合
#config web_1、web_2 #download software cd /opt wget wget wget wget wget wget wget#================================ 1、安装tomcat、JDK =================================
mv apache-tomcat-6.0.32.tar.gz jdk-6u25-linux-i586.bin /usr/local/ tar -zxvf apache-tomcat-6.0.32.tar.gz mv apache-tomcat-6.0.32 tomcat chmod +x jdk-6u25-linux-i586.bin ./jdk-6u25-linux-i586.bin#apr 与 tomcat-native 提供更好的伸缩性、性能和集成到本地服务器技术,如果没有apr技术,启动tomcat 时出现如下提示
#INFO: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: /usr/local/jdk1.6.0_25/jre/lib/i386/client:/usr/local/jdk1.6.0_25/jre/lib/i386:/usr/local/jdk1.6.0_25/jre/../lib/i386:/usr/java/packages/lib/i386:/lib:/usr/librpm -e --nodeps apr-1.2.7-11.el5_3.1
rpm -e --nodeps apr-1.2.7-11.el5_3.1 tar -zxvf apr-1.4.2.tar.gz cd apr-1.4.2 ./configure make;make install cd ../ tar -zxvf apr-util-1.3.9.tar.gz cd apr-util-1.3.9 ./configure --with-apr=/usr/local/apr make;make install cd ../ cp tomcat-native-1.1.20-src.tar.gz /usr/local/tomcat/bin/ cd /usr/local/tomcat/bin tar -zxvf tomcat-native.tar.gz cd ./tomcat-native-1.1.12-src/jni/native/ ./configure --with-apr=/usr/local/apr --with-java-home=/usr/local/jdk1.6.0_25 make;make install#设置环境变量
cat >>/etc/profile<<EOF export JAVA_HOME=/usr/local/jdk1.6.0_25 export CLASS_PATH=$JAVA_HOME/lib:$JAVA_HOME/jre/lib export PATH=.:$PATH:$JAVA_HOME/bin export CATALINA_HOME=/usr/local/tomcat export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/apr/lib EOFsource /etc/profile
#查看java版本
java -version#启动tomcat
/usr/local/tomcat/bin/startup.sh echo "/usr/local/tomcat/bin/startup.sh" >> /etc/rc.local#将tomcat添加到系统服务
cd /opt wget mv jsvc.tar.gz /usr/local/tomcat/bin/ tar -zxvf jsvc.tar.gz cd jsvc-src chmod +x configure ./configure --with-java=/usr/local/jdk1.6.0_25 make cp /usr/local/tomcat/bin/jsvc-src/native/Tomcat5.sh /etc/rc.d/init.d/tomcat chmod +x /etc/rc.d/init.d/tomcatvi /etc/rc.d/init.d/tomcat
#chkconfig: 2345 85 15 #description: apache-tomcat.6 #这两行在#!/bin/sh下面添加 JAVA_HOME=/usr/local/jdk1.6.0_25 CATALINA_HOME=/usr/local/tomcat DAEMON_HOME=/usr/local/tomcat/bin TOMCAT_USER=tomcat CATALINA_BASE=/usr/local/tomcat CATALINA_OPTS="-Djava.library.path=/usr/local/apr/lib" $DAEMON_HOME/jsvc-src/jsvc #有两处需要修改#添加tomcat用户
groupadd tomcat useradd -g tomcat -s /sbin/nologin -M tomcatchown -R tomcat.tomcat /usr/local/tomcat
chkconfig --add tomcat chkconfig --level 2345 tomcat on#http://localhost:8080,如果看到猫的页面即tomcat和jdk安装成功
#新建文件目录/data/www为网站存放目录,设置server.xml文件,在Host name="localhost"处将appBase=的指向路径改为/data/www/test,创建index.jsp至/data/www /test/ROOT,内容为:“My web!” #修改tomcat网站目录 #sed -i 's#appBase="webapps"#appBase="/data/www/test"#' /usr/local/tomcat/conf/server.xml#报错信息:java.lang.IllegalArgumentException: Document base /data/www/truboshop/host-manager does not exist or is not a readable directory
#解决方法:删除conf\Catalina\localhost目录下面的host-manager.xml、manager.xml两个文件#============================= 2、安装Nginx =============================
/usr/sbin/groupadd www /usr/sbin/useradd -g www www -s /sbin/nologin mkdir -p /data/www chmod +w /data/www chown -R www:www /data/wwwtar zxvf pcre-8.12.tar.gz
cd pcre-8.12/ ./configure make;make install cd ../#使用Tcmalloc 优化nginx、mysql
wget tar -zxvf google-perftools-1.7.tar.gz cd google-perftools-1.7/ ./configure make;make installecho "/usr/local/lib" > /etc/ld.so.conf.d/usr_local_lib.conf
/sbin/ldconfig cd ../ tar zxvf nginx-1.0.0.tar.gz cd nginx-1.0.0/ ./configure --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_flv_module --with-http_gzip_static_module --with-google_perftools_module make;make install cd ../mkdir -p /data/logs
chmod +w /data/logs chown -R www:www /data/logs#编辑配置文件
#编辑nginx.config mv /usr/local/nginx/conf/nginx.conf /usr/local/nginx/conf/nginx.conf.bak cat >>/usr/local/nginx/conf/nginx.conf<<EOF user www www; worker_processes 8; error_log /usr/local/nginx/logs/nginx_error.log crit; pid /usr/local/nginx/nginx.pid; #使用Tcmalloc优化nginx性能 google_perftools_profiles /var/tmp/tcmalloc; #Specifies the value for maximum file descriptors that can be opened by this process. worker_rlimit_nofile 65535; #工作模式及连接数上限 events { use epoll; worker_connections 65535; } #设定http服务器,利用它的反向代理功能提供负载均衡支持 http { #设定mime类型 include mime.types; default_type application/octet-stream; #charset gb2312; #设定请求缓冲 server_names_hash_bucket_size 128; client_header_buffer_size 32k; large_client_header_buffers 4 32k; client_max_body_size 300m; sendfile on; tcp_nopush on; keepalive_timeout 60; tcp_nodelay on; server_tokens off; client_body_buffer_size 512k; proxy_connect_timeout 5; proxy_send_timeout 60; proxy_read_timeout 5; proxy_buffer_size 16k; proxy_buffers 4 64k; proxy_busy_buffers_size 128k; proxy_temp_file_write_size 128k; # fastcgi_connect_timeout 300; # fastcgi_send_timeout 300; # fastcgi_read_timeout 300; # fastcgi_buffer_size 64k; # fastcgi_buffers 4 64k; # fastcgi_busy_buffers_size 128k; # fastcgi_temp_file_write_size 128k; gzip on; gzip_min_length 1k; gzip_buffers 4 16k; gzip_http_version 1.1; gzip_comp_level 2; gzip_types text/plain application/x-javascript text/css application/xml; gzip_vary on; #limit_zone crawler $binary_remote_addr 10m;###禁止通过ip访问站点
server{ server_name _; return 404; } server { listen 80; server_name ; index index.html index.htm index.jsp index.do;#设定访问的默认首页地址 root /data/www/shopxx;#设定网站的资源存放路径 #limit_conn crawler 20; if (-d $request_filename) { rewrite ^/(.*)([^/])$ permanent; } #所有jsp的页面均交由tomcat处理 location ~ \.(jsp|jspx|do)?$ { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_pass ;#转向tomcat处理 } location ~ .*\.(htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)$ #设定访问静态文件直接读取不经过tomcat { expires 30d; } location ~ .*\.(js|css)?$ { expires 1h; } #定义访问日志的写入格式 log_format wwwlog '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" $http_x_forwarded_for'; access_log /data/logs/www_nginx.log wwwlog;#设定访问日志的存放路径 } server { listen 80; server_name bbs.kerry.com; index index.html index.htm index.jsp index.do;#设定访问的默认首页地址 root /data/www/jsprun;#设定网站的资源存放路径 #limit_conn crawler 20; if (-d $request_filename) { rewrite ^/(.*)([^/])$ permanent; } #所有jsp的页面均交由tomcat处理 location ~ \.(jsp|jspx|do)?$ { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_pass ;#转向tomcat处理 } location ~ .*\.(htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)$ #设定访问静态文件直接读取不经过tomcat { expires 30d; } location ~ .*\.(js|css)?$ { expires 1h; } #定义访问日志的写入格式 log_format bbslog '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" $http_x_forwarded_for'; access_log /data/logs/bbs_nginx.log bbslog;#设定访问日志的存放路径 } server { listen 80; server_name status.www.kerry.com; location / { stub_status on; access_log off; } } } EOF#检测配置文件
#/usr/local/nginx/sbin/nginx -t#启动nginx
/usr/local/nginx/sbin/nginx echo "/usr/local/nginx/sbin/nginx" >> /etc/rc.local#查看nginx主进程号
#ps -ef | grep "nginx: master process" | grep -v "grep" | awk -F ' ' '{print $2}'#停止nginx
#/usr/local/nginx/sbin/nginx -s stop#平滑重启
#/usr/local/nginx/sbin/nginx -s reload#============================= 3、配置一套java商城系统,进行测试 =============================
cd /opt wget #rar解压 tar -zxvf rarlinux-3.8.0.tar.gz cd rar make install cd /opt unrar x jsprun.rar mv jsprun /data/www/#7z解压
wget tar -jxvf p7zip_9.13_src_all.tar.bz2 cd p7zip_9.13 make;make install 7za x shopxx.7z mv shopxx /data/www/#配置tomcat虚拟主机
vi /usr/local/tomcat/conf/server.xml <Host name="" appBase="/data/www/shopxx" unpackWARs="true" autoDeploy="true"> <Context path="" docBase="."/> <Valve className="org.apache.catalina.valves.AccessLogValve" directory="/data/logs" prefix="www_access_log." suffix=".txt" pattern="common" resolveHosts="false"/> </Host> <Host name="bbs.kerry.com" appBase="/data/www/jsprun" unpackWARs="true" autoDeploy="true"> <Context path="" docBase="."/> <Valve className="org.apache.catalina.valves.AccessLogValve" directory="/data/logs" prefix="bbs_access_log." suffix=".txt" pattern="common" resolveHosts="false"/> </Host>#使用cmake编译安装mysql
cd /opt wget wget tar -zxvf cmake-2.8.4.tar.gz cd cmake-2.8.4 ./configu make;make install/usr/sbin/groupadd mysql
/usr/sbin/useradd -g mysql mysql -s /sbin/nologin mkdir -p /data/mysql/data mkdir -p /data/mysql/binlog mkdir -p /data/mysql/relaylog mkdir -p /data/mysql/mysql chown -R mysql:mysql /data/mysql cd /opt tar zxvf mysql-5.5.10.tar.gz cd mysql-5.5.10/ rm -rf CMakeCache.txt cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql/ -DMYSQL_DATADIR=/data/mysql/data -DWITH_INNOBASE_STORAGE_ENGINE=1 -DMYSQL_TCP_PORT=3306 -DEXTRA_CHARSETS=all -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DMYSQL_UNIX_ADDR=/data/mysql/mysql.sock -DMYSQL_USER=mysql -DWITH_DEBUG=0 make;make install chmod +w /usr/local/mysql chown -R mysql:mysql /usr/local/mysqlcat >>/data/mysql/my.cnf<<EOF
[client] character-set-server = utf8 port = 3306 socket = /data/mysql/mysql.sock[mysqld]
character-set-server = utf8 replicate-ignore-db = mysql replicate-ignore-db = test replicate-ignore-db = information_schema user = mysql port = 3306 socket = /data/mysql/mysql.sock basedir = /usr/local/mysql datadir = /data/mysql/data log-error = /data/mysql/mysql_error.log pid-file = /data/mysql/mysql.pid open_files_limit = 10240 back_log = 600 max_connections = 5000 max_connect_errors = 6000 table_cache = 614 external-locking = FALSE max_allowed_packet = 32M sort_buffer_size = 1M join_buffer_size = 1M thread_cache_size = 300 thread_concurrency = 8 query_cache_size = 512M query_cache_limit = 2M query_cache_min_res_unit = 2k default-storage-engine = MyISAM thread_stack = 192K transaction_isolation = READ-COMMITTED tmp_table_size = 246M max_heap_table_size = 246M long_query_time = 3 log-slave-updates log-bin = /data/mysql/binlog/binlog binlog_cache_size = 4M binlog_format = MIXED max_binlog_cache_size = 8M max_binlog_size = 100M relay-log-index = /data/mysql/relaylog/relaylog relay-log-info-file = /data/mysql/relaylog/relaylog relay-log = /data/mysql/relaylog/relaylog expire_logs_days = 30 key_buffer_size = 256M read_buffer_size = 1M read_rnd_buffer_size = 16M bulk_insert_buffer_size = 64M myisam_sort_buffer_size = 128M myisam_max_sort_file_size = 10G myisam_repair_threads = 1 myisam_recoverinteractive_timeout = 120
wait_timeout = 120skip-name-resolve
master-connect-retry = 10 slave-skip-errors = 1032,1062,126,1114,1146,1048,1396#master-host = 192.168.1.2
#master-user = username #master-password = password #master-port = 3306server-id = 1
innodb_additional_mem_pool_size = 16M
innodb_buffer_pool_size = 512M innodb_data_file_path = ibdata1:256M:autoextend innodb_file_io_threads = 4 innodb_thread_concurrency = 8 innodb_flush_log_at_trx_commit = 2 innodb_log_buffer_size = 16M innodb_log_file_size = 128M innodb_log_files_in_group = 3 innodb_max_dirty_pages_pct = 90 innodb_lock_wait_timeout = 120 innodb_file_per_table = 0#log-slow-queries = /data/mysql/slow.log
#long_query_time = 10[mysqldump]
quick max_allowed_packet = 32M EOF#初始化mysql
/usr/local/mysql/scripts/mysql_install_db -–defaults-file=/data/mysql/my.cnf --basedir=/usr/local/mysql --datadir=/data/mysql/data --user=mysql#利用TCMalloc提高mysql在高并发下的性能
vi /usr/local/mysql/bin/mysqld_safe#在# executing mysqld_safe的下一行,加上:
export LD_PRELOAD=/usr/local/lib/libtcmalloc.so#使用lsof命令查看tcmalloc是否起效
/usr/sbin/lsof -n | grep tcmalloc#设置mysql启动文件
cp support-files/mysql.server /etc/rc.d/init.d/mysqld vi /etc/rc.d/init.d/mysqld basedir=/usr/local/mysql datadir=/data/mysql/datachmod 700 /etc/rc.d/init.d/mysqld
/etc/rc.d/init.d/mysqld start /sbin/chkconfig --add mysqld /sbin/chkconfig --level 2345 mysqld on ln -s /usr/local/mysql/bin/mysql /sbin/mysql ln -s /usr/local/mysql/bin/mysqladmin /sbin/mysqladmin#设置root密码(753951)
/sbin/mysqladmin -u root password 753951#配置库文件搜索路径
echo "/usr/local/mysql/lib/mysql" >> /etc/ld.so.conf /sbin/ldconfig#添加/usr/local/mysql/bin到环境变量PATH中
export PATH=$PATH:/usr/local/mysql/bin#添加mysql管理帐户
#mysql -h localhost -u root -p753951 #msqyl> use mysql; #msqyl> grant all on *.* to identified by '852741'; #msqyl> flush privileges; #msqyl> exit;#创建一个shopxx空库
CREATE DATABASE shopxx DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;#=============================== 4、tomcat优化 ============================
#添加tomcat管理员 #Tomcat 6.x不再提供admin管理工具(Tomcat's administration web application is no longer installed by default,Download and install the "admin" package to use it),要自己安装 cd /opt wget wget wget tar -zxvf apache-tomcat-5.5.26-admin.tar.gz cd apache-tomcat-5.5.26 cp -r conf/Catalina /usr/local/tomcat/conf/ cp -r server /usr/local/tomcat/ cd /opt tar -zxvf commons-modeler-2.0.1.tar.gz cd commons-modeler-2.0.1 cp -r *.jar /usr/local/tomcat/lib/ cd ../ tar -zxvf commons-logging-1.1.1-bin.tar.gz cd commons-logging-1.1.1 cp -r *.jar /usr/local/tomcat/lib/vi /usr/local/tomcat/conf/tomcat-users.xml
#在<tomcat-users> </tomcat-users>中间添加 ,并去掉注释<!-- --> <role rolename="manager"/> <role rolename="admin"/> <user username="admin" password="admin741852" roles="admin,manager"/>vi /usr/local/tomcat/conf/context.xml
<Manager pathname="/manager" debug="0" privileged="true" docBase="/usr/local/tomcat/webapps/manager" />#修改Java虚拟机的虚拟内存,tomcat默认的JVM比较小,查看JVM,打开 ,点击"status",查看JVM选项
#在修改配置文件的时候不知道怎么把manager/WEB-INF/web.xml搞没见了,导致在访问管理页面的时候出现“The requested resource (/manager/status) is not available.” Free memory: 3.25 MB Total memory: 7.62 MB Max memory: 121.81 MBvi /etc/init.d/tomcat
#在CATALINA_OPTS="-Djava.library.path=/usr/local/apr/lib"下方添加一句 JAVA_OPTS="-Xms1024m -Xmx1024m -Xmn256m -Djava.awt.headless=true"#重启一下tomcat,然后再次查看JVM
#Free memory: 953.12 MB Total memory: 998.43 MB Max memory: 998.43 MB#修改tomcat并发连接数,tomcat6.0 默认并发数为200,查看方法和JVM一样,查看http-8080选项
Max threads: 200vi /usr/local/tomcat/conf/server.xml
#修改前: <Connector port="8080" protocol="HTTP/1.1" redirectPort="8443" connectionTimeout="20000" /> #修改后: <Connector port="8080" protocol="HTTP/1.1" maxHttpHeaderSize="8192" useBodyEncodingForURI="true" maxThreads="1000" redirectPort="8443" enableLookups="false" compression="on" compressionMinSize="2048" compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain" connectionTimeout="20000" disableUploadTimeout="true" /> port:Tomcat服务器监听的端口号 maxHttpHeaderSize:Http的Header的最大限制 enableLookups="false" 使用允许DNS查询,通常情况下设置为false redirectPort 服务器正在处理http请求时收到了一个SSL传输请求后重定向的端口号 maxThreads Tomcat使用线程来处理接收的每个请求。这个值表示Tomcat可创建的最大的线程数。 acceptCount 指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,超过这个数的请求将不予处理。 connectionTimeout 网络连接超时,单位:毫秒。设置为0表示永不超时,这样设置有隐患的。通常可设置为30000毫秒。 minSpareThreads Tomcat初始化时创建的线程数。 maxSpareThreads 一旦创建的线程超过这个值,Tomcat就会关闭不再需要的socket线程。 compression="on" 打开压缩功能 compressionMinSize 启用压缩的输出内容大小,这里面默认为2KB compressableMimeType压缩类型#重启tomcat后再次查看
Max threads: 1000本文出自 “” 博客,请务必保留此出处