记:阿里云ECS迁移填坑

661 阅读3分钟

记录下问题,思考方式

  1. 阿里云华北二北京地区的机房准备迁移,我们的服务器大概是16年买的,正好在迁移的名单里吧,于是收到了阿里的通知,通知也比较简单,大概意思是外网ip不变,如果是用RDS数据库需要切换到混访模式

  2. 预约好迁移时间之后就可以等待重启时间了,重启完毕阿里云发送了一条短信大概是完成了迁移,可以启动服务了

  3. 没想太多,因为java的这个项目比较久远了,所以就开始了部署的流程.

  4. 首先是启动zookeeper的服务,分别进入三个zookeeper客户端里面的bin目录下,分别启动三个zookeeper,命令如下:sh zkServer.sh start,通过sh zkServer.sh status查看状态,一个leader两个follwer就可以了

  5. 然后启动redis数据库,通过 /redis-server & (后台启动)启动服务,通过 redis-cli -h 127.0.0.1 -p 6379 -a '密码' 进入到redis控制台,设置密码命令:CONFIG set requirepass '密码'.设置成功后我们在通过查询命令查询下是否设置成功 查询密码:CONFIG get requirepass

  6. 接下来启动dubbo,通过 ./start.sh命令启动dubbo服务,这时候发现启动失败,查看了下日志,提示是mysql连接超时,首先看了下mysql的服务,没有问题.之后又确认了下密码,发现忘了,哎.于是重新安装了mysql,发现依然是这个错误,想不出为什么了,然后在阿里云上提了个工单,阿里云工单回复问,mysql地址是不是内网的....焕然大悟,然后赶紧看了下 果然是因为之前是内网,这次服务器迁移之后rds和以前的ecs服务器不是内网关系了,导致了连接失败....赶紧更换上线

  7. dubbo成功启动,于是启动消费者consumer,nohup java -jar 'jar文件'.又出现了问题,果然,一路顺风总是很难,查看日志,提示无法找到服务提供者provider找不到,另外还提示了一个内网地址的请求,于是乎想了下这次内网地址变了,于是找项目中内网地址相关的配置,发现只有注释用过这个地址,那为什么会提示这个ip的消费者找不到服务呢,最后搜索google'有一个问题类似,但他是因为使用了vpn,解决办法是修改主机的hosts'文件,白映射的ip修改了,于是我赶紧打开主机的hosts文件,果然是以前的内网ip地址,换了新的项目启动 ok搞定!

  8. app项目ok'了,接下来启动管理后台,官网,一天的时间,搞定了

  9. 晚上app总是挂掉,查看日志redis拿不到连接之类的错误,用redis-cli查看了下当前连接数量是1,所以排除了,然后没有使用nohup命令直接前台启动了服务,观察错误日志: There is insufficient memory for the Java Runtime Environment to continue.Native memory allocation (mmap) failed to map 65536 bytes for committing reserved memory.An error report file with more information is saved as: /home/hs_err_pid22464.log

  10. google了下,说的是内存问题,于是打开阿里云查看了下,内存百分之90多

  11. 于是分析下到底哪里占用了这么多内存,通过命令:ps -aux | sort -k4nr | head 发现了很多之前的任务还在运行如下图:

第四列数据就是每个任务占据的内存比,这么一算大概占用了百分之五十的内存,所以说我们在使用nohup这里命令的时候要了解之关掉端口是没用的,任务还在内存中,找到问题之后通过kill -9 pid 分别杀死这些任务,内存终于恢复正常!!