2016. 6. 27. 00:53

ganglia 설치 및 설정 한 내용을 정리


우분투, 데비안 환경에서 apt-get 으로 설치 했습니다.




1. 서버 설치

1-1. 웹 환경 설치

1-2. ganglia meta daemon (수집서버) 설치

2. 클라이언트 설치

2-1. ganglis monitor daemon (모니터데몬) 설치


1. 서버 설치

모니터 데몬이 실행중인 서버에 대해서 수집서버가 일정주기로 데이터를 ( pull 방식 ) 가져옵니다.

Broadcast 를하여 동일네트웤의 모니터데몬으로부터 수신하는 방법도 있는 듯 하나, 여기서는 직접 IP를 명시하여 당겨오도록 설정합니다.


1-1. 웹 환경 설치

Ganglia 가 돌아가기 위해서는 웹서버, PHP 가 필요합니다.

이 부분은 Nginx + php5-fpm 조합으로 구성합니다.


Nginx 설치

# apt-get install nginx


PHP 설치

# apt-get install php5-fpm


Nginx-PHP 연동


PHP 연동까지 완료 했으면 이제 ganglia 설치로 넘어간다.


1-2. ganglia meta daemon (수집서버) 설치

gmetad 설치 ( 데이터를 수집하는 서버 1대 )

# apt-get install gmetad


gmetad 설정

# vim /etc/ganglia/gmetad.conf

1
2
3
4
data_source "svr1" 192.168.0.101:8649
data_source "svr2" 192.168.0.102:8649
 
gridname "haebinet"

data_source 부분을 찾아서 위 내용 참고하여 작성한다.

gridname 부분에는 해당 시스템의 대표 그룹?명을 적으면 된다.


ganglia-web-frontend 설치 ( Web 에서 확인하기 위한 도구 )

# sudo apt-get install ganglia-webfrontend


Nginx 루트 디렉토리 이동 및 ganglia webfrontend 링크 생성

# cd /usr/share/nginx/www/

# ln -s /usr/share/ganglia-webfrontend/ ganglia




2. 클라이언트 설치

2-1. ganglis monitor daemon (모니터데몬) 설치

수집 서버의 데이터도 모니터링 하고자 한다면 클라이언트도 같이 설치 해줘야 합니다.


ganglia-monitor 설치 ( 개별 서버마다 설치 )

# apt-get install ganglia-monitor


ganglia-monitor 설정

# vim /etc/ganglia/gmond.conf

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
/* This configuration is as close to 2.5.x default behavior as possible
   The values closely match ./gmond/metric.h definitions in 2.5.x */
globals {
  daemonize = yes
  setuid = yes
  user = ganglia
  debug_level = 0
  max_udp_msg_len = 1472
  mute = no
  deaf = no
  host_dmax = 0 /*secs */
  cleanup_threshold = 300 /*secs */
  gexec = no
  send_metadata_interval = 0
  override_hostname = pi2
}
 
/* If a cluster attribute is specified, then all gmond hosts are wrapped inside
 * of a <CLUSTER> tag.  If you do not specify a cluster tag, then all <HOSTS> will
 * NOT be wrapped inside of a <CLUSTER> tag. */
cluster {
  name = "pi2"
  owner = "owner_haebi"
  latlong = "latlong_haebi"
  url = "url_haebi"
}
 
/* The host section describes attributes of the host, like the location */
host {
  location = "location_haebi"
}
 
/* Feel free to specify as many udp_send_channels as you like.  Gmond
   used to only support having a single channel */
udp_send_channel {
  host = 192.168.0.101
  port = 8649
  ttl = 1
}
 
/* You can specify as many udp_recv_channels as you like as well. */
udp_recv_channel {
  port = 8649
  retry_bind = true
}
 
/* You can specify as many tcp_accept_channels as you like to share
   an xml description of the state of the cluster */
tcp_accept_channel {
  port = 8649
}

클라이언트 설정파일의 예.




Posted by 해비
2016. 6. 27. 00:33

시스템의 상황을 한눈에 볼 수 있는 모니터링 도구 ganglia 를 사용하면서 몇가지 사항을 정리 해 둔다.


RRDTool 이라는 것을 사용하여 시간별 데이터를 기록하고 그것을 출력한다.


데몬은 크게 아래 2가지로 나뉜다.

