표준 단위 파일을 통해 systemd에서 서비스를 관리하는 SLES 12 SP3 시스템에 postgresql 데이터베이스가 있습니다. 서비스가 실패하면 자동으로 다시 시작하고 싶기 때문에 디렉터리를 생성하세요./etc/systemd/system/postgresql.service.d/psql.conf다음 내용이 포함되어 있습니다.
[Service]
Restart=on-failure
이것은 효과가 있고 행복합니다. 이제 마스터 장치에 장애가 발생할 경우 슬레이브 장치가 대기하는 고가용성 시스템을 설정해야 합니다. HA 작업 팀은 클러스터를 설정할 때 서비스를 모니터링하고 postgresql이 중지되면 슬레이브로 장애 조치할 예정이므로 서비스 재시작 플래그를 비활성화하도록 요청했습니다. 그래서 파일을 만들었어요/etc/systemd/system/potgresqlHA.serviceHA팀이 사용하기 시작하는 기존 유닛 파일의 복사본입니다.
systemctl start/stop/restart/status postgresqlHA
이제 요청 시 데이터베이스를 백업할 수 있는 스크립트가 있습니다. 이 스크립트는 백업하기 전에 postgresql의 상태를 확인하여 서비스가 실행 중인지 확인합니다.
systemctl status postgresql
이 방법은 클러스터가 설정되지 않은 경우에 효과적입니다. 하지만 클러스터가 설정되면 postgresqlHA가 시작된 서비스이므로 서비스가 중지된 상태입니다.
실행 중인 데이터베이스 서비스에 관계없이 백업 스크립트가 작동하도록 하려면 어떻게 해야 합니까? 관리를 더 쉽게 하기 위해 유닛 파일 중 하나에 구성할 수 있는 것이 있습니까?
다른 스크립트에서 다른 서비스(apache2, tomcat 등)의 상태를 확인하는 동안 동일한 문제가 발생했습니다.
고마워요, 아비셰크
답변1
systemctl status postgresql
백업 스크립트의 테스트를 이와 같이 변경하면 어떨까요?
...
if systemctl is-active postgresql
then
echo "PostgreSQL is active in non-clustered mode"
# add here any pre-backup commands specific to non-clustered mode
elif systemctl is-active postgresqlHA
then
echo "PostgreSQL is active in HA mode"
# add here any pre-backup command specific to HA mode
else
echo "PostgreSQL backup FAILURE: PostgreSQL is not running." >&2
# add any commands to send a backup failure alert here if necessary
exit 69 # EX_UNAVAILABLE
fi
# commands to run the backup here
...
이는 주로 대화형 사용을 위해 설계되었으며 스크립트 systemctl status <service...>
에 더 편리할 수 있습니다 . 여러 서비스가 나열되고 하나 이상의 서비스가 기준을 충족하는 경우 명령은 0 결과 코드를 반환합니다.systemctl is-active <service...>
systemctl is-failed <service>
실행 중인 서비스 버전을 신경 쓸 필요가 없다면 동시에 테스트할 수도 있습니다.
...
if ! systemctl is-active postgresql postgresqlHA
then
echo "PostgreSQL backup FAILURE: neither clustered or non-clustered service is running." >&2
exit 69 # EX_UNAVAILABLE
fi
# commands to run the backup here
...