原始方式集群部署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端口连接到数据库中了.尽情的使用好用的图形界面客户端吧

浙公网安备 33010602011771号