반응형

Solution

$ yum -y install gcc-c++

 

반응형
반응형

Docker기반의 Superset을 사용중인데 yum update이후 docker관련 라이브러리들이 업데이트 되었다.

이로 인해 잘돌아가던 Superset UI에 접속할 수 가 없었다.

계속해서 페이지에 접속되지 않고 ERR_CONNECTION_TIMED_OUT 메세지가 떴다.

이에 Docker, Superset 재시작을 해보았지만 여전히 동일한 상황....문제는 둘 다 재시작되면서 별다른 에러메세지도 없었고 잘 구동되었다.

뭔가 네트워크적인 이슈가 있다고 판단 구글링을 해서 본 docker 디렉토리 밑의 network/files를 날려보기로 결심...(너무 무서워서 알파 환경에서 먼저 시도해보았다. 이래서 리얼환경과 동일한 알파환경은 꼭 필요하다.)

ref : https://github.com/moby/moby/issues/25981

 

알파환경에서 sudo systemctl stop docker 실행 후 /var/lib/docker/network/files를 날리고 기존 Docker container, image들을 모두 제거 해준 뒤 재시작해보았다.

sudo systemctl stop docker
sudo rm -rf /var/lib/docker/network/files  => 네트워크 파일 제거

incubator-superset/docker 폴더 밑에서
docker stop $(docker ps -a -q)     => 도커 모든 프로세스 중단
docker rm $(docker ps -a -q)        => 도커 모든 컨테이너 제거
docker rmi $(docker images -q)   => 도커 모든 이미지 제거

위와 같이 수행하였고 docker-compose up 명령어를 통해 다시 superset을 띄워보았다. 

문제없이 Superset내부의 데이터들이 그대로 남아있는 것을 확인(제일 중요)하고 리얼에 적용해 보았다.

동일하게 sudo rm -rf /var/lib/docker/network/files 제거 하고 docker stop $(docker ps -a -q)     => 도커 모든 프로세스 중단명령을 날리는데 다음과 같은 에러메세지가 떴다.

$ docker stop $(docker ps -a -q)
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
"docker stop" requires at least 1 argument.
See 'docker stop --help'.

Usage:  docker stop [OPTIONS] CONTAINER [CONTAINER...]

Stop one or more running containers

해결은 아래의 명령어로 처리

$ sudo dockerd

dockerd is the daemon service for docker containers, because it is not running in background we're not able to take any actions related to the service, which needs be restarted.

참조 : https://stackoverflow.com/questions/44678725/cannot-connect-to-the-docker-daemon-at-unix-var-run-docker-sock-is-the-docker

 

Cannot connect to the Docker daemon at unix:/var/run/docker.sock. Is the docker daemon running?

I have applied every solution available on internet but still I cannot run Docker. I want to use Scrapy Splash on my server. Here is history of commands I ran. docker run -p 8050:8050 scrapinghub/

stackoverflow.com

이렇게 문제를 해결해주고 알파환경과 동일하게 Docker Container, image 파일들을 제거하고 Docker, Superset을 재시작해주었더니...

문제가 말끔히 해결되어 Superset UI에 잘 접근하는 것을 확인 할 수 있었다.

뭔가 docker network 파일들이 꼬여있었던 것 같다.

docker network아래의 파일들을 지워주기 전에 시스템 로그(/var/log/messages)에서 아래와 같은 메세지가 계속해서 떴었다.

IPv6: ADDRCONF(NETDEV_UP): veth8155173: link is not ready
br-72dc763038be: port 4(veth8155173) entered blocking state
br-72dc763038be: port 4(veth8155173) entered forwarding state
br-72dc763038be: port 5(veth8f6205c) entered blocking state
br-72dc763038be: port 5(veth8f6205c) entered disabled state
device veth8f6205c entered promiscuous mode

하지만 Docker network 디렉토리 밑의 file들을 삭제해주고 Docker를 재부팅한 이부에는 시스템 로그에 위의 로그들이 나타나지 않음을 확인하였다. 어떠한 이유에서 위와 같은 문제가 발생했는지에 대한 정확한 원인은 파악하지 못했다.....찾게 되면 포스팅하도록 하겠다.

감사합니다.

반응형
반응형


톰캣(tomcat)의 기본포트가 8080인 이유를 아시나요???


많은 분들이 WAS로써 톰캣(tomcat)을 사용하실텐데요. 


특히나 요즘은 스프링부트로 인한 임베디드 톰캣을 사용하실줄로 압니다.


