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

来源:互联网 发布:成都大数据产业研究院 编辑:程序博客网 时间:2024/06/04 17:46

  我们科协前两天纳新,做了个纳新网站,一个同学学习JAVA,就用做了个基于JAVA的科协报名网。关于服务器方面,当然就该我这个学运维的搭架了,然后配合测试了。今天,数据库数据也顺利正确导出被使用,也算完成了简单的使命,哈哈。这里就基于他的开发环境,我搭建了Tomcat8.5 + mysql5.7 的linux云服务环境。

 MYSQL部署
       1.mysql安装准备
  1. #检测系统是否已安装mariadb,如有则卸载
  2. rpm -qa | grep mariadb
  3. rpm -e mariadb-libs --nodeps
  4. #为2G以下系统需建立SWAP分区
  5. #创建分区文件,大小 2G
  6. dd if=/dev/zero of=/swapfile bs=1k count=2048000
  7. #生成 swap 文件系统
  8. mkswap /swapfile
  9. #激活 swap 文件
  10. swapon /swapfile
  11. #修改 /etc/fstab 文件,新增如下内容:
  12. echo "/swapfile swap swap defaults 0 0" >>/etc/fstab
       2.mysql安装 
  1. #添加mysql用户组并添加mysql用户(不允许登录)
  2. groupadd mysql
  3. useradd -r -g mysql -s /bin/false -M mysql
  4. #下载mysql源码包
  5. wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.17.tar.gz
  6. #安装编译工具和依赖包
  7. yum install -y cmake make gcc gcc-c++
  8. yum install -y ncurses-devel openssl-devel bison-devel libaio libaio-devel
  9. # boost库安装
  10. # 该步骤可以省略,在cmake阶段添加参数-DDOWNLOAD_BOOST=1 -DWITH_BOOST=/usr/local/boost即可
  11. wget http://sourceforge.net/projects/boost/files/boost/1.59.0/boost_1_59_0.tar.gz
  12. tar -zxvf boost_1_59_0.tar.gz -C /usr/local
  13. mv /usr/local/boost_1_59_0 /usr/local/boost
  14. cd /usr/local/boost
  15. ./bootstrap.sh
  16. ./b2 stage threading=multi link=shared
  17. ./b2 install threading=multi link=shared
  18. #安装编译mysql
  19. cd 
  20. tar -zxvf mysql-5.7.17.tar.gz
  21. cd mysql-5.7.17
  22. #使用cmake工具设置参数,新版的php都从configure改用cmake
  23. cmake \
  24. -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
  25. -DMYSQL_DATADTR=/usr/local/mysql/data \
  26. -DSYSCONFDIR=/etc \
  27. -DMYSQL_USER=mysql \
  28. -DWITH_MYISAM_STORAGE_ENGINE=1 \
  29. -DWITH_INNOBASE_STORAGE_ENGINE=1 \
  30. -DWITH_ARCHIVE_STORAGE_ENGINE=1 \
  31. -DWITH_MEMORY_STORAGE_ENGINE=1 \
  32. -DWITH_READLINE=1 \
  33. -DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \
  34. -DMYSQL_TCP_PORT=3306 \
  35. -DENABLED_LOCAL_INFILE=1 \
  36. -DENABLE_DOWNLOADS=1 \
  37. -DWITH_PARTRTION_STORAGE_ENGINE=1 \
  38. -DEXTRA_CHARSETS=all \
  39. -DDEFAULT_CHARSET=utf8 \
  40. -DDEFAULT_COLLATION=utf8_general_ci \
  41. -DWITH_DEBUG=0 \
  42. -DMYSQL_MAINTAINER_MODE=0 \
  43. -DMITH_SSL:STRING=bundled \
  44. -DWITH_ZLIB:STRING=bundled \
  45. -DDOWNLOAD_BOOST=1 \
  46. -DWITH_BOOST=/usr/local/boost
  47. make && make install
  48. #默认1个线程编译,可使用指定线程数加快编译
  49. #make -j $(grep processor /proc/cpuinfo | wc -l) && make install
  50. #将mysql目录权限给mysql用户
  51. chown -Rf mysql:mysql /usr/local/mysql
  52. #初始化数据库,默认会将库存入默认目录,即/usr/local/mysql/data
  53. /usr/local/mysql/bin/mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
  54. #设置mysql的配置文件
  55. cp /usr/local/mysql/support-files/my-default.cnf /etc/my.cnf
  56. #使用service管理,并设置自启
  57. cp /usr/local/mysql/support-files/mysql.server /etc/rc.d/init.d/mysqld
  58. chmod 755 /etc/rc.d/init.d/mysqld
  59. chkconfig mysqld on
  60. service mysqld start
  61. echo "export PATH=$PATH:/usr/local/mysql/bin" >>/etc/profile
  62. source /etc/profile
  63. #初始化mysql数据库服务 会提示输入mysql的root密码(其他初始化 yes)
  64. mysql_secure_installation
  65. #记住root密码
    二 Tomcat部署
      1.Tomcat安装准备(JDK环境配置)
  1. #建立安装目录
  2. mkdir /usr/java
  3. cd /usr/java
  4. #官网下载地址http://download.oracle.com/otn-pub/java/jdk/8u92-b14/jdk-8u92-linux-x64.rpm
  5. 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
  6. chmod +x jdk-8u92-linux-x64.rpm
  7. rpm -ivh jdk-8u92-linux-x64.rpm
  8. vim /etc/profile
  9. #追加以下信息
  10. export JAVA_HOME=/usr/java/jdk1.8.0_92
  11. export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
  12. export PATH=$PATH:$JAVA_HOME/bin
  13. #立即生效
  14. source /etc/profile
  15. #查看版本信息
  16. java -version
  17. java version "1.8.0_92"
  18. Java(TM) SE Runtime Environment (build 1.8.0_92-b14)
  19. Java HotSpot(TM) 64-Bit Server VM (build 25.92-b14, mixed mode)
       2.Tomcat安装
  1. #官网下载
  2. wget http://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-8/v8.5.15/bin/apache-tomcat-8.5.15.tar.gz
  3. tar -zxvf apache-tomcat-8.5.15.tar.gz
  4. mv apache-tomcat-8.5.15 /usr/local/tomcat
  5. vim /etc/profile
  6. export CATALINA_HOME=/usr/local/tomcat
  7. export PATH=$CATALINA_HOME/bin:$PATH
  8. source /etc/profile
       3.启动脚本(/etc/init.d/tomcat)
  1. # vi /etc/init.d/tomcat
  2. #!/bin/sh
  3. # Tomcat init script for Linux.
  4. #
  5. # chkconfig: 2345 96 14
  6. # description: The Apache Tomcat servlet/JSP container.
  7. # JAVA_OPTS='-Xms64m -Xmx128m'
  8. JAVA_HOME=/usr/java/latest
  9. CATALINA_HOME=/usr/local/tomcat
  10. export JAVA_HOME CATALINA_HOME
  11. case $1 in
  12. start)
  13. exec $CATALINA_HOME/bin/catalina.sh start ;;
  14. stop)
  15. exec $CATALINA_HOME/bin/catalina.sh stop;;
  16. restart)
  17. $CATALINA_HOME/bin/catalina.sh stop
  18. sleep 2
  19. exec $CATALINA_HOME/bin/catalina.sh start ;;
  20. *)
  21. echo "Usage: `basename $0` {start|stop|restart}"
  22. exit 1
  23. ;;
  24. esac
   三 数据库配置
  1. mysql> create database kxweb character set utf8;
  2. mysql> create table kxuser(
  3. snum varchar(11),
  4. sname varchar(255),
  5. ssex varchar(255),
  6. sclass varchar(255),
  7. sid varchar(255) not null,
  8. sphone varchar(255),
  9. semail varchar(255),
  10. sintru varchar(255),
  11. sdept1 varchar(255),
  12. sdept2 varchar(255)
  13. );
  14. 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等待时间,缩短

