카테고리 Archives: linux

Zabbix 서버의 데이터베이스 테이블 파티셔닝

Zabbix 를 구축하고 일정 기간 운영을 할 경우 “Zabbix housekeeper processes more than 75% busy” 장애를 만나게 된다.
Zabbix 는 housekeeper 가 history 및 trends 테이블에 불필요한 쿼리를 삭제하는 기능을 가지고 있다.
감시 대상이 많을 수록 크겠지만 history_uint 테이블의 크기는 GB 단위를 사용하게 된다.

이때 DELETE 를 이용하게 되는 수백만 단위에서 시간 값을 가지고 삭제 하기 때문에 문제가 된다.
cpu 과점 문제가 발생할 수 밖에 없다. (innodb buffer pool 설정을 키우고 큰 메모리를 장착했다면 문제가 발생하지 않겠지만..)

때문에 housekeeper 대신 테이블을 일자별로 파티셔닝을 하고 DB프로시저를 이용해서 DROP을 하도록 하면 자원 사용을 줄일 수 있다.

아래 프로시저 생성 방법은 미리 일정한 시간 마다 사용할 파티션을 미리 생성(24 시간 / 3개의 포인트) 하고 맞는 시간에 Insert 가 발생 한다면
그에 맞는 파티션에 적재 되도록 하고, 보유 기간(7일)이 만료된 파티션을 DROP을 하는 기능을 가지고 있다.

 


 

1. 압축파일을 다운 받아 프로시저를 DB에 생성한다.

프로시저는 history 는 7일 trends 는 365일 으로 지정되어 있다.

 

2. Mysql 으로 접속해서 스케쥴러가 켜져 있는지 확인한다.

 

3. 생성한 프로시저의 스케쥴링을 12시간 마다로 설정 하고 확인 한다.

이 명령어를 실행할때 이미 쌓여있는 데이터가 크다면 최초 프로시저 실행 시간에 많은 시간이 걸릴 수 있다.

 

4. housekeeper 사용을 끈다.

2025-02-18_164446

 

zbx_db_partitiong.sql 파일로 import 한 프로시저에서 history 는 7일 trends 는 365일로 지정 되어 있으며 아래와 같이 보관 기간 , 파티션 인터벌, 사전생성 갯수 등을 변경 할 수 있다.

 

파티셔닝이 된 정보는 다음과 같이 확인이 가능하다.

 

출처 : https://bestmonitoringtools.com/zabbix-partitioning-tables-on-mysql-database/

웹서버 성능 측정 with wrk

일반 적으로 apache 성능 측정은 기존에 아파치 재단에서 배포하는 ab 테스트를 진행 했었다.

 

docker로 하다보니 apache 가 컨테이너 안에 있어서.. 어짜피 별도로 httpd를 호스트에 설치하거나 별도 벤치 프로그램을 설치해야 한다.

그리고 테스트 하려는 서버가 docker – nginx (캐시활성화) 이고, php-fpm 설정값 계산기를 만들어서 웹서버 부하 테스트가 필요 했기에… 별도의 툴을 찾다가 wrk 를 찾게 되었는데,

컴파일을 필요로 하지만 설치가 간단하고 결과 값 시인성이 좋은 듯 하다 ‘ㅅ’a

 

git 주소:  https://github.com/wg/wrk

 

2024-11-25_170259

주요 하게 볼 부분은 Latency, request, timeout, non-2xx-3xx responses 정도 일듯.

 

출처:  https://domdom.tistory.com/411

mobaxtrem 을 통한 원격지 서버에서 firefox 실행

서버에서 GUI환경이 필요가 있을 때 xwindows 를 설치하고 vnc 또는 xrdp 를 이용한 접속을 해서 사용할 수 있다.

다만 그렇게 할 경우 불필요한 많은 프로그램을 서버에 설치해야 하기 때문에 ssh 접속을 통해 X11-forwarding 기능을 이용해서

프로세스는 서버에 떠있고 GUI 화면은 접속한 컴퓨터에서 사용할 수 있다.

 

서버의 OS 는 OCI – oraclelinux 8 버전이다.

 

서버 sshd 설정 변경

sshd 재 시작

!!!!!주의!!!!!: sshd 관련 설정을 변경한 뒤 재 시작할 경우 이미 접속한 세션은 문제가 없지만 새로운 ssh 접속이 불가능 하다.

