YUM repository 구축 – online

폐쇄망, 사내 활용 등을 위한 yum repository를 구축한다.
local repository 구축과 특별히 다른 점은 없다. 단지 웹(http, https) 을 통한 접근을 허용하는 경로를 추가하는 것으로 구축이 가능하다.
웹 서버가 구축 되어있어야 한다.

http 디렉토리를 확인하고 그곳에 리포지터리 파일을 복사한다.

[root@class14 ~]# vi /etc/httpd/conf/httpd.conf
 # 다음 내용을 찾는다.
#
# DocumentRoot: The directory out of which you will serve your
# documents. By default, all requests are taken from this directory, but
# symbolic links and aliases may be used to point to other locations.
#
DocumentRoot "/var/www/html"

#
# Relax access to content within /var/www.
#
<Directory "/var/www">
    AllowOverride None
    # Allow open access:
    Require all granted
</Directory>

생성한 repodata 디렉토리가 있는 디렉토리를 /var/www/html 에 복사한다.
이전 포스트에서 /home/repo-data/ 에 rpm 패키지를 넣고 repodata를 생성했었다.

[root@class14 ~]# cp -r /home/repo-data /var/www/html
 # 또는 심볼릭 링크를 만들어준다.
[root@class14 ~]# ln -s /home/repo-data /var/www/html/repo-data

repo 파일 생성
※ local repository에 대한 repo 파일을 만드는 것과 다르지 않다. url만 다를 뿐이다.

[centos:/home:]# vi /etc/yum.repos.d/haedongg_net.repo
 #여기부터 붙여넣기 한다.
[haedong_net-repo]
name=haedongg_net-repo
baseurl=http://www.haedongg.net/repo-data
 # createrepo 명령으로 생성된 repodata 가 있는 디렉토리를 지정한다.
 # http로 시작하는 것에 유의하자. 
enabled=1
gpgcheck=0

Apache http 서버 구축 – #1. 설치

HTTP 데몬(HTTP Daemon), 즉 httpd는 웹 서버의 백그라운드에서 실행되어, 들어오는 서버 요청을 대기하는 소프트웨어 프로그램이다. 이 데몬은 자동으로 요청에 응답하며 HTTP를 사용하여 인터넷을 경유, 하이퍼텍스트, 멀티미디어 문서들을 서비스한다. HTTPd는 HTTP daemon의 준말이다. (예: 웹 서버)

yum 명령으로 패키지를 설치한다.

[root@class14 ~]# yum install -y httpd
Loaded plugins: fastestmirror, langpacks
Determining fastest mirrors
epel/x86_64/metalink                                                                                                                                                                | 2.8 kB  00:00:00
 * base: mirror.kakao.com
 base                                                                                                                                                                                | 3.6 kB  00:00:00
(1/7): base/7/x86_64/group_gz                                                                                                                                                       | 153 kB  00:00:00
중략
(7/7): epel/x86_64/primary_db                                                                                                                                                       | 6.9 MB  00:00:03
Resolving Dependencies
--> Running transaction check
중략
---> Package httpd.x86_64 0:2.4.6-93.el7.centos will be an update
--> Processing Dependency: httpd-tools = 2.4.6-93.el7.centos for package: httpd-2.4.6-93.el7.centos.x86_64
--> Running transaction check
---> Package httpd-devel.x86_64 0:2.4.6-80.el7.centos will be updated
중략--> Finished Dependency Resolution

Dependencies Resolved

===========================================================================================================================================================================================================
 Package                                           Arch                                        Version                                                     Repository                                 Size
===========================================================================================================================================================================================================
Updating:
 httpd                                             x86_64                                      2.4.6-93.el7.centos                                         base                                      2.7 M
Updating for dependencies:
 httpd-devel                                       x86_64                                      2.4.6-93.el7.centos                                         중략
Transaction Summary
===========================================================================================================================================================================================================
Upgrade  1 Package (+4 Dependent packages)

Total download size: 4.4 M
Downloading packages:
No Presto metadata available for base
(1/5): httpd-devel-2.4.6-93.el7.centos.x86_64.rpm                                                                                                                                   | 198 kB  00:00:00
중략
(5/5): httpd-2.4.6-93.el7.centos.x86_64.rpm                                                                                                                                         | 2.7 MB  00:00:00
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Total                                                                                                                                                                       19 MB/s | 4.4 MB  00:00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Updating   : httpd-tools-2.4.6-93.el7.centos.x86_64                                                                                                                                                 1/10
중략
  Verifying  : httpd-manual-2.4.6-80.el7.centos.noarch                                                                                                                                               10/10
Updated:
  httpd.x86_64 0:2.4.6-93.el7.centos
