달력

12

« 2018/12 »

  •  
  •  
  •  
  •  
  •  
  •  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  •  
  •  
  •  
  •  
  •  

리눅스 서버 관리 - Parallel SSH - SSH 를 이용해서 여러대 리눅스 머신으로 명령어 보내기


중앙 서버에서 여러대의 리눅스 서버로 명령어를 보내도록 만들어서 편하게 관리할 수 있습니다.


먼저 Parallel SSH 를 설치합니다. 유저 user 는 루트 root 로 설치합니다.

# Debian 또는 Ubuntu
apt install python-pip python-setuptools
pip install parallel-ssh
apt install pssh

# 레드헷 RHEL, CentOS
yum install python-pip python-setuptools
pip install parallel-ssh
yum install pssh



아래와 같이 3대의 서버가 있다고 한다면,

1번 서버 : 192.168.1.100 : 중앙서버 : 이 서버에만 로그인을 해서 명령을 실행합니다.

2번 서버 : 192.168.1.101 : 호스트1 : 원격 명령이 실행될 서버1

3번 서버 : 192.168.1.102 : 호스트2 : 원격 명령이 실행될 서버2


1번 서버 : 중앙서버에서 SSH 퍼블릭 키를 만듭니다.


marasong@vm-marasong:~$ ssh-keygen -t rsa

Generating public/private rsa key pair.

Enter file in which to save the key (/home/marasong/.ssh/id_rsa): [엔터]

Enter passphrase (empty for no passphrase): [엔터]

Enter same passphrase again: [엔터]

Your identification has been saved in /home/marasong/.ssh/id_rsa.

Your public key has been saved in /home/marasong/.ssh/id_rsa.pub.

The key fingerprint is:


생성된 퍼블릭 키값을 호스트1, 2 두 서버에 복사합니다.

cat ~/.ssh/id_rsa.pub 


이런 형태로 나오는데,

2번 서버 : 192.168.1.101 / 3번 서버 : 192.168.1.102 : ~/.ssh/authorized_keys 파일에 저 내용을 복사합니다.


2번, 3번 서버에 .ssh 디렉토리가 없다면 디렉토리를 만들고 퍼미션을 수정합니다.

mkdir .ssh

chmod 700 .ssh

chmod 640 .ssh/authorized_keys


이제 1번 서버에서 2번, 3번 서버로 ssh 로그인을 해봅니다. 암호 없이 로그인이 가능해야 합니다.

ssh userID@192.168.1.101 -p 22

ssh userID@192.168.1.102 -p 22



2번, 3번 서버 정보를 hosts.test 파일로 저장합니다.


userID@192.168.1.101:22

userID@192.168.1.102:22


이제 아래와 같은 방법으로 여러 서버로 명령을 내릴 수 있습니다.


/usr/bin/parallel-ssh -i -h hosts.test "ls -al"




이걸 아래처럼 배시 스크립트로 만들어두면 편하게 이용할 수 있습니다.


#!/bin/bash


cmd_text=${1}


if [ -z "${cmd_text}" ]

then

        # 입력 파라미터 값이 없을때 기본값 정의

        cmd_text="ls"

fi


/usr/bin/parallel-ssh -i -h /home/ubuntu/hosts.test "${cmd_text}"



참고 : https://www.tecmint.com/




Posted by 멋지다마라송

리눅스 서버 모니터링 - 모니터릭스 https://www.monitorix.org/




레드헷 계열 : EPEL (Extra Packages for Enterprise Linux) 에서 설치.
 

yum install -y htop iotop iptraf vmstat strace wget cpan

yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

yum install --enablerepo=epel -y rrdtool rrdtool-perl perl-libwww-perl perl-MailTools perl-MIME-Lite perl-CGI perl-DBI perl-XML-Simple perl-Config-General perl-HTTP-Server-Simple perl-IO-Socket-SSL


cd /usr/local/src
wget http://www.monitorix.org/monitorix-3.10.1-1.noarch.rpm
rpm -ivh monitorix-3.10.1-1.noarch.rpm
service monitorix start


chkconfig --level 35 monitorix on


/etc/monitorix/monitorix.conf 파일에서 사용 포트 수정.

아이디/비번 팝업 설정. 
mysql 이 있다면 사용하도록 수정.


서비스 시작.
 

service monitorix start



----------------------


