240510Database(성능측정?)

WorldWannyWeb.·2024년 5월 13일
0

한화시스템

목록 보기
9/14
post-thumbnail

CPU의 성능측정하기

클라우드 :
서버를 직접세팅할필요없고 세팅을 해놓으면 클라우드가 알아서 설정해준다.

epl-release 저장소목록
yum i -y stress -> cpu한테 부하를 주는 프로그램

top -> 이아이의 cpu메모리를 확인 할 수 있음

stress -c 1 -> cpu사용량이 100%로 올라감

cpu가 100%가 되면 컴퓨터가 동작이 되지 않는다. 
-> 사람이 엄청 몰리거나 디도스공격을 받으면 100%가 된다.

부하를 한번줘보자

Apache :
자바기반으로 만들어져 있기 때문에 java설치가 필요하다. 메이플실습을 할때 자바를 미리 설치해놓았으므로 일단 Apache설치를 해보쟈

jmet.bat파일을 열면 아래처럼 나온다

  • Thread Group 추가해주기

  • Thread Group에서 부하설정하기

    Number of Threads - 동시에 DB서버에 요청을 보내는 사용자를 총 몇명을 할것인지 : 접속자수
    Ramp-up period - 사용자들이 총 얼마의 시간동안 요청을 할것인지 : 숫자가 작을수록 부하가 많이걸림
    Loop Count - 반복요청횟수

  • JDBC Connection Configuration

    Variable Name for created pool: dbpool
    Validation Query : select 1
    Database URL: jdbc.mariadb://[DB 서버 IP 주소]:3306/[DB이름]
    JDBC Driver class  : org.mariadb.jdbc.Driver -> 우리DB서버가 mariadb니까 이걸 설정한다! / 수동으로 다운받아서 설정해줘야함.
    Username : DB서버에 접속할 ID
    Passwrod : DB서버에 접속할 PW
    ->vip주소를 생성해놓았으니 그걸로 연결이 되도록 설정

    클라가 DB서버에 접속하려면 ip주소, id, pw, db이름, port번호


  • JDBC Request

    Variable Name of Pool declared in JDBC Connection Configuration : dbpool
    Query Type : Select Statement
    Query : SELECT * FROM web.wp_posts;

  • Test결과를 받아보기 위해서 view result ree, summmary report를 가져온다.


위 설정이 끝나고 Thtread Group에서 사용자수를 100단위로 늘려보자. 그러면 140, 150정도까지만 돌아가게 되는데

DB에 max_connection을 살펴보면 151이 최대로 되어있는 걸 볼 수 있다.

max_connections를 500으로 바꿔주고 부하를 확인해보쟈

위에 초록색 스타트버튼을 누르면 실행됨

TPS - 초당 트래픽 수 -> 대용량 트래픽이야기를 할때
엔그라인더로 테스트하면 TPS가 나옴


이떄 어떤 문제가 생길까?
회원가입을 할때 master로 가서 저장하면 slave에도 저장이 된다.
근데 회원가입때 slave로 가서 저장하면 master에도 저장이 될까? 놉


Active-Active로 운영을 하기 위해서는 양쪽에 master slave를 설정해줘야한다.


Master, Slave DB 이중화 설정하기


  1. Slave에 Master 설정
    1) 기존 서버 사용
    2) master 설정
    vi /etc/my.cnf.d/mariadb-server.cnf
    [mariadb] <- 이거는 추가하는거 아님
    log-bin
    server_id=1
    log-basename=master1
    binlog-format=mixed

    3) master 확인
    mysql
    show master status;

    4) 사용자 추가 및 권한 설정
    CREATE USER 'slave_user'@'%' IDENTIFIED BY 'qwer1234';
    GRANT REPLICATION SLAVE ON . TO 'slave_user'@'%';

    5) DB 백업
    mysqldump -u root [DB 이름] > web.sql

    scp web.sql [SLAVE 서버의 IP]:/root/web.sql

  1. Master에 Slave설정
    1) DB 서버 프로그램 설치
    yum install -y mariadb-server

    2) DB 서버 프로그램 실행
    systemctl start mariadb

    3) 방화벽 끄기
    setenforce 0
    systemctl stop firewalld

    4) DB 생성
    mysql
    CREATE DATABASE [DB 이름];
    exit

    5) DB 복구
    mysql -u root [DB 이름] < web.sql

    6) DB 서버 설정
    vi /etc/my.cnf.d/mariadb-server.cnf
    [mariadb] <- 이거는 추가하는거 아님
    server_id=2

    	systemctl restart mariadb

    7) Master 지정
    mysql
    CHANGE MASTER TO
    MASTER_HOST='[Master 서버 IP]',
    MASTER_USER='slave_user',
    MASTER_PASSWORD='qwer1234',
    MASTER_PORT=3306,
    MASTER_LOG_FILE='[마스터에서 show master status 했을 때 File 이름]',
    MASTER_LOG_POS=[마스터에서 show master status 했을 때 position 번호],
    MASTER_CONNECT_RETRY=10;

	START SLAVE;

	