1. 메타데몬 (리포트를 표시 해줄 역할)

2. 모니터데몬 (시스템 정보 수집)



좀 더 쉽게 설명하자면 이런 구조?

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

모니터데몬

모니터데몬 --> 메타데몬

모니터데몬

...

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


설치과정 중 알게된 사항들 정리

- 1개의 메타 데몬은 여러개의 모니터 데몬으로 부터 정보를 수신한다.

- 실제 데이터 저장은 메타데몬이 설치된 곳에 저장이 된다.

- 저장되는 위치는 /var/lib/ganglia/rrdtool/IP 또는 시스템명/아래에 들어가는 파일들이다.

    (모니터 데몬에서 설정한다. 설정 하지 않을 경우, IP 로 기록된다)

- 파일 사이즈는 처음 생성 후 고정으로 더이상 증가하지 않으며, 최대 1년 기간동안의 데이터만 들어가는 듯 하다.



설치 결과

전체 시스템 상황



개별 시스템 상황

- 하단에 개별 시스템 별로 상황을 보여주고, 클릭해서 들어가면 해당 시스템의 상황을 더욱 자세히 살펴 볼 수 있다.







Posted by 해비
2016. 6. 22. 00:58

sysctl -A 로 확인 가능한 항목 중

(/etc/sysctl.conf 파일 에디트 하면 된다)



net.ipv4.ip_local_port_range = 32768    61000


로컬 포트로 사용할 범위가 이렇게 정해 져 있다. 서버로 사용할 포트는 가급적 이 번호를 피하는 것이 좋다.

서버를 열어야 하는데 하필 그 포트가 저 범위에 들어있고, 로컬 포트 생성하여 다른 원격지 서버에 연결 중인 상태라면 바인드 오류를 낼 것이기 때문이다.



net.ipv4.ip_forward = 1


포워딩 허용여부를 설정하고 있다. 1이면 허용. 0 이면 차단.

쉽게 말해서. 이 컴퓨터가 최종 목적지가 아닌 패킷의 경우, 다른 곳으로 전달을 허용할 것인가에 대한 것인데, 쉽게 공유기 같은거 할려면 허용을 해야 된다고 생각하면 된다.




Posted by 해비
2016. 6. 22. 00:58

네트워크 공부하면서 알게된 내용들을 정리 하고자 한다.

일부는 잘못된 내용이 있을 지도 모른다...;; (-_-)




TCP 에서 포트 범위는 0~65535 까지 이고, 이론 상 0번을 제외하고 1~65535 번 까지 총 65,535 개의 포트가 사용 가능하다.


연결을 맺기 위해서 쌍방, 클라이언트 와 서버는 각각 IP : PORT 가 필요하다.


클라이언트는 서버로 접속하기 위해서 자신의 로컬 포트 번호를 생성하고, 해당 포트번호를 사용하여 서버에 접속 한 후 통신을 하게 되는데, 클라이언트가 서버에 접속하기 위해 생성가능한 로컬 포트 갯수는 최대 65,535 개를 넘을 수 없다.


서버는 1개의 LISTEN 포트로 여러 IP로 부터의 접속을 받을 수 있다. 즉, 이론상 무제한...?

(예: 2대의 클라이언트로 부터 테스트 가능한 최대 연결 수는 약 13만 이다. IP당 65k 개 연결.)




[클라이언트 IP:PORT]

클라이언트1:1 ---> 서버1

클라이언트1:2 ---> 서버2

클라이언트1:3 ---> 서버3

...

IP당, 최대 65k 개의 연결 까지 가능




[서버 IP:PORT]

클라이언트1:1            

클라이언트1:2            

...                            

클라이언트1:65535        ---> 서버1:1 LISTEN

클라이언트2:1              

클라이언트2:2              

...                              

클라이언트2:65535        

IP당, 최대 65k 개의 연결이 가능, 서버가 성능이 받쳐준다는 가정 하에 무한? 연결 가능




Posted by 해비
2016. 6. 9. 01:17



/etc/openvpn/vpn1.conf

/etc/openvpn/vpn2.conf

...

이런식으로 서버 환경설정을 여러 개 준비.


/etc/init.d/openvpn start vpn1

/etc/init.d/openvpn start vpn2

...

서버 실행 시에는 이렇게 여러개 실행이 가능하다.