톰캣도 그렇고 스프링부트의 임베디드 톰캣도 그렇고 그럼 왜 기본 디폴트 포트는 8080이냐???하는 의문이 생길 수도 있는데요...(저는 그랬습니다...)


간단히 설명을 드리자면 리눅스나 유닉스는 1024이하의 포트(well-known port)들은 일반 유저 권한에서 바인딩 할 수 없도록 되어 있습니다.


이유는 보안때문인데요~!



8080포트에 대한 특별한 이유는 없습니다. 그저 1024이상의 포트중 하나를 임의로 디폴트로 설정한 것 일뿐(이라고 저는 생각합니다.)


하지만 외부 서비스를 해야하는경우에는 80포트로의 접근이 필요한 경우가 있습니다.


단순히 naver.com:8080이라고 사용자들이 접속하게 된다면 불편할테니까요...


그래서 루트권한(sudo)로 톰캣 포트를 80으로 설정 후 어플리케이션을 기동시켜서 사용할 수 는 있습니다.


다만! 위에서 말씀드렸듯 보안 문제가 존재합니다.


애드센스 자동삽입 광고


톰캣서버는 구동시에 tomcat 유저 권한으로 구동되게 됩니다. 때문에 톰캣을 통해 서비스되는 웹을 통해 해킹이 되더라도


tomcat유저 권한에 해당하는 부분까지만 접근 가능하게 됩니다.


따라서 루트권한(sudo)로 80포트로 구동시키게 된다면 해킹당했을 경우보단 안전하다고 할 수 있습니다.




물론 이런 문제를 회피하는 방법은 iptables를 통한 포트포워딩 방식이나 WAS앞단에 웹서버(apache, nginx)를 둬서 해결할 수 있지만


저 경험상에 의해서 iptables를 통해 포트포워딩을 할 경우 문제가 있었던 경험이 있기에 톰캣 80포트 8080 포트로 포워딩 이슈 


앞단에 웹서버를 두시고 서비스하는 방법이 좋다고 생각합니다.

반응형
반응형


리눅스에서 openjdk 업그레이드 하기!!!


1. 자바 버전 확인

$ java -version


2. 설치 가능한 openjdk 버전 확인

$ yum list java*jdk-devel



3. 설치고자하는 버전을 확인 후 설치

$ yum install -y java-1.8.0-openjdk-devel.x86_64


나의 경우에는 설치하고 java -version 명령어를 통해 확인했을 때 잘 업그레이드 된 걸 확인할 수 있었다.



혹시 바뀌지 않은 경우 다음과 같이 바꾸도록 하자.

$ /usr/sbin/alternatives --config java



해당 명령어를 쳐서 원하는 버전의 번호를 선택해주면 된다~!!!!



반응형
반응형

쉘 스크립트를 사용하다보면 스크립트 중간에 그 다음 로직으로 넘어가기전 특정 시간동안 멈추고 싶을 경우가 있다.


그럴 경우 다음과 같이 원하는 시간만큼 간편히 sleep 시킬 수 있다.


[ shell script 간편 sleep 포맷 ]

sleep .5 # Waits 0.5 second.

sleep 5  # Waits 5 seconds.

sleep 5s # Waits 5 seconds.

sleep 5m # Waits 5 minutes.

sleep 5h # Waits 5 hours.

sleep 5d # Waits 5 days.


반응형
반응형

특정 포트의 프로세스를 죽이고 싶을 때 사용


특정 포트를 사용하는 프로세스를 찾고 싶을 때

lsof (list open file)을 나타내며, 

시스템에서 열린 파일 목록을 알려주고 사용하는 프로세스, 디바이스 정보, 파일의 종류등 상세한 정보를 출력해준다.

lsof -n -i4TCP:8080(원하는 port)


lsof 명령이 안먹힌다면 netstat

netstat -anp | grep LISTEN | grep :포트번호

> tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 2542/java


뒤에 2542가 프로세스ID이다.



[ lsof 실행결과 ]

COMMAND  PID   USER   FD   TYPE    DEVICE SIZE/OFF NODE NAME

java    6079 irteam   70r  IPv6 197862007      0t0  TCP 172.20.0.5:webcache->10.161.240.88:35522 (ESTABLISHED)


PID를 찾아서


kill -9 PID(6079)


생각보다 서버운영시 필요할때가 많기 때문에 되도록이면 외우도록 하자~!

반응형
반응형

리눅스(Linux) 페이지 캐시


리눅스는 파일 I/O의 성능 향상을 위해 페이지 캐시라는 메모리 영역을 만들어서 사용한다.


