개요

gitlab이 보안에 취약하다는 메일을 받았다.

대충 gitlab을 삭제하거나 버전을 바꾸라는 내용이다.
추후 git을 활용할 예정이므로 gitlab을 삭제하지 않고 다른버전으로 패치할 것이다.

버전 변경 : 11.9.8 → 11.8.10

참고자료 : https://docs.gitlab.com/ee/update/package/downgrade.html

 

작업

 

1) 설치에 필요한 rpm 파일 옮기기

 

파일 다운로드

필요한 rpm 파일은 https://packages.gitlab.com/gitlab/gitlab-ce 페이지에서 다운가능하다.

쭉 훑어보면 알겠지만 centos6 ( = el6 ) 에서는 13.8.8 이상의 버전으로 업그레이드가 불가능합니다. ( 13.8.8이상은 el7부터 지원함 !! )

 

그렇기 때문에 취약제외 버전중 가장 높은 버전인 11.8.10으로 설치 해줍니다.

11.8.10 설치 경로 : https://packages.gitlab.com/gitlab/gitlab-ce/packages/el/6/gitlab-ce-11.8.10-ce.0.el6.x86_64.rpm

 

파일 옮기기

SFTP를 활용하여 Repository 서버로 gitlab-ce-11.8.10-ce.0.el6.x86_64.rpm 파일을 옮겨 줍시다.

 

REPO 구성하기 (Repo Server)

repo.host.com 서버는 클러스터에서 사용하는 대표 repo 서버입니다.

설치한 rpm을 대상 http 경로로 카피 후, repo를 새로 업데이트해줍니다.

admin@repo.host.com
 
sudo cp ~/henry/gitlab-ce-11.8.10-ce.0.el6.x86_64.rpm /var/www/html/localrepo/git/
 
cd /var/www/html/localrepo/git/
 
sudo rm -r ./repodata
 
sudo createrepo /var/www/html/localrepo/git/

 

YUM을 통한 재설치 (git server)

git.host.com 서버는 클러스터에서 사용하는 git 서버입니다.

admin@git.host.com
 
# yum 캐시 / 레포 초기화
sudo yum clean all
 
# yum repo리스트 다시 불러오기
sudo yum repolist all
 
# yum repo에서 rpm 설치가 가능한지 확인
sudo yum --showduplicates list gitlab-ce
...
...
버전2개 떠야함!
...
...
 
# 현재 설치된 gitlab (상위버전) 삭제
sudo yum remove gitlab-ce
 
# gitlab 재설치 ( 하위버전 )
sudo yum -y install gitlab-ce-11.8.10-ce.0.el6

 

결과 확인

 

개요

PXC ?

Percona Xtradb는 mysql 엔진인 innodb에 Galera패치 등을 적용한 DB엔진입니다. 
Percoan Xtradb Cluster는 Active/active의 고가용성을 지원하는 솔루션이며 클러스터를 구축하기 위한 핵심 기술인 Codership Galera 라이브러리를 포함하고 있습니다.
Percona의 동작방식을 이해하기 위해선 Galera 클러스터에 대한 이해가 필요합니다.

http://galeracluster.com/에서 제공되는 오픈소스로 Synchronous replication를 지원하는데,
Synchronous replication를 지원하기 위해서는 Galera cluster Architecture에 대한 이해가 필요하며, Galera는 아래의 그림처럼 Certification Based Replication방식으로 동기화 처리를 합니다.

이미지 참고 - http://galeracluster.com/documentation-webpages/galera-documentation.pdf

 

반면에 Maria DB의 경우에는 Replication시 bin 로그 포지션 추적방식을 기본으로 사용합니다.
 bin 로그 추적방식 : [2022.05.02 - [System Engineering] - [Maria DB] Master - Slave Replication 적용.]

PXC는 위 이미지에서 볼 수 있듯, 트랜젝션 발생시 Synchronous replication도 동시에 일어납니다.

 

따라서 PXC는 binlog를 지우더라도 sync에는 전혀 영향이 없는것을 알 수 있습니다.

 

원인

binlog 저장기간 설정값인  expire_logs_days 가 99로 설정되어있는데도 불구하고 bin로그가 무기한 저장되고 있었습니다.

100이상으로 설정하면 '1292 code Warning (형식 오류)' 이 발생합니다.

해결

설정된값 확인

우선 variables 목록을 보는 mysql문으로 expire_logs_days에 설정된 값을 확인하여줍니다.

expire_logs_days값이 99로 설정되어있는걸 확인할 수 있습니다.

 

 

variable 도큐 확인


이미지 참고 - https://dev.mysql.com/doc/refman/5.6/en/replication-options-binary-log.html

mysql 5.6 document manual에서 expire-logs-days의 설명을보면 지정가능한 최대값이 99이고 기본값은 0 ㅡ무기한저장, no automatic removalㅡ  입니다.