openvpn 2.x버젼 현재  멀티코어가 지원되지 않는다.


고로 멀티 코어 활용을 위해 서버를 여러개 띄어두고 로드밸런싱을 활용하면 좋을 것 같다.


그리고...

# /etc/init.d/openvpn start 또는 stop 명령으로 한번에 처리하고자 한다면


/etc/default/openvpn 파일을 열어서 AUTOSTART= 이라고 되어있는 부분에 아래와 같이 설정하면 된다.

AUTOSTART="vpn1 vpn2"


3개 4개 가 되어도 한칸씩 띄고 conf 파일의 이름만 나열해 주면 된다.


- 끝 -






[참고]

http://serverfault.com/questions/168487/how-to-control-multiple-openvpn-instances-on-the-same-server

Posted by 해비
2016. 6. 2. 01:23


GNU sed


stream editor 를 줄여서 sed 라고 하는 것 같다.


파일 내 문장의 내용 변경

1
sed '/nproc/c\MODIFIED BY HAEBI' test.conf

sed '/찾을문자열/c\바뀔 문자열' 파일


nproc가 포함된 줄의 내용이 MODIFIED BY HAEBI로 바뀌는 예이다.

아직은 화면에 출력만 되고, 실제 반영이 되지 않는다. sed -i 옵션을 주면 바로 반영되므로 주의.


단순히 찾을 문자열  또는 단어만 가지고는 대상을 특정 짓기가 어렵기에 정규식을 사용해 보겠다.


아래 왼쪽 내용을 찾아서 오른쪽 내용으로 바꾸어 보도록 하겠다.

 *    -    core    unlimited

   >

 *    -    core    100000


찾을 정규식 패턴...

1
\S+\s+\S+\s+core\s+\S+

[문자 1개 이상] - [공백 1칸 이상] - [문자 1개 이상] - [공백 1칸 이상] - [core] - [공백 1칸 이상] - [문자 1개 이상]

(정규식 작성은 regexr 사이트에서 작성을 권장)


sed 에서 정규식 사용시 +기호 앞에 \을 붙여야 한다.

1
sed '/\S\+\s\+\S\+\s\+core\s\+\S\+/c\*    -    core    100000' test.conf

복잡해 보이지만 별거 없다.

정규식 + 기호 앞에 \을 붙여주고, 가운데 /c\ 을 기준으로 앞, 뒤 내용 참고하면 쉽게 파악할 수 있다.


sed '/찾을내용/c\바뀔내용' 파일

 sed 

  '/찾을내용

 /c\

  바뀔내용'

 파일

 파일에서 찾은 내용을 변경

 sed

  '/찾을내용

 /d'

 

 파일

 파일에서 찾은 내용을 제거


변경의 경우, 기존에 존재하지 않으면 변경을 할 수가 없는 문제가 있다.


반드시 적용해야 될 내용이라면 기존 내용을 찾아서 제거 하고 다시 써 넣도록 해야 할 것 같다.







Posted by 해비
2016. 6. 1. 01:17

서버 동작 상태 출력 스크립트

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#!/bin/bash
 
clear
 
DAEMON_MYSQL=$(   ps -ef | grep mysqld  | grep -v grep | awk '{print $2}')
DAEMON_NGINX=$(   ps -ef | grep nginx   | grep -v grep | awk '{print $2}')
DAEMON_OPENVPN=$( ps -ef | grep openvpn | grep -v grep | awk '{print $2}')
DAEMON_SAMBA=$(   ps -ef | grep smbd    | grep -v grep | awk '{print $2}')
DAEMON_VSFTPD=$(  ps -ef | grep vsftpd  | grep -v grep | awk '{print $2}')
 
echo "============================================================="
echo " Server daemon status                                        "
echo "============================================================="
echo " daemon  |  status PID                                       "
echo "-------------------------------------------------------------"
echo " mysql   :" $DAEMON_MYSQL
echo " nginx   :" $DAEMON_NGINX
echo " openvpn :" $DAEMON_OPENVPN
echo " samba   :" $DAEMON_SAMBA
echo " vsftp   :" $DAEMON_VSFTPD
echo "============================================================="

ps 명령어로 데몬을 조회하고, 해당 PID를 추출하여 이쁘게(?) 출력하는 스크립트 입니다.




실행 결과






Posted by 해비