原始方式集群部署ET

环境

Ubuntu 20.04 LTS

.net 6.0.300

前言

要进行一波小规模测试,费不着上高端的自动化部署.就回归原始,用最基础的方式来进行分布式的部署和运维

配置

4C8G 100M带宽 1台 用于日志采集,GM等服务

4C8G 100M带宽 4台 用于软路由,http验权

32C64G 1台.主要逻辑服务器

前期准备

调整最大用户实例(http服务需要不然会报错)

sudo sysctl fs.inotify.max_user_instances=1024

统一设置ssh密钥登录

给所有服务器都设置统一的密钥.方便批量管理.不展开说怎么设了.

ssh-keygen -t rsa -C “xxx@qq.com”
vi /etc/ssh/sshd_config
# PasswordAuthentication yes
RSAAuthentication yes

设置目录权限

选定/home/net作为部署目录.Ubuntu最好设定权限

sudo chown -R ubuntu /home/net

安装.net

sudo wget https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb
sudo rm packages-microsoft-prod.deb
sudo apt-get update; \
  sudo apt-get install -y apt-transport-https && \
  sudo apt-get update && \
  sudo apt-get install -y dotnet-sdk-6.0

安装进程管理程序Supervisor

killasgroup是为了在关闭父进程的时候把子进程也关闭了.不然子进程会残留

sudo apt install supervisor
sudo vi /etc/supervisor/conf.d/DotNetCore.conf
###################
[program:DotNetCore]
command=dotnet Server.App.dll  --AppType=Watcher
directory=/home/net/Bin/
autorestart=false
stderr_logfile=/var/log/DotNetCore.err.log
stdout_logfile=/var/log/DotNetCore.out.log
Environment=DOTNET_CLI_HOME=/temp
user=ubuntu
stopasgroup=true
killasgroup=true
###################
sudo supervisorctl reload

安装rsync用于更新文件

因为源码有保密的要求.所以不能把工程传上去.所以先编译好后再上传目录即可.需要上传的有Bin,StartConfig,Config,Hotfix(把热更文件放到独立目录)

Ubuntu上rsync配置

sudo vi /etc/rsyncd.secrets
###
ubuntu:12345678
###

### 需要更改文件权限否则会报错
sudo chmod 600 /etc/rsyncd.secrets

sudo vi /etc/rsyncd.conf
###
uid = ubuntu
gid = users
port = 12345
use chroot = no
max connections = 100
read only = no
write only = no
log file =/var/log/rsyncd.log
fake super = yes
lock file = rsyncd.lock
[Upload]
path = /home/net/
auth users = ubuntu
secrets file = /etc/rsyncd.secrets
list = yes
###

sudo rsync --daemon

发送端cwRsync配置

rsync.secrets

12345678

然后在项目根目录可以执行命令,例如要更新Bin,就把目录制定为Bin

./Tools/cwRsync/rsync.exe -avz --password-file=./Tools/cwRsync/Config/rsync.secrets  ./Bin ubuntu@xxx.xxx.xxx.xxx::Upload --port=12345

运行

启动

前期准备都做好后.rsync将文件都同步到服务器.然后服务器只需要运行Supervisor即可

sudo supervisorctl restart DotNetCore

热更hotfix

如果只需要更逻辑,先rsync所有服务器hotfix文件.通过GM命令通知所有进程进行热更.

热更配置

先rsync所有服务器Config文件.通过GM命令通知所有进程进行配置的更新(部分或者全量).

停服

GM发起.先给gate发送命令拒绝接受新的连接请求,然后给所有进程发送停服命令,进程根据自己包含的场景进行数据落地的工作.完成后可以关闭进程

扩展

多服务器批量命令

我偏向于工具越少越好.所以在vscode插件里找到了ssh cluster control这个插件.功能不多,但是够用.唯一的难点大概就是开始的配置比较抽象了.需要再setting.json里加配置

{
    "ctrl.cluster.hosts": [
        {
            "host": "xxx",
            "user":"ubuntu",
            "identityFile":"xxx",
        },
             {
            "host": "xxx",
            "user":"ubuntu",
            "identityFile":"xxx",
        },        {
            "host": "xxx",
            "user":"ubuntu",
            "identityFile":"xxx",
        }, 
    ],
}

hosts设置完之后 就可以alt+x然后输入想要批量执行的命令了.还算好用

端口转发

这个比较实用,一般来说我们的数据库服务是不会暴露外网地址的.但是我们又想在windows下比较好用的图形客户端(比如Navicat)去查看数据.就用到这个了

原理

ssh -NnL 主机A端口X:主机C:主机C端口Z username@hostname
# 简单理解为:将对A:X的访问转变成对C:Z的访问

例子

假设我们有

中转服务器A: 外网 123.123.123.123,内网 192.168.0.2

数据库 内网:192.168.0.3

本地有可登录中转服务器A的key: wudikey

我想把本地的27018端口.映射到服务器内网下的数据库27017的端口上.命令如下

ssh -i wudikey -NnL 27018:192.168.0.3:27017  ubuntu@123.123.123.123

现在我们就可以通过本地的27018端口连接到数据库中了.尽情的使用好用的图形界面客户端吧

posted @ 2022-05-25 21:04  Raywang2021  阅读(100)  评论(0)    收藏  举报