그렇기때문에 100이상은 설정이 불가능하였습니다. (99로 설정되어있던 mysql은 왜 무기한 저장을 하고있었는지 모르겠습니다...버그인가?)

 

MySQL 적용

1. 재기동을 하지않기 글로벌 변수를 cli통해 변경하여 줍니다.

2. 영구 적용을 위해 mycnf도 설정을 변경하여 줍니다
vi /etc/my.cnf

[mysqld]
...
...
expire_logs_days=90

3. 결과 확인
일정 시간이 흐른 후 기존에 있던 binlog들이 사라지고 저장기간이 90일로 설정된것을 확인 할 수 있습니다 (캡처날짜 : 03.29 )

reference 
https://library.gabia.com/contents/infrahosting/2317/

mysql 재기동 명령어

sudo service mysql [stop/start/restart]

 

DB(Maria DB) M-S 재구성

이 내용은 M-S 구조가 깨졌을때 재구성 하는 작업입니다.

slave 재기동 후 IO Thread, SQL Thread  yes로 나오면 수행 할 필요 없습니다.

 

Maria DB binary log를 통한 replication만 지원하기 때문에마스터의 내용을 복사 후 binary log 포지션을 기입해 주어 따라가게끔 해주어야 합니다.

bin log는 로컬파일을 사용한다는 장점이 있지만 Active - Standby 개념이 아닌 Master- Slave 관계여서 수동으로 작업해야할 게 많습니다.

 

#1~4과정은 데이터를 새로 엎어치는 내용입니다. 데이터의 보존을 위해  lock 을 걸어주어야 합니다.

#2 , 4번과정의 dump와 다시 import 하는 작업은 스키마 구조를 같게 하기위해서 하는작업입니다. - 단순히 slave 깨진거라면 2,4번 생략 가능

1. Master DB Lock (on Master)

Maria DB > FLUSH TABLES WITH READ LOCK;

 

2. mysql dump (On Master, Master데이터를slave import하기위해 )

mkdir /home/ndap/henry

mysqldump -h salvehost -uroot -p --extended-insert --routines --triggers --all-databases > /home/ndap/henry/mysql_backup_$(date +\%Y\%m\%d).sql

 

3. slave기능stop (on Slaves)

stop slave;

 

4. mysqldump파일import (On slaves)

mysql -uroot -p < mysql_backup_$(date +\%Y\%m\%d).sql

 

5. Masterbin log메모

Maria DB >  SHOW MASTER STATUS;

+-------------------+----------+--------------+------------------+

| File              | Position | Binlog_Do_DB | Binlog_Ignore_DB |

+-------------------+----------+--------------+------------------+

| mysql-bin.000019 |  2454692 |              |                  |

+-------------------+----------+--------------+------------------+

 

6. slave구성 재설정(on slave)

Maria DB >

change master to

MASTER_HOST="master.host" ,

MASTER_USER="*****" ,

MASTER_PASSWORD="******" ,

MASTER_LOG_FILE="mysql-bin.000019",

MASTER_LOG_POS=2454692 ;

-->       MASTER_LOG_FILE에는 5번항목의 File 명을 (=mysql-bin.000019) 적어준다.

           MASTER_LOG_POS에는 5번항목의 Position(= 2454692 ) 적어준다

 

7. Slave기능 시작(On Slave)

Maria DB > start slave ;

 

8. Slave상태 확인

Maria DB > show slave status \G;

IO Thread, SQL Thread  yes로 나와야함

9. Master DB Unlock

UNLOCK TABLES;

방법1) screenrc 이용

sudo vi /etc/screenrc

#맨 아랫 줄 아래 내용 추가

...
...
...
caption always "%{= kw}%-w%{= gW}%n %t%{-}%+w %-=  %Y-%m-%d %C:%s"

 

방법 2) 화면 명령 입력 모드 이용

1. screen 명령어 이용하여 세션 접속.

screen -S test

 

2. 화면 명령 입력 모드

Ctrl + a + : 

 

3. 화면 명령 입력 모드 상태에서  캡션 추가

caption always "%{= kw}%-w%{= gW}%n %t%{-}%+w %-=  %Y-%m-%d %C:%s"

 

 

# window tab 커맨드 설명

caption always : 창 캡션 표시를 화면 맨 아래에 한 줄로 표시.
%{= kw} : 모든 현재 속성 지우기, 배경을 검은 색, 텍스트를 흰색으로 설정
%-w : 모든 창 번호 및 이름을 현재 창까지 표시
%{= gW} : 현재 창 설정 속성, 배경을 녹색으로 설정, 텍스트를 밝은 흰색으로 설정
%n : 현재 창에 숫자 추가
%t : 이름 추가
%{-}  : 마지막 속성 변경 취소
%-= : 터미널 너비를 채우기 위해 문자열간의 간격 설정
%Y-%m-%d %C:%s : 현재 표시 날짜와 시간

결과 

 

Reference ::
http://bigdatums.net/2017/03/25/how-to-display-window-tabs-in-linux-screen/

+ Recent posts