您的位置:首页 > 运维架构 > Tomcat

Tomcat+Mysql web环境搭建 科协纳新网站以及优化设想

2017-06-08 22:28 148 查看
  我们科协前两天纳新,做了个纳新网站,一个同学学习JAVA,就用做了个基于JAVA的科协报名网。关于服务器方面,当然就该我这个学运维的搭架了,然后配合测试了。今天,数据库数据也顺利正确导出被使用,也算完成了简单的使命,哈哈。这里就基于他的开发环境,我搭建了Tomcat8.5+ mysql5.7 的linux云服务环境。一 MYSQL部署       1.mysql安装准备
#检测系统是否已安装mariadb,如有则卸载
rpm -qa | grep mariadb
rpm -e mariadb-libs --nodeps
#为2G以下系统需建立SWAP分区
#创建分区文件,大小 2G
dd if=/dev/zero of=/swapfile bs=1k count=2048000
#生成 swap 文件系统
mkswap /swapfile
#激活 swap 文件
swapon /swapfile
#修改 /etc/fstab 文件,新增如下内容:
echo "/swapfile swap swap defaults 0 0" >>/etc/fstab
       2.mysql安装 
#添加mysql用户组并添加mysql用户(不允许登录)
groupadd mysql
useradd -r -g mysql -s /bin/false -M mysql
#下载mysql源码包
wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.17.tar.gz[/code] 
#安装编译工具和依赖包
yum install -y cmake make gcc gcc-c++
yum install -y ncurses-devel openssl-devel bison-devel libaio libaio-devel
# boost库安装
# 该步骤可以省略,在cmake阶段添加参数-DDOWNLOAD_BOOST=1 -DWITH_BOOST=/usr/local/boost即可
wget http://sourceforge.net/projects/boost/files/boost/1.59.0/boost_1_59_0.tar.gz[/code] 
tar -zxvf boost_1_59_0.tar.gz -C /usr/local
mv /usr/local/boost_1_59_0 /usr/local/boost
cd /usr/local/boost
./bootstrap.sh
./b2 stage threading=multi link=shared
./b2 install threading=multi link=shared
#安装编译mysql
cd 
tar -zxvf mysql-5.7.17.tar.gz
cd mysql-5.7.17
#使用cmake工具设置参数,新版的php都从configure改用cmakecmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADTR=/usr/local/mysql/data \
-DSYSCONFDIR=/etc \
-DMYSQL_USER=mysql \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_MEMORY_STORAGE_ENGINE=1 \
-DWITH_READLINE=1 \
-DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \
-DMYSQL_TCP_PORT=3306 \
-DENABLED_LOCAL_INFILE=1 \
-DENABLE_DOWNLOADS=1 \
-DWITH_PARTRTION_STORAGE_ENGINE=1 \
-DEXTRA_CHARSETS=all \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_DEBUG=0 \
-DMYSQL_MAINTAINER_MODE=0 \
-DMITH_SSL:STRING=bundled \
-DWITH_ZLIB:STRING=bundled \
-DDOWNLOAD_BOOST=1 \
-DWITH_BOOST=/usr/local/boost
make && make install#默认1个线程编译,可使用指定线程数加快编译#make -j $(grep processor /proc/cpuinfo | wc -l) && make install#将mysql目录权限给mysql用户chown -Rf mysql:mysql /usr/local/mysql#初始化数据库,默认会将库存入默认目录,即/usr/local/mysql/data/usr/local/mysql/bin/mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data#设置mysql的配置文件cp /usr/local/mysql/support-files/my-default.cnf /etc/my.cnf#使用service管理,并设置自启cp /usr/local/mysql/support-files/mysql.server /etc/rc.d/init.d/mysqld
chmod 755 /etc/rc.d/init.d/mysqld
chkconfig mysqld on
service mysqld start
echo "export PATH=$PATH:/usr/local/mysql/bin" >>/etc/profile
source /etc/profile
#初始化mysql数据库服务 会提示输入mysql的root密码(其他初始化 yes)
mysql_secure_installation
#记住root密码
    二 Tomcat部署      1.Tomcat安装准备(JDK环境配置)
