[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
kubectl get nodes E0720 07:16:42.37611016035 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.37677816035 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.38307816035 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.38369516035 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.38562116035 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?
* 방화벽 허용(master / slave 동일) 호스트 간 통신에 필요한 포트 TCP : 2224, 3121, 21064 UDP : 5405
- TCP 2224 : 클러스터의 노드 간 통신 시 필요 - TCP 3121 : 클러스터에 Pacemaker 원격 노드가 있는 경우 모든 노드에 필요 - TCP 21064 : 클러스터에 DLM 이 필요한 리소스가 포함된 경우에 필요 - UDP 5404 : corosync 노드에 필요
#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
- 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)가 다시 살아나면 자동으로 VIP가 Primary(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 주소만 리얼서버의 주소로 변환해서 전송)
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 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- - virtual에 VIP: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, MARK의 packet 정보 변경을 위한 rule과 해당 action(target)의 리스트가 저장되어 있는 iptables 종류 중 하나 이다. (mangle 테이블은 통과하는 패킷의 헤더 정보를 변경하고자 할때 사용)
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 동일)
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';
# 오늘 날짜의 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 )"
BIND는 구성이 쉽고 표준을 따르는 도구로서 리눅스, Unix에 가장 널리 사용되는DNS프로그램
DNS master nameserver -데이터 관리 측면에서 원본 존 데이터를 관리함
DNS slave nameserver -마스터 네임서버를 동기화해서 사용함
chroot(change root)
named계정의 권한이 최상위(/)디렉터리까지 자유롭게 이동할 수 있는 권한을 가지기 때문에 보안에 취약
chroot는 DNS 서버의 보안을 높이기 위한 방식으로 /var/named/chroot 디렉터리를 최상위 루트로 인식하여 상대경로로 파일을 참조
(1) bind설치
◆master구성
●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파일 설정 형식
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파일을 전송