한 번 읽은 파일의 내용을 페이지 캐시라는 영역에 저장 시켜 놨다가 다시 한 번 동일한 파일 접근이 일어나면 디스크에서 


읽지 않고 페이지 캐시에서 읽어서 제공해 주는 방식.


free -k 명령으로 파일을 읽기전 cached 영역과 cat으로 파일을 읽은 후 free -k 명령으로 확인해 볼 수 있다.



반응형
반응형

 


 안녕하세요. 이번에는 최근에 읽은 '아파치 톰캣 7 따라잡기' 책에 대해 정리를 해보도록 하겠습니다. 처음에 회사에 왔을 때 아파치, 톰캣에 대한 지식이 많이 부족해 어려움들을 많이 겪었는데요. 서점에서 우연히 책을 보다가 해당 책의 제목을 발견하고 여전히 부족한 지식을 채우는데 도움이 될 것같아 일치의 망설임 없이 사서 읽게 되었습니다. 읽은지는 한 달정도 됬는데 한 번 읽고 넘기니 내용이 금방 가물가물 해지더라구요. 이참에 정리도 해놓고 틈틈히 보도록 해야겠다는 마음에 정리를 하게 되었습니다.


# 제가 몰랐던 내용이나 좀 더 확고히 하고 싶은 내용들에 대해서만 정리하기에 일목요연하지 못한점 양해 부탁드립니다.


ˇ 톰캣 bin 디렉터리에는 version.sh라는 스크립트가 있는데, 이 스크립트를 이용해 톰캣 버전과 시스템 정보를 확인할 수 있다. 

 


˚ 스크립트 설정 변경을 확인할 수 있도록 아주 유용한 스크립트 configtest.sh도 제공(톰캣 bin 디렉터리) 한다. configtest.sh 스크립트는 시스템 설정을 검토하고 에러를 찾아낸다. 


˚ 톰캣 설정파일인 conf 내부의 파일들에 대해 알아보자

  - catalina.policy : 톰캣 7의 보안 정책 권한을 설정하는 파일. JVM이 웹 애플리케이션에 어떤 보안 정책 권한을 적용할지를 결정한다.

  - catalina.properties : 이 파일은 서버를 시작할 때 검색하는 서버, 공유로더, JAR 등의 공유 정의를 포함한다.

  - server.xml : 톰캣의 중요 설정 파일 중 하나로 IP 주소, 포트, 가상 호스트, 컨텍스트 경로 등과 같은 중요 정보를 포함한다.

  - tomcat-users.xml : 역할에 기반한 정의에 따라 인증, 승인에 사용하는 파일이다. 이 파일은 데이터베이스의 사용자/암호/역할을 이용한 인증과 컨테이너로 관리되는 보안 구현에 사용된다. 이 파일을 고쳐서 사용자를 추가/삭제하거나 기존 사용자에 역할을 할당/비할당할 수 있다.

  - logging.properties : 톰캣 인스턴스의 로깅 프로퍼티(스타트업 로그 같은)를 정의한다.

  - web.xml : 톰캣 인스턴스가 시작될 때 모든 애플리케이션(톰캣 인스턴스로 로딩되는)의 기본 값을 정의한다. 웹 애플리케이션의 자신만의 배포 디스크립터를 포함하면 기본 디스크립터의 설정을 애플리케이션의 디스크립터의 설정으로 바꾼다.

  - context.xml : 애플리케이션을 실행할 때 이 파일의 내용을 로드한다. context.xml에는 세션 저장, 코밋 연결 추적 등과 같은 설정 파라미터가 있다.


˚ JDBC : 자바 데이터베이스 연결 JDBC, Java Database Connectivity은 자바 기반 데이터베이스 접근 기술로 클라이언트가 서버 데이터베이스에 접근하는데 필요한 API를 제공한다. JDBC는 관계형 데이터베이스에 맞게 만들어졌으며 데이터베이스 질의, 갱신 기능을 제공한다.


˚ JNDI : 자바 네이밍과 디렉터리 인터페이스 JNDI, Java Naming and Directory Interface 서비스는 자바 프로그래밍 언어를 사용해 만들어진 애플리케이션에 네이밍, 디렉터리 기능을 제공하는 자바 플랫폼 API다.


˚ DataSource : JDBC API를 이용해 관계형 데이터베이스에 접근할 때 사용하는 자바 객체다. 