때문에 sshd를 재 시작한 경우 새로운 터미널 창으로 ssh를 접속해서 문제가 없는지 확인 해야 한다.

 

관련 프로그램 및 라이브러리 설치

설치되는  xterm 은 간단한 테스트를 위한 프로그램(GUI  터미널 프로그램) 이다.

mesa-* 은 firefox를 실행 하기 위한 그래픽 관련 프로그램 이다.

 

위와 같이 설치 후에 ssh 아래와 같이 xtrem 을 실행하면 아래와 같이 gui 터미널 창이 실행 되는 것을 확인 할 수 있다.

2024-10-10_112043

ssh 접속을 해서 GUI 터미널을 열은 쓸모 없는 짓(=_=)이지만 검증을 위해 사용한다.

 


 

mobaxterm 설정 변경 및 실행

2024-10-10_1055252024-10-10_113739

 

CVE-2024-6387 – regreSSHion 취약점

openssh 명령어의 취약점이 공개 되었다.

인터넷 진흥원 공지: https://www.krcert.or.kr/kr/bbs/view.do?searchCnd=&bbsId=B0000133&searchWrd=&menuNo=205020&pageIndex=1&categoryCode=&nttId=71480

심각도가 high 이고 root 권한 탈취가 가능하기 때문에 외부에 ssh 가 공개되는 서버는 필히 업데이트를 하는것이 좋다.

 

영향을 받는 ubuntu 버전은 22.04 ~ 24.04 이며 RHEL 9 의 경우 업데이트가 필요 하다. (ssh -V 를 했을때 버전 8.5p1 ~ 9.8p1)

 

다른 방법 으로는 sshd_config 에서 LoginGraceTime 을 0으로 수정하는 방법이 있는데 DDOS 에 취약해지니까 가급적 패치를 하도록 한다.

 

Ubuntu 공지: https://ubuntu.com/blog/ubuntu-regresshion-security-fix

RockyLinux 공지: https://rockylinux.org/news/2024-07-01-openssh-sigalrm-regression

Docker 와 firewall-cmd 사용법

Rockylinux(OracleLinux) 8.x 에서 Docker 는 run/start/stop 을 할때
Docker-proxy 가 iptables 를 이용해서 DOCKER, DOCKER-USER, DOCKER-ISOLATION-STAGE-1, DOCKER-ISOLATION-STAGE-2 등의 Chain을
만들어 관리 하기 때문에 기존에 설정된 firewall 설정을 무시하고 호출이 가능한 상태가 된다.

OCI 에서는 인스턴스에 시큐리티 리스트에서 아이피/포트를 관리할 수 있으나
스위치의 access_list 처럼 같은 서브넷에 속한 모든 서버가 영향을 받기 때문에 firewall 에서
설정한 포트만 오픈을 하고자 할때 사용할 수 있는 방법이다.(OCI 안에서 여러 인스턴스를 운영하거나 로컬에서 Docker 서버를 운영할때..)

AWS 의 보안 그룹은 각 인스턴스 별로 작동하기 때문에 불필요 하다.


  1. 먼저 도커의 iptables 사용 옵션을 끄고 docker 를 재시작 한다.
  2. firewalld 에서 설정된 값을 모두 초기화 한다.
  3. Docker 의 네트워크 정보를 확인 한다.
  4. Container 에서 호스트롤 통해 outbound 를 위한 설정을 추가 한다. (첫번째줄에 Docker의 네트워크 정보를 입력해서 실행 해야 한다.)
  5. inbound 를 위한 설정을 추가 한다.
  6. 필요에 따라 아래와 같이 inbound 설정을 추가 한다. (nginx-docker 를 위한 80(tcp), 443(tcp/udp) 을 연다.)

 

마지막에 여는 명령어를 보면 알겠지만 열려고 하는 컨테이너의 IP를 알아야 한다.

때문에 Container 으로 진입해서 ifconfig 를 보면 알 수 있겠지만 매우 귀찬은 관계로 스크립트를 작성 하였다.

실행하면 아래와 같이 나오는데 필요한 Container 부분만 실행을 해서 사용하면 된다.

20240620_131234


출처: https://firewalld.org/2024/04/strictly-filtering-docker-containers