'firewall-cmd'에 해당하는 글 4건

 

Tomcat 에서 인스턴스를 여러개 만들어 서비스에는 성공하였지만, 각 인스턴스간에 세션을 공유해야 할 상황이라면 몇가지 설정을 추가해야 한다.

 

테스트 환경 : CentOS 7 / Tomcat 8.5
테스트 목표 : 구성된 인스턴스 간에 이동을 하더라도 session 유지

 

 

1. 현재 인스턴스 세션 확인

 

톰캣의 기본 고양이 화면 파일을 수정하여 세션ID 를 노출시켰다.

 

$ vi /app/tomcat/instance1/webapps/ROOT/index.jsp
<!-- 세션 사용하도록 항목 삭제나 변경. (기본값 session="true") -->
<%@ page session="false" %>

<!-- body 태그 안에 추가 -->
<%=session.getId()%>


http://serverIP:port1
http://serverIP:port2
http://serverIP:port3

 

EF5B9FCA054DBCEC5E3201DBA42C927A 처럼 보여지는 세션ID 는 세 인스턴스 간에 모든 다른 값을 출력할 것이다.

 

 

2. server.xml 파일 수정

server.xml 파일에 클러스터 설정의 주석을 해제한다.

상세 설정은 tomcat 웹사이트 참고 : https://tomcat.apache.org/tomcat-8.5-doc/cluster-howto.html 

 

<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>

 


3. 방화벽 port 추가

<Membership className="org.apache.catalina.tribes.membership.McastService"
            address="228.0.0.4"
            port="45564"
            frequency="500"
            dropTime="3000"/>


클러스터 멤버를 구성하는데 필요한 Multicast 기본 포트(45564)를 추가한다.
멀티캐스트(multicast)는 한 번의 송신으로 메시지나 정보를 여러 컴퓨터에 동시에 전송하는 역할을 한다.

 

# firewall-cmd --permanent --zone=public --add-port=45564/tcp
# firewall-cmd --permanent --zone=public --add-port=45564/udp
# firewall-cmd --reload

 

 

4. web.xml 파일 수정

각 인스턴스의 webapps/ROOT/WEB-INF/web.xml 파일 아래에 distribuable 요소를 추가하면, 해당 컨텍스트에 대한 클러스터링이 진행되며 세션 공유가 가능해 진다.

<web-app ...>
  <distributable/>
</web-app>



5. Apache / Tomcat 재부팅

http://serverIP:port1
http://serverIP:port2
http://serverIP:port3

재부팅 하면 포트간에 이동하여도 동일한 세션ID 가 유지됨을 확인할 수 있다.

 


WRITTEN BY
손가락귀신
정신 못차리면, 벌 받는다.

트랙백  0 , 댓글  0개가 달렸습니다.
secret

 

Tomcat 에서 여러 인스턴스를 관리하는 방법이 있다. CATALINA_HOME 디렉토리에서 필요한 부분만 복제하고 약간의 설정을 수정하여 인스턴스들을 구성할 수 있다. server.xml 파일 하나에 여러 호스트 정보를 등록하여 관리할 수도 있지만 이 경우 Tomcat 을 재구동하면 모든 서비스들이 재구동되는 단점이 있으므로 그다지 추천하지는 않는다.

 

[CATALINA_HOME]

  • Tomcat Engine 디렉토리 : bin, lib
  • Tomcat Instance 디렉토리 : conf(설정), logs(로그), webapps(소스), work(jsp구동), temp(임시)

 

위 내용들 중  Instance 디렉토리를 아래의 절차를 거쳐 별도로 구성해 주면 된다.(Tomcat 설치 생략)

 

  1. 필요한 만큼의 Tomcat Instance 디렉토리를 생성한다.
  2. CATALINA_HOME 으로부터 필요 디렉토리를 복제한다.(conf, webapps)
  3. server.xml 에서 port 등 환경을 변경한다.
  4. 인스턴스 실행/중지 스크립트를 만들고 실행한다.
  5. 방화벽에서 해당 port 를 추가한다.

 

테스트 환경 : CentOS 7 / Tomcat 8.5
테스트 목표 : 서버 ip 에 특정 포트들에 연결되는 여러 인스턴스 구동

 

 

1. Instance 디렉토리 생성

 

# mkdir -p /app/tomcat
# chown -R tomcat:tomcat /app/tomcat
# su - tomcat
$ cd /app/tomcat
$ mkdir -p instance1/logs

 

 

2. CATALINA_HOME 에서 디렉토리 복제

 

$ cp -a /etc/tomcat8/conf instance1
$ cp -a /etc/tomcat8/webapps instance1

 

 

3. server.xml 설정 변경

 

$ vi instance1/conf/server.xml

$ vi instance1/conf/server.xml

<Server port="8005" shutdown="SHUTDOWN">

  <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />

 

