記一次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%,循序漸進,最終把全部流量切到新主機。

最後,服務遷移繁瑣複雜,容器化會是一個更好的選擇

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