#建立安装目录
mkdir /usr/java
cd /usr/java
#官网下载地址http://download.oracle.com/otn-pub/java/jdk/8u92-b14/jdk-8u92-linux-x64.rpm
wget -c --no-check-certificate --no-cookie --header "Cookie: s_nr=1420682671945; s_cc=true; oraclelicense=accept-securebackup-cookie; gpw_e24=http%3A%2F%2Fwww.oracle.com%2Ftechnetwork%2Fjava%2Fjavase%2Fdownloads%2Fjdk7-downloads-1880260.html;s_sq=%5B%5BB%5D%5D" http://download.oracle.com/otn-pub/java/jdk/8u92-b14/jdk-8u92-linux-x64.rpm[/code] 
chmod +x jdk-8u92-linux-x64.rpm
rpm -ivh jdk-8u92-linux-x64.rpm
vim /etc/profile
#追加以下信息
export  JAVA_HOME=/usr/java/jdk1.8.0_92
export  CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export  PATH=$PATH:$JAVA_HOME/bin
#立即生效
source /etc/profile
#查看版本信息
java -version
java version "1.8.0_92"
Java(TM) SE Runtime Environment (build 1.8.0_92-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.92-b14, mixed mode)
       2.Tomcat安装
#官网下载
wget http://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-8/v8.5.15/bin/apache-tomcat-8.5.15.tar.gz[/code] 
tar -zxvf apache-tomcat-8.5.15.tar.gz
mv apache-tomcat-8.5.15 /usr/local/tomcat
vim /etc/profile
export CATALINA_HOME=/usr/local/tomcat
export PATH=$CATALINA_HOME/bin:$PATH
source /etc/profile
       3.启动脚本(/etc/init.d/tomcat)
# vi /etc/init.d/tomcat
#!/bin/sh
# Tomcat init script for Linux.
#
# chkconfig: 2345 96 14
# description: The Apache Tomcat servlet/JSP container.
# JAVA_OPTS='-Xms64m -Xmx128m'
JAVA_HOME=/usr/java/latest
CATALINA_HOME=/usr/local/tomcat
export JAVA_HOME CATALINA_HOME
case $1 in
start)
exec $CATALINA_HOME/bin/catalina.sh start ;;
stop)
exec $CATALINA_HOME/bin/catalina.sh stop;;
restart)
$CATALINA_HOME/bin/catalina.sh stop
sleep 2
exec $CATALINA_HOME/bin/catalina.sh start ;;
*)
echo "Usage: `basename $0` {start|stop|restart}"
exit 1
;;
esac
   三 数据库配置
