MySQL proxy이란
네트워크 프로토콜을 사용하여 네트워크를 통해 MySQL의 서버와 클라이언트 사이의 통신을 제공하는 애플리케이션이다.
기본적인 구성에서 클라이언트의 쿼리를 MySQL 서버로 전달하고 서버의 응답을 클라이언트에게 반환한다.
기본 구성 외에도 클라이언트와 서버간 통신을 모니터링하고 변경할 수 있다.
클라이언트에서 쿼리를 가로 채서 서버에 보낸 쿼리 목록에 추가 쿼리를 삽입하고 서버에서 반환 할 때 추가 결과를 제거 할 수 있다.
proxy 서버를 구축 이유
-
보안 : 익명의 사용자가 서버에 직접 접근하는 것을 막는다.
-
속도 : proxy 서버는 사용자의 요청을 cache 해서, 동일한 요청이 들어오면 cache의 자원을 반환한다. 이는 서비스의 속도를 높여준다.
-
ACL : 사이트 접근에 대한 접근 정책을 정의할 수 있다.
-
Log/Audit : 회사내 직원의 인터넷 사용을 레포팅 할 수 있다. 반대로 인트라넷의 사용을 레포팅할 수도 있다.
-
지역 네트워크의 제한을 우회하기 위해서 : 보안상의 이유로 80번 외에는 포트를 막아 놓는 경우가 있는데, 이러한 제한을 우회해서 원하는 다른 서비스를 이용할 수 있다.
MHA구조에서 proxy 테스트 진행을 위해 사전에 MySQL설치 및 MHA구성이 필요합니다.
테스트 환경
Hostname
|
Public IP
|
Private IP
|
DB version
|
Role
|
VIP
|
jh-mha1
|
49.50.164.107
|
192.168.100.80
|
Mysql 8.0.28
|
Master
|
192.168.100.82
|
jh-mha2
|
101.101.211.249
|
192.168.100.81
|
Mysql 8.0.28
|
Slave
|
|
jh-mha3
|
27.96.131.135
|
192.168.100.83
|
|
MHA manager
|
|
mysqlproxy
|
101.101.208.34
|
192.168.100.84
|
|
MySQL Proxy
|
|
■ lua 설치
공식 웹사이트 다운로드: http://www.lua.org/download.html
[root@mysqlproxy ~]# yum -y install gcc.x86_64 libevent.x86_64 libevent-devel.x86_64 readline.x86_64 readline-devel.x86_64 ncurses.x86_64 ncurses-devel.x86_64 glib2.x86_64 glib2-devel.x86_64
[root@mysqlproxy ~]# wget http://www.lua.org/ftp/lua-5.1.4.tar.gz
--2022-09-20 14:52:57-- http://www.lua.org/ftp/lua-5.1.4.tar.gz
Resolving www.lua.org (www.lua.org)... 88.99.213.221, 2a01:4f8:10a:3edc::2
Connecting to www.lua.org (www.lua.org)|88.99.213.221|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 216679 (212K) [application/gzip]
Saving to: ‘lua-5.1.4.tar.gz’
100%[===================================================>] 216,679 226KB/s in 0.9s
2022-09-20 14:52:58 (226 KB/s) - ‘lua-5.1.4.tar.gz’ saved [216679/216679]
[root@mysqlproxy ~]# tar -zxvf lua-5.1.4.tar.gz
[root@mysqlproxy ~]# cd lua-5.1.4/
[root@mysqlproxy lua-5.1.4]# make linux
[root@mysqlproxy lua-5.1.4]# make install
[root@mysqlproxy lua-5.1.4]# export LUA_CFLAGS="-I/usr/local/include" LUA_LIBS="-L/usr/local/lib -llua -ldl" LDFLAGS="-lm"
■ mysql-proxy 설치
[root@mysqlproxy ~]# wget http://ftp.kaist.ac.kr/mysql/Downloads/MySQL-Proxy/mysql-proxy-0.8.5-linux-rhel5-x86-64bit.tar.gz
--2022-09-20 15:00:10-- http://ftp.kaist.ac.kr/mysql/Downloads/MySQL-Proxy/mysql-proxy-0.8.5-linux-rhel5-x86-64bit.tar.gz
Resolving ftp.kaist.ac.kr (ftp.kaist.ac.kr)... 103.22.220.133
Connecting to ftp.kaist.ac.kr (ftp.kaist.ac.kr)|103.22.220.133|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 12123640 (12M) [application/octet-stream]
Saving to: ‘mysql-proxy-0.8.5-linux-rhel5-x86-64bit.tar.gz’
100%[===================================================>] 12,123,640 10.1MB/s in 1.1s
2022-09-20 15:00:11 (10.1 MB/s) - ‘mysql-proxy-0.8.5-linux-rhel5-x86-64bit.tar.gz’ saved [12123640/12123640]
[root@mysqlproxy ~]# tar -zxvf mysql-proxy-0.8.5-linux-rhel5-x86-64bit.tar.gz
[root@mysqlproxy ~]# mkdir /usr/local/mysql-proxy
[root@mysqlproxy ~]# cp -rp mysql-proxy-0.8.5-linux-rhel5-x86-64bit/* /usr/local/mysql-proxy
[root@mysqlproxy ~]# cd /usr/local/mysql-proxy
■ rw-splitting.lua 파일 수정
[root@mysqlproxy mysql-proxy]# cp /usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua ./
[root@mysqlproxy mysql-proxy]# ls
bin include lib libexec licenses rw-splitting.lua share
[root@mysqlproxy mysql-proxy]# vi rw-splitting.lua
...생략
--- config
--
-- connection pool
if not proxy.global.config.rwsplit then
proxy.global.config.rwsplit = {
min_idle_connections = 1,
max_idle_connections = 1,
is_debug = false
}
end
■ bash_profile 추가
[root@mysqlproxy bin]# vi ~/.bash_profile
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
PATH=$PATH:$HOME/bin
export PATH
export EDBDIR=/usr/local/mysql-proxy/rw-splitting.lua
■ mysql-proxy 기동
[root@mysqlproxy ~]# cd /usr/local/mysql-proxy/bin/
[root@mysqlproxy bin]# ./mysql-proxy --plugins=proxy --proxy-read-only-backend-addresses=192.168.100.81:3306 --proxy-backend-addresses=192.168.100.82:3306 --proxy-lua-script=/usr/local/mysql-proxy/rw-splitting.lua &
[1] 23795
[root@mysqlproxy bin]# 2022-09-20 15:08:02: (critical) plugin proxy 0.8.5 started
— proxy-read-only-backend-addresses #읽기 전용 서버 주소(ip)
— proxy-backend-addresses #서버 주소(VIP 기입)
— proxy-lua-script #luaScript 경로
[root@mysqlproxy bin]# ps -ef | grep mysql-proxy
root 28738 11392 0 16:47 pts/1 00:00:00 /usr/local/mysql-proxy/libexec/mysql-proxy --proxy-read-only-backend-addresses=192.168.100.81:3306 --proxy-backend-addresses=192.168.100.82:3306 --proxy-lua-script=/usr/local/mysql-proxy/rw-splitting.lua
root 28796 11392 0 16:48 pts/1 00:00:00 grep --color=auto mysql-proxy
■ DB 유저 생성
MariaDB [(none)]> grant all on *.* to 'kim'@'192.168.100.84' identified by 'kim';
■ Slave에서 db proxy 접속(포트 4040)
-h <proxy서버 ip=""></proxy서버>
[root@jh-mha002 ~]# mysql -ukim -pkim -h 192.168.100.84 --port 4040
MariaDB [(none)]> select @@hostname;
+------------+
| @@hostname |
+------------+
| jh-mha001 |
+------------+
1 row in set (0.002 sec)
참고
'DataBase > MySQL & MariaDB' 카테고리의 다른 글
[MySQL - Tunner 설치] (0) | 2022.11.05 |
---|---|
[MySQL - mysql-proxy] part 2. Read/Write Split & 부하테스트 (0) | 2022.09.27 |
[MySQL - phpMyAdmin 설치] (0) | 2022.09.27 |
[MySQL - Online DDL] part 3 use. pt-online-change-schema (2) | 2022.08.25 |
[MySQL - Online DDL] part 2. 실습 (0) | 2022.08.25 |