环境
1,一共8台服务器,分布在三个不同的地点。为便于管理,采用FRP+某公网主机(假设ip为ipA),对这6台主机分别配置端口为:9911~9919。(9916暂时不可用)。主机的OS均为win10 x64。
2,服务器上时间运行某程序programA。此程序需要根据某些实际情况,不定期修改配置并重启程序。
3,programA可以带参数启动。但启动后,仍然需要借第三方工具再微调下参数。
运维的目标
- 尽量保持程序稳定运行,减少中断;
- 当修改配置文档后,能快速部署新的配置文档,快速切换。
选择主节点
根据负载、服务器性能等因素,选择9901服务器作为主节点,在此服务器上:
- 创建不同版本的配置文档,集中存放于某一个目录下(假设全路径为pathA)。
- 在其上面安装git,对配置文档进行版本化管理。有新增或者修改时,及时提交。
- 安装powergrep,便于快速批量修改配置文档。
所有节点
在全部的机器上,安装openssh server,并启动sshd服务。
配置SSH免密登录
1,在9911上,执行:
ssh-keygen -t rsa
得到id_rsa和id_rsa.pub两个文件。
2,在9911上执行
type id_rsa.pub >> authorized_keys
得到authorized_keys文件。
3,将上一步得到 authorized_keys文件,复制到9912~9919的C:\Users\your_userName\.ssh目录下。(如果没有此目录,则可手动创建,或者执行ssh-keygen后自动创建)
4,在9912~9919上,修改C:\ProgramData\ssh\sshd_config中的内容:
确认以下两行未被注释:
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys#Match Group administrators
# AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys
修改完后执行以下命令,重启sshd服务
net stop sshd && net start sshd
注:
参考:多台WIN10之间的SSH免密登录 - 知乎 不过,测试了一下,PasswordAuthentication no 可以保持其注释状态。
此时从9901应可实现ssh免密登录到9902~9909
配置开机即运行
由于长时间运行服务器,可能会发生自重启的情况。针对这种情况,需要确保系统重启后,能自动启动programA。在全部的机器上:
1,写一个脚本(假设名为scriptA.bat),内容是切换到programA的目录,然后运行程序。
2,运行regedit,在注册表HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run下,新建一个字符串类型的键值,键值的名称任意,键值的数据为脚本的全路径。
参考
Win10添加开机自动运行软件三种方法(亲测可用)_ruanhongbiao的专栏-CSDN博客_win10添加开机启动项
快速部署配置文件
1,写一个脚本,将9911上需要拷贝到9912~9919的文件,依照下列格式,继续复制。
scp -P 9912 local_config_file user_name@ipA:remote_config_file
配置自动登录
运行netplwiz,去掉下图中的勾选框。
注:如果没有此框,打开注册表编辑器,将HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device下的DevicePasswordLessBuildVersion的值,从2改为0。
以管理员身份运行bat
当nvidia的图形驱动程序的版本为457.1时,无需管理员权限便可运行bat。但驱动版本升级到471.96后,运行bat需要管理员权限。否则无法在命令参数中改变风扇速度等会报错。为解决此问题,在自动启动的脚本中,头部添加如下内容:
@echo off
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
if '%errorlevel%' NEQ '0' (
echo 请求管理员权限...
goto UACPrompt
) else ( goto gotAdmin )
:UACPrompt
echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%\getadmin.vbs"
"%temp%\getadmin.vbs"
exit /B
:gotAdmin
参考: