Como especificar limites de recursos diferentes para instâncias diferentes de um serviço instanciado systemd?

1

Por razões acima do meu nível de pagamento, preciso executar várias instâncias de um servidor de banco de dados em um host físico com um sistema operacional básico. Eu também preciso limitar o uso da memória física de cada instância.

Estou usando um arquivo de unidade de modelo para iniciar algumas dezenas de instâncias. Estou usando EnvironmentFile para especificar diferentes variáveis de ambiente e argumentos de linha de comando para cada instância.

No entanto, também quero poder especificar um limite de memória diferente para cada instância. AFAICT, substituição de variável de ambiente não funciona para opções de limite de recursos como MemoryHigh .

Eu achei que os arquivos drop-in seriam a resposta, mas não consegui um único exemplo de usar arquivos drop-in com um serviço instanciado. Existe alguma maneira de criar um arquivo drop-in para myservice@1 , um arquivo drop-in diferente para myservice@2 , etc?

$ cat /etc/systemd/system/[email protected]

[Unit]
Description=Something
After=syslog.target network.target

[Service]
Type=forking    
EnvironmentFile=/etc/myservice/myservice.%i.env
ExecStart=/usr/bin/myservice $OPTIONS_FROM_ENV
MemoryHigh=4G

[Install]
WantedBy=multi-user.target
    
por twblamer 15.02.2018 / 19:25

1 resposta

1

Acho que encontrei o que estou procurando nesta resposta: link

Basta criar um diretório drop-in com o nome da instância, e você pode substituir as configurações como acontece em um serviço não instanciado.

No exemplo abaixo, instâncias de myservice têm um limite de memória de 4GiB por padrão, mas myservice@1 e myservice@2 têm suas próprias configurações. Funciona bem com o systemd 231 no Fedora 25.

$ cat /etc/systemd/system/[email protected]
[Unit]
Description=Something
After=syslog.target network.target

[Service]
Type=forking    
EnvironmentFile=/etc/myservice/myservice.%i.env
ExecStart=/usr/bin/myservice $OPTIONS_FROM_ENV
MemoryHigh=4G

[Install]
WantedBy=multi-user.target

$ cat /etc/systemd/system/[email protected]/99-memory.conf
[Service]
MemoryHigh=10G

$ cat /etc/systemd/system/[email protected]/99-memory.conf
[Service]
MemoryHigh=20G
    
por 16.02.2018 / 02:15

Tags