일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- redis
- Keepalived
- ASP.NET
- 기어스 오브 워
- 센티넬
- ipod
- AirComic
- 커버구루
- Gears of War
- gitlab
- haproxy
- 고가용성
- DotNetOpenAuth
- iPod Touch
- .NET
- mmbot
- XBOX360
- NoSQL
- c#
- 네아로
- TeamCity
- 레디스
- 복제
- sentinel
- DSM6
- High Availability
- replication
- Cover Guru
- 닷넷
- 개발
- Today
- Total
Once in a Lifetime
04. Redis - HaProxy 스위치 설정 본문
Sentinel 을 이용하여 Master 서버가 Down 되더라도 Slave 를 자동으로 Master 로 승격시켜 Failover 처리를 할수 있게 되었지만, 클라이언트측에서는 어떤 Slave 가 Master 로 승격되었는지 알 길이 없습니다. 동일한 접속을 보장하기 위해서 HaProxy 를 사용하여 Master 서버는 5000 번, Slave 서버는 5001 번으로 바인딩 해주는 작업을 해보겠습니다.
HaProxy 설치
yum -y install haproxy
HaProxy 가 설치되는 서버에 필요한 방화벽 Port 들을 열어줍니다. Redis 접속을 위한 6379, 클라이언트 접속을 위한 5000, 5001과 모니터링툴을 위한 80 포트까지 열어 줍니다.
firewall-cmd --permanent --zone=public --add-port=6379/tcp
firewall-cmd --permanent --zone=public --add-port=5000/tcp
HaProxy 설정 파일을 구성합니다. 설정파일의 구성은 크게 프런트엔드와 백엔드의 구성으로 나뉩니다.
프런트엔드는 실제로 클라이언트가 접속하는 5000, 5001번 포트에 대한 구성이고, 백엔드는 각각의 프런트엔드의 하위에 실제로 물려있는 서버들의 정보들을 구성해 줍니다.
nano /etc/haproxy/haproxy.cfg
- 디폴트 설정
defaults REDIS
mode tcp
timeout connect 4s
timeout server 15s
timeout client 15s
timeout tunnel 365d
- 프런트엔드 설정 (Master)
frontend ft_redis_master
bind *:5000 name redis
default_backend bk_redis_master
- 백엔드 설정 (Master)
backend bk_redis_master
option tcp-check
tcp-check send AUTH\ mypassword\r\n
tcp-check expect string +OK
tcp-check send PING\r\n
tcp-check expect string +PONG
tcp-check send info\ replication\r\n
tcp-check expect string role:master
tcp-check send QUIT\r\n
tcp-check expect string +OK
server R1 192.168.xx.xxx:6379 check inter 1s
server R2 192.168.xx.xxx:6379 check inter 1s
server R3 192.168.xx.xxx:6379 check inter 1s
- 프런트엔드 설정 (Slave)
frontend ft_redis_slave
bind *:5001 name redis
default_backend bk_redis_slave
- 백엔드 설정 (Slave)
backend bk_redis_slave
option tcp-check
tcp-check send AUTH\ mypassword\r\n
tcp-check expect string +OK
tcp-check send PING\r\n
tcp-check expect string +PONG
tcp-check send info\ replication\r\n
tcp-check expect string role:slave
tcp-check send QUIT\r\n
tcp-check expect string +OK
server R1 192.168.xx.xxx:6379 check inter 1s
server R2 192.168.xx.xxx:6379 check inter 1s
server R3 192.168.xx.xxx:6379 check inter 1s
- 헬스체크 모니터링 페이지
listen stats 0.0.0.0:80
mode http
blance
timeout client 5000
timeout connect 4000
timeout server 300000
stats uri /stats
stats realm HAProxy\ Statistics
stats auth myadminid:myadminpassword
stats admin if TRUE
HaProxy 가 Master/Slave 판단을 위해서 간단한 스크립트(tcp-check)를 실행하여 Master/Slave 유무를 판단하고 있습니다. 이때 서버 인증을 위한 패스워드가 스크립트 실행에 영향을 줄수 있는 문자(Ex. $)가 있는 경우 체크에 실패하니 유의하시길 바랍니다.
HaProxy 는 별도의 로그 파일을 자동으로 생성하지 않기에, Log 파일 생성을 위해 아래와 같이 구성해 줍니다.
nano /etc/rsyslog.conf
$ModLoad imudp
$UDPServerRun 514
$UDPServerAddress 127.0.0.1
nano /etc/rsyslog.d/haproxy.conf
local2.* /var/log/haproxy.log
local2.=info /var/log/haproxy-info.log
local2.notice /var/log/haproxy-allbutinfo.log
로그 구성을 위한 설정 파일을 수정했으니, rsyslog 를 재시작 해줍니다.
systemctl restart rsyslog
HaProxy 의 모든 설정이 끝났습니다. 서비스를 시작해 봅니다.
systemctl start haproxy.service
systemctl enable haproxy.service
이상없이 서비스가 실행되었으면, 모니터링 페이지에서 확인해 봅니다.
http://local/stats
이제 클라이언트에서 5000 을 통해 Master 서버에, 5001 을 통해서 Slave 서버에 연결할 수 있게 되었습니다.
다음 포스트에서는 HaProxy 의 HA 구성을 위해 Keepalived 를 사용하여 이중화 하도록 하곘습니다.