우리 회사에는 DevOps 인력이 없고 저는 개발자이기 때문에 초보자이기 때문에 DevOps 모범 사례를 거의 알지 못하므로 실수가 있어도 용서해 주십시오.
두 개의 우분투 머신이 있습니다. 그들은 각각 동일한 웹 서버를 가지고 있으므로 액세스 로그를 제공합니다. 그들은 모두 Rails 웹 서버에서 Ruby를 실행하고 nginx를 사용합니다.
질문: 이제 액세스 로그와 웹 애플리케이션 로그를 보려면 공통 위치가 필요합니다. 물론 파일 캐시는 두 웹 서버 모두에 공통되어야 합니다.
이를 위해 나는 이 해결책을 생각해내야 한다: NFS를 이용하여 캐시와 로그를 저장하는 별도의 서버를 보유합니다. 따라서 두 웹 서버 모두 클라이언트 역할을 하며 NFS 서버에 로그와 캐시를 저장합니다.
GFS에 대해서도 들어봤습니다.
이제 캐시는 매 시간마다 기록되는 일이 거의 없지만 로그는 매초마다 기록됩니다.
그렇다면 이 문제를 해결하려면 무엇을 사용해야 하는지 알고 싶습니다. NFS, GFS, 아니면 둘 다? 어느 것이 나에게 최고의 성능을 줄 것인가? 인터넷에서 검색을 많이 했더니 누가 GFS를 쓰라고 하는데 제 경우에는 왜 GFS가 NFS보다 나은지 알고 싶습니다.
답변1
두 서버에서 세 번째 서버로 로그를 보내려면 syslog 프로토콜(@satō-katsura도 제안함)을 사용하고 우분투 설치 시 rsyslog 패키지를 사용하는 것이 좋습니다. "apache syslog"를 검색하여 정보를 찾을 수 있습니다.
먼저 Apache 가상 호스트 구성에서 Apache 로그를 syslog로 리디렉션합니다. 예를 들면 다음과 같습니다.
ErrorLog "|/usr/bin/tee -a /var/log/www/error.log | /usr/bin/logger -t apache -plocal6.err"
CustomLog "|/usr/bin/tee -a /var/log/www/access.log | /usr/bin/logger -t apache -plocal6.info"
</virtualhost>
여기서 local6은 시설이고 err 및 info는 로그 수준입니다.
그런 다음 rsyslog 구성을 통해 세 번째 항목으로 보냅니다.
local6.* @<ip_dest>
여기서 ip_dest는 녹음 머신의 IP입니다.
이제 이러한 로그를 파일로 리디렉션하는 규칙을 만들 수 있는 세 번째 로그를 받게 됩니다.
# process remote messages
if $fromhost-ip == '<ip_host1>' or $fromhost-ip == '<ip_host2>' then {
action(type="omfile" file="/var/log/apachecluster.log")
stop
}
이렇게 하면 apachecluster.log라는 중앙 집중식 로그가 생성되지만 로깅 도구를 사용하여 Splunk와 같은 여러 시스템의 로그를 처리할 수도 있습니다.
캐싱과 관련하여 네트워크에서 일부 공유 캐시를 원하지 않고 일부 캐시 및 로그 액세스 권한이 있는 프록시를 사용해야 합니다. 귀하의 의견에서 언급했듯이 일부 캐싱 기능을 제공하는 부하 분산을 위해 Google Cloud를 사용합니다. 그렇지 않은 경우에는 Apache 호스트의 로컬 캐시를 처리하면 됩니다. 캐시가 원격 세 번째 시스템의 하드 드라이브가 아닌 RAM에 있기를 원할 것입니다.
재미있게 보내세요