설치 가이드 문서


#OS튜팅
echo "*    soft nofile  655350" >> /etc/security/limits.conf
echo "*    hard nofile  655350" >> /etc/security/limits.conf

vim /etc/security/limits.d/20-nproc.conf 후에 32768로 변경


#Java와 톰캣 설치
참고링크 : http://blog.eomsh.com/18


#nGrinder 컨트롤러를 톰캣에 설치
wget 'https://github.com/naver/ngrinder/releases/download/ngrinder-3.4.1-20170131/ngrinder-controller-3.4.1.war' -O ~/apps/apache-tomcat-8.0.43/webapps/ROOT.war
~/apps/apache-tomcat-8.0.43/bin/startup.sh

#접속 확인(필요시 앞단에 nginx 등을 설치 가능하며 톰캣포트는 conf/server.xml에서 변경)
http://localhost:8080

최초 ID/PW는 admin:admin 입니다.

#nGrinder 에이전트 설치(부하 발생기)

wget 'http://ngrinder컨트롤러서버도메인/agent/download' -O ngrinder_agent.tar
tar -xvf ngrinder_agent.tar

압축해제한 디렉토리로 이동 후 run_agent.sh
필요시 __agent.conf 파일의 설정을 수정

참고로 최초 실행후에는 ~/.ngrinder_agent 디렉토리에 설정파일 등이 존재하기에 해당 디렉토리에서 수정해야함



참고 

#OS튜닝
# nofile 및 nprc 갯수 튜닝
echo "*    soft nofile  64000" >> /etc/security/limits.conf
echo "*    hard nofile  64000" >> /etc/security/limits.conf
echo "*    soft nproc  64000" >> /etc/security/limits.conf
echo "*    hard nproc  64000" >> /etc/security/limits.conf

vim /etc/security/limits.d/20-nproc.conf 후에 64000으로 변경

Run the sysctl command below to apply the changed limits to the system:
sysctl -p

ulimit -a 명령어로 확인 가능


# repo 추가
vi /etc/yum.repos.d/mongodb-org-3.4.repo 이후 아래 입력

[mongodb-org-3.4]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.4/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-3.4.asc

# 설치
yum install -y mongodb-org

# 기본 설정 작업
#huge 설정
echo never > /sys/kernel/mm/transparent_hugepage/defrag
echo never > /sys/kernel/mm/transparent_hugepage/enabled

#재 부팅시 자동으로 시작(필요시)
chkconfig mongod on

#몽고 데이터 저장 디렉토리 생성 및 mongod계정의 소유로 변경(예)
mkdir -p /data/mongo/repl_0
chown -R mongod:mongod /data


# 몽고 시작
#몽고 서비스 시작
systemctl start mongod

#몽고 프롬프트에 접속
mongo


#참고 : 몽고 삭제
systemctl stop mongod

#Remove any MongoDB packages that you had previously installed.
yum erase $(rpm -qa | grep mongodb-org)

#Remove MongoDB databases and log files.
rm -rf /var/log/mongodb
rm -rf /var/lib/mongo

#필요시
rm -rf /data


#참고 : 몽고 설정(/etc/mongod.conf)
     특정파일의 config 파일을 이용하려면 mongod --config 파일경로 (이 명령어로는 root로 프로세스가 실행되니 필요시 init.d 등을 이용할수도 있음)
vi /etc/mongod.conf 후 아래샘플을 참고하여 수정해서 사용

systemLog:
  destination: file
  logAppend: true
  path: /var/log/mongodb/mongod.log
  quiet: true

storage:
  dbPath: /data/mongo/repl_0
  journal:
    enabled: true
  #wiredTiger:
    #engineConfig:
      #cacheSizeGB: 0.5


net:
  port: 27017
  #bindIp: 127.0.0.1  # Listen to local interface only, comment to listen on all interfaces. (주석으로 막으면 모든 IP에서 접속 가능. AWS에서는 SG로 보안처리 하고 있어서 편의상 모두 허용하기도 함)


replication:
  replSetName: repl_set



#참고 : 몽고 replica 설정
primary가 될 서버에서 몽고 콘솔로 접속 : mongo

#Replica set 초기화
rs.initiate()

#Secondary 노드 추가
rs.add("secondary장비의 IP:27017")

#Arbiter 노드 추가
rs.add("arbiter장비IP:37017",arbiterOnly:true)


