LVS (Linux Virtual Server)구축 : ldirectord + heartbeat
L4 스위치의 부하 분산 기능을 리눅스 서버를 통해 진행하고자 한다.
서버의 구성은 아래와 같이 하면 될 것 같다.
VIP : 121.254.175.70 LVS1 : 121.254.175.77 LVS2 : 121.254.175.78 WEB1 : 121.254.175.75 WEB2 : 121.254.175.74 |
임의 설정한 호스트네임 정보를 각 LVS 서버에 등록을 해야 한다.
/etc/hosts /etc/sysconfig/network [Hostname] LVS Active: lvsactive.gunnm.xyz LVS Standby: lvsstandby.gunnm.xyz |
1. LVS Active 서버에서의 설정 : 121.254.175.77
# echo 'lvsactive.gunnm.xyz' > /proc/sys/kernel/hostname |
# vi /etc/sysconfig/network NETWORKING=yes HOSTNAME=lvsactive.gunnm.xyz |
# vi /etc/hosts 121.254.175.77 lvsactive.gunnm.xyz 121.254.175.78 lvsstandby.gunnm.xyz |
# vi /etc/sysctl.conf net.ipv4.ip_forward = 1 # 하단에 추가 net.ipv4.vs.secure_tcp=3 net.ipv4.vs.drop_packet=0 net.ipv4.vs.drop_entry=0 net.ipv4.vs.am_droprate=10 net.ipv4.vs.amemthresh=1024 # sysctl -p |
heartbeat + ldirectord 설치 # rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm # yum install heartbeat* -y # yum -y install ipvsadm # yum -y install perl-IO-Socket-INET6 # yum -y install perl-Email-Send # yum -y install perl-MailTools # yum -y install perl-Net-SSLeay # yum -y install perl-libwww-perl # yum install ldirect* 빨간색은 실패하는 설치 패키지이다. 아래의 링크를 통해 ldirectord 파일 다운로드 및 설치를 진행해야 한다. - 32bit # wget ftp://ftp.pbone.net/mirror/ftp5.gwdg.de/pub/opensuse/repositories/network:/ha-clustering:/Stable/CentOS_CentOS-6/i686/ldirectord-3.9.5-3.1.i686.rpm - 64bit # wget ftp://ftp.pbone.net/mirror/ftp5.gwdg.de/pub/opensuse/repositories/network:/ha-clustering:/Stable/CentOS_CentOS-6/x86_64/ldirectord-3.9.5-3.1.x86_64.rpm # rpm -ivh ldirectord-3.9.5-3.1.x86_64.rpm |
HA 설정 (Standby 의 상태 체크) /usr/share/doc/heartbeat-3.0.4/ha.cf 를 복사해와도 되지만 그냥 새로 만들고 아래 내용을 입력한다. # vi /etc/ha.d/ha.cf debugfile /var/log/ha-debug.log logfile /var/log/ha.log keepalive 2 deadtime 10 udpport 694 ucast eth0 121.254.175.78 node lvsactive.gunnm.xyz node lvsstandby.gunnm.xyz ping 121.254.175.65 auto_failback on respawn hacluster /usr/lib64/heartbeat/ipfail apiauth ipfail gid=haclient uid=hacluster |
가상IP 를 설정한다. # vi /etc/ha.d/haresources lvsactive.gunnm.xyz \ldirectord::ldirectord.cf \ IPaddr2::121.254.175.70/32/eth0 |
authkey 를 생성한다. # vi /etc/ha.d/authkeys auth 2 2 sha1 gunnmlvs root 만 읽을수 있도록 권한을 설정한다. # chmod 600 /etc/ha.d/authkeys -rw-------. 1 root root 23 2018-08-08 13:07 /etc/ha.d/authkeys |
분배 설정을 진행한다. # vi /etc/ha.d/ldirectord.cf checktimeout=10 checkinterval=10 autoreload=no logfile="/var/log/ldirectord.log" quiescent=no # Web Server LVS virtual=121.254.175.70:80 real=121.254.175.75:80 gate 10 real=121.254.175.74:80 gate 10 service=http request="gunnm.lvs" receive="gunnm" scheduler=wlc persistent=3600 protocol=tcp checktype=negotiate |
세션 동기화를 위한 방화벽 룰셋 추가 # iptables -t nat -A OUTPUT -d 224.0.0.81 -p udp --dport 8848 -j DNAT --to 121.254.175.78:8848 # iptables -t nat -A PREROUTING -s 121.254.175.78 -p udp --dport 8848 -j DNAT --to 224.0.0.81:8848 # iptables -t mangle -A PREROUTING -p tcp -s 0.0.0.0/0 -d 121.254.175.70/32 --dport 80 -j MARK --set-mark 1 # iptables -t mangle -A PREROUTING -p tcp -s 0.0.0.0/0 -d 121.254.175.70/32 --dport 443 -j MARK --set-mark 1 # service iptables save # service iptables restart |
2. LVS Standby 서버에서의 설정 : 121.254.175.78
# echo 'lvsstandby.gunnm.xyz' > /proc/sys/kernel/hostname |
# vi /etc/sysconfig/network NETWORKING=yes HOSTNAME=lvsstandby.gunnm.xyz |
# vi /etc/hosts 121.254.175.77 lvsactive.gunnm.xyz 121.254.175.78 lvsstandby.gunnm.xyz |
# vi /etc/sysctl.conf net.ipv4.ip_forward = 1 # 하단에 추가 net.ipv4.vs.secure_tcp=3 net.ipv4.vs.drop_packet=0 net.ipv4.vs.drop_entry=0 net.ipv4.vs.am_droprate=10 net.ipv4.vs.amemthresh=1024 # sysctl -p |
heartbeat + ldirectord 설치 # rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm # yum install heartbeat* -y # yum -y install ipvsadm # yum -y install perl-IO-Socket-INET6 # yum -y install perl-Email-Send # yum -y install perl-MailTools # yum -y install perl-Net-SSLeay # yum -y install perl-libwww-perl # yum install ldirect* 빨간색은 실패하는 설치 패키지이다. 아래의 링크를 통해 ldirectord 파일 다운로드 및 설치를 진행해야 한다. - 32bit # wget ftp://ftp.pbone.net/mirror/ftp5.gwdg.de/pub/opensuse/repositories/network:/ha-clustering:/Stable/CentOS_CentOS-6/i686/ldirectord-3.9.5-3.1.i686.rpm - 64bit # wget ftp://ftp.pbone.net/mirror/ftp5.gwdg.de/pub/opensuse/repositories/network:/ha-clustering:/Stable/CentOS_CentOS-6/x86_64/ldirectord-3.9.5-3.1.x86_64.rpm # rpm -ivh ldirectord-3.9.5-3.1.x86_64.rpm |
HA 설정 (Active 의 상태 체크) /usr/share/doc/heartbeat-3.0.4/ha.cf 를 복사해와도 되지만 그냥 새로 만들고 아래 내용을 입력한다. # vi /etc/ha.d/ha.cf debugfile /var/log/ha-debug.log logfile /var/log/ha.log keepalive 2 deadtime 10 udpport 694 ucast eth0 121.254.175.77 node lvsactive.gunnm.xyz node lvsstandby.gunnm.xyz ping 121.254.175.65 auto_failback on respawn hacluster /usr/lib64/heartbeat/ipfail apiauth ipfail gid=haclient uid=hacluster |
가상IP 를 설정한다. # vi /etc/ha.d/haresources lvsstandby.gunnm.xyz \ldirectord::ldirectord.cf \ IPaddr2::121.254.175.70/32/eth0 |
authkey 를 생성한다. # vi /etc/ha.d/authkeys auth 2 2 sha1 gunnmlvs root 만 읽을수 있도록 권한을 설정한다. # chmod 600 /etc/ha.d/authkeys -rw-------. 1 root root 23 2018-08-08 14:12 /etc/ha.d/authkeys |
분배 설정을 진행한다. # vi /etc/ha.d/ldirectord.cf checktimeout=10 checkinterval=10 autoreload=no logfile="/var/log/ldirectord.log" quiescent=no # Web Server LVS virtual=121.254.175.70:80 real=121.254.175.74:80 gate 10 real=121.254.175.75:80 gate 10 service=http request="gunnm.lvs" receive="gunnm" scheduler=wlc persistent=3600 protocol=tcp checktype=negotiate |
세션 동기화를 위한 방화벽 룰셋 추가 # iptables -t nat -A OUTPUT -d 224.0.0.81 -p udp --dport 8848 -j DNAT --to 121.254.175.77:8848 # iptables -t nat -A PREROUTING -s 121.254.175.77 -p udp --dport 8848 -j DNAT --to 224.0.0.81:8848 # iptables -t mangle -A PREROUTING -p tcp -s 0.0.0.0/0 -d 121.254.175.70/32 --dport 80 -j MARK --set-mark 1 # iptables -t mangle -A PREROUTING -p tcp -s 0.0.0.0/0 -d 121.254.175.70/32 --dport 443 -j MARK --set-mark 1 # service iptables save # service iptables restart |
3. LVS Active 및 Standby 서버에서 Heartbeat 구동
# service heartbeat start Starting High-Availability services: ERROR: Cannot locate resource script \ldirectord /usr/share/heartbeat/ResourceManager: line 209: ldirectord.cf: command not found Done. 서비스 구동이 실패한다! 실패 원인을 확인해 본다. /etc/ha.d/ldirectord.cf 의 구문 띄어쓰기에 문제가 있었음이 확인됐다. (별 말도 안되는 걸로 오류가 남) checktimeout=10 checkinterval=10 autoreload=no logfile="/var/log/ldirectord.log" quiescent=no # Web Server LVS virtual=121.254.175.70:80 real=121.254.175.75:80 gate 10 real=121.254.175.74:80 gate 10 service=http request="gunnm.lvs" receive="gunnm" scheduler=wlc persistent=3600 protocol=tcp checktype=negotiate 이렇게 수정하고 나니깐 정상적으로 작동 된다. LVS Active 에서 # ip addr 을 통해서 아이피 두 개가 활성화 된 것을 확인 할 수 있다. 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 5e:df:dd:9f:3b:e0 brd ff:ff:ff:ff:ff:ff inet 121.254.175.77/28 brd 121.254.175.79 scope global eth0 inet 121.254.175.70/32 brd 121.254.175.79 scope global eth0 inet6 fe80::5cdf:ddff:fe9f:3be0/64 scope link valid_lft forever preferred_lft forever LVS Standby 에서는 아래와 같이 확인 된다. # ip addr 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 2a:8b:f9:ad:f0:30 brd ff:ff:ff:ff:ff:ff inet 121.254.175.78/28 brd 121.254.175.79 scope global eth0 inet6 fe80::288b:f9ff:fead:f030/64 scope link valid_lft forever preferred_lft forever |
4. 강제 failover 발생시 구동 상태 확인
LVS Active 에서 heartbeat 를 중지한다. # service heartbeat stop Stopping High-Availability services: Done. # ip addr 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 5e:df:dd:9f:3b:e0 brd ff:ff:ff:ff:ff:ff inet 121.254.175.77/28 brd 121.254.175.79 scope global eth0 inet6 fe80::5cdf:ddff:fe9f:3be0/64 scope link valid_lft forever preferred_lft forever # vi /var/log/ha.log ResourceManager(default)[10507]: 2018/08/08_16:33:14 info: Running /etc/ha.d/resource.d/ldirectord ldirectord.cf stop Aug 08 16:33:15 lvsactive.gunnm.xyz heartbeat: [10494]: info: All HA resources relinquished. Aug 08 16:33:16 lvsactive.gunnm.xyz heartbeat: [9790]: info: killing /usr/lib64/heartbeat/ipfail process group 9816 with signal 15 Aug 08 16:33:17 lvsactive.gunnm.xyz heartbeat: [9790]: WARN: 1 lost packet(s) for [lvsstandby.gunnm.xyz] [542:544] Aug 08 16:33:17 lvsactive.gunnm.xyz heartbeat: [9790]: info: No pkts missing from lvsstandby.gunnm.xyz! Aug 08 16:33:18 lvsactive.gunnm.xyz heartbeat: [9790]: info: killing HBFIFO process 9793 with signal 15 Aug 08 16:33:18 lvsactive.gunnm.xyz heartbeat: [9790]: info: killing HBWRITE process 9794 with signal 15 Aug 08 16:33:18 lvsactive.gunnm.xyz heartbeat: [9790]: info: killing HBREAD process 9795 with signal 15 Aug 08 16:33:18 lvsactive.gunnm.xyz heartbeat: [9790]: info: killing HBWRITE process 9796 with signal 15 Aug 08 16:33:18 lvsactive.gunnm.xyz heartbeat: [9790]: info: killing HBREAD process 9797 with signal 15 Aug 08 16:33:18 lvsactive.gunnm.xyz heartbeat: [9790]: info: Core process 9797 exited. 5 remaining Aug 08 16:33:18 lvsactive.gunnm.xyz heartbeat: [9790]: info: Core process 9794 exited. 4 remaining Aug 08 16:33:18 lvsactive.gunnm.xyz heartbeat: [9790]: info: Core process 9795 exited. 3 remaining Aug 08 16:33:18 lvsactive.gunnm.xyz heartbeat: [9790]: info: Core process 9793 exited. 2 remaining Aug 08 16:33:18 lvsactive.gunnm.xyz heartbeat: [9790]: info: Core process 9796 exited. 1 remaining Aug 08 16:33:18 lvsactive.gunnm.xyz heartbeat: [9790]: info: lvsactive.gunnm.xyz Heartbeat shutdown complete. LVS Standby 에서 상태 확인 한다. # ip addr 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 2a:8b:f9:ad:f0:30 brd ff:ff:ff:ff:ff:ff inet 121.254.175.78/28 brd 121.254.175.79 scope global eth0 inet 121.254.175.70/32 brd 121.254.175.79 scope global eth0 inet6 fe80::288b:f9ff:fead:f030/64 scope link valid_lft forever preferred_lft forever # vi /var/log/ha.log Aug 08 16:33:16 lvsstandby.gunnm.xyz heartbeat: [1415]: info: Received shutdown notice from 'lvsactive.gunnm.xyz'. Aug 08 16:33:16 lvsstandby.gunnm.xyz heartbeat: [1415]: info: Resources being acquired from lvsactive.gunnm.xyz. Aug 08 16:33:16 lvsstandby.gunnm.xyz heartbeat: [3108]: info: acquire all HA resources (standby). ResourceManager(default)[3135]: 2018/08/08_16:33:16 info: Acquiring resource group: lvsstandby.gunnm.xyz ldirectord::ldirectord.cf IPaddr2::121.254.175.70/32/eth0 Aug 08 16:33:16 lvsstandby.gunnm.xyz heartbeat: [3109]: info: Local Resource acquisition completed. ResourceManager(default)[3135]: 2018/08/08_16:33:16 info: Running /etc/ha.d/resource.d/ldirectord ldirectord.cf start /usr/lib/ocf/resource.d//heartbeat/IPaddr2(IPaddr2_121.254.175.70)[3224]: 2018/08/08_16:33:17 INFO: Resource is stopped ResourceManager(default)[3135]: 2018/08/08_16:33:17 info: Running /etc/ha.d/resource.d/IPaddr2 121.254.175.70/32/eth0 start IPaddr2(IPaddr2_121.254.175.70)[3356]: 2018/08/08_16:33:17 INFO: Adding inet address 121.254.175.70/32 with broadcast address 121.254.175.79 to device eth0 IPaddr2(IPaddr2_121.254.175.70)[3356]: 2018/08/08_16:33:17 INFO: Bringing device eth0 up Active 다운시 자동으로 Standby 가 역할 전담하는 것을 확인했다. 다시 Active 활성화시의 상태를 확인한다. Active log Aug 08 16:37:54 lvsactive.gunnm.xyz heartbeat: [10859]: info: Pacemaker support: false Aug 08 16:37:54 lvsactive.gunnm.xyz heartbeat: [10859]: WARN: Logging daemon is disabled --enabling logging daemon is recommended Aug 08 16:37:54 lvsactive.gunnm.xyz heartbeat: [10859]: info: ************************** Aug 08 16:37:54 lvsactive.gunnm.xyz heartbeat: [10859]: info: Configuration validated. Starting heartbeat 3.0.4 Aug 08 16:37:54 lvsactive.gunnm.xyz heartbeat: [10860]: info: heartbeat: version 3.0.4 Aug 08 16:37:54 lvsactive.gunnm.xyz heartbeat: [10860]: info: Heartbeat generation: 1533705889 Aug 08 16:37:54 lvsactive.gunnm.xyz heartbeat: [10860]: info: glib: ucast: write socket priority set to IPTOS_LOWDELAY on eth0 Aug 08 16:37:54 lvsactive.gunnm.xyz heartbeat: [10860]: info: glib: ucast: bound send socket to device: eth0 Aug 08 16:37:54 lvsactive.gunnm.xyz heartbeat: [10860]: info: glib: ucast: set SO_REUSEPORT(w) Aug 08 16:37:54 lvsactive.gunnm.xyz heartbeat: [10860]: info: glib: ucast: bound receive socket to device: eth0 Aug 08 16:37:54 lvsactive.gunnm.xyz heartbeat: [10860]: info: glib: ucast: set SO_REUSEPORT(w) Aug 08 16:37:54 lvsactive.gunnm.xyz heartbeat: [10860]: info: glib: ucast: started on port 694 interface eth0 to 121.254.175.78 Aug 08 16:37:54 lvsactive.gunnm.xyz heartbeat: [10860]: info: glib: ping heartbeat started. Aug 08 16:37:54 lvsactive.gunnm.xyz heartbeat: [10860]: info: G_main_add_TriggerHandler: Added signal manual handler Aug 08 16:37:54 lvsactive.gunnm.xyz heartbeat: [10860]: info: G_main_add_TriggerHandler: Added signal manual handler Aug 08 16:37:54 lvsactive.gunnm.xyz heartbeat: [10860]: info: G_main_add_SignalHandler: Added signal handler for signal 17 Aug 08 16:37:54 lvsactive.gunnm.xyz heartbeat: [10860]: info: Local status now set to: 'up' Aug 08 16:37:54 lvsactive.gunnm.xyz heartbeat: [10860]: info: Link 121.254.175.65:121.254.175.65 up. Aug 08 16:37:54 lvsactive.gunnm.xyz heartbeat: [10860]: info: Status update for node 121.254.175.65: status ping Aug 08 16:37:56 lvsactive.gunnm.xyz heartbeat: [10860]: info: Link lvsstandby.gunnm.xyz:eth0 up. Aug 08 16:37:56 lvsactive.gunnm.xyz heartbeat: [10860]: info: Status update for node lvsstandby.gunnm.xyz: status active harc(default)[10869]: 2018/08/08_16:37:56 info: Running /etc/ha.d//rc.d/status status Aug 08 16:37:56 lvsactive.gunnm.xyz heartbeat: [10860]: info: Comm_now_up(): updating status to active Aug 08 16:37:56 lvsactive.gunnm.xyz heartbeat: [10860]: info: Local status now set to: 'active' Aug 08 16:37:56 lvsactive.gunnm.xyz heartbeat: [10860]: info: Starting child client "/usr/lib64/heartbeat/ipfail" (496,495) Aug 08 16:37:56 lvsactive.gunnm.xyz heartbeat: [10886]: info: Starting "/usr/lib64/heartbeat/ipfail" as uid 496 gid 495 (pid 10886) Aug 08 16:37:57 lvsactive.gunnm.xyz heartbeat: [10860]: info: remote resource transition completed. Aug 08 16:37:57 lvsactive.gunnm.xyz heartbeat: [10860]: info: remote resource transition completed. Aug 08 16:37:57 lvsactive.gunnm.xyz heartbeat: [10860]: info: Local Resource acquisition completed. (none) Aug 08 16:37:57 lvsactive.gunnm.xyz heartbeat: [10860]: info: lvsstandby.gunnm.xyz wants to go standby [foreign] Aug 08 16:37:58 lvsactive.gunnm.xyz heartbeat: [10860]: info: standby: acquire [foreign] resources from lvsstandby.gunnm.xyz Aug 08 16:37:58 lvsactive.gunnm.xyz heartbeat: [10890]: info: acquire local HA resources (standby). ResourceManager(default)[10903]: 2018/08/08_16:37:58 info: Acquiring resource group: lvsactive.gunnm.xyz ldirectord::ldirectord.cf IPaddr2::121.254.175.70/32/eth0 ResourceManager(default)[10903]: 2018/08/08_16:37:58 info: Running /etc/ha.d/resource.d/ldirectord ldirectord.cf start /usr/lib/ocf/resource.d//heartbeat/IPaddr2(IPaddr2_121.254.175.70)[10967]: 2018/08/08_16:37:59 INFO: Resource is stopped ResourceManager(default)[10903]: 2018/08/08_16:37:59 info: Running /etc/ha.d/resource.d/IPaddr2 121.254.175.70/32/eth0 start IPaddr2(IPaddr2_121.254.175.70)[11098]: 2018/08/08_16:37:59 INFO: Adding inet address 121.254.175.70/32 with broadcast address 121.254.175.79 to device eth0 IPaddr2(IPaddr2_121.254.175.70)[11098]: 2018/08/08_16:37:59 INFO: Bringing device eth0 up IPaddr2(IPaddr2_121.254.175.70)[11098]: 2018/08/08_16:37:59 INFO: /usr/libexec/heartbeat/send_arp -i 200 -r 5 -p /var/run/resource-agents/send_arp-121.254.175.70 eth0 121.254.175.70 auto not_used not_used /usr/lib/ocf/resource.d//heartbeat/IPaddr2(IPaddr2_121.254.175.70)[11072]: 2018/08/08_16:37:59 INFO: Success Aug 08 16:37:59 lvsactive.gunnm.xyz heartbeat: [10890]: info: local HA resource acquisition completed (standby). Aug 08 16:37:59 lvsactive.gunnm.xyz heartbeat: [10860]: info: Standby resource acquisition done [foreign]. Aug 08 16:37:59 lvsactive.gunnm.xyz heartbeat: [10860]: info: Initial resource acquisition complete (auto_failback) Aug 08 16:38:00 lvsactive.gunnm.xyz heartbeat: [10860]: info: remote resource transition completed. Aug 08 16:38:06 lvsactive.gunnm.xyz ipfail: [10886]: info: Telling other node that we have more visible ping nodes. Aug 08 16:38:12 lvsactive.gunnm.xyz heartbeat: [10860]: info: lvsstandby.gunnm.xyz wants to go standby [all] Aug 08 16:38:13 lvsactive.gunnm.xyz heartbeat: [10860]: info: standby: acquire [all] resources from lvsstandby.gunnm.xyz Aug 08 16:38:13 lvsactive.gunnm.xyz heartbeat: [11183]: info: acquire all HA resources (standby). ResourceManager(default)[11196]: 2018/08/08_16:38:13 info: Acquiring resource group: lvsactive.gunnm.xyz ldirectord::ldirectord.cf IPaddr2::121.254.175.70/32/eth0 ResourceManager(default)[11196]: 2018/08/08_16:38:14 info: Running /etc/ha.d/resource.d/ldirectord ldirectord.cf start /usr/lib/ocf/resource.d//heartbeat/IPaddr2(IPaddr2_121.254.175.70)[11254]: 2018/08/08_16:38:14 INFO: Running OK Aug 08 16:38:14 lvsactive.gunnm.xyz heartbeat: [11183]: info: all HA resource acquisition completed (standby). Aug 08 16:38:14 lvsactive.gunnm.xyz heartbeat: [10860]: info: Standby resource acquisition done [all]. Aug 08 16:38:15 lvsactive.gunnm.xyz heartbeat: [10860]: info: remote resource transition completed. Standby log Aug 08 16:37:55 lvsstandby.gunnm.xyz heartbeat: [1415]: info: Heartbeat restart on node lvsactive.gunnm.xyz Aug 08 16:37:55 lvsstandby.gunnm.xyz heartbeat: [1415]: info: Link lvsactive.gunnm.xyz:eth0 up. Aug 08 16:37:55 lvsstandby.gunnm.xyz heartbeat: [1415]: info: Status update for node lvsactive.gunnm.xyz: status init Aug 08 16:37:55 lvsstandby.gunnm.xyz heartbeat: [1415]: info: Status update for node lvsactive.gunnm.xyz: status up harc(default)[3761]: 2018/08/08_16:37:55 info: Running /etc/ha.d//rc.d/status status harc(default)[3777]: 2018/08/08_16:37:55 info: Running /etc/ha.d//rc.d/status status Aug 08 16:37:57 lvsstandby.gunnm.xyz heartbeat: [1415]: info: Status update for node lvsactive.gunnm.xyz: status active harc(default)[3793]: 2018/08/08_16:37:57 info: Running /etc/ha.d//rc.d/status status Aug 08 16:37:58 lvsstandby.gunnm.xyz heartbeat: [1415]: info: remote resource transition completed. Aug 08 16:37:58 lvsstandby.gunnm.xyz heartbeat: [1415]: info: lvsstandby.gunnm.xyz wants to go standby [foreign] Aug 08 16:37:58 lvsstandby.gunnm.xyz heartbeat: [1415]: info: standby: lvsactive.gunnm.xyz can take our foreign resources Aug 08 16:37:58 lvsstandby.gunnm.xyz heartbeat: [3809]: info: give up foreign HA resources (standby). Aug 08 16:37:58 lvsstandby.gunnm.xyz heartbeat: [3809]: info: foreign HA resource release completed (standby). Aug 08 16:37:58 lvsstandby.gunnm.xyz heartbeat: [1415]: info: Local standby process completed [foreign]. Aug 08 16:38:00 lvsstandby.gunnm.xyz heartbeat: [1415]: WARN: 1 lost packet(s) for [lvsactive.gunnm.xyz] [12:14] Aug 08 16:38:00 lvsstandby.gunnm.xyz heartbeat: [1415]: info: remote resource transition completed. Aug 08 16:38:00 lvsstandby.gunnm.xyz heartbeat: [1415]: info: No pkts missing from lvsactive.gunnm.xyz! Aug 08 16:38:00 lvsstandby.gunnm.xyz heartbeat: [1415]: info: Other node completed standby takeover of foreign resources. Aug 08 16:38:12 lvsstandby.gunnm.xyz heartbeat: [1415]: info: lvsstandby.gunnm.xyz wants to go standby [all] Aug 08 16:38:13 lvsstandby.gunnm.xyz heartbeat: [1415]: info: standby: lvsactive.gunnm.xyz can take our all resources Aug 08 16:38:13 lvsstandby.gunnm.xyz heartbeat: [3849]: info: give up all HA resources (standby). ResourceManager(default)[3862]: 2018/08/08_16:38:13 info: Releasing resource group: lvsstandby.gunnm.xyz ldirectord::ldirectord.cf IPaddr2::121.254.175.70/32/eth0 ResourceManager(default)[3862]: 2018/08/08_16:38:13 info: Running /etc/ha.d/resource.d/IPaddr2 121.254.175.70/32/eth0 stop IPaddr2(IPaddr2_121.254.175.70)[3923]: 2018/08/08_16:38:13 INFO: IP status = ok, IP_CIP= /usr/lib/ocf/resource.d//heartbeat/IPaddr2(IPaddr2_121.254.175.70)[3897]: 2018/08/08_16:38:13 INFO: Success ResourceManager(default)[3862]: 2018/08/08_16:38:13 info: Running /etc/ha.d/resource.d/ldirectord ldirectord.cf stop Aug 08 16:38:13 lvsstandby.gunnm.xyz heartbeat: [3849]: info: all HA resource release completed (standby). Aug 08 16:38:13 lvsstandby.gunnm.xyz heartbeat: [1415]: info: Local standby process completed [all]. Aug 08 16:38:15 lvsstandby.gunnm.xyz heartbeat: [1415]: WARN: 1 lost packet(s) for [lvsactive.gunnm.xyz] [26:28] Aug 08 16:38:15 lvsstandby.gunnm.xyz heartbeat: [1415]: info: remote resource transition completed. Aug 08 16:38:15 lvsstandby.gunnm.xyz heartbeat: [1415]: info: No pkts missing from lvsactive.gunnm.xyz! Aug 08 16:38:15 lvsstandby.gunnm.xyz heartbeat: [1415]: info: Other node completed standby takeover of all resources. Active 와 Standby 가 알아서 역할을 잘 설정한다. |
5. 실시간 모니터링 및 ldirectord 설정 변경시 적용 파일 생성
# vi /root/lvs.sh #!/bin/sh watch -n1 -t "echo ; ip addr ; echo ; ipvsadm -Ln ; ipvsadm -Ln --rate ; ipvsadm -Lnc" # vi /root/ldirect.sh (/etc/ha.d/ldirectord.cf 파일 내용 수정 후, reload 하는 파일) #!/bin/sh /etc/ha.d/resource.d/ldirectord /etc/ha.d/ldirectord.cf reload Active 에서 # sh lvs.sh 입력시 접속 세션 확인 가능 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 5e:df:dd:9f:3b:e0 brd ff:ff:ff:ff:ff:ff inet 121.254.175.77/28 brd 121.254.175.79 scope global eth0 inet 121.254.175.70/32 brd 121.254.175.79 scope global eth0 inet6 fe80::5cdf:ddff:fe9f:3be0/64 scope link valid_lft forever preferred_lft forever IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 121.254.175.70:80 wlc persistent 3600 -> 121.254.175.74:80 Route 10 0 1 -> 121.254.175.75:80 Route 10 5 2 IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port CPS InPPS OutPPS InBPS OutBPS -> RemoteAddress:Port TCP 121.254.175.70:80 0 1 0 85 0 -> 121.254.175.74:80 0 0 0 38 0 -> 121.254.175.75:80 0 0 0 47 0 IPVS connection entries pro expire state source virtual destination TCP 48:09 NONE 92.31.1.6:0 121.254.175.70:80 121.254.175.75:80 TCP 14:37 ESTABLISHED 222.231.27.246:6060 121.254.175.70:80 121.254.175.75:80 TCP 05:11 ESTABLISHED 222.231.27.246:6005 121.254.175.70:80 121.254.175.75:80 TCP 14:36 ESTABLISHED 222.231.27.246:6064 121.254.175.70:80 121.254.175.75:80 TCP 01:08 FIN_WAIT 222.231.27.246:6061 121.254.175.70:80 121.254.175.75:80 TCP 01:36 FIN_WAIT 222.231.27.246:6062 121.254.175.70:80 121.254.175.75:80 TCP 05:11 ESTABLISHED 222.231.27.246:6020 121.254.175.70:80 121.254.175.75:80 TCP 00:00 CLOSE 118.69.170.35:60980 121.254.175.70:80 121.254.175.74:80 TCP 14:47 ESTABLISHED 121.254.171.226:52493 121.254.175.70:80 121.254.175.75:80 TCP 59:49 NONE 118.69.170.35:0 121.254.175.70:80 121.254.175.74:80 TCP 59:17 NONE 121.254.171.226:0 121.254.175.70:80 121.254.175.75:80 TCP 59:36 NONE 222.231.27.246:0 121.254.175.70:80 121.254.175.75:80 Standby 에서는 아무것도 연결이 되어 있지 않다. 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 2a:8b:f9:ad:f0:30 brd ff:ff:ff:ff:ff:ff inet 121.254.175.78/28 brd 121.254.175.79 scope global eth0 inet 121.254.175.70/32 brd 121.254.175.79 scope global eth0 inet6 fe80::288b:f9ff:fead:f030/64 scope link valid_lft forever preferred_lft forever IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 121.254.175.70:80 wlc persistent 3600 -> 121.254.175.75:80 Route 10 3 0 IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port CPS InPPS OutPPS InBPS OutBPS -> RemoteAddress:Port TCP 121.254.175.70:80 0 0 0 0 0 -> 121.254.175.75:80 0 0 0 0 0 IPVS connection entries pro expire state source virtual destination TCP 11:27 ESTABLISHED 222.231.27.246:5992 121.254.175.70:80 121.254.175.75:80 TCP 56:27 NONE 222.231.27.246:0 121.254.175.70:80 121.254.175.75:80 TCP 11:27 ESTABLISHED 222.231.27.246:5991 121.254.175.70:80 121.254.175.75:80 TCP 11:27 ESTABLISHED 222.231.27.246:5993 121.254.175.70:80 121.254.175.75:80 |
이번 테스트는 동일 아이피 대역의 서버들끼로 진행을 했으니깐 간단하게 설정이 되었으나, 대역이 다른 서버들간의 구성시에는 라우트 추가가 진행되어야 한다.
해당 방법은 차후에 다시 해보기로 한다.
'리눅스 공부' 카테고리의 다른 글
리눅스 / 웹사이트 트래픽 제한 : cband 모듈 설치 (0) | 2018.04.04 |
---|---|
리눅스 / 현재 시간 동기화 (0) | 2018.03.29 |
리눅스 / DNS 서버 구축 (1) | 2018.03.23 |
리눅스 / 워드프레스 설치 (0) | 2018.03.12 |
resolv.conf 초기화 해결 (0) | 2018.03.09 |
티스토리 초대장 배포 10장 (등록 유효기간 2018.08.24)
안녕하세요.
티스토리로 부터 7월 초대장을 수령 하였습니다.
티스토리 블로그 개설이 필요하신 분들은 방명록 또는 댓글로 이메일 주소 남겨 주시면 발송하도록 하겠습니다.
등록 유효 기간 : 2018.08.24
마케팅 목적이 아닌, 티스토리 초대장이 꼭 필요하신 분들의 신청 바랍니다.
신청시 제 블로그 주소 및 닉네임을 포함하여 작성하신 분에게만 발송 하겠습니다.
감사합니다.
---------------------------------------------------------------------------------------------
7월 초대장 배포 완료 하였습니다.
2018.08.02 까지 등록이 완료되지 않은 초대장은 재배포 하도록 하겠습니다.
'일상다반사' 카테고리의 다른 글
티스토리 초대장 배포 10장 (등록 유효기간 2018.09.26) (73) | 2018.09.03 |
---|---|
티스토리 초대장 배포 10장 (등록 유효기간 2018.07.25) (58) | 2018.06.26 |
티스토리 초대장 배포 10장 (등록 유효기간 2018.06.25) (43) | 2018.05.28 |
티스토리 초대장 배포 10장 (등록 유효기간 2018.05.24) (80) | 2018.04.27 |
티스토리 초대장 배포 9장 (등록 유효기간 2018.04.25) (76) | 2018.04.02 |
Windows Server 2016 미디어 서비스 설치하기 #2 (실시간 스트리밍 / Expression Encoder 4)
미디어 서비스 설치가 완료 되었으니, 실시간 스트리밍 설정을 구축하려고 한다.
프로그램은 Microsoft Expression Encoder 4 SP2 를 이용한다.
MS 에서는 해당 프로그램에 대한 판매 및 지원이 종료가 되었다고 한다. 그래서 무료로 사용이 가능한 것 같다.
일단 다운로드 링크를 통해 접속하여 파일 다운로드 및 설치를 진행한다.
https://www.microsoft.com/ko-KR/download/details.aspx?id=27870
다음 단계로 넘어가면 "제품 키 입력" 이 나오는데, 무시하고 그냥 진행하면 된다. 키를 구입하려고 해도, 해당 페이지 호출이 안 되기 때문이다.
제품 키 입력을 꼭 해야 한다면, 아래의 링크를 타고 가서 복사해오면 된다.
https://www.youtube.com/watch?v=uY5G5_Igq68
Default 로 계속 진행을 한다.
설치 완료 후 프로그램을 실행하면, 프로젝트 선택이 나오는데 우측 하단의 "라이브 브로드캐스트 프로젝트" 를 선택한다.
그런데 문제가 발생했다. 비디오 장치를 선택하면 작동 중지 메시지가 호출 된다.
호환성 문제로 추정되어 실행 파일의 호환성 버전을 윈도우 7 로 낮췄는데도, 비정상 작동이 반복 된다.
Windows Server 2016 에서는 해당 프로그램 구동이 어려울 것 같다.
그래서, 데스크톱에 설치 후 진행을 했다. 어차피 서버의 역할은 단순하게 동영상 중계만 해주는 것이기 때문이다.
인코더 프로그램 설정을 진행하기 전에, 미디어 서비스의 설정을 우선 진행한다.
스트리밍 게시 지점을 선택하여 진입 후, "게시 지점 추가" 를 한다.
파일 이름은 뭐 본인이 좋아하는거 아무거나 입력해도 된다.
고급 설정에서 하단의 "첫 클라이언트 요청 시 게시 지점 자동 시작" 을 활성화 해준다.
확인을 눌러서 추가 작업을 완료하면, "게시 지점 시작" 을 눌러서 활성화 진행 한다.
이제 인코더 설정을 진행한다.
"라이브 원본" 창에서 장치 원본 추가 를 선택 한다.
비디오 장치에서 "Screen Capture Source" 를 선택한다.
오디오 장치는 탭에서 본인의 입력 장치를 선택하면 된다. 나는 오디오 input 이 없어서 안 나온다.
"사각형 선택" 선택 후, 보여질 영역을 선택 한다.
선택이 되면, 사각 박스 영역에서 출력되는 화면이 라이브 원본1 의 창에서도 출력이 된다.
이제 우측의 인코딩탭에서 출력 형식을 "IIS 부드러운 스트리밍" 으로 선택을 한다.
나머지 인코딩의 세부 설정을 본인이 알아서 선택을 한다.
출력탭에서 게시 지점 활성화 후, 위치를 입력한다.
위의 IIS 미디어 서비스에서 생성한 게시 지점 url 을 입력을 해준다.
http://win.gunnm.xyz/gunnm.isml
입력 후 연결을 누르면, 계정 정보를 입력하라는데 그냥 확인 선택하면 된다. 미디어 서비스에서 자격 증명 설정을 안 했기 때문에 그냥 통과 된다.
이제 중앙의 "시작" 을 선택하면 스트리밍이 시작이 된다.
다음은 인터넷익스플로러 (IE) 에서 실시간 스트리밍 시청이 가능하도록 설정 한다.
템플릿탭에서 원하는 플레이어를 선택 한다.
"생성" 을 선택하여 템플릿을 생성 한다. 폴더는 본인이 원하는 아무데나 설정하면 된다. 큰 의미는 없다.
지정한 폴더에 생성 된 파일을 전체 복사하여, 웹서버의 특정 폴더에 저장 한다.
익스플로러에서 해당 경로에 맞는 url 을 입력한다. Microsoft Silverlight 미설치시에는 화면이 안 나오므로, 설치를 진행한다.
http://win.gunnm.xyz/live/default.html
익스에서 정상적으로 호출이 된다. 다만 딜레이가 10초 이상은 걸리는 것 같다. 약 20초 정도?
다음으로는 이미 생성 된 웹페이지에 스트리밍 영역을 추가하는 작업을 진행한다.
간단하게, html 코드로 메인 페이지를 생성한다.
index.html
<html> <head> <title>Title is here</title> </head> <body> <b>"Hello, world!" </b><p> <i>win.gunnm.xyz Streaming Test</i><p> <img src="image/top.jpg"><p> </body> </html> |
live 폴더 안의 default.html 을 편집기로 연다.
1차로 필요한 부분은 <head></head> 안의 <style type 부터 </script> 까지다. 당연히 index.html 의 동일 부분에 삽입 한다.
2차로 필요한 부분은 <body></body> 안의 <div id="silverlightControlHost"> 부터 </div> 까지다. 이것도 위와 마찬가지로 한다.
그대로 복사를 해서 붙이면 플레이어가 100% 의 사이즈로 호출이 되기 때문에, 사이즈를 줄여준다.
<object data="data:application/x-silverlight," type="application/x-silverlight" width="100%" height="100%" 을 아래와 같이 고쳐준다.
<object data="data:application/x-silverlight," type="application/x-silverlight" width="50%" height="50%"
이 외 웹페이지에 이것저것 추가 하여도 상관은 없다.
http://win.gunnm.xyz/index.html 을 호출을 하면 당연히 동영상 플레이어 표시가 안 된다.
원인은 live 폴더 안에 있는 템플릿 관련 파일들이 호출되지 않기 때문이다. 해당 파일들을 웹루트에 복사를 하거나, html 파일 상단에 include 값을 입력하든, 절대 경로의 변경을 하든지 알아서 하면 된다.
아무튼 이래저래 해서 다시 메인 페이지 호출을 진행을 한다.
'윈도우 이야기 > Web Server' 카테고리의 다른 글
윈도우 서버 PHP v7.2 & CakePHP 3.7.9 설치하기 / Windows Server PHP v7.2 & CakePHP 3.7.9 Install (0) | 2020.04.27 |
---|---|
SNI (Server Name Indication) / 서버 이름 표시를 이용한 https 443 포트 다중 사용 (0) | 2018.09.17 |
Windows Server 2016 미디어 서비스 설치하기 #1 (IIS + Media Service) (7) | 2018.07.19 |
IIS + node.js 환경 구축시 유의 사항 (0) | 2018.05.16 |
응답 헤더를 통한 서버 정보 노출 방지 (HTTP Response Header Remove) (3) | 2017.09.05 |