Jac*_*icz 2 linux multithreading real-time system-dependent systemd
出于性能原因,我需要运行应用程序的多个实例,固定到CPU,监听不同的端口.HAProxy TCP负载均衡器位于它们前面以分配流量.
这样做是为了防止任何线程上下文切换并强制执行无共享设计(因此在应用程序中不需要任何类型的锁,假设它是单线程的).
这意味着在具有64个CPU的服务器上,我可能将HAProxy固定到CPU 0,然后将我的应用程序的63个实例分别固定到单独的CPU(1-63).
显然,在启动,重启,关闭等方面进行管理非常复杂.
我想知道是否有任何方法可以使用systemd为我处理这种复杂性.
我知道,如果我将HAProxy定义为一个单元然后声明它需要与之交谈的其他应用程序,它可以解决启动问题,例如
Require=app1,app2,.....,app63
Run Code Online (Sandbox Code Playgroud)
我可以
systemctl start myhaproxy
Run Code Online (Sandbox Code Playgroud)
它首先会启动它需要的63个实例(假设它们在应用程序安装期间被定义为一个单独的系统单元).
但是,我想知道是否还有我可以让它也适用于重启和关机.
所以,如果我这样做:
systemctl stop myhaproxy
Run Code Online (Sandbox Code Playgroud)
我希望它自动关闭它所谈到的应用程序的所有63个实例.
如果我这样做
systemctl restart myhaproxy
Run Code Online (Sandbox Code Playgroud)
然后我希望它首先重新启动Require中列出的所有服务,然后再重新启动它自己.
那可能吗?或者这超出了systemd可以提供的范围?
我建议你创建一个目标(app-all.target例如),你的所有应用程序单元都将WantedBy=app-all.target依赖它.这将确保如果您启动目标,它将启动所有应用程序单元.但是,这不适用于停止和重新启动.为此,您需要PartOf=app-all.target为每个应用程序单元添加依赖项.
此外,我建议您为您的应用程序创建一个模板单元,然后创建63个实例 - 它将使管理更容易(只有1个配置文件,其中包含63个符号链接).这是一个关于模板和systemd 的教程.
从man systemd.unit(缩短):
WantedBy =
当systemctl enable安装此单元时,将在每个列出的单元的.wants /或.requires /目录中创建符号链接.主要结果是当列出的单元启动时将启动当前单元.
PartOf =
配置类似于Requires =的依赖项,但仅限于停止和重新启动单元.当systemd停止或重新启动此处列出的单元时,操作将传播到此单元.请注意,这是单向依赖关系 - 对此单位的更改不会影响列出的单位.
| 归档时间: |
|
| 查看次数: |
3008 次 |
| 最近记录: |