Dependency Updated:
  httpd-devel.x86_64 0:2.4.6-93.el7.centos           httpd-manual.noarch 0:2.4.6-93.el7.centos           httpd-tools.x86_64 0:2.4.6-93.el7.centos           mod_ssl.x86_64 1:2.4.6-93.el7.centos
Complete!
[root@class14 ~]# rpm -qa | grep httpd
httpd-manual-2.4.6-93.el7.centos.noarch
httpd-2.4.6-93.el7.centos.x86_64
httpd-tools-2.4.6-93.el7.centos.x86_64
httpd-devel-2.4.6-93.el7.centos.x86_64

서비스 구동

 # 별도의 설정 없이 구동을 하면 기본 값으로 실행된다.
[root@class14 ~]# service start httpd
Redirecting to /bin/systemctl start httpd.service
 # 또는
[root@class14 ~]# systemctl start httpd.service

서비스 구동 확인

[root@class14 ~]# netstat -nltp | grep 80
tcp6       0      0 :::80                   :::*                    LISTEN      2411/httpd
 # 또는
[root@class14 ~]# netstat -nltp | grep httpd
tcp6       0      0 :::80                   :::*                    LISTEN      2411/httpd
tcp6       0      0 :::443                  :::*                    LISTEN      2411/httpd
[root@class14 ~]#
웹브라우저로 접속 성공한 모습.

접속이 안될 경우
※ 다양한 원인이 있을 수 있으나 linux 방화벽 (iptables, firewalld)에 의해 막히는 경우가 많다.

[root@class14 ~]# service firewalld stop
Redirecting to /bin/systemctl stop firewalld.service
 # 또는
[root@class14 ~]# service iptables stop
 # CentOS6 이하, CentOS7 이상에서 firewalld 를 삭제하고 iptables를 구동 했을 때

YUM repository 구축 – local

이전 포스트에서 설명 한 것처럼 설정된 repository에서 패키지를 다운로드하고 설치하는데 도움을 준다.
이를 위해서는 언급 한 것과 같이 RPM패키지들과 이들 정보를 가진 repository가 필요하다.
일반적인 환경에서는 공용 repositoy (Kakao, naver, KAIST)등에서 제공하는 mirror 사이트를 이용하면 되지만, 폐쇠망 이나, 네트워크 상태가 좋지 않은 경우를 대비해 로컬(서버에 저장)이나, 내부망에 repository를 구축 할 수도 있다.

생각보다 구축 방법은 단순하다.
1. RPM패키지 파일 다운로드
2. repository 정보 생성
3. repo 파일 생성(구축된 repository 서버 정보 기록)
4. 네트워크 접근을 허용할 경우위한 http 서버 구축

로컬 리포지터리 생성

※CentOS7.8 (모든 패키지 포함) 미디어 파일을 이용한 구축의 예

필요 패키지 설치

 # repository 구축을 위한 필수 패키지 다운로드
[centos:/home:]# yum install createrepo yum-utils
Loaded plugins: fastestmirror, langpacks
중략
 * updates: mirror.kakao.com
base                                                                                                                                       | 3.6 kB  00:00:00
중략
(5/5): updates/7/x86_64/primary_db                                                                                                         | 4.5 MB  00:00:01

==================================================================================================================================================================
 Package                               Arch                               Version                                       Repository                           Size
==================================================================================================================================================================
Updating:
 yum-utils                             noarch                             1.1.31-54.el7_8                               updates                             122 k

Transaction Summary
==================================================================================================================================================================
Upgrade  1 Package
후략

설치미디어 파일 다운로드

 # 설치 미디어 파일 다운로드
[centos:/home:]#  wget http://mirror.navercorp.com/centos/7.8.2003/isos/x86_64/CentOS-7-x86_64-Everything-2003.iso

iso 파일 마운트

[centos:/home:]# mkdir /mnt/centos
[centos:/home:]# mount CentOS-7-x86_64-Everything-2003.iso /mnt/centos
mount: /dev/loop0 is write-protected, mounting read-only

repodata 생성

[centos:/home:]# mkdir /home/repo-data
 # 패키지 파일을 복사할 디렉토리 생성.
 # 마운트 한 ISO 파일 경로를 직접 지정할 수도 있지만, 이 경우 마운트 정보를 변경 해야 한다.
[centos:/home:]# cp /mnt/centos/Packages/*.rpm /home/repo-data/
 # 패키지 파일 복사 centos 7.8.2003 iso 기준으로 10070개 rpm 파일이 존재한다.

[centos:/home:]# createrepo /home/repo-data/
Spawning worker 0 with 2518 pkgs
Spawning worker 1 with 2518 pkgs
Spawning worker 2 with 2517 pkgs
Spawning worker 3 with 2517 pkgs
Workers Finished
Saving Primary metadata
Saving file lists metadata
Saving other metadata
Generating sqlite DBs
Sqlite DBs complete

