biz라는 계정을 사용한다는 전제이며 셋팅은 개인취향. CentOS기준
(Windows에서 VirtualBox를 이용해서 CentOS 6.8을 설치)


biz라는 신규 계정 생성

계정 생성 및 암호 셋팅(biz라는 계정을 사용한다는 전제)
adduser biz
passwd biz

biz계정에 sudo 권한 추가
#파일의 권한을 임시로 바꾼 후 sudo 셋팅 후 롤백
chmod 640 /etc/sudoers && echo "biz        ALL=(ALL)       NOPASSWD: ALL" >> /etc/sudoers && chmod 440 /etc/sudoers


재 부팅시 네트웤 자동 활성화

vi /etc/sysconfig/network-scripts/ifcfg-eth0 후 ONBOOT=yes 로 변경


LOCALE 셋팅

# locale 명려어로 확인 후 ko_KR.UTF-8 이 아니라면 셋팅을 진행
localectl set-locale LANG=ko_KR.UTF-8

재 부팅 후 locale명령어로 확인


bash 쉘프롬프트 변경

sudo su
echo 'PS1="[\u@\h \$PWD \D{%T}]\\$ "' >> /etc/bashrc && source /etc/bashrc


ulimit 튜닝(추후 ngrinder 등을 사용하기 위해서 OS의 리소스 사용제한을 완화)

su root

echo "*    soft nofile  655350" >> /etc/security/limits.conf
echo "*    hard nofile  655350" >> /etc/security/limits.conf
echo "*    soft nproc  32768" >> /etc/security/limits.conf
echo "*    hard nproc  32768" >> /etc/security/limits.conf

계정에 재 접속 후 적용됨


사용할 디렉토리들 생성

cd /home/biz/

#사용 디렉토리 생성(logs는 가능하면 용량 큰 디스크 마운트해서 심볼릭 링크 거세요)
mkdir apps && mkdir deploy && mkdir scripts && mkdir logs && mkdir logs/nginx


Git 설치

sudo su
yum install git-core

JAVA 설치

#jdk 다운로드
wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u91-b14/jdk-8u91-linux-x64.tar.gz" -O ~/apps/jdk-8u91-linux-x64.tar.gz
wget --no-check-certificate -c --header "Cookie: oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u121-b13/e9e7ea248e2c4826b92b3f075a80e441/jdk-8u121-linux-x64.tar.gz" -O ~/apps/jdk-8u121-linux-x64.tar.gz

#압축 해제해서 심볼릭 링크
tar -xzf ~/apps/jdk-8u91-linux-x64.tar.gz -C ~/apps && rm ~/apps/jdk-8u91-linux-x64.tar.gz && ln -s ~/apps/jdk1.8.0_91 ~/apps/jdk
tar -xzf ~/apps/jdk-8u121-linux-x64.tar.gz -C ~/apps && rm ~/apps/jdk-8u121-linux-x64.tar.gz && ln -s ~/apps/jdk1.8.0_121 ~/apps/jdk

#DNS TTL 무제한-> 1분으로 변경
vi ~/apps/jdk/jre/lib/security/java.security

networkaddress.cache.ttl=-1을 networkaddress.cache.ttl=60 로 변경

#java path 설정
echo 'export JAVA_HOME=/home/biz/apps/jdk' >> ~/.bashrc
echo 'export PATH=$JAVA_HOME/bin:$PATH' >> ~/.bashrc
source ~/.bashrc

#확인
java -version

Tomcat 설치

wget 'http://apache.mirror.cdnetworks.com/tomcat/tomcat-8/v8.0.39/bin/apache-tomcat-8.0.39.tar.gz' -O ~/apps/apache-tomcat-8.0.39.tar.gz
tar -xzf ~/apps/apache-tomcat-8.0.39.tar.gz -C ~/apps && rm ~/apps/apache-tomcat-8.0.39.tar.gz && ln -s ~/apps/apache-tomcat-8.0.39 ~/apps/tomcat-8.0.39



Maven 설치

wget "http://mirror.navercorp.com/apache/maven/maven-3/3.3.9/binaries/apache-maven-3.3.9-bin.tar.gz" -O ~/apps/apache-maven-3.3.9-bin.tar.gz
tar -xzf ~/apps/apache-maven-3.3.9-bin.tar.gz && rm ~/apps/apache-maven-3.3.9-bin.tar.gz && ln -s ~/apps/apache-maven-3.3.9 ~/apps/maven

#환경변수 등록
export M2_HOME=~/apps/maven
export PATH=$PATH:$M2_HOME/bin
source ~/.bashrc

#확인
mvn -version


Nginx 설치

#root 계정으로 전환
sudo su

#nginx 저장소 추가
vi /etc/yum.repos.d/nginx.repo

