반응형

Master node 작업

 

1. kubernetes 대시보드 적용

kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.4.0/aio/deploy/recommended.yaml

 

2. kubernetes-dashboard service의 yaml 변경

kubectl edit services kubernetes-dashboard -n kubernetes-dashboard

ClusterIP -> NodePort 로 수정


 

3. kubernetes 대시보드 실행

kubectl proxy &

 

4. kubernetes 대시보드 접속

[kubernetes-dashboard IP or Master node IP]:NodePort 접속
ex) 10.x.x.x:32243

 

5. 대시보드 접속 시 필요한 token 생성

1) admin-user 생성

cat <<EOF | kubectl create -f -
apiVersion: v1
kind: ServiceAccount
metadata:
  name: admin-user
  namespace: kubernetes-dashboard
EOF


 

2) 권한 부여

cat <<EOF | kubectl create -f -
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: admin-user
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
  - kind: ServiceAccount
    name: admin-user
    namespace: kubernetes-dashboard
EOF

 

3) token 생성 및 저장

kubectl -n kubernetes-dashboard create token admin-user > token.txt
cat token.txt

 

6. 대시보드 접속시 필요한 token 입력 후 접속 확인

반응형
반응형

Master 1대, Worked 1대로 테스트 구성

 

Master / Worked 둘다 작업

[docker 설치]

1. 종속성 설치

sudo apt update
sudo apt install apt-transport-https ca-certificates curl gnupg-agent software-properties-common

 

2. GPG 키 가져오기

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

 

3. docker APT 리포지토리 추가

add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

 

4. docker 설치

apt install docker-ce docker-ce-cli containerd.io

 

 

[kubernetes 설치 전 환경 설정]

1. swapoff

swapoff -a && sed -i '/swap/s/^/#/' /etc/fstab

 

2. /etc/sysctl.d/k8s.conf 설정, 적용

cat <<EOF | tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
 
sysctl --system

 

 

3. 방화벽 disable

systemctl stop firewalld
systemctl disabled firewalld

 

[kubeadm, kubectl, kubelet 설치]

1. apt kubernetes apt 리포지토리를 사용하는데 필수 패키지 설치

apt-get update
apt-get install -y apt-transport-https ca-certificates curl

 

2. google cloud 공개 서명 키 다운로드

mkdir -p /etc/apt/keyrings
curl -fsSL https://packages.cloud.google.com/apt/doc/apt-key.gpg | gpg --dearmor -o /etc/apt/keyrings/kubernetes-archive-keyring.gpg

 

3. kubernetes apt 리포지토리 추가

echo "deb [signed-by=/etc/apt/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | tee /etc/apt/sources.list.d/kubernetes.list

 

4. kubelet, kubeadm, kubectl 설치

apt-get update
apt-get install -y kubelet kubeadm kubectl

 

5. version hold

apt-mark hold kubelet kubeadm kubectl

 

6. daemon start

systemctl enable kubelet
systemctl start kubelet

 

 

 

Master 작업

1. initialize

kubeadm init

 

※ 에러

[preflight] Running pre-flight checks
error execution phase preflight: [preflight] Some fatal errors occurred:
           [ERROR CRI]: container runtime is not running: output: time="2023-07-20T07:02:28Z" level=fatal msg="validate service connection: CRI v1 runtime API is not implemented for endpoint \"unix:///var/run/containerd/containerd.sock\": rpc error: code = Unimplemented desc = unknown service runtime.v1.RuntimeService"
, error: exit status 1
[preflight] If you know what you are doing, you can make a check non-fatal with `--ignore-preflight-errors=...`
To see the stack trace of this error execute with --v=5 or higher

 

 

※ 해결 방법

