트랜잭션을 통한 lcok 증상으로 간헐적인 DB 지연이 발생하여 1초마다 innodb lock 을 확인할 수 있는 스크립트를 작성하여 원인 파악을 했다.

 

show full processlist, show engine innodb status 결과도 같이 확인하면 좋다.

#!/bin/bash

# 출력 파일 정의
OUTPUT_FILE1="/path/INNODB_TRX.log"
OUTPUT_FILE2="/path/INNODB_LOCKS.log"
OUTPUT_FILE3="/path/INNODB_LOCKS_WAITS.log"

# 로그 파일이 있으면 삭제(필요시 사용) 
#if [ -f "$OUTPUT_FILE" ]; then
#    rm "$OUTPUT_FILE"
#fi

# 무한 루프 시작
while true; do
    # 현재 날짜 및 시간
    echo "Timestamp: $(date)" >> "$OUTPUT_FILE1"
    echo "Timestamp: $(date)" >> "$OUTPUT_FILE2"
    echo "Timestamp: $(date)" >> "$OUTPUT_FILE3"

    # InnoDB 트랜잭션 상태 쿼리 실행
    mysql -u user -p'password' -e "SELECT * FROM information_schema.INNODB_TRX;" >> "$OUTPUT_FILE1"
    echo "" >> "$OUTPUT_FILE1"

    # InnoDB 잠금 상태 쿼리 실행
    mysql -u user -p'password' -e "SELECT * FROM information_schema.INNODB_LOCKS;" >> "$OUTPUT_FILE2"
    echo "" >> "$OUTPUT_FILE2"

    # InnoDB 잠금 대기 상태 쿼리 실행
    mysql -u user -p'password' -e "SELECT * FROM information_schema.INNODB_LOCK_WAITS;" >> "$OUTPUT_FILE3"
    echo "" >> "$OUTPUT_FILE3"

    # 1초 대기
    sleep 1
done

 

 

 

작업 방법
1. 비밀번호 생성

echo -n 비밀번호 | sha256sum
2b379a301a5122ddde7290baa0360035fa7835893baebef1d7da983e3dfd7cc9

 

2. root_password_sha2 값 변경

vim etc/graylog/server/server.conf
root_password_sha2 = 2b379a301a5122ddde7290baa0360035fa7835893baebef1d7da983e3dfd7cc9

 

3, 서비스 재구동

systemctl status graylog-server.service

 

사내 개발자 요청으로 로컬 개발 환경 구성 작업한 내용을 정리하려고 한다.

 

요청사항은 다음과 같다

로컬 개발 환경 구성하여 동시, 긴급 작업 시 브랜치 checkout 을 통해 프로젝트 별로 작업할 수 있도록 지원 요청

(로컬 개발 환경 = 개인PC)

 

1. 서비스 환경

nginx, php-fpm, laravel 프레임워크

 

2. 구성 방안

- 로컬 PC에 wsl + docker 환경 세팅하여 구성
- 차세대 nginx + php-fpm 베이스 이미지 세팅
- 로컬 PC 소스 컨테이너에 마운트 하여 사용

- DB는 개발 DB 사용
- hosts 파일 수정하여 개발 환경 접속

 

3. 상세 작업 내용

1) 사전 작업 

- 개발 어플리케이션 방화벽 허용 (개발 DB, 검색엔진, redis 등)

- WSL, Ubuntu, Docker 설치

 

2) 컨테이너 이미지 세팅 작업

- nginx 이미지 pull 진행

- 컨테이 접속 후 필요 패키지 설치

ㄴ php 설치 php.ini 수정

ㄴ nginx 세팅( vhosts 및 ssl 설정)

ㄴ 타임존 변경 Asia/Seoul
ㄴ vim, net-tools 패키지 설치

 

3) 컨테이너 이미지 commit

docker commit 컨테이너이름 이미지명:tag

 

 

4) docker 컨테이너 실행

- docker run --name devpweb d -p 443:443 -v /home/web:/home/web php-fpm7.3:1.4
ㄴ devphpweb (컨테이이너명), -v /home/web:/home/web (로컬PC 소스 경로 컨테이너에 마운트), php-fpm7.3:1.4 (현재버전 이미지)
docker exec -it devweb /bin/bash -c "servic php7.3-fpm start" / php-fpm 구동 명령어 컨테이너 구동 완료 후 실행

 

5) docker save & load

docker 이미지 배포를 위해 docker registry 구성도 가능 하지만 docker save & load를 통해 이미지 배포

docker save -o 이미지.tar 이미지:tag   commit으로 생성된 이미지 tar 파일로 묶기
docker load -i 이미지.tar  이미지 tar 파일 load, 도커 이미지 리스트에 추가된다

 

6. 작업 중 특이사항

도커 컨테이너 윈도우 소스파일을 컨터이너 마운트 시 속도 지연 발생하여 소스 파일을 ubuntu로 옮겨 작업했다. 

(개발툴 git 경로를 ubuntu 경로로 변경해야 한다)

이는 wls2은 윈도우와 cross OS file systems 성능이 굉장히 안좋기 때문에 발생하는 문제라고 한다.

 

순차적으로 개발 후 배포를 진행하면 좋겠지만 현업에서는 긴급 작업과 우선 순위 작업등이 변경되며 기존 작업을 멈추고 다른 작업을 해야할 경우가 많다. 그럴 경우 git brach를 이용한 작업이 필요하고 git branch를 활용하기 위해 로컬 개발환경  구성 작업건이었다.

 

 

'가상화' 카테고리의 다른 글

docker 이미지 root 접속 방법  (0) 2024.12.05

+ Recent posts