repo 파일 생성

[centos:/home:]# vi /etc/yum.repos.d/local.repo
 #여기부터 붙여넣기 한다.
[haedongg_local-repo]
name=haedongg_local-repo
baseurl=file:////home/repo-data
 # createrepo 명령으로 생성된 repodata 가 있는 디렉토리를 지정한다.
enabled=1
gpgcheck=0

WGET 다운로더

GNU Wget(간단히 Wget, 이전 이름: Geturl)는 웹 서버로부터 콘텐츠를 가져오는 컴퓨터 프로그램으로, GNU 프로젝트의 일부이다. 이 프로그램의 이름은 월드 와이드 웹과 get에서 가져온 것이다. HTTP, HTTPS, FTP 프로토콜을 통해 내려받기를 지원한다. 1위키백과에서 발췌

이런걸 다운 받을 때 사용한다.
웹브라우저가 있다면 클릭 한번이면 되지만
웹브라우저가 없는 터미널 환경 등에서 파일을 다운로드 하기 위해 사용한다.

기본 명령은 단순하다.
“wget 다운로드할_파일주소”

[root@host ~]# wget http://mirror.kakao.com/centos/8.2.2004/isos/x86_64/CentOS-8.2.2004-x86_64-boot.iso         --2020-09-09 18:11:46--  http://mirror.kakao.com/centos/8.2.2004/isos/x86_64/CentOS-8.2.2004-x86_64-boot.iso
Resolving mirror.kakao.com (mirror.kakao.com)... 113.29.189.165
Connecting to mirror.kakao.com (mirror.kakao.com)|113.29.189.165|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 654311424 (624M) [application/octet-stream]
Saving to: ‘CentOS-8.2.2004-x86_64-boot.iso’

13% [========>                                                                ] 89,458,496  11.2MB/s  eta 49s

다운로드 시 파일명 변경
원본 파일명은 CentOS-8.2.2004-x86_64-boot.iso이지만
다운로드 파일 이름은 centos-boot.iso 이 된다.

[root@host ~]샾 wget -O centos-boot.iso http://mirror.kakao.com/centos/8.2.2004/isos/x86_64/CentOS-8.2.2004-x86_64-boot.iso

HTTPS 사이트에서 인증서 오류 등 발생 시

[root@host ~]샾 wget --no-check-certificate http://mirror.kakao.com/centos/8.2.2004/isos/x86_64/CentOS-8.2.2004-x86_64-boot.iso

하위 디렉토리를 포함해 여러 파일을 다운로드 하고 싶을 때

[root@host ~]샾 wget -r http://mirror.kakao.com/centos/8.2.2004/isos/x86_64/ 
 # 파일 이름을 지정하지 않음을 기억하자.

robots.txt 로 인해 순환 다운로드(-r)가 안될 때

[root@host ~]샾 wget -r -e robots=off 
 http://mirror.kakao.com/centos/8.2.2004/isos/x86_64/ 

클라우드 서비스 아키텍쳐 아이콘

AZURE architecture icons

Azure example architecture diagram (그림을 클릭하면 이동합니다.)

Amazon Web Service architecture icons

AWS example architecture diagram (그림을 클릭하면 이동합니다.)

Google Cloud Platform architecture icons

GCP example architecture diagram (그림을 클릭하면 이동합니다.)

‘수직 확장'(scale up) 과 ‘수평 확장’ (scale out)

수직 확장.

수직 확장 :
하드웨어를 기준으로 하드웨어의 사양을 늘린다.
램을 추가하고, HDD를 추가하고, CPU를 추가하는 등.
단순하긴 하지만 RAM 뱅크가 꽉 차면 램을 더 꽂을 수 없고, CPU소켓도 한정적이고,
확장에 한계가 있다는 단점과
경우에 따라서는 특정 제조사 전용 장비만 써야 하는 등의 단점이 있다.

어플리케이션을 수정할 필요는 없다는 장점이 있다.
어플리케이션의 수정, 업데이트가 쉽다. (수정 내역을 한곳에만 반영하면 되니까)

수직 확장

수평 확장 :
기존의 하드웨어는 그대로 두고 장비를 추가하여 소프트웨어적으로 하나처럼 묶는다.
클러스터링 하려는 소프트웨어만 구동할 수 있으면 되기 때문에 하드웨어 종속성이 덜하다.
이론상으로는 무한한 확장이 가능하고,
쿠버네티스 같은 오케스트레이션을 이용해 중단 없는 자동 확장도 가능하다.

