MariaDB로 누가 접속 했는지 어떠한 행동을 했는지 확인을 위해서 Audit를 테스트 진행해 보았다.
진행 방식은 다음과 같다.
1. 지속적으로 로그인 성공 및 시간 조회 / 로그인 암호 실패
2. 지속적으로 Sysbench를 이용하여 10000000 건의 테이블에 대해 select 진행
3. 이 부분에 대해 cpu / Disk IO / QPS 등을 체크
처음에는 이와 같은 방식으로 지속적으로 체크를 한다.
이후 Audit을 on으로 한 이후에 (로그를 남김) 해당 부하들의 변화률을 체크 하기로 하자.
참고로 Audit 은 아래 블로그를 참고해서 플러그인을 설치하자.
직접 올려도 되지만 더 자세하게 잘 알려준 블로그가 오히려 좋을 듯 싶다.
Audit 플러그인 설치
1. 지속적으로 로그인 아웃을 하는 스크립트는 파이썬을 이용했다. Thread를 이용하면 좋겠지만...간단하게 개발하기 위해서..내 실력이 안되기에..ㅠ
#-*- coding:utf-8 -*-
import pymysql
import time
def LoginSucess(tp=''):
db = pymysql.connect(host='192.168.0.1', port=int(3306), user='root', passwd='root', db='mysql',
autocommit=True, use_unicode=True, charset="utf8")
if tp.lower() == 'dict':
cursor = db.cursor(pymysql.cursors.DictCursor)
else:
cursor = db.cursor()
query = """
SELECT now();
"""
cursor.execute(query)
row = cursor.fetchone()
print(row)
def LoginFail(tp =''):
try:
db = pymysql.connect(host='192.168.0.1', port=int(3306), user='root', passwd='1234', db='mysql',
autocommit=True, use_unicode=True, charset="utf8")
if tp.lower() == 'dict':
cursor = db.cursor(pymysql.cursors.DictCursor)
else:
cursor = db.cursor()
except Exception as e:
print(str(e))
if __name__ == "__main__" :
while True :
LoginSucess()
LoginFail()
time.sleep(1)
- 여기서는 지속적으로 돌면서 로그인 아웃을 시도한다....mysql close하는 부분이 없네.......OTL
2. Sysbench를 이용해서 다른 서버에서 해당 서버로 스트레스 테스트를 진행하는 것이다.
done
주석을 달아 놨듯이.. 처음에는 10,000,000 건을 Insert 이후에 해당 건을 while문이 돌면서 지속적으로 스트레스를 주는 것이다.
왜 while로 했냐면 해당 가상 머신 사양이 좋지 않아 CPU를 100%로 만들지 않으면서도 지속적인 스트레스를 주기 위함이다..
CPU를 100%하면 이후에 어떠한 반응도 체크를 하기 힘들기에 나는 적정선이 70%내를 유지하기 위함이다.
이렇게 한 후 이제 CPU와 QPS등을 체크를 해보자.
체크하는 것은 또한 Python을 이용하였다.
보는 바와 같이 QPS / CPU 등이 일정한 것을 확인할 수 있다...아쉬운 건 Disk I/O를 발생시키지 못한 점이다...
이제는 Audit을 ON으로 한 후 다시 진행 해 보자.
Audit을 제대로 설치 하였다면 아래와 같이 진행할 수 있다.
MariaDB [(none)]> show global status like 'server_audit%';
MariaDB [(none)]> set global server_audit_logging = on;
정상적으로 로그가 남기고 있는지 확인해 보자
따로 경로를 설정하지 않았다면, Data폴더에 가면 확인할 수 있다.
Data폴더에서는 일정 크기의 로그가 쌓이면 자동 백업을 진행하게 된다.
아래 일부를 캡쳐했는데, 유저 / 어디서 들어오는지..쿼리는 어떤것을 남기는지 확인할 수 있다.
여기까지 진행하고 DB / OS 상황을 보자.
별다른 특이 사항은 없어 보인다.
이제는 위와 같은 방법으로 로그인 성공 / 실패 를 하는 스크립트를 실행하고, 추가로 스트레스 테스트도 진행하자.
이렇게 어느정도의 스트레스가 완료 되었다면 둘을 비교해 보자.
비교는 ipython Jupyter를 이용하였다. 추가로 matplotlib을 이용하여 둘의 결과를 그래프로 표현해 보았다.
파란색 선이 Audit 을 Off로 한 후에 진행한 그래프이며, 녹색 선이 Audit 을 On 으로 한 후 진행 하였다.
결과를 보면 큰 차이가 없는 것을 확인할 수 있다.
간단한 결과만 보고 Audit을 On으로 한다고 부하가 발생ㅎㅏ지 않는다고 단정할 수 없다.
8 쓰레드로 진행하였으며(sysbench에서 8쓰레드로 명시했지만 제대로 됬는지는 확인을 못했다..), session도 30 내외로 진행하였기 때문에 더더욱 실제 운영에는 적용할 수 없다.
하지만 간단하게 테스트한 부분이기에 이 부분을 조금 더 보완하여 진행 한다면 분명 좋은 결과를 도출해 낼 수 있을 것이다.
'Maria DB' 카테고리의 다른 글
[MariaDB] rocksdb 간략 테스트 1(INSERT) (0) | 2018.03.14 |
---|---|
[MariaDB] mysqldump 대용량 import 테스트 (0) | 2017.07.04 |
[MriaDB] Galera Cluster 에서 auto increment (0) | 2017.02.16 |
[펌]MySQL 클러스터링을 위한 Galera Cluster (0) | 2017.01.05 |