여기에 shutdown port 와 http 서비스 port / https port 를 바꿔준다. 인스턴스가 3개 라면 8005/8105/8205, 8080/8180/8280, 8443/8444/8445 처럼 포트가 겹치지 않고 기억하기 쉽도록 구성하면 된다.

 

 

4. 구동 스크립트 생성

 

$ vi instance1/startup.sh

#!/bin/sh
export CATALINA_HOME=/etc/tomcat8
export CATALINA_BASE=/app/tomcat/instance1
$CATALINA_HOME/bin/startup.sh

 

$ vi instance1/startup.sh

#!/bin/sh
export CATALINA_HOME=/etc/tomcat8
export CATALINA_BASE=/app/tomcat/instance1
$CATALINA_HOME/bin/shutdown.sh

 

$ chmod u+x startup.sh
$ chmod u+x shutdown.sh

 

이렇게 설정하면 Tomcat 설치 디렉토리에서는 구동 스크립트만 빌려 각각의 인스턴스를 구동할 수 있게 된다. 구성된 instance1 디렉토리를 필요한 만큼 복제한다.

 

$ cp -a instance1 instance2
$ cp -a instance1 instance3

 

복제 후에는 이미 진행했던 3,4 번 단계의 각 인스턴스 설정(server.xml, startup.sh, shutdown.sh)을 변경해 준다.

 

 

5. 방화벽 해당 port 추가

 

# firewall-cmd --permanent --zone=public --add-port=8080/tcp
# firewall-cmd --permanent --zone=public --add-port=8180/tcp
# firewall-cmd --permanent --zone=public --add-port=8280/tcp
# firewall-cmd --permanent --zone=public --add-port=8443-8445/tcp
# firewall-cmd --reload

 

 

6. 각 인스턴스 구동 후 확인

 

$ /app/tomcat/instance1/startup.sh
$ /app/tomcat/instance2/startup.sh
$ /app/tomcat/instance3/startup.sh

 

http://serverIP:instance1port
http://serverIP:instance2port
http://serverIP:instance3port


WRITTEN BY
손가락귀신
정신 못차리면, 벌 받는다.

트랙백  0 , 댓글  0개가 달렸습니다.
secret

firewalld 방화벽

Server/CentOS 2021. 7. 11. 14:46

CentOS 7 부터 방화벽으로 firewalld 를 사용한다. port 나 대역 설정 등을 주로 한다. 아마도 기존 iptables 보다 설정이 간편할 것이다.

 

  • 여러 zone 생성 가능
  • zone 마다 각종 service, port, ip 등 설정 가능
  • 필요에 맞게 하나의 zone 을 활성화
  • default zone 은 public

 

가장 많이 사용하는 구문은 포트 열고 적용하고.

 

# firewall-cmd --zone=public --add-port=8080/tcp
success
# firewall-cmd --reload
success

 

 

1. 데몬 확인 (start/stop/status)

 

# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
   Active: active (running) since Sat 2021-07-10 23:31:53 EDT; 1h 29min ago
     Docs: man:firewalld(1)
 Main PID: 687 (firewalld)
   CGroup: /system.slice/firewalld.service
           └─687 /usr/bin/python2 -Es /usr/sbin/firewalld --nofork --nopid

Jul 10 23:31:53 localhost.localdomain systemd[1]: Starting firewalld - dynamic firewall daemon...
Jul 10 23:31:53 localhost.localdomain systemd[1]: Started firewalld - dynamic firewall daemon.
Jul 10 23:31:53 localhost.localdomain firewalld[687]: WARNING: AllowZoneDrifting is enabled. This is co...ow.
Hint: Some lines were ellipsized, use -l to show in full.

 

# firewall-cmd --state
running

 

 

2. 모든 zone 이름 확인

 

# firewall-cmd --get-zones
block dmz drop external home internal public trusted work

 

 

3. 기본 zone 확인

 

# firewall-cmd --get-default-zone
public

 

 

4. 기본 zone 을 home 으로 변경

 

# firewall-cmd --set-default-zone=home
# firewall-cmd --get-default-zone
home

 

 

5. public zone 의 설정 확인

 

# firewall-cmd --zone=public --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens33
  sources:
  services: dhcpv6-client ssh
  ports: 1521/tcp
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

 

현재 public zone 설정을 보면 ssh services 와 1521 포트가 열린 것을 확인할 수 있다. 알려진 포트들에 대해서는 services 로 등록을 해도 되고, 다른 포트를 사용하고 싶다 하면 직접 포트를 추가해도 된다. service 에 ssh 를 추가하나, 포트 22번을 여는 거나 동일한 결과란 뜻.

 

 

6. 서비스 추가/삭제 (즉시 적용)

 

# firewall-cmd --zone=public --add-service=mysql
# firewall-cmd --zone=public --remove-service=mysql

 

 

