xinetd를 사용한 systemd "소켓 활성화"

xinetd를 사용한 systemd "소켓 활성화"

나는 사용 xinetd하고 내 목적에 적합합니다. 그러나 최근 systemd에 "소켓 활성화"라는 기능이 내장되어 있다는 사실을 발견했습니다.

이 둘은 매우 비슷해 보이지만 systemd는 "공식적"이므로 더 나은 선택인 것 같습니다.

하지만 사용하기 전에는 정말 똑같을까요? 어떤 차이점을 알고 있어야 합니까?

예를 들어, 첫 번째 요청에서 도킹된 서비스를 시작하고 싶습니다. 첫 번째 아이디어는 xinetd를 사용하는 것입니다. 그러나 소켓 활성화가 더 좋고/빠르고/더 안정적입니까?

답변1

xinetd별도로 고려할 때 시스템 소켓 활성화가 활성화보다 훨씬 낫다고 생각하지 않습니다. 후자도 안정적이고 더 오래되었습니다. 소켓 활성화는 서비스 분리에 있어서 매우 흥미롭습니다. 이를 통해 서비스가 통신이 필요한 경우에도 서비스를 병렬로 시작할 수 있으며 서비스를 독립적으로 다시 시작할 수 있습니다.

-style 활성화를 지원하는 서비스가 있는 경우 xinetd소켓 활성화와 함께 사용할 수 있습니다..socket설명하다with 는 Accept=true와 같은 방식으로 동작합니다 xinetd. .service서비스를 설명하는 파일 도 필요합니다 . 시스템 소켓 활성화의 모든 이점을 누리려면 서비스를 제공하는 데몬의 지원이 필요합니다. 바라보다이 주제에 대한 블로그 게시물.

내 조언은 "고장나지 않았다면 고치지 마세요"라는 경향이 있지만 xinetdsystemd 기반 서비스를 변환하려는 경우 이는 확실히 가능합니다.

답변2

xinetd또는 를 사용하여 소켓을 활성화할 수 있으며 systemd둘 다 작동합니다. 개인적으로 xinetd모든 것이 하나의 파일에 있기 때문에 사용하기가 더 쉽다고 생각하지만 systemd, 특히 여러 주소를 수신하고 IP 소켓 문자 대신 소켓을 UNIX 소켓으로 전달하는 것이 더 유연하기 때문에 사용됩니다.

다음은 TCP 연결을 MySQL 파일 소켓으로 전달하는 데 사용하는 예입니다.

/etc/systemd/system/mysql-proxy.service

[Unit]                                                  
Description=MySql Proxy Service
Requires=mysql-proxy.socket

[Service]
Environment=MYSQL_PROXY_TARGET=/var/run/mysql/mysql.sock
EnvironmentFile=-/etc/sysconfig/mysql-proxy
ExecStart=/usr/lib/systemd/systemd-socket-proxyd ${MYSQL_PROXY_TARGET}

/etc/systemd/system/mysql-proxy.socket

[Unit]                                                  
Description=MySql Proxy Socket

[Socket]
ListenStream=192.168.1.1:3306
ListenStream=192.168.2.1:3306
NoDelay=true
FreeBind=true

[Install]
WantedBy=sockets.target

기존 전달 요구 사항 Accept=true, systemd인식 프로세스는 단일 프로세스에서 여러 연결을 처리하거나 필요에 따라 다른 프로세스를 분기해야 합니다.

관련 정보