| 일수 | 일자 | 교과목 | 내용 | 편성시간 |
|---|---|---|---|---|
| 11 | 24/12/04 | 기반기술 | Database | 8 |
(어제의 실습에 이어서)
html 파일 다운 및 압축 해제
cd/var/www/html
rm -rf ./*
wget http://192.0.0.100:10000/1.doc/03.%20%eb%8d%b0%ec%9d%b4%ed%84%b0%eb%b2%a0%ec%9d%b4%ec%8a%a4/html.tar.gz
tar zxvf html.tar.gz
cd /usr/local/tomcat10/webapps/ROOT
wget http://192.0.0.100:10000/1.doc/03.%20%eb%8d%b0%ec%9d%b4%ed%84%b0%eb%b2%a0%ec%9d%b4%ec%8a%a4/jsp.tar.gz
tar zxvf jsp.tar.gz
khj 유저에게 web 데이터베이스로 접속할 수 있는 권한 주기
mariadb -u root -p
GRANT ALL PRIVILEGES ON web.* TO 'khj'@'%';
FLUSH PRIVILEGES;
systsemctl restart mariadb # 설정이 끝나면 프로그램 재시작 잊지 않기
아직 tomcat이 두 대일 때 분산을 어떻게 시키는지는 배우지 않았으므로 톰캣 하나의 주소는 주석 처리

실습 중 위와 같이 계정에 권한을 줬음에도 해당 database에 접속할 수 없다는 오류가 떴다.
이때 mariadb 서버로 가서 khj유저로 접속해 데이터베이스를 확인해보면

하나는 web database가 제대로 등록이 되어있지만

다른 하나는 web 등록이 안 된 걸 볼 수 있다.

그래서 SHOW SLAVE STATUS\G 명령어를 통해 SLAVE 설정을 확인해보니 Slave_IO_Running과 Slave_SQL_Running이 깨진 걸 확인할 수 있었다.
어제의 실습에서 데이터 백업 후 복구하는 방법을 배웠으므로 이를 이용해서 DB를 백업한 뒤 SLAVE STOP으로 SLAVE를 끄고 재설정해주었다.

다시 정상적으로 연결된 걸 확인한 후 HaProxy IP로 접속하니까 정상적으로 연결이 되었다.
아무래도 실습하는 도중에 계속 가상 머신이 다운되어서 설정값이 바뀌는 등으로 연결이 끊어진듯하다.

HaProxy IP를 통해 사이트에 접속했을 때 메인 화면

가입 후 로그인을 하고 게시글을 작성하면 다음과 같이 게시판을 볼 수 있다.

MySQL Workbench에서도 데이터가 추가된 걸 확인할 수 있다.
(추후 내용 추가)
스티키 세션
세션 클러스터링
DB에 저장
Redis에 저장
클라이언트한테 토큰을 저장하게 하고 서버는 토큰을 확인
ip_hash; # 갔던 서버로만 가게 됨 (스티키 세션)
스테이트풀
스테이스리스


실습할 때 nginx 서버에서 설정한 html 파일을 보면 다음과 같이 upstream을 통해 tomcat과 연결된 것을 확인할 수 있다.

tomcat이 설치된 서버에서도 jsp 파일을 통해 mariadb와의 연결을 확인할 수 있다.

haproxy를 통해서 tomcat이 mariadb와 통신

실습 내용을 정리하면 위의 그림과 같다.

이번에는 위와 같은 서버로 만들어보자
(추후 추가)
설치
apt update
apt install -y mariadb-server
mariadb 바인드 주소 설정
vi /etc/mysql/mariadb.conf.d/50-server.cnf
27번 라인에 있는 설정을 다음처럼 변경
bind-address = 0.0.0.0
mariadb 실행
systemctl restart mariadb
mariadb 실행 확인
systemctl status mariadb
apt install -y net-tools
netstat -anlp | grep :3306
DB 서버 초기화
mysql_secure_installation
엔터
엔터
엔터
qwer1234
qwer1234
엔터
엔터
엔터
엔터
서버 중지
systemctl stop mariadb
설정 추가(3대 중 1대만 먼저 설정)
vi /etc/mysql/mariadb.conf.d/50-server.cnf
마지막 줄에 다음 내용 추가
[galera]
wsrep_on=ON
wsrep_provider=/usr/lib/galera/libgalera_smm.so
wsrep_cluster_address="gcomm://"
binlog_format=row
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
bind-address=0.0.0.0
wsrep_cluster_name="MariaDB_Cluster" # 3대의 컴퓨터를 묶었을 때 내가 지어줄 이름
wsrep_node_address="10.10.10.101" # 현재 컴퓨터의 IP 주소
systemctl restart mariadb
> systemctl restart mariadb
클러스터 구성 실행(3대 중 1대만 설정)
galera_new_cluster
나머지 서버 설정
systemctl stop mariadb
vi /etc/mysql/mariadb.conf.d/50-server.cnf
마지막 줄에 다음 내용 추가
[galera]
wsrep_on=ON
wsrep_provider=/usr/lib/galera/libgalera_smm.so
wsrep_cluster_address="gcomm://10.10.10.101,10.10.10.102,10.10.10.103"
binlog_format=row
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
bind-address=0.0.0.0
wsrep_cluster_name="MariaDB_Cluster" # 3대의 컴퓨터를 묶었을 때 내가 지어줄 이름
wsrep_node_address="10.10.10.102" # 현재 컴퓨터의 IP 주소
> systemctl restart mariadb
설정 변경(3번의 클러스터 구성을 등록했던 컴퓨터 수정)
vi /etc/mysql/mariadb.conf.d/50-server.cnf
wsrep_cluster_address="gcomm://10.10.10.101,10.10.10.102,10.10.10.103"
> systemctl restart mariadb
최종 확인
mariadb -u root -p
show status like 'wsrep_cluster_status'; # 모든 노드에서 Primary
show status like 'wsrep_cluster_size'; #모든 노드에서 클러스터의 총 노드 수(3)
show status like 'wsrep_local_state_comment'; #모든 노드에서 Synced

방금 추가한 database를 다른 곳에서도 전부 확인 가능



나머지 2대 중 1대에서 db 생성

중지한 서버 다시 실행 후 database 확인

+)
telnet [ip주소][포트번호]
리눅스에서 위의 명령어를 이용해 접속하려는 서버의 포트가 열려있는지 확인할 수 있다.
ping으로는 포트가 열렸는지는 확인할 수 없으므로