# 잘 저장되는지 테스트
use testdb
db.test_collection.insert({'msg':'test message'})
db.test_collection.find()


#Secondary에서는 아래 명령 실행 후 조회해 보면 됨
db.slaveOk(true)



#참고 - 1개 장비에 여러개의 몽고데몬을 실행시켜야할 경우
1개의 몽고DB를 설치하면 아래에 service 파일이 생성됨
/etc/systemd/system/multi-user.target.wants

해당 디렉토리의 mongod.service 심볼릭링크가 가리키는 파일(/usr/lib/systemd/system/mongod.service) 이 하나의 데몬 파일

/usr/lib/systemd/system/mongod.service 파일을 복사하여 한개 더 생성(ex. cp /usr/lib/systemd/system/mongod.service /usr/lib/systemd/system/mongod2.service)
복사한 해당 파일의 내용을 적당히 수정

예)
[Unit]
Description=High-performance, schema-free document-oriented database
After=network.target
Documentation=https://docs.mongodb.org/manual

[Service]
User=mongod
Group=mongod
Environment="OPTIONS=--quiet -f /etc/mongod2.conf"
ExecStart=/usr/bin/mongod $OPTIONS run
ExecStartPre=/usr/bin/mkdir -p /var/run/mongodb2
ExecStartPre=/usr/bin/chown mongod:mongod /var/run/mongodb2
ExecStartPre=/usr/bin/chmod 0755 /var/run/mongodb2
PermissionsStartOnly=true
PIDFile=/var/run/mongodb2/mongod.pid
# file size
LimitFSIZE=infinity
# cpu time
LimitCPU=infinity
# virtual memory size
LimitAS=infinity
# open files
LimitNOFILE=64000
# processes/threads
LimitNPROC=64000
# total threads (user+kernel)
TasksMax=infinity
TasksAccounting=false
# Recommended limits for for mongod as specified in
# http://docs.mongodb.org/manual/reference/ulimit/#recommended-settings

[Install]
WantedBy=multi-user.target


설정들 데몬에 반영
systemctl daemon-reload


#참고 mongod.conf 1번

# mongod.conf

# for documentation of all options, see:
#   http://docs.mongodb.org/manual/reference/configuration-options/

# where to write logging data.
systemLog:
  destination: file
  logAppend: true
  path: /var/log/mongodb/mongod.log
  quiet: true

# Where and how to store data.
storage:
  dbPath: /data/mongo/repl_0
  journal:
    enabled: true
#  engine:
#  mmapv1:
  wiredTiger:
     engineConfig:
          cacheSizeGB: 0.4


# how the process runs
processManagement:
  fork: true  # fork and run in background
  pidFilePath: /var/run/mongodb/mongod.pid  # location of pidfile

# network interfaces
net:
  port: 27017
 # bindIp: 127.0.0.1  # Listen to local interface only, comment to listen on all interfaces.


#security:

#operationProfiling:

#replication:
replication:
  replSetName: repl_set

#sharding:

## Enterprise-Only Options

#auditLog:

#snmp:




#참고 mongod2.conf(1개 서버에 2개 프로세스 동시에 띄울때 사용할 목적)
# mongod.conf

# for documentation of all options, see:
#   http://docs.mongodb.org/manual/reference/configuration-options/

# where to write logging data.
systemLog:
  destination: file
  logAppend: true
  path: /var/log/mongodb/mongod2.log
#  quiet: true

# Where and how to store data.
storage:
  dbPath: /data/mongo/repl_1
  journal:
    enabled: true
#  engine:
#  mmapv1:
  wiredTiger:
     engineConfig:
          cacheSizeGB: 0.4


# how the process runs
processManagement:
  fork: true  # fork and run in background
  pidFilePath: /var/run/mongodb2/mongod.pid  # location of pidfile

# network interfaces
net:
  port: 27018
 # bindIp: 127.0.0.1  # Listen to local interface only, comment to listen on all interfaces.


#security:

#operationProfiling:

#replication:
replication:
  replSetName: repl_set

#sharding:

## Enterprise-Only Options

#auditLog:

#snmp:


CentOS 7에 ansible 설치

  1. 설치
#epel 저장소 설치(Fedora Project 에서 제공되는 저장소로 각종 패키지의 최신 버전을 제공)