mysql> create database kxweb character set utf8;
mysql> create table kxuser(
snum varchar(11),
sname varchar(255),
ssex varchar(255),
sclass varchar(255),
sid varchar(255) not null,
sphone varchar(255),
semail varchar(255),
sintru varchar(255),
sdept1 varchar(255),
sdept2 varchar(255)
);
mysql> grant ALL on kxweb.* to kxadmin@localhost identified by 'kexiewojia2017';
防火墙:8080端口要开启(我在tomcat中把端口重定义为80端口,所以我防火墙开启的是80端口)遇到问题: 当时遇到了一个问题,查找一段时间才解决,就是把我同学把web工程打包后,我上传至服务器,一直报错。开始以为环境我配置的问题。后来才找到原因是tomcat缺失standard.jar,jstl.jar包,他myeclipse10环境默认是有这两个包的,所以他工程到处,我放到服务器,而工程中没有,后在WEB-INF目录下的lib文件夹导入jstl.jar和standard.jar两个jar包,解决问题。mysql数据库表单转换excel导出:   select * into outfile '/tmp/file.xls' from tables; #file.xls导出文件夹一定要有权限(建议到到/tmp下)    iconv -futf8 -tgb2312 -ofile1.xls file.xls # 转码(默认utf8一般需转换为gb2312)   注:如到处报错:则需在配置文件[mysqld]下加入secure_file_priv=/tmp/关于一些问题和优化设想:  因为我们科协纳新报名的人员一般也就200人,所以,基本上不用考虑到出现并发过高或性能不够,不过做为学习者,就试着考虑下当时搭建网站环境如何能做的更好。   先考虑下,如何利用用现有的资源做优化,也就是这个系统本身做些优化。现在的架构如下:1.系统内核优化:系统优化基本围绕的TCP连接,主要有以下参数ip_local_port_range ip端口连接范围net.core.somaxconn tcp最大允许连接数net.ipv4.tcp_max_tw_buckets tcp连接最大允许多少的连接等待,可小tcp_tw_recyle tcp连接tw时是否允许快速回收tcp_tw_reuse 是否允许等待sockets重新连接tcp_max_synack_retries tcp_max_syn_retries 服务器最大回包次数,过后断开连接tcp_fin_timeout  fin_wait_2等待时间,缩短完整优化文件如下:
vim /etc/sysctl.conf
net.ipv4.tcp_max_tw_buckets = 6000
net.ipv4.ip_local_port_range = 1024 65000net.ipv4.tcp_tw_recycle = 1net.ipv4.tcp_tw_reuse = 1net.ipv4.tcp_syncookies = 1net.core.somaxconn = 262144net.core.netdev_max_backlog = 262144net.ipv4.tcp_max_orphans = 262144net.ipv4.tcp_max_syn_backlog = 262144net.ipv4.tcp_synack_retries = 1net.ipv4.tcp_syn_retries = 1net.ipv4.tcp_fin_timeout = 1net.ipv4.tcp_keepalive_time = 30sysctl -p #立即生效
net.ipv4.tcp_max_tw_buckets #用来设定timewait的数量 默认是180000,这里改为6000
net.ipv4.ip_local_port_range #用来设定允许系统打开的端口范围最小值1024
net.ipv4.tcp_tw_recycle #用来设置启动timewait快速回收。
net.ipv4.tcp_tw_reuse #用来设置开启重用,允许将time-wait sockets重新用于新的tcp连接
net.ipv4.tcp_syncookies #用来开启syn cookies,当出现syn等待队列一处时,启用cookies处理
net.core.somaxconn #默认是128,参数用于调节系统同时发起的tcp连接数,在高并发的请求中,默认的值可能会导致连接超时或者重传,因此,需要结合并发请求数来调节此值。
net.core.netdev_max_backlog #表示当每个网络接口接受数据包的速率比内核处理这些包的速率快时,允许发送到队列的数据包的最大数目。
net.ipv4.tcp_max_orphans  #用于设定系统中最多有多少个tcp套接字不被关联到任何一个用户文件句柄上。如果超过这个数字,孤立连接将立即被复位并打印出警告信息。这个限制值是为了防止简单的DOS攻击。不能过分依靠这个限制甚至人为减小这个值,更多的情况下应该增加这个值。
net.ipv4.tcp_max_syn_backlog #用于记录那些尚未收到客户端确认信息的连接请求的最大值。对于有128MB内存的系统而言,次参数默认值是1024,对小内存的系统则是128
net.ipv4.tcp_synack_retries #参数的值决定了内核放弃连接之前发送SYN+ACK包的数量
net.ipv4.tcp_syn_retries #表示在内核放弃简历连接之前发送SYN包的数量
net.ipv4.tcp_fin_timeout #决定了套接字保持在FIN-WAIT-2 状态的时间。默认值是60秒。正确设置这个值非常重要,有时即使一个负载很小的web服务器,也会出现大量的死套接字而产生内存溢出的风险。
net.ipv4.tcp_keepalive_time #表示当keepalive启动的时候,tcp发送keepalive消息的频度。默认值是2(单位是小时)
2.Tomcat优化1)启动参数优化(cataline.sh)-server 以生产模式运行启动内存JVM内存设置:-Xmn128-256m2)容器server.xmlmaxtheard 最大线程数  最大设置成约500,再大性能会下降就要考虑集群详细设置参考博客:http://blog.csdn.net/lifetragedy/article/details/77087243.mysql优化1)配置文件/etc/my.cnf1)连接相关max_connection 最大连接max_connecterrors 安全计数值,防暴力破解2)数据包缓存设置maxallowedpacket 限制server允许最大通信数据包大小keybuffersize 缓存区大小...3)日志事务innodblogfile_size 数据日志大小 (大性能好,故障恢复慢)innodbbuffer_size 日志缓存大小innodbflushlogattrx_commit 事务执行日志缓存实时性(0默认写完直接缓存 2定时缓存)2)软件优化引擎选择:MyISAM:索引顺序访问,全文索引,表级锁,不支持外键。  存储性能好InnoDB:事务型存储,支持外键,支持回滚,崩溃恢复,行锁   事务操作方面 SELECT *避免使用where ,order by 常用参数加索引NOT NULL 填充数据库(NULL占有较大空间)3)硬件和架构SSD ,分布缓存 分表,分库 读写分离考虑下如果我们科协某天很牛逼,访问量迅速增长,架构nginx做负载均衡,实现动静分离指不定科协哪天发展成庞然大物
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  tomcat web mysql