[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=0

enabled=1



#nginx 설치
yum install nginx

#nginx 서비스 활성화 (재부팅시 nginx가 자동실행되도록 서비스를 활성화 합니다.)
systemctl enable nginx


확인방법 : systemctl list-unit-files | grep nginx

#cent OS 7이 아니라면 아래 명령어로
chkconfig nginx on


REDIS 설치(최신 버전으로 설치) 

sudo yum install http://rpms.remirepo.net/enterprise/remi-release-6.rpm  # CentOS 6용
  - 참고: sudo yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm  # CentOS 7용

sudo yum install --enablerepo=remi redis

sudo service redis start
  redis-cli >> 정상으로 접속되는지 확인
  redis-cli --version >> 버전확인

# 재 부팅시 redis 서비스 프로세스가 시작되도록 처리
sudo chkconfig redis on


Redis Conf 튜닝 예(sudo vim /etc/redis.conf)

bind 0.0.0.0

주석처리(메모리 캐쉬로만 사용하기 위해서)
#save 900 1
#save 300 10
#save 60 10000

537라인쯤에 아래 추가
maxmemory 512m


적용 : sudo service redis restart


  1. STS설치
  2. lombok 설치 : java get, setter 등을 소스에서 없애서 가독성 향상
  3. SVN커넥터 설치 : Subversive로 설치








  4. 글꼴 변경
  5. 코드 템플릿 변경





  6. JRE(Java) 설정



  7. 톰캣서버 설정



  8. 로거 자동완성용 Java 템플릿 추가
    • CTRL+Space로 로거 자동 완성을 위한 템플릿 등록(LOG 타이핑 후 CTRL+Space를 누르면 자동 완성 됨)
      • private static final Logger LOG = LoggerFactory.getLogger(${enclosing_type}.class);




  9. 인코딩 변경
















  10. javascript 자동완성 셋팅
    • javascript 어시스트 기능 ON



    • javascript Plug-In 설치(문제가 있을 수 있으니 필요한 경우에만 설치)


  1. STS설치
  2. lombok 설치 : java get, setter 등을 소스에서 없애서 가독성 향상
  3. SVN커넥터 설치 : Subversive로 설치





  4. 글꼴 변경
  5. 코드 템플릿 변경



  6. JRE(Java) 설정


  7. 톰캣서버 설정


  8. 로거 자동완성용 Java 템플릿 추가(lombok을 사용한다면 클래스파일위에 @slf4j를 사용하기 때문에 셋팅할 필요 없음)
    • CTRL+Space로 로거 자동 완성을 위한 템플릿 등록(LOG 타이핑 후 CTRL+Space를 누르면 자동 완성 됨)
      • private static final Logger LOG = LoggerFactory.getLogger(${enclosing_type}.class);



  9. 인코딩 변경









  10. javascript 자동완성 셋팅
    • javascript 어시스트 기능 ON


    • javascript Plug-In 설치(필요시)


  11. 저장시 자동으로 포맷팅 및 import 처리

가끔 kibna 대쉬보드를 다른사람 또는 시스템에 공유(iframe처리)할 때 full 스크린으로 보여줄 필요가 있다.


방법은,

url(shot cut url이 아니라 full url) 뒤에 &embed=true를 붙여주면 된다.


kibana 5.0.1 버전에서 잘 작동됨을 확인하였다.


참고 : https://github.com/elastic/kibana/issues/1610

Mongo DB 설치 및 Replica set으로 설정

#tokumx설치
yum install http://www.percona.com/downloads/percona-release/redhat/0.1-3/percona-release-0.1-3.noarch.rpm
yum install tokumx-enterprise

-- OS 커널쪽 설정 수정
echo never > /sys/kernel/mm/transparent_hugepage/enabled


프로세스 시작 후 mongo 커멘드로 콘솔 접속


# primary와 arbiter만으로 2개 노드로  replica set 띄워봄
config = {
           _id: "repl_set",
           members: [
                      {_id: 0,host: "Primary IP입력:27017"},
                      {_id: 0,host: "Secondary IP입력:27017"},
                      {_id: 2,host: "Arbiter IP입력:37017",arbiterOnly:true},
                    ]
         }

rs.initiate(config);


# 참고 secondary 장비 셋팅이 완료된 후에 노드 add
rs.add("Secondary IP입력:27017")


참고 샘플 - Primary 또는 Secondary 노드 시작 커멘드
/usr/bin/mongod --replSet repl_set --dbpath /data/mongo/repl_0 --fork --logpath /var/log/tokumx/repl_0.mongod --expireOplogDays 3 --cacheSize 1g --quiet --maxConns 20000

참고 샘플 - arbiter 노드 시작 커멘드

/usr/bin/mongod --replSet repl_set --dbpath /data/mongo/arbiter --fork --logpath /var/log/tokumx/repl_arbiter.mongod --expireOplogDays 1 --oplogSize 1 --port 37017 --noprealloc


정리가 더 필요하지만 메모 목적으로 우선 블로그에 저장


elasticsearch 설치

#유저홈 밑의 apps 디렉토리에 설치하며 1개 물리서버에 인스턴스를 2개띄움
cd ~/apps

wget 'https://download.elastic.co/elasticsearch/release/org/elasticsearch/distribution/tar/elasticsearch/2.3.1/elasticsearch-2.3.1.tar.gz'
tar -xzf elasticsearch-2.3.1.tar.gz
rm elasticsearch-2.3.1.tar.gz

#2개 인스턴스를 띄울예정
mv elasticsearch-2.3.1 elasticsearch-2.3.1-node-01
ln -s elasticsearch-2.3.1-node-01 elasticsearch-01

#설정 수정
vi ~/apps/elasticsearch-01/config/elasticsearch.yml

#아래 Elasticsearch Plugin 설치완료 후에 복사해서 node-02생성
cp -R ~/apps/elasticsearch-2.3.1-node-01 ~/apps/elasticsearch-2.3.1-node-02
ln -s elasticsearch-2.3.1-node-02 elasticsearch-02
vi ~/apps/elasticsearch-02/config/elasticsearch.yml


Elasticsearch  Plguin 설치

cd ~/apps/elasticsearch-01/bin

-- HQ(head 플러그인보다 비쥬얼적으로 좋음)
./plugin install royrusso/elasticsearch-HQ
접속URL : http://elasticsearch도메인/_plugin/HQ/

-- SQL로 조회하는 Plugin (https://github.com/NLPchina/elasticsearch-sql)
접속URL : http://elasticsearch도메인/_plugin/sql/  

-- 은전한닢 es plugin(한글 형태소 분석기)
./plugin install org.bitbucket.eunjeon/elasticsearch-analysis-seunjeon/2.3.1.0

한글 형태소분석기 은전한닢 설치(은전한닢 설치 : http://guruble.com/?p=416)

[사전작업]
vi ~/.bashrc 후 아래내용 추가(미 추가시 mecab엔진을 제대로 설치 못하거나 logstash로 집계할 때 elastic search가 죽음)
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib/

1. mecab-ko 형태소 분석기 엔진 설치

cd {다운로드할 경로}
wget https://bitbucket.org/eunjeon/mecab-ko/downloads/mecab-0.996-ko-0.9.2.tar.gz -O mecab-0.996-ko-0.9.2.tar.gz
tar -xvzf mecab-0.996-ko-0.9.2.tar.gz
cd mecab-0.996-ko-0.9.2
./configure
make
make check
sudo make install

아래 명령어로 정상 설치여부 확인
mecab --version


2. mecab-ko-dic 사전(dictionary)파일 설치

cd {다운로드할 경로}
wget https://bitbucket.org/eunjeon/mecab-ko-dic/downloads/mecab-ko-dic-2.0.1-20150920.tar.gz -O mecab-ko-dic-2.0.1-20150920.tar.gz
tar -xvzf ./mecab-ko-dic-2.0.1-20150920.tar.gz
cd mecab-ko-dic-2.0.1-20150920
./autogen.sh
./configure
make
sudo make install

아래 명령어로 정상 설치여부 확인
mecab -d /usr/local/lib/mecab/dic/mecab-ko-dic
# 나는 당신을 사랑합니다.


3. libMeCab.so, MeCab.jar 라이브러리 설치

wget https://mecab.googlecode.com/files/mecab-java-0.996.tar.gz -O mecab-java-0.996.tar.gz
tar -xvzf mecab-java-0.996.tar.gz
cd mecab-java-0.996
Makefile을 열어서
vi Makefile

# Java Home 설정
# 참고. Mac OSX 에서 JAVA HOME 은 /usr/libexec/java_home 명령어로 확인할 수 있습니다.
INCLUDE={your java home path}/include

#  optimize level 을 -O1 로 변경
$(CXX) -O1 -c -fpic $(TARGET)_wrap.cxx $(INC)

# javac 와 test.java 사이에 -cp . 추가
$(JAVAC) -cp . test.java
컴파일 후 복사, 권한 변경

make
sudo cp libMeCab.so /usr/local/lib
sudo cp MeCab.jar /usr/local/lib
sudo chown -R {your user}:{your group} /usr/local/lib/libMeCab.so
sudo chown -R {your user}:{your group} /usr/local/lib/MeCab.jar
sudo chown -R {your user}:{your group} /usr/local/lib/*mecab*

vi ~/.bashrc 후 아래내용 추가(미 추가시 logstash로 집계할 때 elastic search가 죽음)
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib/




4. mecab-ko Elasticsearch plugin 설치

cd {Elastic 디렉토링}
./bin/plugin install https://bitbucket.org/eunjeon/mecab-ko-lucene-analyzer/downloads/elasticsearch-analysis-mecab-ko-2.2.0.0.zip




logstash 설치
all plugin 포함 버전오로 설치

wget 'https://download.elastic.co/logstash/logstash/logstash-all-plugins-2.3.1.tar.gz' -O ~/apps/logstash-all-plugins-2.3.1.tar.gz

tar -xzf ~/apps/logstash-all-plugins-2.3.1.tar.gz
rm ~/apps/logstash-all-plugins-2.3.1.tar.gz
ln -s ~/apps/logstash-2.3.1 logstash

#logstash mysql-jdbc plugin 설치(jdbc는 인터넷에서 다운로드 가능
mkdir -p ~/apps/logstash/lib/jdbc
다운파일 복사

실행
~/apps/kibana/bin/kibana >> /dev/null &


kibana 설치(필요시)
wget 'https://download.elastic.co/kibana/kibana/kibana-4.5.0-linux-x64.tar.gz' -O ~/apps/kibana-4.5.0-linux-x64.tar.gz
tar -xzf ~/apps/kibana-4.5.0-linux-x64.tar.gz
rm ~/apps/kibana-4.5.0-linux-x64.tar.gz
ln -s ~/apps/kibana-4.5.0-linux-x64 kibana

설정값 수정
vi ~/apps/kibana/config/kibana.yml



방화벽오픈(root권한 필요)

sudo vi /etc/sysconfig/iptables 후 내용 추가하고 sudo service iptables restart

#elastic
-A INPUT -m state --state NEW -m tcp -p tcp -s IP주소 --dport 29200:29201 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp -s IP주소 --dport 9300:9301 -j ACCEPT

#logstash listen topbeat
-A INPUT -m state --state NEW -m tcp -p tcp -s IP주소 --dport 5044:5045 -j ACCEPT

#logstash listen packetbeat
-A INPUT -m state --state NEW -m tcp -p tcp -s IP주소 --dport 6044:6045 -j ACCEPT

#kibana
-A INPUT -m state --state NEW -m tcp -p tcp -s IP주소 --dport 5601 -j ACCEPT





포트 스캔 후 서버 공격이 들어오는 패턴이 많다.

그렇기에 가능하면 ping 응답은 막아두자..


방법

echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all

(vim으로는 안됨)




AWS ELB를 이용해서 로드밸런싱을 하는데 주기적으로 응답이 느려지는 현상(몇초마다 응답이 10초가 넘어감)이 발생했다.

어플리케이션 문제인가 싶어서 소거법으로 하나하나 테스트를 해봤는데 아니었다.


1. 테스트환경을 구축 후 반복해서 URL을 호출

  watch --interval=1 time curl "검증 URL" > /dev/null


2. ELB 모니터링 및 DNS도 확인




결론은, ELB를 새로 띄우니 감쪽같이 해결되었다.

아직 한국 리전에서 불안전한 케이스가 있는게 아닌가 싶다..(AWS 사용자 사이에서 몇가지 카더라도 있고..)




할때마다 잊어버려서 메모



1) EC2 Role에 CloudWatch FullAccess 권한 부여

2) 필요 Libray 설치

- Centos (RedHat)
$ sudo yum install perl-Switch perl-DateTime perl-Sys-Syslog perl-LWP-Protocol-https perl-Digest-SHA unzip -y

- Amazon Linux AMI
$ sudo yum install perl-Switch perl-DateTime perl-Sys-Syslog perl-LWP-Protocol-https

3) EC2 메모리 및 디스크 Matrix 모니터링 스크립트 설치

sudo su
cd /root
unzip CloudWatchMonitoringScripts-1.2.1.zip
rm -rf CloudWatchMonitoringScripts-1.2.1.zip
cd aws-scripts-mon/

4) Test
./mon-put-instance-data.pl --mem-util --verify --verbose

5) CloudWatch에 전송 테스트
./mon-put-instance-data.pl --mem-util --mem-used --mem-avail

6) crontab 등록(disk 체크는 /data 디렉토리만하는 예)
* * * * * $HOME/aws-scripts-mon/mon-put-instance-data.pl --mem-util --mem-used --mem-avail --disk-path=/data --disk-space-util --disk-space-used --disk-space-avail --swap-used --from-cron

7) AutoScaling Group에 데이터 수집
./mon-put-instance-data.pl --mem-util --mem-used --mem-avail --auto-scaling=only


8) 참고


+ Recent posts