8) Slave 확인
SHOW SLAVE STATUS\G
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

Slave를 Master로 Master로 Slave로 만든 후 Start slave; 했을때 아래 해당 에러가 발생했다.

Slave를 Master로 Master를 Slave로 설정했을때 기존 Master와 Slave 설정의 동기화가 깨졌다는 의미이다.

reset slave;
start slave;

위 명령을 실행시켜준다.

다시 SHOW SLAVE STATUS\G 를 실행시켜보면 Slave_IO_Running: Yes,Slave_SQL_Running: Yes 인 것을 확인해볼 수 있다.

두 디비가 서로 master/slave db로 설정해줬으므로 테스트를 해보면


Slave로 설정한 Master DB에 Master로 설정한 Slave DB에서 넣은 MOCK_DATA테이블이 들어간것을 볼 수 있다.



두 DB를 HAproxy를 생성해서 연결시켜주쟈

%
DB를 하나 더 추가해서 연결하는거는 클러스터링을 하면ㄷ ㅚ고

DB 두개를 master, slave 를 서로 설정해준것을 replication 이라고 한다.

서버3대이상 구성할때 사용하는 프로그램. 여기선 master/slave는 기본 투표권이 있냐없냐.


클러스터 구성하기


리눅스 실행 프로그램? 프로그램을 확인하곻 프로그램의 경로를 먼저 넣어주자
dll - exe실행프로그램을 가져다 만드는 형태로 만든다

A,B 프로그램이 있으면 리눅스에는 exe가 없고

galera : 리눅스의 실행파일
wsrep_cluster_address : 연결할 모든 컴퓨터 ip주소를 다 적어준다. 적어준 모든 ip주소를 묶어준다는 의미
wsrep_node_address : 여기는 내꺼만 적는것. 현재 컴퓨터의 ip주소를 적어주면 된다. 각자컴퓨터에서 다르게 적혀야한다.
rsync로 묶어줄건데 성능이 안좋으면 바꿔줄수있다.

1. 가상 머신 준비
	3대 준비

2. mariadb 설치
	3대 모두 설치

3. galera 및 필수 프로그램 설치
	yum install -y galera
	yum -y install rsync nmap lsof perl-DBI nc

4. mariadb 서버 설정
vi /etc/my.cnf.d/mariadb-server.cnf

[galera]
# Mandatory settings
wsrep_on=ON
wsrep_provider=/usr/lib64/galera/libgalera_smm.so
wsrep_cluster_address='gcomm://10.10.10.10,10.10.10.20,10.10.10.30'
binlog_format=row
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2

wsrep_cluster_name='maria_cluster'      # 클러스터의 이름, 3대 통일
wsrep_node_address='10.10.10.20'        # 현재 컴퓨터의 IP
wsrep_node_name='DB2'
wsrep_sst_method=rsync


5. 첫번째 서버
	yum install -y mariadb-galera-server

	galera_new_cluster	

6. 나머지 2대 서버
	systemctl restart mariadb


7. 확인
	mysql
		SHOW STATUS LIKE '%wsrep_%';
		SHOW STATUS LIKE 'wsrep_cluster_size';

	workbench에 들어가서 DB서버 세개중 데이터를 넣고 3개 다 같은 데이터가 들어가는지 확인하면된다.

cluster 에러발생


DB2, DB3를 설치하고 mariadb 재시작을 했지만 되지 않아서 들어가서 에러코드를 살펴보았다.

마지막 3줄 위에 내용은 mariadb가 잘 실행되었다는 내용이지만 마지막 3줄은 mariadb가 꺼졌다! 라는 의미지만, 에러로그를 뱉고있지 않아서 왜 갑자기 꺼졌는지 원인을 알수가 없다.

그래서 다시 DB1,2,3을 재부팅하고 다시 처음부터 실행한 후에
tail -f 로 로그를 까보기로 했다.

에러났을때 로그보기
cat/var/log/블라블라

cat /var/log/mariadb/maraidb.log

tail -f /var/log/mariadb/maraidb.log -> 창을 따로 띄워놓고 보기

profile
와니완의 월드와이드와니웹🐥

0개의 댓글

관련 채용 정보