记一次Node线上服务迁移

在这里插入图片描述

原有的Node服务,需要迁移到新的主机上,故需要准备一套新的环境,以及对应的迁移方案。

Node安装

手动安装

下载地址: https://nodejs.org/en/download/
选择:Linux Binaries (x64) 右键复制下载链接

# 下载到机器上,放在/opt目录
[work@40-14-22 opt]$ wget https://nodejs.org/dist/v12.16.2/node-v12.16.2-linux-x64.tar.xz
# 解压
[work@40-14-22 opt]$ tar -xvf node-v12.16.2-linux-x64.tar.xz
# 重命名
[work@40-14-22 opt]$ mv node-v12.16.2-linux-x64 nodejs

# 添加软链让node、npm命令能够全局访问(需要 ROOT权限)
[root@40-14-22 opt]# ln -s /opt/nodejs/bin/node  /usr/local/bin/
[root@40-14-22 opt]# node -v
v12.16.2

[root@40-14-22 opt]# ln -s /opt/nodejs/bin/npm /usr/local/bin/
[root@40-14-22 opt]# npm -v
6.14.4

使用NVM安装

# 安装NVM:https://github.com/nvm-sh/nvm
wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh | bash
# 安装Node
nvm install v12.16.3

使用NVM的好处在于可以管理Node版本,同一机器上可灵活切换不同Node版本,一键安装较方便

NVM常用命令

  • nvm install v12.16.3:安装指定版本的Node
  • nvm use v12.16.2:使用指定版本的Node
  • nvm ls: 查看当前使用的Node版本
  • nvm -h: 查看帮助文档

运行环境准备

安装PM2

# 全局安装
[root@40-14-22 opt]# npm install pm2 -g
# 如果不支持全局使用,需配置软链
[root@40-14-22 bin]# ln -s /opt/nodejs/lib/node_modules/pm2/bin/pm2 /usr/local/bin/

日志分割

官方文档:https://www.npmjs.com/package/pm2-logrotate

# 安装pm2-logrotate
[work@40-14-22 log]$ pm2 install pm2-logrotate
# 设置超过1G分割
pm2 set pm2-logrotate:max_size 1G
# 设置最多保存200个日志文件
pm2 set pm2-logrotate:retain 200
# 是否通过gzip压缩日志
pm2 set pm2-logrotate:compress false
pm2 set pm2-logrotate:dateFormat YYYY-MM-DD_HH-mm-ss
pm2 set pm2-logrotate:workerInterval 30
# 每天晚上23:59:30分割
pm2 set pm2-logrotate:rotateInterval '30 59 23 * * *'
pm2 set pm2-logrotate:rotateModule true

设置完成后可以通过pm2 conf pm2-logrotate查看设置的是否正确

[work@40-14-22 .pm2]$ pm2 conf pm2-logrotate
Module: pm2-logrotate
$ pm2 set pm2-logrotate:max_size 1G
$ pm2 set pm2-logrotate:retain 200
$ pm2 set pm2-logrotate:compress false
$ pm2 set pm2-logrotate:dateFormat YYYY-MM-DD_HH-mm-ss
$ pm2 set pm2-logrotate:workerInterval 30
$ pm2 set pm2-logrotate:rotateInterval 0 0 * * *
$ pm2 set pm2-logrotate:rotateModule true
Module: module-db-v2
$ pm2 set module-db-v2:pm2-logrotate [object Object]

安装Git

安装git是为了让pm2部署时能够从仓库中拉取代码,并部署

安装

[root@40-14-22 ~]# yum install git

配置公钥

拷贝机器的公钥串(当前用户的.ssh目录下的.pub文件内容),粘贴到公共的gitlab下的授权下即可;目的是允许机器拉取gitlab仓库中的私有代码

# 生成公钥-一直回车即可
[work@40-14-22 .ssh]$ ssh-keygen -t rsa

最好使用公共账号,不要使用个人账号

如不配置ssh,pm2拉代码的时候会提示如下无权限错误
在这里插入图片描述

服务器授信

在这里插入图片描述

部署机与服务器

目的: 部署机可免密访问目标机

编辑目标机.ssh目录下的authorized_keys文件,粘贴保存部署机上.ssh目录下.pub文件内容即可

vim快捷键:https://www.cnblogs.com/junwen5599/p/9996873.html

服务器与Gitlab服务器

向服务器的known_hosts中新增Gitlab服务器的公钥

缺少配置在部署时会报如下错误

在这里插入图片描述

其他

查看Linux内核版本

[work@37-14-42 log]$ uname -a
Linux 37-14-42 2.6.32-573.22.1.el6.x86_64 #1 SMP Wed Mar 23 03:35:39 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux

查看centos版本

[work@37-14-42 log]$ cat /etc/redhat-release
CentOS release 6.5 (Final)

在centos6上安装最新的Node12会报如下错误

[work@40-31-60 ~]$ node -v
node: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.14' not found (required by node)
node: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.18' not found (required by node)
node: /usr/lib64/libstdc++.so.6: version `CXXABI_1.3.5' not found (required by node)
node: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.15' not found (required by node)
node: /lib64/libc.so.6: version `GLIBC_2.16' not found (required by node)
node: /lib64/libc.so.6: version `GLIBC_2.17' not found (required by node)
node: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by node)

原因为gcc版本过低,要么升级gcc,要么系统升级到centos7

建议不要折腾,在centos6上升级gcc版本,耗力费时,可能还会存在版本匹配问题;最好选择一步到位升级系统到centos7

迁移方案

测试验证

服务器环境准备好后,接下来就是按照线上的部署流程在新服务器上部署Node服务。

此时,由于没有经过验证,不能够直接让外网流量进来;另外,线上服务环境与公司内网环境一般也是隔离的,那么如何才能请求到新的服务验证新服务是否可用呢?

这种情况,可以借助部署机,部署机比较特殊,既可以访问内网的gitlab服务拉取代码,又可以把拉取到的代码部署到线上环境,可以部署机为跳板访问线上新的Node服务,在内网环境验证服务是否可用。

具体可参见这篇文章:通过Nginx解决网络隔离实践记录

切流量

当验证完服务正常后,接下来就是切流量操作了,可以采用如下两种方案

  • 把线上某一台机器的流量切到新服务上
  • 把线上流量的10%切到新的服务上

流量进来后,观察服务器的各项参数是否有异常,观察Node服务的日志监控是否有异常上报。

运行一段时间无异常,再切50%,循序渐进,最终把全部流量切到新主机。

最后,服务迁移繁琐复杂,容器化会是一个更好的选择

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章