Keepalived(LV)의 HA+ 부하 평형기 구조를 활용한 연구
7512 단어 LinuxkeepalivedLVS
결론적으로는 가능하지만 예산이 허락된다면 직무를 분리하고 분배지와 원래 다른 노드로 구성하는 것을 권장한다.
또 포트 번호도 알 수 있듯이 원래는 레디스의 이중화를 염두에 뒀다.Redis 이중화에 대해서는 다른 항목에 기재될 수 있습니다.
시스템 구성
시스템 구성을 먼저 표시합니다.
keepalived의 VIP를 통해client에서 프로그램에 접근합니다.VIP도 load balance를 진행해 2대를 적절히 배정한다.
또 1대 하락 시 VIP는 다른 노드로 이동해 계속 처리한다.
각 설정
기본적으로 서버 1, 서버 2의 설정은 모두 같다.모든 서버에서 설정하십시오.
keepalived 설정
/etc/keepalived/keepalived.conf! Configuration File for keepalived
vrrp_instance VI_1 {
state BACKUP
interface eth1
virtual_router_id 51
priority 50
advert_int 1
notify_master "/usr/local/scripts/notify-master.sh"
notify_backup "/usr/local/scripts/notify-backup.sh"
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.33.20
}
unicast_peer {
192.168.33.11
192.168.33.12
}
}
virtual_server 192.168.33.20 26379 {
delay_loop 5
lvs_sched wrr
lvs_method DR
protocol TCP
real_server 192.168.33.11 6379 {
weight 1
inhibit_on_failure
TCP_CHECK {
connect_port 6379
connect_timeout 5
}
}
real_server 192.168.33.12 6379 {
weight 1
inhibit_on_failure
TCP_CHECK {
connect_port 6379
connect_timeout 5
}
}
}
virtual_server
의 포트는 26379
로 설정되어 원래의 포트 번호와 다르지만 고의로 이렇게 한다.이따가 설명할게요.
loopback 주소 설정
VIP를 방문할 때 자신을 식별할 수 있도록 loopback 주소를 만듭니다.
/etc/sysconfig/networkd-scripts/ifcfg-lo0DEVICE=lo:0
IPADDR=192.168.33.20
NETMASK=255.255.255.255
ONBOOT=yes
생성 후 반영.sudo service network restart
kerner parameter 변경
맥 주소를 저장하고 IP forwarding 설정을 추가하지 않도록 커널 파라미터를 변경합니다.
/etc/sysctl.d/keepalivednet.ipv4.conf.all.arp_ignore = 0
net.ipv4.conf.all.arp_announce = 0
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.eth1.arp_ignore = 1
net.ipv4.conf.eth1.arp_announce = 2
net.ipv4.conf.eth1.rp_filter= 0
net.ipv4.ip_forward = 1
여러 가지 검증을 거친 후 시행착오를 일으킨 설정이라 필요 없는 것이 있을 수 있다.sysctl.d
디렉토리가 없으면 를 만듭니다.
CentOS 6도 읽을 수 있습니다.1
설정 후 반영.sudo sysctl -p /etc/sysctl.d/keepalived
keepalived에서 발매한 스크립트
keepalived에도 마스터/BACKUPState가 있어 각자state가 될 때 스크립트를 발매할 수 있습니다.
/usr/local/scripts/notify-master.sh#!/bin/bash -u
### Change vip port in keepalived
sed -i -e "s/virtual_server 192.168.33.20 .* {/virtual_server 192.168.33.20 6379 {/g" /etc/keepalived/keepalived.conf
service keepalived reload
/usr/local/scripts/notify-backup.sh#!/bin/bash -u
### Change vip port in keepalived
RELOAD_FLG=0
grep "virtual_server 192.168.33.29 26379 {" /etc/keepalived/keepalived.conf > /dev/null
if [ $? -ne 0 ] ; then
RELOAD_FLG=1
fi
sed -i -e "s/virtual_server 192.168.33.20 .* {/virtual_server 192.168.33.20 26379 {/g" /etc/keepalived/keepalived.conf
# reloadのタイミングでBACKUP STATEに移行して再度このスクリプトが実行されるため、無限実行を防ぐためにチェックを行う
if [ ${RELOAD_FLG} -eq 1 ] ;then
service keepalived reload
fi
### delete master vip (if exist)
ip addr show eth1 | grep "inet 192.168.33.20/32" > /dev/null
if [ $? -eq 0 ] ; then
sudo ip addr del 192.168.33.20/32 dev eth1
fi
결실
마지막으로 각자의keepalived를 시작한 후client에서 VIP를 방문하면 잘 분배될 것 같습니다.
또한look back 인터페이스에 IP 주소가 기재되어 있기 때문에 서버 1, 서버 2 자체는 분배를 확인할 수 없습니다.(항상 자신만 방문)
주안점
이 설정에서keepalived의 MASTER state 측면에서만 notify_master
스크립트에 따라 VIP의 포트를 올바르게 변경합니다.결과는 다음과 같다.
keepalived.conf# MASTER state
virtual_server 192.168.33.20 6379 {
keepalived.conf# BACKUP state
virtual_server 192.168.33.20 26379 {
MASTER state 측의keepalived가 떨어지면 다른 노드의keepalived에서도 이것을 검출하여 virtual_server
의 포트 번호를 정확하게 변경한 다음 다시 불러옵니다.
이 설정을 하지 않으면client 분배 목적지(이번에 말한 서버 1server2) 사이에서 통신을 할 때 간혹 네트워크 순환을 일으켜 서버 1/server2 사이에서 무한 통신을 할 수 있습니다.(tcpdump에서 보면 너무 안 좋아요)
한 번, 몇 번, 한 번이 싫은 곳에서는 한 번, 한두 번 하면 잘 풀리기 때문에 좋지 않은...
각주2에도 있지만,vagrant에서 하면 문제가 생길 수 있으니 아마도 이것이 문제일 것이다.게다가 내가 확인한 곳은vagrant만 문제가 아니라 실황 중계에서도 평범하게 발생했다...
마찬가지로 BACKUPState로 옮기면 가상 포트 번호로 다시 변경해야 하기 때문에 상기 내용에서 설정된 경우reload를 하지 마십시오.이 제어를 하지 않으면'BACKUPState로 변해'→'notify backup 스크립트 실행'→'스크립트의keepalived reload'→'reload를 통해 BACKUpstate 재인식'→'notify backup 스크립트 실행'→ 이하의 무한 순환에 빠질 수 있습니다.
총결산
대체로 위 설정에 따라 HA를 구성하면서 로드 밸런스를 진행하는 것으로 구성할 수 있다.LB 노드와 LB를 모아 목표 노드를 분배할 수 있기 때문에 서버 대수를 절약할 수 있다.
따라서keepalived에서keepalived.conf를 고쳐 이런 복잡한 구조를 다시 불러올 필요가 있고 분배 목표를 자신으로 만들기 위해서는 더 많은 설정을 해야 하기 때문에 상당히 복잡하고 민감한 구성이라고 생각합니다.
따라서 서버 대수절 이외의 목적은 일반적으로 분배원과 선노드를 분리하여 관리하면 유지보수성이 많이 높아진다.
reference
중앙 OS 6에서d/ 사용 가능 (ipv6 무효화 등) ↩
Linux로 L4의 로드 밸런스를 간단하게 만들려면 ↩
Reference
이 문제에 관하여(Keepalived(LV)의 HA+ 부하 평형기 구조를 활용한 연구), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/tkit/items/698ca562557a52bd8d87
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
기본적으로 서버 1, 서버 2의 설정은 모두 같다.모든 서버에서 설정하십시오.
keepalived 설정
/etc/keepalived/keepalived.conf
! Configuration File for keepalived
vrrp_instance VI_1 {
state BACKUP
interface eth1
virtual_router_id 51
priority 50
advert_int 1
notify_master "/usr/local/scripts/notify-master.sh"
notify_backup "/usr/local/scripts/notify-backup.sh"
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.33.20
}
unicast_peer {
192.168.33.11
192.168.33.12
}
}
virtual_server 192.168.33.20 26379 {
delay_loop 5
lvs_sched wrr
lvs_method DR
protocol TCP
real_server 192.168.33.11 6379 {
weight 1
inhibit_on_failure
TCP_CHECK {
connect_port 6379
connect_timeout 5
}
}
real_server 192.168.33.12 6379 {
weight 1
inhibit_on_failure
TCP_CHECK {
connect_port 6379
connect_timeout 5
}
}
}
virtual_server
의 포트는 26379
로 설정되어 원래의 포트 번호와 다르지만 고의로 이렇게 한다.이따가 설명할게요.loopback 주소 설정
VIP를 방문할 때 자신을 식별할 수 있도록 loopback 주소를 만듭니다.
/etc/sysconfig/networkd-scripts/ifcfg-lo0
DEVICE=lo:0
IPADDR=192.168.33.20
NETMASK=255.255.255.255
ONBOOT=yes
생성 후 반영.sudo service network restart
kerner parameter 변경
맥 주소를 저장하고 IP forwarding 설정을 추가하지 않도록 커널 파라미터를 변경합니다.
/etc/sysctl.d/keepalived
net.ipv4.conf.all.arp_ignore = 0
net.ipv4.conf.all.arp_announce = 0
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.eth1.arp_ignore = 1
net.ipv4.conf.eth1.arp_announce = 2
net.ipv4.conf.eth1.rp_filter= 0
net.ipv4.ip_forward = 1
여러 가지 검증을 거친 후 시행착오를 일으킨 설정이라 필요 없는 것이 있을 수 있다.sysctl.d
디렉토리가 없으면 를 만듭니다.CentOS 6도 읽을 수 있습니다.1
설정 후 반영.
sudo sysctl -p /etc/sysctl.d/keepalived
keepalived에서 발매한 스크립트
keepalived에도 마스터/BACKUPState가 있어 각자state가 될 때 스크립트를 발매할 수 있습니다.
/usr/local/scripts/notify-master.sh
#!/bin/bash -u
### Change vip port in keepalived
sed -i -e "s/virtual_server 192.168.33.20 .* {/virtual_server 192.168.33.20 6379 {/g" /etc/keepalived/keepalived.conf
service keepalived reload
/usr/local/scripts/notify-backup.sh#!/bin/bash -u
### Change vip port in keepalived
RELOAD_FLG=0
grep "virtual_server 192.168.33.29 26379 {" /etc/keepalived/keepalived.conf > /dev/null
if [ $? -ne 0 ] ; then
RELOAD_FLG=1
fi
sed -i -e "s/virtual_server 192.168.33.20 .* {/virtual_server 192.168.33.20 26379 {/g" /etc/keepalived/keepalived.conf
# reloadのタイミングでBACKUP STATEに移行して再度このスクリプトが実行されるため、無限実行を防ぐためにチェックを行う
if [ ${RELOAD_FLG} -eq 1 ] ;then
service keepalived reload
fi
### delete master vip (if exist)
ip addr show eth1 | grep "inet 192.168.33.20/32" > /dev/null
if [ $? -eq 0 ] ; then
sudo ip addr del 192.168.33.20/32 dev eth1
fi
결실
마지막으로 각자의keepalived를 시작한 후client에서 VIP를 방문하면 잘 분배될 것 같습니다.
또한look back 인터페이스에 IP 주소가 기재되어 있기 때문에 서버 1, 서버 2 자체는 분배를 확인할 수 없습니다.(항상 자신만 방문)
주안점
이 설정에서keepalived의 MASTER state 측면에서만 notify_master
스크립트에 따라 VIP의 포트를 올바르게 변경합니다.결과는 다음과 같다.
keepalived.conf# MASTER state
virtual_server 192.168.33.20 6379 {
keepalived.conf# BACKUP state
virtual_server 192.168.33.20 26379 {
MASTER state 측의keepalived가 떨어지면 다른 노드의keepalived에서도 이것을 검출하여 virtual_server
의 포트 번호를 정확하게 변경한 다음 다시 불러옵니다.
이 설정을 하지 않으면client 분배 목적지(이번에 말한 서버 1server2) 사이에서 통신을 할 때 간혹 네트워크 순환을 일으켜 서버 1/server2 사이에서 무한 통신을 할 수 있습니다.(tcpdump에서 보면 너무 안 좋아요)
한 번, 몇 번, 한 번이 싫은 곳에서는 한 번, 한두 번 하면 잘 풀리기 때문에 좋지 않은...
각주2에도 있지만,vagrant에서 하면 문제가 생길 수 있으니 아마도 이것이 문제일 것이다.게다가 내가 확인한 곳은vagrant만 문제가 아니라 실황 중계에서도 평범하게 발생했다...
마찬가지로 BACKUPState로 옮기면 가상 포트 번호로 다시 변경해야 하기 때문에 상기 내용에서 설정된 경우reload를 하지 마십시오.이 제어를 하지 않으면'BACKUPState로 변해'→'notify backup 스크립트 실행'→'스크립트의keepalived reload'→'reload를 통해 BACKUpstate 재인식'→'notify backup 스크립트 실행'→ 이하의 무한 순환에 빠질 수 있습니다.
총결산
대체로 위 설정에 따라 HA를 구성하면서 로드 밸런스를 진행하는 것으로 구성할 수 있다.LB 노드와 LB를 모아 목표 노드를 분배할 수 있기 때문에 서버 대수를 절약할 수 있다.
따라서keepalived에서keepalived.conf를 고쳐 이런 복잡한 구조를 다시 불러올 필요가 있고 분배 목표를 자신으로 만들기 위해서는 더 많은 설정을 해야 하기 때문에 상당히 복잡하고 민감한 구성이라고 생각합니다.
따라서 서버 대수절 이외의 목적은 일반적으로 분배원과 선노드를 분리하여 관리하면 유지보수성이 많이 높아진다.
reference
중앙 OS 6에서d/ 사용 가능 (ipv6 무효화 등) ↩
Linux로 L4의 로드 밸런스를 간단하게 만들려면 ↩
Reference
이 문제에 관하여(Keepalived(LV)의 HA+ 부하 평형기 구조를 활용한 연구), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/tkit/items/698ca562557a52bd8d87
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
이 설정에서keepalived의 MASTER state 측면에서만
notify_master
스크립트에 따라 VIP의 포트를 올바르게 변경합니다.결과는 다음과 같다.keepalived.conf
# MASTER state
virtual_server 192.168.33.20 6379 {
keepalived.conf# BACKUP state
virtual_server 192.168.33.20 26379 {
MASTER state 측의keepalived가 떨어지면 다른 노드의keepalived에서도 이것을 검출하여 virtual_server
의 포트 번호를 정확하게 변경한 다음 다시 불러옵니다.이 설정을 하지 않으면client 분배 목적지(이번에 말한 서버 1server2) 사이에서 통신을 할 때 간혹 네트워크 순환을 일으켜 서버 1/server2 사이에서 무한 통신을 할 수 있습니다.(tcpdump에서 보면 너무 안 좋아요)
한 번, 몇 번, 한 번이 싫은 곳에서는 한 번, 한두 번 하면 잘 풀리기 때문에 좋지 않은...
각주2에도 있지만,vagrant에서 하면 문제가 생길 수 있으니 아마도 이것이 문제일 것이다.게다가 내가 확인한 곳은vagrant만 문제가 아니라 실황 중계에서도 평범하게 발생했다...
마찬가지로 BACKUPState로 옮기면 가상 포트 번호로 다시 변경해야 하기 때문에 상기 내용에서 설정된 경우reload를 하지 마십시오.이 제어를 하지 않으면'BACKUPState로 변해'→'notify backup 스크립트 실행'→'스크립트의keepalived reload'→'reload를 통해 BACKUpstate 재인식'→'notify backup 스크립트 실행'→ 이하의 무한 순환에 빠질 수 있습니다.
총결산
대체로 위 설정에 따라 HA를 구성하면서 로드 밸런스를 진행하는 것으로 구성할 수 있다.LB 노드와 LB를 모아 목표 노드를 분배할 수 있기 때문에 서버 대수를 절약할 수 있다.
따라서keepalived에서keepalived.conf를 고쳐 이런 복잡한 구조를 다시 불러올 필요가 있고 분배 목표를 자신으로 만들기 위해서는 더 많은 설정을 해야 하기 때문에 상당히 복잡하고 민감한 구성이라고 생각합니다.
따라서 서버 대수절 이외의 목적은 일반적으로 분배원과 선노드를 분리하여 관리하면 유지보수성이 많이 높아진다.
reference
중앙 OS 6에서d/ 사용 가능 (ipv6 무효화 등) ↩
Linux로 L4의 로드 밸런스를 간단하게 만들려면 ↩
Reference
이 문제에 관하여(Keepalived(LV)의 HA+ 부하 평형기 구조를 활용한 연구), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/tkit/items/698ca562557a52bd8d87
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
중앙 OS 6에서d/ 사용 가능 (ipv6 무효화 등) ↩
Linux로 L4의 로드 밸런스를 간단하게 만들려면 ↩
Reference
이 문제에 관하여(Keepalived(LV)의 HA+ 부하 평형기 구조를 활용한 연구), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/tkit/items/698ca562557a52bd8d87텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)