7. port 추가/삭제 (즉시 적용)

 

# firewall-cmd --zone=public --add-port=8081/tcp
# firewall-cmd --zone=public --remove-port=8081/tcp
# firewall-cmd --zone=public --add-port=8081-8090/tcp
# firewall-cmd --zone=public --remove-port=8081-8090/tcp

 

 

8. 영구 적용 (reload 후 적용)

 

# firewall-cmd --zone=public --add-service=mysql --permanent
# firewall-cmd --reload

 

--pormanent 를 제외하면 재부팅이나 데몬 재시작 할 경우 해당 설정은 사라진다.
또한 reload 로 설정을 재적용하지 않으면 반영되지 않는다.

 

 

9. IP 추가/삭제

 

# firewall-cmd --add-source=192.168.0.2 --permanent 
# firewall-cmd --remove-source=192.168.0.2 --permanent

 

 

10. IP 대역 추가/삭제

 

# firewall-cmd --add-source=192.168.0.0/24 --permanent 
# firewall-cmd --remove-source=192.168.0.0/24 --permanent

 

 

11. IP 대역 / 특정 포트 추가/삭제

 

# firewall-cmd --add-rich-rule='rule family="ipv4" source address=192.168.0.0/24 port port="8081" protocol="tcp" accept' --permanent
# firewall-cmd --remove-rich-rule='rule family="ipv4" source address=192.168.0.0/24 port port="8081" protocol="tcp" accept' --permanent

 


WRITTEN BY
손가락귀신
정신 못차리면, 벌 받는다.

트랙백  0 , 댓글  0개가 달렸습니다.
secret

CentOS 7 에서 Oracle 11g 에 설치하기.

 

 

1. 다운로드

 