일반적으로 네트워크로 연결 되므로 네트워크 환경이 좋지 않으면 확장이 불가능하거나,
확장을 해도 원하는 성능을 못 얻는 경우가 있다.
어플리케이션의 수정이 필요한 경우가 많고,
어플리케이션의 수정, 업데이트의 경우 각 노드에 반영해야 하므로 작업량이 늘어난다.

Zookeeper #3. 구동과 확인

Zookeeper #1. 개요
Zookeeper #2. 설치와 설정
Zookeeper #3. 구동과 확인

Kafka #1. 개요
Kafka #2. 설치

※ zookeeper 앙상블에 들어갈 모든 노드에서 구동 되어야 한다.

 # zookeeper 시작
[kafka@kafka ~]$ $ZOOKEEPER_HOME/bin/zkServer.sh start
Using config: /home/kafka/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED

 # zookeeper 종료
[kafka@kafka ~]$ $ZOOKEEPER_HOME/bin/zkServer.sh stop
Using config: /home/kafka/zookeeper/bin/../conf/zoo.cfg
Stopping zookeeper ... STOPPED

 # zookeeper 재시작
[kafka@kafka ~]$  $ZOOKEEPER_HOME/bin/zkServer.sh restart
Using config: /home/kafka/zookeeper/bin/../conf/zoo.cfg
Stopping zookeeper ... STOPPED
Using config: /home/kafka/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED

 # zookeeper 프로세스 확인
[kafka@kafka ~]$  jps -l
53088 sun.tools.jps.Jps
38497 kafka.Kafka
52964 org.apache.zookeeper.server.quorum.QuorumPeerMain
87046 org.apache.kafka.connect.cli.ConnectStandalone
 # zookeeper 프로세스 확인
[kafka@kafka ~]$  jps -l
53088 sun.tools.jps.Jps
38497 kafka.Kafka
52964 org.apache.zookeeper.server.quorum.QuorumPeerMain
87046 org.apache.kafka.connect.cli.ConnectStandalone
 # 네트워크 확인
[kafka@kafka ~]$  netstat -nltp
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:3389            0.0.0.0:*               LISTEN      -
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      -
tcp        0      0 127.0.0.1:3350          0.0.0.0:*               LISTEN      -
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      -
tcp        0      0 127.0.0.1:5432          0.0.0.0:*               LISTEN      -
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      -
tcp6       0      0 :::35068                :::*                    LISTEN      52964/java
tcp6       0      0 192.168.103.113:9092    :::*                    LISTEN      38497/java
tcp6       0      0 :::2181                 :::*                    LISTEN      52964/java
tcp6       0      0 :::3888               :::*                    LISTEN      52964/java
tcp6       0      0 :::2888                 :::*                    LISTEN      52964/java
tcp6       0      0 :::111                  :::*                    LISTEN      -
tcp6       0      0 :::8080                 :::*                    LISTEN      52964/java
tcp6       0      0 :::8083                 :::*                    LISTEN      87046/java
tcp6       0      0 :::37045                :::*                    LISTEN      87046/java
tcp6       0      0 :::42901                :::*                    LISTEN      38497/java
tcp6       0      0 :::22                   :::*                    LISTEN      -

로그 확인
일단 [ERROR], [CRITICAL] 같은 단어가 보이면 뭐가 잘못됐건 잘못 된 것이다.
[WARN]의 경우는 보통 당장 구동에는 문제가 없지만 특정 작업, 조건 등에서 문제가 발생할 수
있다. 주의 깊게 봐야 한다.

[kafka@kafka ~]$ tail -100f $ZOOKEEPER_HOME/logs/zookeeper-kafka-server.out
2020-09-03 10:11:35,822 [myid:2] - WARN  [QuorumConnectionThread-[myid=2]-2:QuorumCnxManager@400] - Cannot open channel to 3 at election address /192.168.113.138:3888
java.net.ConnectException: 연결이 거부됨 (Connection refused)
        at java.net.PlainSocketImpl.socketConnect(Native Method)
        at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
        at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
        at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
        at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
        at java.net.Socket.connect(Socket.java:607)
        at org.apache.zookeeper.server.quorum.QuorumCnxManager.initiateConnection(QuorumCnxManager.java:383)
        at org.apache.zookeeper.server.quorum.QuorumCnxManager$QuorumConnectionReqThread.run(Qu ....
2020-09-03 10:11:35,828 [myid:2] - INFO  [WorkerReceiver[myid=2]:FastLeaderElection$ ... 후략

예제의 경우 다른 zookeeper 노드가 아직 구동되지 않아 발생한 [WARN] 메시지가 존재한다.
나머지 노드가 구동되고 연결되면 [WARN] 메시지는 사라진다.

로그의 모든 내용을 설명하기는 어렵고 자주 바라보고 눈에 익숙해 질 수 있도록 해야한다.