˚ 톰캣의 배포, 설정 과정에서 흔히 발생하는 문제

  1. 

  [ 문 제 ] 


 ˚  사용자가 애플리케이션을 배포한 다음에도 여전히 예전 코드가 보인다고 불평


  [ 해결과정 ] 


 ˚  doc 베이스의 파일이 최근 파일인지 확인한다.


 ˚  톰캣 7의 logs 디렉터리에 있는 catalina.out을 통해 특정 WAR 파일명이 배포되었는지 확인한다


 ˚  이전 두 가지 모두 확인했는데도 문제가 해결되지 않으면 톰캣 서비스를 중지하고 다음 명령어를 이용해 work/Catalina/localhost 디렉터리에 있는 temp 디렉터리의 컨텐츠를 삭제한다. work/Catalina/localhost 디렉터리에 는 temp 디렉터리의 컨텐츠를 삭제한다.


cd /opt/tomcat/temp

rm -rf ../temp/*


cd /opt/tomcat/work/Catalina/localhost/

rm -rf ../localhost/*
 

 ˚ 톰캣 서비스를 재시작하고 사용자에게 다시 애플리케이션을 확인하도록 한다.



  2.

  [ 문 제 ] 


 ˚ 사용자가 한 노드에서는 현재 배포된 코드를 볼 수 있지만 다른 노드에서는 여전히 예전 코드가 표시된다고 불평


 [ 해결과정 ]


 ˚ doc 베이스의 파일이 최근 파일인지 확인한다.


 ˚ 톰캣 7의 logs 디렉터리에 있는 catalina.cout을 통해 특정 WAR 파일명이 배포되었는지 확인한다.


 ˚ 이전 두 가지 모두 확인했는데도 문제가 해결되지 않으면 node2의 톰캣 서비스를 중지한다. node1의 코드를 복제하도록 설정하고 다음 명령어를 이용해 work/Catalina/localhost 아래의 temp 디렉터리의 컨텐츠를 삭제한다. 


cd /opt/tomcat/temp

rm -rf ../temp/*


cd /opt/tomcat/work/Catalina/localhost/

rm -rf ../localhost/*


 ˚ 톰캣 서비스를 재시작하고 사용자에게 애플리케이션을 확인하도록 한다. 또한 node1과 node2가 복제 모드로 동작하는지 데이터베이스 상태를 확인한다.

 ˚ 양쪽 노드에서 데이터베이스에 연결한다.


  3.

  [ 문 제 ]

 ˚ server.xml을 고친 이후로 톰캣 인스턴스가 실행되지 않는 현상이 발생했다.


  [ 해결 과정 ]


 ˚ 톰캣 bin 디렉토리로 이동한다.


 ˚ configtest.sh를 실행한다.


 ˚ 출력된 내용들 중에 에러 메시지를 보면 톰캣이 이미 실행 중임을 알 수 있다. 따라서 웹 서버를 중지하고 temp 디렉터리를 비운다.


 ˚ 서비스를 다시 시작한다.




˚ 톰캣 7의 커넥터 종류 


 : 커넥터란 요청을 수락하고 응답을 리턴하는 교차점을 가리킨다. 톰캣에는 자바 HTTP 커넥터, 자바 AJP 커넥터, ARP(HTTP/AJP) 커넥터 세 가지 종류의 커넥터가 있다. 애플리케이션은 자신의 요구사항에 맞는 커넥터를 사용한다.


 1. 자바 HTTP 커넥터 


 : HTTP 프로토콜을 기반으로 하는 자바 HTTP 커넥터는 HTTP/1.1 프로토콜만 지원한다. 톰캣은 자바 HTTP 커넥터를 이용해 독립형standalone 웹 서버로 동작 할 수 있으며, jsp/서블릿 호스트 기능도 제공할 수 있다.



 2. 자바 AJP 커넥터


 : 자바 AJP 커넥터는 AJP(아파치 JServ 프로토콜)와 AJP를 통한 웹 서버 통신을 기반으로 한다. 자바 서블릿 컨테이너를 인터넷에 노출하고 싶지 않을 때 AJP 커넥터를 사용(다른 프론트엔트 서버를 이용)하며 톰캣 7에서 SSL 터미네이션을 처리하지 않는 상황이라면 AJP 커넥터를 매우 유용하게 활용할 수 있다. AJP 구현 예제로 mod_jk, mod_proxy 등이 있다.



 3. APR(AJP/HTP) 커넥터


 : ARP(Apache Portable Runtime)은 확장성, 성능, 다른 웹 서버와의 협력 작업 상황에서 능력을 발휘한다. 



 

오늘 정리는 여기서 마치도록 하고 정리 하지 못한 내용은 part.2로 포스팅하도록 하겠다.



반응형

+ Recent posts