vi /etc/containerd/config.toml
disabled_plugins = ["cri"]         ->     enabled_plugins = ["cri"]`
 
systemctl restart containerd.service

 

2. token.txt

kubeadm join [Master node IP]:6443 --token 6jmmvl.io0ayi3r4e88f214 \
           --discovery-token-ca-cert-hash sha256:1ad8f40017dffdc58c00f631457bcbe54111fa218c791356852dc330a82c27cb

 

※ 에러

kubectl get nodes
E0720 07:16:42.376110   16035 memcache.go:265] couldn't get current server API group list: Get "http://localhost:8080/api?timeout=32s": dial tcp 127.0.0.1:8080: connect: connection refused
E0720 07:16:42.376778   16035 memcache.go:265] couldn't get current server API group list: Get "http://localhost:8080/api?timeout=32s": dial tcp 127.0.0.1:8080: connect: connection refused
E0720 07:16:42.383078   16035 memcache.go:265] couldn't get current server API group list: Get "http://localhost:8080/api?timeout=32s": dial tcp 127.0.0.1:8080: connect: connection refused
E0720 07:16:42.383695   16035 memcache.go:265] couldn't get current server API group list: Get "http://localhost:8080/api?timeout=32s": dial tcp 127.0.0.1:8080: connect: connection refused
E0720 07:16:42.385621   16035 memcache.go:265] couldn't get current server API group list: Get "http://localhost:8080/api?timeout=32s": dial tcp 127.0.0.1:8080: connect: connection refused
The connection to the server localhost:8080 was refused - did you specify the right host or port?

 

※ 해결 방법

mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config

 

3. Installing a Pod network add-on

kubectl apply -f https://github.com/weaveworks/weave/releases/download/v2.8.1/weave-daemonset-k8s-1.11.yaml

 

 

  

 

Worked node 작업

 

1. master join 작업(master 에서 initializing join 값 입력)

kubeadm join [Master node IP]:6443 --token 6jmmvl.io0ayi3r4e88f214 \
           --discovery-token-ca-cert-hash sha256:1ad8f40017dffdc58c00f631457bcbe54111fa218c791356852dc330a82c27cb

 

2. join 확인







 

kubectl 명령어 자동완성

source <(kubectl completion bash)
echo "source <(kubectl completion bash)" >> ~/.bashrc

 

kubeadm 명령어 자동완성

source <(kubeadm completion bash)
echo "source <(kubeadm completion bash)" >> ~/.bashrc

 

 

명령어 사용법

 

(vi 편집기 열어 편집)

kubectl edit deployments.apps mainui

 

(nginx 이지미를 yaml 파일로 만들기)

kubectl run webserver --image=nginx:1.14 --port 80 --dry-run -o yaml > webserver-pods.ymal

 

(pod 파일 vi 편집기로 편집)

kubectl edit deployments.apps mainui

 

(pod 삭제)

kubectl delete deployments.apps mainui
kubectl delete pod webserver

 

(yaml 파일로 pod 실행)

kubectl create -f webserver-pods.ymal

 

(pod 생성 및 실행)

kubectl run nginx-webser --image=nginx:1.14 --port 80

 

(pod 삭제)

kubectl delete pods nginx-webser

 

반응형
반응형

LVS 구성_CentOS 7

(pacemaker + ldirectord)

 

 

Pacemaker ?

Cluster 관리를 위해 근래 apache storm, openstack 등에 사용하는 분산 코디네이터

 

Corosync ?

클러스터 내의 노드 간 Discovery, 통신, 동기화 작업 등을 담당

 

1. 사전 준비

* 서버 3대 (LVS master, LVS stantby, web 서버)


* ip 할당
VIP : xxx.xxx.xxx.70
LVSM : xxx.xxx.xxx.78
LVSS : xxx.xxx.xxx.117
WEB1 : xxx.xxx.xxx.121


* 방화벽 허용(master / slave 동일)
호스트 간 통신에 필요한 포트
TCP : 2224, 3121, 21064
UDP : 5405


- TCP 2224 : 클러스터의 노드 간 통신 시 필요
- TCP 3121 : 클러스터에 Pacemaker 원격 노드가 있는 경우 모든 노드에 필요
- TCP 21064 : 클러스터에 DLM 이 필요한 리소스가 포함된 경우에 필요
- UDP 5404 : corosync 노드에 필요


Hostname 설정 (master / slave 동일)

xxx.xxx.xxx.78 lvsm
xxx.xxx.xxx.117 lvss
xxx.xxx.xxx.121 www.hwlee.shop

 

 Master 서버 설정

 

1. cluster package 설치 / pcs 데몬 시작 (master/slave 동일)

# yum install -y pacemaker corosync pcs psmisc policycoreutils-python

# systemctl enable pcsd
# systemctl enable corosync
# systemctl enable pacemaker
# systemctl start pcsd

 

2. 클러스터 계정 설정 (master / slave 동일)

#passwd hacluster

 

3. 각 노드에 대한 hacluster 사용자 인증(master)

 # pcs cluster auth lvsm lvss
Username: hacluster
Password:
lvss: Authorized
lvsm: Authorized

 

4. 클러스터 생성/실행 (master)

#pcs cluster setup --name auth_cluster lvsm lvss
(명령을 통해 corosync를 구성하고 다른 노드와 동기화)


#pcs cluster start –all
(클러스터 실행)

 

5. STONITH 비활성화 (master)

# pcs property set stonith-enabled=false
# pcs property set no-quorum-policy=ignore

- STONITH는 서비스가 중복으로 실행되어 충돌 나는 것을 방지하기 위해 오류가 발생한 호스트를 죽이는 Fencing 기능
- cluster를 실행하면 데이터의 무결성을 확보하기 위해 기본으로 STONITH가 활성화 되어 있음 (활성화 -> 비활성화)

- no-quorum-policy: 클러스터에 quorum이 없을 때의 수행 작업을 설정


※ quorum 이란 ?
분산 시스템에서 작업을 수행하기 위해 분산 트랜잭션이 획득해야 하는 최소 투표 수로 노드가 2개인 클러스터에는 불필요하기 때문에 no-quorum-policy=ignore 설정으로 무시하도록 설정

 

 

6. Active/Passive 클러스터 설정 - 가상IP 생성 (master)

#pcs resource create VirtualIP ocf:heartbeat:IPaddr2 ip=xxx.xxx.xxx.70 cidr_netmask=32 op monitor interval=30s


#pcs resource enable VirtualIP

 

7. ldirectord 설치(master / slave 동일)

# rpm -ivh https://ko.osdn.net/projects/linux-ha/downloads/71663/pacemaker-repo-1.1.21-1.1.el7.x86_64.rpm
# yum -y install ldirectord
# yum erase -y pacemaker-repo

 

8. ocf:heartbeat resource 추가(master / slave 동일)

 

9. sysctl.conf 설정

# vi /etc/sysctl.conf
--------------------------
net.ipv4.ip_forward = 1
--------------------------
패킷 포워딩

# sysctl -p

 

10. ldirectord 설정

#vi /etc/ha.d/ldirectord.cf
-------------------------------------------
checktimeout=10
checkinterval=10
autoreload=no
quiescent=no


# Web Server LVS
virtual = xxx.xxx.xxx.70:80
real=xxx.xxx.xxx.121:80 gate 10
service=http
request="lvs"
receive="auth"
scheduler=wlc
persistent=7200
protocol=tcp
checkport=80
checktype=negotiate
------------------------------------------

 

11. web 서비스 resource 추가(master)

# pcs resource create WebService ocf:heartbeat:ldirectord op monitor interval="20" timeout="10"

 

12. 리소스 통합(master)
- VIP 와 웹 리소스가 나누어져 있어 한쪽으로 통합

# pcs constraint colocation add WebService with VirtualIP INFINITY

 

13. master 서버와 web 서버가 같은 네트워크 대역 대가 아니므로 라우팅 설정 추가(master)

# route add -net xxx.xxx.xxx.112 netmask 255.255.255.240 dev eth0

 

14. 확인








 # ipvsadm -Lnc


 

 

 

Slave 서버 설정
1. cluster package 설치 / pcs 데몬 시작 (master/slave 동일)

2. 클러스터 계정 설정 (master / slave 동일)
3. ldirectord 설치(master / slave 동일)
4. ocf:heartbeat resource 추가(master / slave 동일)
5. sysctl.conf 설정(master / slave 동일)
6. ldirectord 설정(master / slave 동일)

 

7. failover 테스트

# pcs cluster stop lvsm
(lvsm 노드 stop)


- lvss 로 넘어옴



#pcs cluster start lvsm

- lvsm 노드 start 하여도 lvsm 로 넘어오지 않음(failback)



※ auto_failback off
실 서버 lvsm 서버에 문제가 생겨 리소스가 강제로 lvss 로 넘어간 경우, lvsm 서버 상태가 완벽하게 확인이 되지 않은 상태로 다시 넘어오게 하지 않기 위해 failback 기능을 사용하지 않는다.

 

※ constraint ?

Pacemaker 소스를 선호하는 위치로 설정이 가능


#pcs constraint location WebService prefers lvsm=50
(lvsm 에 우선순위 50지정)


1) 설정 값 확인
# crm_simulate -sL



# pcs constraint show



#pcs cluster stop lvsm

- lvs M stop  lvsm → lvss 로 넘어감



# pcs cluster start lvsm

- lvs M start lvss → lvsm 으로 넘어옴

8. 확인
- 웹 에서 vip 접근 시




# ipvsadm -Lnc


 

 

Web 서버 설정

1. sysctl 설정

# vi /etc/sysctl.conf
--------------------------------------------------
- 패킷 포워딩
net.ipv4.ip_forward = 1


- 실 서버에 ARP 문제 해결을 위해 ARP에 대한 응답 없음 설정 추가
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2


net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2


net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2


net.ipv4.conf.eth0.arp_ignore = 1
net.ipv4.conf.eth0.arp_announce = 2
-----------------------------------------------------------------------------


# sysctl -p
(설정 적용)

 

2. 리얼 서버(web)는 가상 IP(VIP)를 로컬 주소로 인식하도록 lo:0 설정

# ifconfig lo:0 xxx.xxx.xxx.70 netmask 255.255.255.255 up

 

3. vip 확인

 

 

반응형
반응형

LVS(Linux Virtual Server) ?

- 리눅스 커널 기반 운영 체제를 위한 부하 분산 소프트웨어
- 서버 접근하는 이용자가 많을 때 서비스를 부하 분산하기 위해 이용
- 여러 서버에서 서비스를 제공하여 로드 밸런싱 가능

 

 

1. 사전 준비

* 서버 3(LVS master, LVS stantby, web 서버)


* ip 할당
VIP : xxx.xxx.xxx.70
LVSM : xxx.xxx.xxx.78
LVSS : xxx.xxx.xxx.xxx117
WEB1 : xxx.xxx.xxx.xxx.121

 

 

2. LVS master 구성

1) hostname 설정

# vi /etc/hosts(LVS master, slave, web 동일)
-----------------------------------------------
xxx.xxx.xxx.78 lvsm.hwlee.hsop
xxx.xxx.xxx.117 lvss.hwlee.shop
xxx.xxx.xxx.121 www.hwlee.shop
-----------------------------------------------

# hostname
------------------------
lvsm.hwlee.shop
------------------------

# vi /etc/sysconfig/network
-------------------------------------------
NETWORKING=yes
HOSTNAME=lvsm.hwlee.shop
GATEWAYDEV=eth0
-------------------------------------------

2) sysctl 설정(패킷 포워딩)
# 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
-------------------



3)  heartbeat + ldirectord 설치(LVS master / slave 동일)
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
# wget https://archives.fedoraproject.org/pub/archive/epel/6/x86_64/
# wget http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
# rpm -Uvh remi-release-6*.rpm epel-release-6*.rpm


# yum -y install heartbeat
# yum -y install heartbeat-*
# 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



# 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
------------------------------------------------------------------------------------------------------------------------------------------------------------------------


4) ha.cf 설정(Master 상태 체크)
# vi /etc/ha.d/ha.cf
----------------------------------------------------------------------------------------------------------------------
debugfile /var/log/ha-debug.log
logfile /var/log/ha.log
keepalive 2
deadtime 10
udpport 694


node lvsm.hwlee.shop
node lvss.hwlee.shop


auto_failback on


ucast eth0 xxx.xxx.xxx.117
---------------------------------------------------------------------------------------------------------------------

- debugfile : 디버깅 메시지가 기록될 파일 위치 지정
- logfile : 로그 파일 위치 지정
- keepalive : 두 노드 간(master/salve) 얼마나 자주 heartbeat를 주고 받을 것인가 설정
- deadtime : slave 서버가 죽었다고 판단하는 시간
- udpport : UDP heartbeat 패킷을 보낼 포트
- node lvsm.hwlee.shop : 시스템의 한 장치를 의미, Primary 노드
- node lvss.hwlee.shop : Secondary 노드


- auto_failback : 자동 복구 여부 설정
- ucast eth0 xxx.xxx.xxx.117 : Heartbeat를 보낼 인터페이스



5) auto_failback 테스트
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
ex ) master(on) / slave(off)
=> master heartbeat stop slave 로 넘어감
=> master heartbeat start master 로 넘어옴


ex ) master(off) / slave(off)
=> master heartbeat stop slave 로 넘어감
=> master heartbeat start master 로 넘어오지 않고 그대로 유지


ex ) master(off) /slave(on)
=> master heartbeat stop slave 로 넘어감

=> master heartbeat start master 로 넘어오지 않고 그대로 유지


ex ) master(on) / slave(on)
=> master heartbeat stop slave 로 넘어감
=> master heartbeat start master 로 넘어옴

결론
- master 서버 stop 으로 slave 에 넘어간 상태에서 master 서버의 auto_failback on일 경우 Primary(master)가 다시 살아나면 자동으로 VIPPrimary(master)로 넘어간다.
(현재 Primary 서버의 설정 값을 따라간다.)
------------------------------------------------------------------------------------------------------------------------------------------------------------------------



6)  VIP 설정 (줄바꿈 뒤에 공백 없어야 함)
# vi /etc/ha.d/haresources 설정(LVS master, slave 설정 동일)
-----------------------------------------------------------------------------------------------------
lvsm.hwlee.shop \
ldirectord::ldirectord.cf \
Ipaddr2::xxx.xxx.xxx.70/32/eth0 => eth0으로 설정

Ipaddr2::xxx.xxx.xxx.70/32/eth0:0 => eth0:0으로 설정
-----------------------------------------------------------------------------------------------------
- 노드간에 공유할 자원 및 스크립트 지정


7)  LVS 인증 파일 설정
# vi /etc/ha.d/authkeys
-----------------------
auth 2
2 sha1 lvs
-----------------------
- 노드간의 인증 방법을 지정
보안 강화순서(crc < md5 < sha1)


8) root 만 읽고 쓸 수 있도록 변경
# chmod 600 /etc/ha.d/authkeys




9) ldirectord 설정 (LVS master / slave 설정 동일)
# vi /etc/ha.d/conf/ldirectord.cf
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
checktimeout=10
checkinterval=10
autoreload=no
logfile="/var/log/ldirectord.log"
quiescent=no


# Web Server LVS
virtual=xxx.xxx.xxx.70:80
real=xxx.xxx.xxx.121:80 gate 10
service=http
request="lvsm.hwlee.shop"
receive="lvss.hwlee.shop"
scheduler=rr
persistent=3600
protocol=tcp
checktype=nogotiate
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- checktimeout : 정해진 시간 동안 통신이 안되면 노드 가중치를 0으로 설정

- checkinterval : 테스트 페이지 요청 주기
- autoreload : 다시 통신이 될 경우 노드 가중치 설정
- logfile : 로그 파일 경로 설정
- quiescent (yes/no)
  • yes : weight 값만 0으로 만들어 분리함
  • no : lvs 테이블에서 다운 된 웹 서버의 ip를 삭제하여 라우팅 제거
- virtual : 가상 서비스 네트워크
- real : 리얼 서버 ip 및 포트, 포워드 방식
  • gate = Direct Routing (상대의 ip 주소를 변경하지 않고 MAC 주소만 리얼서버의 주소로 변환해서 전송)
  • masq = Network address translation (상대의 ip주소를 리얼서버 주소로 변환해서 전송)
  • ipip = IP Tunneling (수신한 패킷을 리얼서버의 ip 헤더를 캡슐화해서 전송)
- service : 서비스 프로토콜 (ftp, smtp, dns, http, pop, imap, mysql )
- request : 서버가 정상 작동 하는지 확인 요청할 페이지 이름
- receive : 요청 페이지에서 찾을 문자열

- scheduler : 스케줄링 방식
  • rr = Round-Robin (모든 클라이언트는 동일하게 취급되며 실 서버 혹은 경로는 같은 처리량을 보유해야 한다)
  • wrr = Weighted Round-Robin (서로 다른 처리 능력을 가진 서버가 있을 경우 사용한다. 가중치를 주어 많이 처리할 수 있는 서버로 많은 트래픽을 할당한다)
  • lc = Least-Connection (연결 수가 가장 적은 서버에 네트워크 연결 방향을 정한다.)
  • wlc = Weighted Least-Connection (서버의 처리 능력을 고려하여 가중치를 부여하면서 least-connection scheduling을 적용하여 트래픽을 고르게 분산시키는 방법이다)


※ Weighted(가중치) ?
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- 각 서버에 부여되는 중요도나 수치를 말함
ex) 서버 A가 가중치 1로 되어 있고, 서버 B가 가중치 3으로 되어 있을 경우 가중치 1로 된 서버가 1번 연결될 때 마다 가중치 3로 되어 있는 서버는 3번 연결


* 가중치 설정 방법(/etc/ha.d/conf/ldirectord.cf)
=> real=xxx.xxx.xxx.121:80 gate 10


-----------------------------------------------------------------------------------------------------------------------------------------------------------------------

- persistent : 지속적으로 클라이언트 연결을 위한 시간 ()
- protocol : 프로토콜 종류 (tcp, udp, fwm)
  • tcp / udp = 사용할 프로토콜 종류, ip 주소 및 포트로 지정된 경우에 설정
  • fwm = 방화벽 표시인 경우 설정


- checktype : 연결 확인 방법 (기본 값 negoitate)
  • connect = 오직 TCP/IP 로만 연결 확인
  • negotiate = 요청을 보내고 수신 문자열을 일치 시킴
  • on = 점검 on, 실제 서버가 항상 활성화
  • off = 점검 off , 예비 서버가 활성화 되지 않음을 의미
  • ping = ICMP ping이 실제 서버의 가용성을 테스트하는데 사용


※ FWM 설정 방법
# vi ldirectord.cf
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------
virtual=1
real=xxx.xxx.xxx.121 gate 1
real=xxx.xxx.xxx.117 gate 3
service=http
request="lvsm.hwlee.shop"
receive="lvss.hwlee.shop"
scheduler=rr
persistent=3600
protocol=fwm
checkport=80
checktype=negotiate
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------
- virtualVIP:PORT 대신 mark 숫자를 표시
- checkport = 체크할 포트 설정 (서비스 포트와 다를 수 있음)


- 특정 패킷에 대한 태그를 표시하도록 LVS 에서 iptables 설정
# 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

=> 전체 ip 대역 대에서 xxx.xxx.xxx.70/32 ip 의 목적지 포트 80으로 가는 패킷을 MARK 1로 라우팅 설정.

Mangle : packet 내부의 TOS, TTL, MARKpacket 정보 변경을 위한 rule과 해당 action(target)의 리스트가 저장되어 있는 iptables 종류 중 하나 이다.
(mangle 테이블은 통과하는 패킷의 헤더 정보를 변경하고자 할때 사용)



10) ldirectord 적용
# /etc/ha.d/resource.d/ldirectord /etc/ha.d/conf/ldirectord.cf reload




11) 방화벽 허용
- LVS master / slave / web 서버 허용


3. LVS slave 구성

1) hostname 설정
# vi /etc/hosts(LVS master, slave, web 동일)

# hostname
----------------------
lvss.hwlee.shop
----------------------


# vi /etc/sysconfig/network
----------------------------------------------
NETWORKING=yes
HOSTNAME=lvss.hwlee.shop
----------------------------------------------


2) sysctl 설정(LVS master, slave 동일)

3)  heartbeat + ldirectord 설치(LVS master / slave 동일)


4) ha.cf 설정(Master 상태 체크)
# vi /etc/ha.d/ha.cf
-----------------------------------------------------------------------------------------
LVS master, slave 설정 동일

ucast eth0 xxx.xxx.xxx.117 → ucast eth0 xxx.xxx.xxx.78
설정 변경
-----------------------------------------------------------------------------------------


5) 리소스 설정
# /etc/ha.d/haresources 설정(LVS master, slave 설정 동일)



6) LVS 인증 파일 설정(/etc/ha.d/authkeys)
(LVS master, slave 설정 동일)


7) ldirectord 설정 (LVS master / slave 설정 동일)


8) 방화벽 허용 (LVS master /salve 설정 동일)
- LVS master / slave / web 서버 허용


* 추가 사항
- LVS master(xxx.xxx.xxx.78) 서버는 vip 와 다른 네트워크에 있으므로 routing 설정
# route add -net xxx.xxx.xxx.64 netmask 255.255.255.240 dev eth0



 

 

4. WEB1 서버 구성

1) hostname 설정
# /etc/hosts(LVS master, slave, web 동일)


# hostname

-----------------------
www.hwlee.shop
-----------------------


# vi /etc/sysconfig/network
-----------------------------------------------------------------
NETWORKING=yes
HOSTNAME=www.hwlee.shop
-----------------------------------------------------------------


2) sysctl 설정

# vi /etc/sysctl.conf
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- 패킷 포워딩
net.ipv4.ip_forward = 1


- 실서버에 ARP 문제 해결을 위해 ARP에 대한 응답 없음 설정 추가
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2


net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2


net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2


net.ipv4.conf.eth0.arp_ignore = 1
net.ipv4.conf.eth0.arp_announce = 2
------------------------------------------------------------------------------------------------------------------------------------------------------------------------

# sysctl -p (설정 적용)



3) 리얼 서버(web)는 가상 IP(VIP)를 로컬 주소로 인식하도록 lo:0 설정
-------------------------------------------------------------------------------------------------------------------------
# ifconfig lo:0 xxx.xxx.xxx.70 netmask 255.255.255.255 up
-------------------------------------------------------------------------------------------------------------------------

 

 

5. LVS 확인

Master 확인 방법(VIP master 할당)

# vi lvs.sh
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
watch -n1 -t "echo ; ip addr ; echo ; ipvsadm -Ln ; ipvsadm -Ln --rate ; ipvsadm -Lnc"
------------------------------------------------------------------------------------------------------------------------------------------------------------------------

# sh lvs.sh(TCP)




# sh lvs.sh(FWM)




웹 페이지 접속(vip로 접속)

 

 

 

6. Master -> Slave 전환 테스트

Master 서버에서 heartbeat 종료
# /etc/init.d/heartbeat stop


- sh lvs.sh 실행 시 VIP 제외된 부분 확인



- Slave 서버에 VIP 올라온 부분 확인

 

 

반응형
반응형

1. mysql 설치

cd $SOURCE/mysql-5.1.73

export CFLAGS="-g -O3 -fno-omit-frame-pointer"
export CXX="gcc"
export CXXFLAGS=" -g -felide-constructors -fno-exceptions -fno-rtti -O3 -fno-omit-frame-pointer"
./configure --prefix=/usr/local/mysql_5.1 --with-client-ldflags=-all-static \
--with-mysqld-ldflags=-all-static --with-charset=euckr --without-debug \
--enable-assembler --enable-local-infile --with-readline \
--with-plugins=innobase --with-big-tables --with-plugins=partition

 

make

make install

 

2. 확인

mysql ((none))>show variables like '%partition%';
+-------------------+-------+
| Variable_name     | Value |
+-------------------+-------+
| have_partitioning | YES   |
+-------------------+-------+
1 row in set (0.00 sec)

 

 

=======================================================================================

파티션 분할 테스트

 

1. partition table 설정(uidx 값) 
alter table chk_kopx_history PARTITION BY RANGE (uidx)
(
PARTITION p202005 VALUES LESS THAN (6867072),
PARTITION p202006 VALUES LESS THAN (7763739),
PARTITION p202007 VALUES LESS THAN (8747177),
PARTITION p202008 VALUES LESS THAN (9748633),
PARTITION pmax VALUES LESS THAN MAXVALUE
);

 

2. 파티션 분할 확인


3. 파티션 추가 작업(pmax 파티션을 추가로 분할)
alter table chk_kopx_history REORGANIZE PARTITION pmax INTO
(
PARTITION p202205_2 VALUES LESS THAN (39930091),
PARTITION p202207 VALUES LESS THAN (13633138),
PARTITION p202208 VALUES LESS THAN (13633138),
PARTITION p202209 VALUES LESS THAN (13633138),
PARTITION pmax VALUES LESS THAN MAXVALUE
);

 

 

4. 파티션 별 카운트 갯수

select PARTITION_NAME,table_rows from information_schema.partitions where table_name ='chk_kopx_history';

 

5. 파티션 자동 분할(crontab)

vi /root/partition.sh

========================================================================================

#/bin/sh

 

Fday=`date +"%Y-%m-01"`;

LOG=/root/partition_$(/bin/date  +\%Y\%m\%d).txt

DBROOTPW='zhxhdlelqlfnxm'

echo `date` "partition Start" >> $LOG

# 오늘 날짜의 uidx 값 추출
uidx=`/usr/local/mysql/bin/mysql -N -uroot -p${DBROOTPW} kotoi -e "select MIN(uidx) as uidx from chk_kopx_history where reg_date='${Fday}';"`


# 파티션 분할
Ymonth=`date -d '1 month ago' +'%Y%m'`

table_a="alter table chk_kopx_history REORGANIZE PARTITION pmax INTO
(
PARTITION p${Ymonth} VALUES LESS THAN (${uidx}),
PARTITION pmax VALUES LESS THAN MAXVALUE
)"

/usr/local/mysql/bin/mysql -uroot -p${DBROOTPW} kotoi -e "${table_a}"


# 파티션 분할 확인
P_check="select PARTITION_NAME,table_rows from information_schema.partitions where table_name ='chk_kopx_history';"

/usr/local/mysql/bin/mysql -uroot -p${DBROOTPW} kotoi -e "${P_check}" >> $LOG


echo `date` "partition Finish" >> $LOG

============================================================================================

반응형
반응형

1. ucspi-tcp 설치

: UNIX Client-Server Program Interface 로써 tcpserver와 tcpclient 전송제어를 하며 프로토콜(TCP client-server)을 구축하는데 좀더 편리하게 사용할 수 있도록 제작된 command-line 툴이다.

 

ucspi-tcp 를 다운

 

 

tar를 이용하여 압축 해제

 

gcc 버전이 3이상으로 업그레이드가 되었으므로 소스를 그대로 설치하면 에러가 발생으로 패치파일로 패치

 

conf-home 파일 수정

 

설치

 

2. daemontools 설치

daemontools 이란 ?

데몬과 그 로그를 관리하는 툴 집합 이며 sendmail같이 단일 프로세스가 아닌 qmail은 여러 작은 프로세스가 수행되는데 이를 효율적으로 관리해주기 위해 사용한다.

 

 

daemontools 다운로드

 

압축 풀기

 

make 를 읽기 전에 디렉토리를 src로 변경 후 make

 

쉘 스크립트 적용

 

conf 파일에 initctl 로 서비스를 start/stop 할 수 있게 위와 같이 설정(실행 파일 만듦)

 

서비스 시작 확인

※ Centos7 은 daemontools 에서 initctl 이 없으므로 다른 방법으로 설정 필요

 

 

 

● mysql 권한 부여 및 vpopmail 과 연동

사용자 그룹 생성

 

사용자 그룹 생성 및 확인

 

-r 옵션을 사용하여 uid 500 미만으로 만듦

/sbin/nologin 으로 쉘을 설정하여 로그인이 되지 않도록 설정

 

 

 

생성 확인

 

vpopmail 사용할 데이터 베이스 생성

 

vpopmail 사용자 생성

 

생성 확인

 

 

3. vpopmail 설치

● vpopmail 이란 ?

: sendmail대신 qamil을 사용하는 이유중에 하나가 qmail에서는 vpopmail과 연동하여 가상 도메인 사용자를 등록 관리할 수 있다는 점과 관리를 mysql같은 database로 할수 있다는 점이 있다.

 

vpopmail과 qmail은 설치하기 위해 서로가 필요하여 둘 중에 하나를 설치한 것 처럼 가짜로 파일을 만든다. (가짜 파일 3개 만듦)

 

wget으로 vpopmail-5.4.30.tar.gz 다운

 

압축 풀기

 

컴파일 설정

 

make 진행

 

설치

 

vpopmail과 mysql 을 연동하기 위한 설정

 

vpopmail 설치 완료 하였으므로 가짜 qmail 파일 삭제

 

 

4. libdomainkeys 설치

knetqmail컴파일시 libdomainkeys를 참조하기 때문에 libdomainkeys를 먼저 컴파일 한 후 설치가 진행된다.

 

libdomainkey 다운로드

 

압축 풀기

 

설치할 key 디렉토리 변경설치할 key 디렉토리 변경

 

설치

 

 

 

5. qmail 설치

knetqmail 파일 윈도우로 다운받아서 FTP 로 서버에 업로드 함

 

qmail 설치에 필요한 패치 파일 다운로드

 

압축 풀기(압축 푼 결과)

 

오류 발생하지 않게 패치파일 적용

 

ssl에 대한 설정

 

설치 및 확인

 

 

설정 파일 복사 및 권한 설정

 

 

▶ 큐메일 데몬을 위한 디렉토리 생성

 
 

▶ 설정 파일 생성 후 설정

 

 

▶ qmail 데몬을 위한 스크립트 생성

 

 

▶ 설정파일 권한 및 소유권 설정

 

 

▶ tcp.smtp 설정

qmail 로그 디렉토리 생성

 

qmail 구동 스크립트 생성

 

qmail 데몬 권한 설정 및 재시작 시 자동 구동 설정

 

qmail 데몬 구동

 

앞에서 tcp.smtp 수정하였으므로 적용

 

telnet 으로 smtp 접속 확인

 

telnet 으로 pop3 접속 확인

 

 

 

반응형
반응형

◆ DNS(Domain Name System) 란 ?

인터넷 도메인 이름들의 위치를 알아내기 위해 IP 주소로 바꾸어주는 서버

도메인 이름은 인터넷 주소로서 사람들이 기억하기 쉽게 하기위한 표기 수단

인터넷에서 어떤 컴퓨터를 실제로 찾기 위해서는 숫자 체계로 된 IP 주소를 매칭해주는 것

 

 BIND(Berkeley Internet Name Domain) ?

BIND는 구성이 쉽고 표준을 따르는 도구로서 리눅스, Unix에 가장 널리 사용되는 DNS 프로그램

 

DNS master nameserver - 데이터 관리 측면에서 원본 존 데이터를 관리함

DNS slave nameserver - 마스터 네임서버를 동기화해서 사용함

 

chroot(change root)

named 계정의 권한이 최상위(/) 디렉터리까지 자유롭게 이동할 수 있는 권한을 가지기 때문에 보안에 취약

 

chroot는 DNS 서버의 보안을 높이기 위한 방식으로 /var/named/chroot 디렉터리를 최상위 루트로 인식하여 상대경로로 파일을 참조

 

 

(1) bind 설치

 master 구성

yum 으로 bind 설치

 

 

 

 dns 설정 파일(named.conf)

listen-on port 53 : 외부영역에서 네임서버가 53번 포트 접속에 대한 ip를 설정하는 부분

 

any로 변경하지 않으면 로컬에서만 사용 가능하게 됨

 

directory : 각 도메인의 zone 파일의 위치를 지정

 

dump-file : 정보가 갱신될 때 저장되는 파일

 

statistics-file : 통계파일이 생성되는 절대경로와 파일이름을 지정

 

memstatistics-file : 메모리 관련 통계파일이 생성되는 절대경로와 파일이름을 지정

 

allow-query : 네임서버 쿼리를 허용할 IP 혹은 IP 대역을 설정

 

allow-transfer : 네임서버로의 접근을 제어

 

blackhole : 서버가 문의를 받아들이지 않거나 해결하기 위해서 사용하지 않게되는 주소의 리스트 지정, 이 주소로부터의 문의는 응답 없음

 

recursion yes : 재시도를 의미, 여러개의 네임서버가 존재 할 때 순차적으로 질의 후 다시 1차 네임서버로 질의를 할 것인지를 선택

 

dnssec-enable yes : DNSSEC 서명검증 기능 설정(공개키 암호화 방식으로 데이터 위조-변조 공격을 막는 설정)

 

dnssec-validation yes : DNSSEC 검증 확인 설정

 

session-keyfile : master 와 slave 간의 보안 트랙잭션 설정

 

forwarders : 자신의 네임서버에 질의 요청이 들어오면 지정한 IP 주소의 네임서버로 forwarding 함

 

pid-file : 네임 서버의 PID를 기록할 경로를 지정

 

notify yes_or_no : zone 영역이 바뀌었음을 2차 네임 서버에 알리는 설정 항목

 

cleaning-interval number : 입력한 시간마다 네임 서버는 캐시를 청소

 

interface-interval number : 입력한 시간마다 인터페이스를 검색함

 

logging : 네임서버 실행에 있어서 디버깅시 참고 할 수 있는 로그파일 생성 위치 지정

 

zone : 루트도메인에 대한 설정을 named.ca라는 파일에 참조하라는 설정,

 

type 값은 hint(루트도메인 지정), master(1차 네임서버), slave(2차 네임서버)

 

 

 

listen-on port 53 {any;};

: DNS port 53 에 대한 모든 IP 가 접근 가능하도록 설정

 

allow-query {any;};

: DNS 서버의 쿼리를 모든 ip 대역이 허용하도록 설정

 

recursion yes

: 도메인에 접속하기 위해 어떤 과정을 거쳐 답을 찾아 오는지에 대한 정보를 설명

 

 

● named.rfc1912.zones

Caching-nameseyrver package 파일

DNS서버에 IP와 도메인을 비교해주는 파일인 zone 파일과 rev파일의 경로와 정보가 있는 파일

zone : 도메인을 입력

type : 서버 타입 지정(master,slave)

file : zone 파일 이름 설정

allow-update : 동기화 할 slave 서버의 ip 지정

 

named 데몬시작 -> /etc 디렉토리에 위치한 네임서버의 원본 설정 파일이 해당 디렉터리에 복사

 

 

기존의 named.localhost 파일을 이용하여 새로운 zone 파일 생성 후 소유권을 root 에서 named로 변경

 

 

● zone 파일 설정

Record 종류

 

A : 호스트 IP 주소

 

NS : 도메인의 네임서버 정보

 

CNAME : 원래 도메인 네임을 별칭으로 매핑

 

SOA : 도메인의 Start of Authority(시작점), Zone의 속성 정보 지정

 

WKS : 호스트의 특정 IP주소 및 해당 IP 주소를 통해 제공하는 TCP/UDP 서비스 포트정보 지정

 

PTR : 도메인 네임을 매핑함, 주로 IP 주소의 도메인네임 지정에 사용

 

HINFO : 호스트의 CPU 정보와 운영체제 정보

 

MINFO : 메일박스와 메일리스트 정보

 

MX : 도메인의 MX(Mail Exchange) 서버

 

TXT : 호스트에 대한 텍스트 정보

 

RP : 도메인 네임별 담당자 정보

 

AFSDB : AFS DB 위치정보

 

X25 : 도메인 네임의 X.25 주소정보

 

ISDN : 도메인 네임의 ISDN 주소정보

 

NASP : 주소정보

 

SIG : 보안 서명을 저장

 

KEY : 보안 키를 저장

 

GPOS : 도메인 네임의 지리적 위치정보 위도, 경도 , 고도

 

AAAA : AAAA 레코드의 값은 16진법 형식의 IPv6 주소

 

SRV : 특정유형의 서비스를 지정된 DNS호스트의 목록에 매핑

 

A6 : IPv6 Prefix 및 주소정보

 

DNAME : 도메인 매핑 정보

 

zone 파일 설정시 루트 도메인(.) 중요

 

 

 

● zone 파일 설정 형식

host_name [TTL] class record_type data

 

host_name : 설정 하고 싶은 호스트 네임을 지정

 

TTL(Time To Live) : 호스트 이름을 정의해 갔을 때 질의해 간 다른 네임서버가 해당 IP주소를 캐시에 저장하는 기간 => 1행에서 default 값을 지정 했으므로 생략 가능

 

class : IN => internet 클래스를 가리킴

 

record_type : 사용하려는 record_type 지정

 

data : 각 레코드 타입에 해당하는 데이터 설정

 

 

 

● zone 파일 내용

$TTL(Time To Live) : 호스트 이름을 정의해 갔을 때 질의해 간 다른 네임서버가 해당 IP주소를 캐시에 저장하는 기간

 

@ : /etc/named.rfc1912zones에 정의된 hwlee.hyee.site 를 의미

 

IN : 클래스 이름으로 internet 의미

 

SOA(Start Of Authority) : 권한의 시작을 뜻함

 

serial : 버전정보(serial 숫자로 업데이트 되었는지 판단)

 

refresh : 상위 네임 서버에게 업데이트된 정보를 요청하는 간격

 

retry : 상위 네임 서버에 문제 발생시 재접속 간격

 

expire : 상위 네임 서버에 접속 못할 경우 이전의 정보를 파기하는 간격

 

minimum : 이 시간 이후에 정보가 삭제됨

 

 Master-Slave는 동기화 과정을 통해 zone 파일을 관리하게 되는데, zone 파일의 SOA 필드에 있는 serial을 확인하여 이 파일이 업데이트가 되었는지 판단, serial이 증가 했을 경우 파일이 업데이트된 것으로 판단하고 동기화 과정을 통해 slave 서버로 zone 파일을 전송

 

 

 

설정 방법

예시)

 

8

IN : internet 클래스

NS : 도메인의 네임서버 정보를 나타냄

ns.hwlee.hyee.site : 네임서버 입력

 

10

IN : internet 클래스

A : 호스트 IP 주소 type을 나타냄

121.254.171.244 : 호스트 IP 주소

 

14

www : 호스트 네임

IN : internet 클래스

A : 호스트 IP 주소 type을 나타냄

121.254.171.244 : 호스트 IP 주소

 

16

HINFO : 호스트 정보를 표시하는 레코드

"CentOs" : 시스템의 정보를 제공하기 위해 사용

 

17

MX 10 : Mail Exchange 설정

 

19 20

CNAME 레코드는 host_name에 대한 alias 기능을 함

ftp.rootman.co.kr  linux.rootman.co.kr에 링크 시켰다고 생각하면 됨

 

 

 레코드 값 변경 후 빠르게 업데이트 하는 방법

호스트의 IP(A 레코드)를 변경하면 네임서버에서는 변경 즉시 해당 내역이 적용되지만 기존에 등록되어 있던 IP는 여전히 전세계의 cache DNS에 남아있을 수 있고 해당 cache가 남아 있을 수 있는 시간(TTL)이 경과하여야 전세계의 cache DNS에서 변경이 완료 됨

 

도메인의 레코드(: www.domain.com)에 대한 TTL을 확인(| TTL  4시간)

TTL값을 최대한 낮춤(| 5), 이 때 IP주소는 변경하지 않음

기존 TTL값 만큼의 시간(| 4시간)을 기다린 다음 IP주소를 변경

 

 

설정 후 재시작

 

방화벽에서 dns 포트인 53번 열기

 

53번 포트 up 확인

 

정방향 정상 작동

 

 

dig 명령어로 등록된 네임서버를 이용하여 도메인 조회

 

 

 

◆ slave 서버 구성

클라이언트 서버에 dns slave 서버 구축

 

외부영역에서 네임서버가 53번 포트 접속에 대한 ip를 설정하는 부분

any로 변경하지 않으면 로컬에서만 사용 가능하게 됨

recursion no

: 보조 서버로서 recursion 이 허용 되어 있으면 DNS cache poisoning 공격에 최약하며 일종의 증폭기 또는 좀비로 악용되어 특정 시스템 또는 네트워크에 공격할 가능성이 있음

 

 

slave는 master에서 파일을 가져오기 때문에 allow-update를 할 필요 없음

대신 master가 누군지 알려주는 정보가 있어야 함

named 데몬(slave 서버) master정보를 master 서버에서 받아옴

 

 

named 그룹에 쓰기권한 부여

=> 쓰기 권한이 있어야 slave 파일을 master 파일로부터 받아와서 쓸 수 있음

 

 

부팅시 항상 named 데몬 enable 설정

 

 

 

방화벽에 dns 포트(53) 번 열기

 

 

dns master 서버에 slave 서버 등록

 

 

slave 서버 재시작

 

 

resolv.conf : 다양한 운영 체제에서 시스템의 도메인 이름 시스템 확인자를 구성하는 데 사용

슬레이브 서버에 마스터 네임서버 등록

 

슬레이브 서버 dns 동작 확인

 

마스터 dns 서버에서 설정한 zone 파일 보내짐

 

 

마스터 서버에서 보낸 zone 파일 슬레이브 서버에서 확인

 

 

master 서버 zone파일 내용 변경 시 slave 서버에 자동으로 파일 보내진 것을 log로 확인

 

 

 

슬레이브 dns 서버 작동 확인

dig 를 이용하여 ns2.hwlee.hyee.site 에 질의, 대상은 hwlee.hyee.site 타입은 ns(네임서버 정보)

 

 

 

master 네임 서버가 동작하지 않을 경우 slave 네임 서버가 대신하여 정보를 제공하는지 테스트

master 네임 서버 데몬 중지 후

 

 

slave 네임 서버 nslookup 명령어 정방향 조회 시도(성공)

 

 

 

(2) rndc 사용

 

● rndc ?

: remote named controy utility의 약자로 다수의 네임서버를 안전하게 컨트롤하기 위해 설정

 

rndc.key 내용

 

 

/etc/named/conf 파일에 설정

rndc-key 설정

control 은 제어할 원격 네임서버 ip, 포트 , 키를 설정

 

첫번째 controls 는 로컬에서 사용

 

두번째 controls  slave에서 사용

 

named.conf 에 rndc.key 를 직접 설정하는 방법이라서 /etc/rndc.key 파일을 참조 안함

 

 

rndc 상태 확인

 

/etc/rndc.key 파일을 named.conf  include 시키기

rndc.key 파일을 사용함

 

named.conf 설정 파일에서 rndc.key 를 참조

 

 

 

master 서버에도 rndc 사용할 953 포트 방화벽 열어주기

 

 

iptables 파일 변경 하였으므로 다시 읽어오기

 

 

설정 변경 하였으므로 reload

 

rndc 상태 확인

 

 

master/slave 서버가 rndc.key를 이용하여 서로 접속하기

master 서버 named.rfc1912.zones 파일에서 slave 서버를 허용 해야함

 

 

named.rfc1912.zones 파일 수정 하였으므로 재시작

 

 

master 서버에서 보낸 hwlee.hyee.site.zone 파일을 slave 에서 확인

 

 

master 서버의 named.conf 파일에서 slave 서버에 허용 설정

 

slave 서버에서 master 서버에 대한 내용 설정

 

설정 변경 후 재시작

 

slave&nbsp; 서버에&nbsp; master 의&nbsp; rndc.key&nbsp; 복사 해오기

 

 

복사해온 master의 rndc.key 의 권한을 named 로 바꾸기

 

 

 

slave 서버 rndc 사용할 953 포트 방화벽 열어주기

 

iptables 파일 변경 하였으므로 다시 읽어오기

 

 

slave 서버에서 master 서버로 rndc 명령어를 사용 하여 상태확인

 

 

rndc -s [서버 ip] -k [키파일] reload (성공)

 

 

 

● rndc 명령어

rndc reload : rnamed.conf 파일과 zone 파일를 다시 로드

 

rndc reload zone : zone 파일을 다시 로드

 

rndc reconfig : named.conf 와 새롭게 생성 된 zone 파일을 다시 로드

 

rndc stats : 통계 파일 생성(쓰기)

 

rndc querylog : 질의에 관련된 로그를 설정 토글(toggle)

 

rndc dumpdb : DB에 대한 덤프 설정(덤프 파일 생성)

 

rndc status : BIND 서버에 대한 통계 출력

 

rndc recursing : 현재 외부 질의하고 있는 쿼리를 수집

 

rndc flush : 캐시 삭제

 

rndc retransfer zone : 단일 영역 동기화

 

rndc trace [level] : 디버깅 정보를 named.run 이라는 파일로 붙여넣음

 

 

 

● rndc 사용법

b : 주소

c : 설정

s : 서버

p : 포트

k : 키 파일

y : 

 

 

 예시

rndc, master서버, 키 파일 /etc/rndc_master.key 인증으로 상태보기

 

 

master 서버에서 zone 파일 수정 후 slave 서버 zone 파일 업데이트

수정 전 zone 파일

 

수정 후 zone 파일

 

 

master 서버 다시 읽어오기

 

slave 서버에서 log로 master 서버 zone 파일 업데이트 확인

 

 

-> 수정 된 zone 파일의 serial 넘버가 수정 전 zone 파일의 serial 넘버보다 클 때 slave 서버는 master 서버의 zone 파일을 업데이트 함

 

 

 

 

반응형
반응형

 

PHP

프로그래밍 언어의 일종

동적 웹 페이지를 만들기 위해 설계되었으며 이를 구현하기 위해 PHP로 작성된 코드를

HTML 소스 문서 안에 넣으면 PHP 처리 기능이 있는 웹 서버에서 해당 코드를 인식하여

작성자가 원하는 웹 페이지를 생성

 

 

1. php 설치

php 컴파일 하기 위해 MySQL 라이브러리 참조

 

 

웹에서 PHP 다운로드

 

 

현재 작업 중인 위치에서 새로운 디렉터리를 생성하고 그안에 압축을 해제

 

컴파일 실행

컴파일 내용

--with-apxs2 = /usr/local/apache/bin/apxs

: apache2 와 연동 지원

 

--with-mysql = /usr/local/mysql

: mysql 데이터베이스 연동

 

--with-mysqli = /usr/local/mysql/bin/mysql_config

: mysqli 지원

 

--with-pdo-mysql = /usr/local/mysql

: pdo mysql 지원

 

--with-libxml-dir = /usr

: xml 처리를 위한 기능

 

--with-freetype-dir

: FreeType 폰트 라이브러리 디렉토리 지정

 

--with-zlib

: ZLIB 지원

 

--with-mcrypt

: mcrypt 로 암호화 과련 기능을 지원

 

--with-mhash

: mhash 지원

 

--enable-sysvsem

: System V Semaphore 를 지원

 

--enable-sysvshm

: System V shared memory 를 지원

 

--enable-bcmath

: bc 스타일의 수학함수를 지원

 

--enable-ftp

: ftp 지원

 

--enable-exif

: 이미지 메타정보 표시를 지원

 

--enable-calendar

: Calendar Conversion 를 지원

 

--enable-pcntl

: Process Control 를 지원

 

--with-gd-native-ttf

: 그래픽 이미지 지원

 

--enable-mbstring

: multibyte 문자열 처리를 위한 지원

 

--enable-sockets

: fsockopen 과 같은 소켓 함수를 쓰기위해서 필요

 

--enable-sysvmsg

: System V message 를 지원

 

--enable-zip

: Zip 파일을 읽고 쓸수 있는 기능 지원

 

configure 스크립트가 생성한 Makefile 을 이용해서 동작

 

 

make install 진행

 

 

php.ini 설정 파일에 필요한 내용 설정

 

 

php 설정 파일 설정 후 Apache 환결설정에서 php모듈 추가 여부 확인

 

 

apache 와 php 연동 확인

 

 

 

반응형
반응형

 

1. php.ini 설정 파일 파악

max_execution_time = 60

최대 실행시간

 

max_input_time = 120

스크립트 페이지로 넘어가기전에 php엔진이 데이터 업로더를 받는 시간

 

memory_limit = 256M

메모리 사용량 제한

 

posrt_max_size = 5G

Post 방식으로 넘겨질 최대 데이터 사이즈 설정

 

upload_tmp_dir = "/var/tmp"

임시 폴더 지정, 파일 업로드 할 때 위의 폴더에 임시 저장

 

upload_max_filesize = 5G

최대 업로드 데이터 사이즈 설정

 

max_file_uploads = 50

한번에 업로드 가능한 파일 갯수

 

data.timezone = Asia/Seoul

시간대 설정

 

file_upload = on

파일 업로드를 허용 여부 설정

 

max_execution_time = 300

최대 실생시간 설정

 

display_errors = on

php 스크립트 발생 시 웹상에 보여줄 지 선택 여부

 

log_errors = on

php 실행 중 발생하는 경고나 에러 정보를 error_log에서 지정한 파일에 기록하게 되므로 의도적인 에러 발생 시도를 확인해 볼 수 있음

 

session.cookie_lifetime = 0

세션이 끊기지 않고 유지

 

safe_mode = off

php에 의한 파일 액세스 시 권한 점검

 

allow_url_fopen = on

URL을 파일로서 취급 여부 결정

 

engine = on

apache 상에서 php의 스크립트 언어 엔진 유효 여부

 

short_open_tag =on

<? 태그 사용 여부

 

precision = 12

부동 소수점 표시할 때 유효 자리 수 설정

 

expose_php = off

웹 브라우저의 요청에 대해 php 정보 노출 방지

 

register_globals = off

php 가 입력으로 받아들이는 값을 무조건 전역변수로 다루게 됨

 

 

 

 

2. extension 을 이용한 mysqli 설치

 

mysqli  ?

: MySQLi Extension PHP 스크립팅 언어에서 MySQL 데이터베이스와의 인터페이스를 제공하는 데 사용되는 관계형 데이터베이스 드라이버

 

phpize 실행

 

설치 진행

 

컴파일 완료

 

모듈 복사

 

php.ini 설정파일에 extension 디렉터리 경로와 모듈명 추가

 

 

mysqli 설치 확인

 

 

 

php -i 옵션

 

그 외의 옵션

-a : 대화식으로 실행

-e : 디버거 / 프로파일 러에 대한 확장 정보 생성

-f <file> : <file> 구문 분석 및 실행

-h : 도움말

-l : 구문만 검사

-m : 모듈로 컴파일 된 것으로 표시

-r <code> : 스크립트 태그 <? ..?>를 사용하지 않고 PHP <code>를 실행

-B <begin_code> : 입력 라인을 처리하기 전에 PHP <begin_code>를 실행

-R <code> : 모든 입력 줄에 대해 PHP <code>를 실행

-F <file> : 모든 입력 줄에 대해 <file> 구문 분석 및 실행

-B <begin_code> : 모든 입력 행을 처리 한 후 PHP <end_code>를 실행

-s : 색상 구문으로 강조 표시된 소스를 표시

 

 

 

4. php engine off 설정 후 접근 (phpinfo.php로 확인)

 

php_admin_flag engine off 하여 접근 차단

 

특정 디렉토리에서 php 실행금지

 

php_flag engine off 만 하면 실행은 안되고 php 파일이 다운로드 됨

 

 

 

 

 

 

반응형
반응형

mod_cband : 홈페이지의 히트(hit)수 제한 및 도메인별 대역폭제한등 트래픽을 관리

 

mod_cbnad 다운로드

 

압축 풀기

 

컴파일 설정

 

mod_cband 설치

 

apache 모듈 적용 확인

 

관리 페이지 접근 허용 아이피 설정

cband 옵션

CBandSpeed 1024 10 30 => 최대 1024kbps전송속도로 제한, 초당 10개의 요청 처리, 동시 접속을 30개로 제한

CBandRemoteSpeed 20kb/s 3 30 => 접속자(ip)에대해 최대 20kb/s , 초당 3개의 요청, 동시 접속 30개로 제한

CBandPeriod 1D => 일일트래픽

CBandLimit 1000Mi => 1000myte를 초과할 경우

CBandExceededSpeed 500 5 10 => 속도를 500bps로 초당 5번 의 연결, 동시접속자를 10명으로 제한

CBandRandomPulse On/Off => 속도 제한을 위해서 임의의 파형을 생성한 다음 처리하는 mod_cband의 처리 방법, 부하가 많을때는 자동 Off

CbandExceededURL => 제한을 초과했을시 보여줄 URL, 지정하지 않으면 503 에러 발생

CbandScoreboard => 가상호스트의 scoreboard 파일 지정, 성능향상을 위해 필요

CbandUserSpeed => cband 가상 사용자의 속도, 요청수, 동시 접속수 제한

 

cband 상태 확인

 

반응형

+ Recent posts