主要原因是tensorflow在centos 6.5环境下配置遇到很多问题,主要是gcc和相关环境的版本问题,因此新购一台阿里云ec2使用centos 7.6版本。原服务器上的webapp(v7和wordpress)需要迁移,大量文件(>300w个)需要迁移。
参考之前一篇centos 6.5的服务器配置记录:Amazon EC2配置步骤和一些问题
一、购买ec2并添加数据盘
过程略。
二、阿里云格式化数据盘
三、安装必要的工具
yum install git
yum install nano
yum install lsof
yum install unzip
四、迁移mysql数据
安装mysql 5.7
https://dev.mysql.com/doc/refman/5.6/en/linux-installation-yum-repo.html
恢复数据库
mysql -uroot mydatabase < myexportedfile.sql
创建用户并授权
grant all privileges ON mydatabase.* TO 'username'@'localhost' identified by 'mypassword' with grant option;
flush privileges;
五、迁移其他服务
安装服务器软件
yum install java-1.8.0-openjdk
yum install httpd
yum install php php-mysql
yum install tomcat
配置jk和ssl
2.4版apache参考这个链接:How do I install mod_jk on Apache 2.4 webserver
修改/etc/crontab定时任务
crontab -e
配置服务自启动
chkconfig mysqld on
chkconfig httpd on
chkconfig tomcat on
六、大量文件迁移
因为原来的数据盘容量100GB,已经转移了50GB到OSS对象存储,因此新购的数据盘容量为60GB。阿里云不支持“数据盘缩容”,且原数据盘由于是包年包月方式无法从原ec2卸载,因此需要先为原数据盘创建一个100GB的镜像,然后购买一个按量付费的数据盘并选择从镜像创建,将这个新数据盘挂在到新ec2下,再用Linux自带的cp
命令(加-a参数以便保留文件属性)将大量文件复制到60GB的数据盘。完成后删除按量付费数据盘和100GB镜像。
实测cp
命令一开始速度较低(约300KB/s,通过多次执行du命令手工计算),可能是阿里云新购数据盘需要预热过程的原因,1小时后逐渐上升到接近1MB/s,4小时后达到8MB/s。
这次没有来得及尝试lsyncd+rsync的方案,从网上资料看,对处理海量小文件效率比较高。
安装miniconda(根据系统自带python版本选择miniconda2或miniconda3)
yum install bzip2
wget https://repo.anaconda.com/miniconda/Miniconda2-latest-Linux-x86_64.sh
bash Miniconda2-latest-Linux-x86_64.sh
source ~/.bashrc
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
七、安装tensorflow
conda create --name tensorflow python=3.5.2
source activate tensorflow
pip install tensorflow
从二进制包安装的tensorflow不支持CPU扩展指令集,例如阿里云ec2支持AVX2, FMA,因此如果要用CPU最好编译源代码安装(用GPU的可以忽略),方法见官方安装文档。
这里需要注意一下,按官方安装文档安装的bazel是最新版(0.22),可能不支持某些历史版本的tensorflow(1.12),需要下载历史版本bazel)。实际上在安装文档下方有tensorflow和bazel版本对照表,可以查到tensorflow 1.12对应bazel 0.15.9,bazel安装包下载地址在https://github.com/bazelbuild/bazel/releases 。
八、迁移后发现的问题
1、tomcat日志文件catalina.out里没有内容
tomcat6时catalina.out
里有webapp用log4j输出的信息,到tomcat7里没有了,catalina.out
只有28个字节。原因猜测可能是tomcat6和tomcat7的缺省行为不一样。查看了此webapp下的log4j.properties
(在WEB-INF/classes目录下),配置的是只输出到console,在tomcat7的server.xml的context
里添加swallowOutput="true"
后,localhost_2019-02-20.log里可以看到webapp输出的信息了,但格式不好内容不够紧凑。
但查资料发现swallowOutput这个属性的问题比较多,所以改为在webapp的log4j.properties
里指定输出到文件,但文件路径纠结了一会儿:用相对路径发现无法生成日志文件,可能是权限原因(没有深究),所以仿照tomcat7自带的logging.properties
文件,使用${catalina.base}/logs
前缀:
log4j.rootLogger=INFO, console
log4j.appender.A1=org.apache.log4j.DailyRollingFileAppender
log4j.appender.A1.File=${catalina.base}/logs/v7.log
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=[%p][%d{yyyy-MM-dd HH:mm:ss}] %m%n
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.Target=System.out
log4j.appender.console.Encoding=GBK
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=[%p][%d{yyyy-MM-dd HH:mm:ss}] %m%n
2、mysql里部分查询变慢
待解决