#ansible 설치
sudo yum install -y ansible

  1. 셋팅 및 테스트
#Inventory 파일 생성하여 테스트서버 IP 등록(ansible이 관리하는 서버의 정보를 담은 파일)
mkdir ~/ansible && echo "127.0.0.1" > ~/ansible/my_ansible_hosts

# 호스트키 확인 과정을 임시로 비활성화 시킴
export ANSIBLE_HOST_KEY_CHECKING=False

#ping 테스트
ansible all -m ping -i ~/ansible/my_ansible_hosts --ask-pass

#원격서버의 명령 echo hello 테스트
ansible all -a "/bin/echo hello" -i ~/ansible/my_ansible_hosts --ask-pass

#참고 : sudo 명령으로 실행
ansible all -a "/bin/echo hello" -i ~/ansible/my_ansible_hosts --ask-pass --sudo


CentOS7 최소 설치 후 셋팅 내용 정리

CentOS 다운로드 경로

  1. 재 부팅시 네트웤 자동 시작하도록 설정
    • nmcli d 명령어로 랜카드ID 확인
    • vi /etc/sysconfig/network-scripts/ifcfg-위명령어에서 확인된 랜카드ID  후에 마지막라인 ONBOOT의 값을 yes로 변경해 줌

  2. 네트웤 재 시작
    • systemctl restart network

  3. ssh서버 설치 : 필요시
# 22번 리슨중이 아니라면 ssh설치
$netstat -anp | grep "LISTEN " | grep 22

$ yum install -y openssh-server

$ service sshd start
Redirecting to /bin/systemctl restart  sshd.service

#부팅시 자동으로 시작되도록 설정
$ chkconfig sshd on
알림: 'systemctl enable sshd.service'에 요청을 전송하고 있습니다.

#방화벽 프로세스 stop(필요시)
#방화벽 자동시작 중지#
$systemctl disable firewalld

#방화벽 자동시작 중지
$systemctl stop firewalld




  1. 추가 설치 및 튜닝
#패키지 업데이트
yum update -y

#자주 쓰는 프로그램 설치
yum  install -y telnet svn git nc ntp wget vim net-tools

#bashrc 프롬프트 변경
echo 'PS1="[\u@\h \$PWD \D{%T}]\\$ "' >> /etc/bashrc && source /etc/bashrc

#locale 변경
localectl set-locale LANG=ko_KR.UTF-8

# 파일 및 파일 갯수 튜닝
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

vim /etc/security/limits.d/20-nproc.conf 후에 32768로 변경

#biz 계정 추가 및 sudo권한 추가(필요시)
#계정 생성 및 암호 셋팅(biz라는 계정을 사용한다는 전제)
adduser biz
passwd biz

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

#Selinux OFF (필요시)
setenforce 0
perl -pi -e 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
perl -pi -e 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
reboot

# 방화벽 끄기(필요시)
systemctl stop firewalld
systemctl disable firewalld

# ntp켜서 시간 동기화
systemctl start ntpd
#재부팅시 자동 시작
systemctl enable ntpd



참고 : https://www.percona.com/doc/percona-tokumx/installation_from_packages.html#rhel-centos

#tokumx install
yum install https://www.percona.com/redir/downloads/percona-release/redhat/0.1-4/percona-release-0.1-4.noarch.rpm
yum install tokumx-enterprise


#디렉토리 생성
mkdir -p /data/mongo/arbiter
mkdir -p /data/mongo/repl_0


#huge 설정
echo never > /sys/kernel/mm/transparent_hugepage/enabled


* 메모리는 8g, replica로 fail-over 셋팅예제

start.sh
#!/bin/sh
/usr/bin/mongod --replSet repl_set --dbpath /data/mongo/repl_0 --fork --logpath /var/log/tokumx/repl_0.mongod --expireOplogDays 3 --cacheSize 8g --quiet --maxConns 20000


start_arbiter.sh
#!/bin/sh
/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


start_standalone.sh(필요시)
#!/bin/sh
/usr/bin/mongod --dbpath /data/mongo/repl_0 --fork --logpath /var/log/tokumx/repl_0.mongod --expireOplogDays 3 --cacheSize 8g --quiet --maxConns 20000


replica 설정
mongo 커맨드 실행 후 아래 입력(각 노드는 가능하면 다른 장비에 설치되어야 fail over에 안정적임)