우분투 계열
 

apt-get update
apt-get install rrdtool perl libwww-perl libmailtools-perl libmime-lite-perl librrds-perl libdbi-perl libxml-simple-perl libhttp-server-simple-perl libconfig-general-perl libio-socket-ssl-perl
wget http://www.monitorix.org/monitorix_3.10.1-izzy1_all.deb
dpkg -i monitorix_3.10.1-izzy1_all.deb


CPU Load 


MySQL Statistics


Netstat Statistics



참고 :
https://www.tecmint.com/monitorix-a-lightweight-system-and-network-monitoring-tool-for-linux/
https://www.monitorix.org/

Posted by 멋지다마라송

CentOS 센트OS - 파라미터 최적화 스크립트


첨부파일 참조하여 주세요 ~ 

check.centos.sh


root 루트로 실행해야 합니다.


스왑이 0 일때 (스왑 파일이 없는 경우) echo 로 출력되는 부분을 그대로 한줄씩 실행하면 됩니다.


대신 메모리가 1기가라면

dd if=/dev/zero of=/data/swapfile bs=1M count=1024


8기가라면

dd if=/dev/zero of=/data/swapfile bs=1M count=8192


이렇게 실행하시면 됩니다.


#!/bin/bash

#echo -e "32768\t61000" > /proc/sys/net/ipv4/ip_local_port_range
#$ sysctl -w net.ipv4.tcp_wmem="253952 253952 16777216"
#$ sysctl fs.file-max
#$ sysctl fs.file-nr 

echo "----------------------------------"
check_value=`getenforce`
echo "GetEnforce : ${check_value}"
echo "----------------------------------"
echo -e "Parameter\tNow\tRecommand"
echo "----------------------------------"

# Recommand value = 0
recom_value="0"
for check_param in net.ipv4.tcp_timestamps net.ipv4.conf.all.accept_source_route net.ipv4.ip_forward net.ipv4.conf.all.accept_redirects net.ipv4.tcp_tw_reuse
do
        check_param2=${check_param%*.*}
        check_param3=`echo ${check_param} | sed -e "s/${check_param2}//" | cut -c 2-`
        check_value=`sysctl -n ${check_param}`

        if [ "$check_value" -eq "${recom_value}" ]
        then 
                echo -e "${check_param3}\t${check_value}\t${recom_value}\t OK"
        else
                echo -e "${check_param3}\t${check_value}\t${recom_value}"
                read -s -n1 -p "    ${check_param3} ${check_value}->${recom_value} : Submit Now? (y/n) : " submit_yn
                if [ "$submit_yn" == "y" ]
                then
                        echo -e "\tsysctl -w ${check_param}=${recom_value}"
                        echo "$check_param = \"${recom_value}\"" >> /etc/sysctl.conf 
                fi
                echo ${submit_yn}
        fi
done

# Recommand value = 1
recom_value="1"
for check_param in net.ipv4.icmp_echo_ignore_broadcasts net.ipv4.conf.all.log_martians net.ipv4.tcp_syncookies net.ipv4.tcp_window_scaling 
do
        check_param2=${check_param%*.*}
        check_param3=`echo ${check_param} | sed -e "s/${check_param2}//" | cut -c 2-`
        check_value=`sysctl -n ${check_param}`

        if [ "$check_value" -eq "${recom_value}" ]
        then 
                echo -e "${check_param3}\t${check_value}\t${recom_value}\t OK"
        else
                echo -e "${check_param3}\t${check_value}\t${recom_value}"
                read -s -n1 -p "    ${check_param3} ${check_value}->${recom_value} : Submit Now? (y/n) : " submit_yn
                if [ "$submit_yn" == "y" ]
                then
                        echo -e "\tsysctl -w ${check_param}=${recom_value}"
                        echo "$check_param = \"${recom_value}\"" >> /etc/sysctl.conf 
                fi
                echo ${submit_yn}
        fi
done


check_value=`sysctl -n .net.ipv4.ip_local_port_range`
echo -e "Port.Range\t${check_value}\t1024\t65535"
check_value=`sysctl -n .net.ipv4.tcp_max_syn_backlog`
echo -e "MAX.BackLog\t${check_value}\t1024"

check_value=`sysctl -n net.ipv4.tcp_max_tw_buckets`
echo -e "TcpTW.Buckets\t${check_value}\t65536"