完整优化文件如下:
  1. vim /etc/sysctl.conf
  2. net.ipv4.tcp_max_tw_buckets = 6000
  3. net.ipv4.ip_local_port_range = 1024 65000
  4. net.ipv4.tcp_tw_recycle = 1
  5. net.ipv4.tcp_tw_reuse = 1
  6. net.ipv4.tcp_syncookies = 1
  7. net.core.somaxconn = 262144
  8. net.core.netdev_max_backlog = 262144
  9. net.ipv4.tcp_max_orphans = 262144
  10. net.ipv4.tcp_max_syn_backlog = 262144
  11. net.ipv4.tcp_synack_retries = 1
  12. net.ipv4.tcp_syn_retries = 1
  13. net.ipv4.tcp_fin_timeout = 1
  14. net.ipv4.tcp_keepalive_time = 30
  15. sysctl -p #立即生效
  1. net.ipv4.tcp_max_tw_buckets #用来设定timewait的数量 默认是180000,这里改为6000
  2. net.ipv4.ip_local_port_range #用来设定允许系统打开的端口范围最小值1024
  3. net.ipv4.tcp_tw_recycle #用来设置启动timewait快速回收。
  4. net.ipv4.tcp_tw_reuse #用来设置开启重用,允许将time-wait sockets重新用于新的tcp连接
  5. net.ipv4.tcp_syncookies #用来开启syn cookies,当出现syn等待队列一处时,启用cookies处理
  6. net.core.somaxconn #默认是128,参数用于调节系统同时发起的tcp连接数,在高并发的请求中,默认的值可能会导致连接超时或者重传,因此,需要结合并发请求数来调节此值。
  7. net.core.netdev_max_backlog #表示当每个网络接口接受数据包的速率比内核处理这些包的速率快时,允许发送到队列的数据包的最大数目。
  8. net.ipv4.tcp_max_orphans #用于设定系统中最多有多少个tcp套接字不被关联到任何一个用户文件句柄上。如果超过这个数字,孤立连接将立即被复位并打印出警告信息。这个限制值是为了防止简单的DOS攻击。不能过分依靠这个限制甚至人为减小这个值,更多的情况下应该增加这个值。
  9. net.ipv4.tcp_max_syn_backlog #用于记录那些尚未收到客户端确认信息的连接请求的最大值。对于有128MB内存的系统而言,次参数默认值是1024,对小内存的系统则是128
  10. net.ipv4.tcp_synack_retries #参数的值决定了内核放弃连接之前发送SYN+ACK包的数量
  11. net.ipv4.tcp_syn_retries #表示在内核放弃简历连接之前发送SYN包的数量
  12. net.ipv4.tcp_fin_timeout #决定了套接字保持在FIN-WAIT-2 状态的时间。默认值是60秒。正确设置这个值非常重要,有时即使一个负载很小的web服务器,也会出现大量的死套接字而产生内存溢出的风险。
  13. net.ipv4.tcp_keepalive_time #表示当keepalive启动的时候,tcp发送keepalive消息的频度。默认值是2(单位是小时)

2.Tomcat优化
1)启动参数优化(cataline.sh)
-server 以生产模式运行
启动内存JVM内存设置:-Xmn128-256m
2)容器server.xml
maxtheard 最大线程数  最大设置成约500,再大性能会下降就要考虑集群
详细设置参考博客:http://blog.csdn.net/lifetragedy/article/details/7708724
3.mysql优化
1)配置文件/etc/my.cnf
1)连接相关
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做负载均衡,实现动静分离


指不定科协哪天发展成庞然大物




阅读全文
0 0
原创粉丝点击