config = {
           _id: "repl_set",
           members: [
                      {_id: 0,host: "Primary IP입력:27017"},
                      {_id: 1,host: "Secondary IP입력:27017"},
                      {_id: 2,host: "Arbiter IP입력:37017",arbiterOnly:true},
                    ]
         }

rs.initiate(config);



CentOS 7 기준


시간동기화처리


# ntpd

systemctl enable ntpd.service

systemctl start ntpd.service

CentOS의 biz라는 계정에 java 관련 프로그램(java, tomcat, maven, etc) 설치하는 간단한 bash 쉘 스크립트(install.sh)

해당 내용으로 쉘 파일을 만들고 사용 (디렉토리 먼저 생성 필요)
ex)  install.sh dir 후에 install.sh java

#!/bin/sh

#Enter user account
USER=biz


check_user()
{

    if [ $USER != `/usr/bin/whoami` ] ; then
        echo "=== Error. User is not $USER"
        exit -1;
    fi
}

make_dir()
{   
    echo "=== Install default directory : Start"

    mkdir ~/apps ~/deploy ~/scripts ~/logs ~/logs/nginx ~/src

    echo "=== Install default directory : End"

}

install_java()
{   
    echo "=== Install java : Start"
  

http://download.oracle.com/otn-pub/java/jdk/8u181-b13/96a7b8442fe848ef90c96a2fad6ed6d1/jdk-8u181-linux-x64.tar.gz?AuthParam=1537253298_036a93e056704f23f51ee0e1e5140908

    wget "http://download.oracle.com/otn-pub/java/jdk/8u181-b13/96a7b8442fe848ef90c96a2fad6ed6d1/jdk-8u181-linux-x64.tar.gz?AuthParam=1537253594_0606413d75133608b6bf7ca2136e364e" -O ~/apps/jdk-8u181-linux-x64.tar.gz
    tar -xzf ~/apps/jdk-8u181-linux-x64.tar.gz -C ~/apps && rm ~/apps/jdk-8u181-linux-x64.tar.gz && ln -s ~/apps/jdk1.8.0_181 ~/apps/jdk
     
    
    #JAVA DNS TTL Modify
    echo 'networkaddress.cache.ttl=60' >> ~/apps/jdk/jre/lib/security/java.security

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

    #print java version
    java -version

    echo "=== Install java : End"

}

install_maven()
{   
    echo "=== Install maven : Start"

    wget "http://apache.tt.co.kr/maven/maven-3/3.5.4/binaries/apache-maven-3.5.4-bin.tar.gz" -O ~/apps/apache-maven-3.5.4-bin.tar.gz
    tar -xzf ~/apps/apache-maven-3.5.4-bin.tar.gz -C ~/apps && rm ~/apps/apache-maven-3.5.4-bin.tar.gz && ln -s ~/apps/apache-maven-3.5.4 ~/apps/maven

    #set maven path
    echo 'export M2_HOME=~/apps/maven' >> ~/.bashrc
    echo 'export PATH=$PATH:$M2_HOME/bin' >> ~/.bashrc
    source ~/.bashrc

    #print maven version
    mvn -version

    echo "=== Install maven : End"
}

install_tomcat()
{   
    echo "=== Install tomcat : Start"

    wget 'http://mirror.navercorp.com/apache/tomcat/tomcat-8/v8.5.34/bin/apache-tomcat-8.5.34.tar.gz' -O ~/apps/apache-tomcat-8.5.34.tar.gz
    tar -xzf ~/apps/apache-tomcat-8.5.34.tar.gz -C ~/apps && rm ~/apps/apache-tomcat-8.5.34.tar.gz


    #remove default tomcat webapps    
    rm -rf ~/apps/apache-tomcat-8.5.34/webapps && mkdir ~/apps/apache-tomcat-8.5.34/webapps

    echo "=== Install tomcat : End"
}

#check user account
check_user


case "$1" in
dir)
    echo "### Run make default dir ###"
    make_dir
    ;;
java)   
    echo "### Run install java ###"
    install_java
    ;;
maven)
    echo "### Run install maven ###"
    install_maven
    ;;
tomcat)
    echo "### Run install tomcat ###"
    install_tomcat
    ;;
*)
    echo "Usage : $0 {dir|java|maven|tomcat}"
    exit 1
esac





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


+ Recent posts