# check : ulimit -a / sysctl -n fs.file-nr
check_value=`sysctl -n fs.file-max`
echo -e "FS.FileMax\t${check_value}\t77052"
check_value=`sysctl -n net.core.netdev_max_backlog`
echo -e "NetdevMxBackLog\t${check_value}\t30000"
check_value=`sysctl -n net.core.somaxconn`
echo -e "MaxConnections\t${check_value}\t1024"

echo "----------------------------------------------------------------------------"
free -m
echo "----------------------------------------------------------------------------"
swap_size=`free -m | grep -i swap | awk '{print $2}'`
if [ "$swap_size" -eq "0" ]
then
        echo -e "----------------------------------------------------------------------------"
        echo -e "\tdd if=/dev/zero of=/data/swapfile bs=1M count=[1024|2048|8192]"
        echo -e "\tmkswap /data/swapfile"
        echo -e "\tswapon /data/swapfile"
        echo -e "\tchmod 600 swapfile"
        echo -e "\t/data/swapfile swap swap defaults 0 0 >> /etc/fstab"
        echo -e "----------------------------------------------------------------------------"
fi

ulimit -a
echo "----------------------------------------------------------------------------"

echo "sysctl -p"
sysctl -p


sysctl 이라는 명령어로 수정합니다.

수정할때에는 sysctl -w [파라미터] 로 수정하고, 적용은 sysctl -p 하면 됩니다.


Posted by 멋지다마라송
2018.07.10 00:21

AWS 리눅스 SSH 접속 계정 정리 Tech/Linux2018.07.10 00:21

AWS 리눅스 SSH 접속 계정 정리


Amazon Linux = ec2-user

RHEL5 = root 또는 ec2-user

Ubuntu = ubuntu

Fedora = fedora 또는 ec2-user

SUSE  = root 또는 ec2-user


그리고 SSH 접속할때 Public Key 로 접속하도록 설정했다면 SSH 클라이언트 프로그램에서 이를 지정해야 한다.


SecureCRT 인 경우,

이렇게 해당 세션에 대해서만 퍼블릭 키를 설정하고 사용하는게 좋다.


Putty 뿌띠의 경우, pem 파일 (AWS 기본 퍼블릭 키파일) 은 사용이 안되기 때문에

PuttyGen 이라는 프로그램으로 pem 파일을 ppk 로 변환해야 한다.




Posted by 멋지다마라송

$ ulimit -a

...

open files                      (-n) 1024 <-- 기본값.

...


mysql> show global variables like '%open%';

+----------------------------+----------+

| Variable_name              | Value    |

+----------------------------+----------+

| have_openssl               | DISABLED |

| innodb_open_files          | 2000     |

| open_files_limit           | 1024     | <-- 기본값.

| table_open_cache           | 2000     |

| table_open_cache_instances | 16       |

+----------------------------+----------+

-------------------------------------------------------------------

vi /etc/profile 아래 세줄 추가.


#ulimit setting

ulimit -u 65535  # max number of process 수정

ulimit -n 65535  # open files 값 수정

-------------------------------------------------------------------

vi /etc/security/limits.conf 아래 여섯줄 추가.


*               soft    nofile          65535

*               hard    nofile          65535

root            soft    nofile          65535

root            hard    nofile          65535

mysql           soft    nofile          65535

mysql           hard    nofile          65535

-------------------------------------------------------------------

vi /lib/systemd/system/mysql.service 에서 [Service] 항목에 아래 두줄 추가.


LimitNOFILE=infinity

LimitMEMLOCK=infinity

-------------------------------------------------------------------

systemctl daemon-reload

우분투 재기동.

-------------------------------------------------------------------

mysql> show global variables like '%open%';

+----------------------------+----------+

| Variable_name              | Value    |

+----------------------------+----------+

| have_openssl               | DISABLED |

| innodb_open_files          | 2000     |

| open_files_limit           | 1048576  | <--

| table_open_cache           | 2000     |

| table_open_cache_instances | 16       |

+----------------------------+----------+


참고로, 디비 접속시 접속하는 서버의 DNS lookup 을 생략해주는게 당연히 좋습니다.

vi /etc/mysql/mysql.conf.d/mysqld.cnf


[mysqld]

skip-name-resolve



Posted by 멋지다마라송


티스토리 툴바