Oracle 11g 는 다운로드 하는 것 부터가 불편하다. 구글에서 대충 검색하면 현재 보편화된 19c 다운로드 페이지로 이동되고, 모든 버전을 확인하고 다운받으려면 Oracle Software Delivery Cloud 사이트(https://edelivery.oracle.com) 로 이동해야 한다. 마찬가지로 oracle 계정이 필요하다.

 

 

2. X window 준비

 

Oracle 11g 는 X window 환경을 필요로 하기 때문에 X window 환경을 준비한다.

 

  • 방법1. GUI 용 서버 설치
    # yum groupinstall 'Server with GUI'
  • 방법2. GNOME Desktop 설치
    # yum groupinstall 'GNOME Desktop'
  • 방법3. 최소한의 X11 패키지 설치 및 Xming(원격) 사용하기
    link: Xming 설치 링크

 

CentOS GUI 환경에서는 설치 중 에러 메시지 등이 깨져 보일 수 있는데 이럴 때는 설치를 중단하고 윈도우즈 환경(Xming) 에서 원격 접속하면 설치 중 메시지들을 정상적으로 확인할 수 있다.

 

 

3. 오라클 계정/그룹 생성

 

# groupadd dba
# useradd -g dba oracle
# passwd oracle

 

 

4. 설치 디렉토리 및 권한 설정

 

원하는 ORACLE_BASE 디렉토리를 생성한다.

 

# mkdir -p /app/oracle
# chown -R oracle:dba /app

 

 

5. 설치 전 준비사항

 

오라클 설치 전에는 메모리도 확보해야 하고, 파일 디스크립터, OS 커널 파라미터 설정도 해야 하고, 의존 라이브러리도 설치해야 한다. 아무 설정 없이 오라클 설치를 진행하면 다음의 화면을 만날 수 있다.

 

 

ignore all 을 체크하고 설치를 진행해도 오라클 설치는 마칠 수 있지만, 정상적으로 설치가 완료됐다고 볼 수도 없고 굳이 그렇게 설치할 필요도 없다. 또 ignore 체크를 해도 진행되지 않는 경우도 있다. 나는 Swap Memory 와 pdksh(Public domain Korn shell) 때문에 진행이 되지 않은 적이 있다.

 

 

5.1 OS 커널 파라미터 값 설정 (ignore 로 fix 가능)

 

# vi /etc/sysctl.conf

# Controls the maximum shared segment size, in bytes
kernel.shmmax = 68719476736

# Controls the maximum number of shared memory segments, in pages
kernel.shmall = 10523004
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128

fs.aio-max-nr = 1048576
fs.file-max = 6815744

net.ipv4.ip_local_port_range = 9000 65500

net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048586

 

# /sbin/sysctl -p

 

 

5.2 유저 자원 사용 제한값 설정 (ignore 로 fix 가능)

 

# vi /etc/security/limits.conf
...
oracle soft nproc 2048
oracle hard nproc 65536
oracle soft nofile 1024
oracle hard nofile 65536

 

 

5.3 의존 라이브러리 설치

 

# yum -y install compat-libstdc++-33.x86_64 binutils elfutils-libelf elfutils-libelf-devel
# yum -y install glibc glibc-common glibc-devel glibc-headers gcc gcc-c++ libaio libaio-devel
# yum -y install libgcc libstdc++ libstdc++-devel make sysstat unixODBC unixODBC-devel

# yum -y install unzip wget

 

 

5.4 pdfsh 설치

 

다운로드 사이트

http://rpm.pbone.net/info_idpl_2398776_distro_redhat7.x_com_pdksh-5.2.14-8.i386.rpm.html

 

# wget ftp://ftp.pbone.net/mirror/archive.download.redhat.com/pub/redhat/linux/7.0/en/os/i386/RedHat/RPMS/pdksh-5.2.14-8.i386.rpm
# rpm -Uvh --nodeps pdksh-5.2.14-8.i386.rpm --force

 

 

5.5. oracle 계정 환경변수 설정

 

# vi /home/oracle/.bash_profile
export ORACLE_BASE=/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/dbhome_1
export ORACLE_SID=orcl
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib:/usr/local/lib
export PATH=$PATH:$ORACLE_HOME/bin

 

ORACLE_BASE, ORACLE_HOME 이나 SID 등은 필요에 맞게 수정한다.

 

 

5.6 Swap 메모리 설정

 

이 부분은 조금 이해가 안된다. Oracle 11g R2 설치시 최소 메모리가 1GB 인데, 한번은 16GB 시스템에서 Actual Value 가 8GB, Expected Value 가 16GB 로 되어 진행되지 않은 적이 있다. 메모리가 부족하지도 않은데 시스템 메모리 만큼 영끌하라는게 말이됨? 아무튼 이런 이유로 진행이 되지 않는다면 Expected Value 까지 swap 메모리를 확보해야 한다.

 

link: Swap memory 생성 참고

 

 

6. oracle 11g 설치파일 준비

 

oracle 11g 설치 파일을 서버에서 직접 다운받은게 아니라면 ftp 등을 이용하여 oracle 11g 파일을 서버에 업로드한다. oracle 11g 설치 파일을 oracle 계정이 실행할 수 있도록 설정하고 installer 를 실행한다.

 

# mv V17530-01_1of2.zip /home/oracle
# mv V17530-01_2of2.zip /home/oracle
# chown oracle:dba /home/oracle/V17530*

 

 

7. installer 실행

 

installer 를 실행하는데 있어 가장 중요한 것이 oracle 계정으로 로그인 하는 것이다. su / sudo 등을 이용하지 않고 새로운 세션에서 oracle 계정으로 로그인 해야 한다.

 

$ unzip V17530-01_1of2.zip
$ unzip V17530-01_2of2.zip
$ ./database/runInstaller

 

만약 한글판일 경우 한글이 깨지면,

 

$ export LANG=C
$ export LC_ALL=C
$ ./database/runInstaller

 

 

8. 설치 과정

 

  • Configure Security Updates : pass
  • Installation Option : Create and configure a database
  • System Class : Server Class
  • Grid Options : Single instance database installation
  • Install Type : Typical install
  • Database Edition : Enterprise Edition
  • Installation Location : default (/app/oracle)
  • Create Inventory : default
  • Prerequisite Checks : Ignore All

 

 

9. 설치 중 오류 수정

 

$ vi /app/oracle/product/11.2.0/dbhome_1/ctx/lib/ins_ctx.mk
ctxhx: $(CTXHXOBJ) 
    -static $(LINK_CTXHX) $(CTXHXOBJ) $(INSO_LINK)

 

$ vi /usr/oracle/app/product/11.2.0/dbhome_1/sysman/lib/ins_emagent.mk
$(SYSMANBIN) emdctl:
    $(MK_EMAGENT_NMECTL) -lnnz11

 

 

10. 구성 스크립트 실행(Root)

 

# /app/oraInventory/orainstRoot.sh
# /app/oracle/product/11.2.0/dbhome_1/root.sh

 

 

11. 설치 완료 후 계정 생성

 

$ sqlplus / as sysdba
SQL> CREATE USER username identified by password;
SQL> GRANT resource, connect, dba to username;
SQL> SELECT * FROM ALL_USERS

USERNAME                          USER_ID CREATED
------------------------------ ---------- ------------------
OOPS4U                                 91 10-JUL-21

 

username 과 password 에 원하는 계정정보 입력.

 

 

12. 방화벽 port 열기

 

# firewall-cmd --zone=public --add-port=1521/tcp --permanent
# firewall-cmd --reload

 

 

13. 클라이언트 접속 테스트

 

SQL Developer 설치

https://www.oracle.com/tools/downloads/sqldev-downloads.html

 


WRITTEN BY
손가락귀신
정신 못차리면, 벌 받는다.

트랙백  0 , 댓글  0개가 달렸습니다.
secret