apache 혹은 웹서버 구동 중 error.log에 아래 메세지가 심심치 않게 귀찮게 계속 쌓인다.

이건 브라우저에서 웹페이지 호출시 favicon.ico을 같이 찾는데 존재하지 않기 때문에 발생한다.

[error] [client 123.123.123.123] File does not exist: /home/rubi/www/favicon.ico

 

favicon이란?

– 즐겨찾기 아이콘. 즐겨찾기(favorites)와 아이콘(icon)의 합성어로, 주소창에 조그만 아이콘으로 표시되어 있다. 아이콘 에디터로 16×16 크기의 적당한 아이콘을 만든 후 그 이름을 favicon.ico로 한 다음 웹 사이트의 루트 디렉터리에 갖다 넣으면 된다.

[네이버 지식백과] 파비콘 [favicon] (IT용어사전, 한국정보통신기술협회)

 

네이버와 구글, 그리고 필자의 favicon이다.

favicon

계속 에러나는걸 두고볼 순 없다.  favicon 하나로 다른 사이트들과 차별화 될 수 있다 하나 달아주도록 하자.

 

아래 웹사이트엣에 포토샵을 이용하지 않고도 간단하게 제작할 수 있다.

favicon.ico 파일로 웹 디렉토리의 루트로 이동하면 간단하게 적용 완료. 

 

(워드프레스의 경우는 테마의 header.php 파일내에 아래 링크 삽입 해주어야 한다.)

파일위치 : /워드프레스홈디렉토리l/wp-content/themes/적용된테마이름/header.php

<head> ~ </head> 사이에 아래 내용 입력

<LINK REL="SHORTCUT ICON" HREF="http://내홈페이지주소/favicon.ico">

 

파일 제작 사이트. 

그림파일을 업로드 해서 ico 파일로 변환 하거나, 도트 형태로 직접 그릴 수 있다.

http://www.degraeve.com/favicon/

http://favicon.ru/index.php#ei

http://favicon-generator.org/

 

 

 

Cent OS 5.x / 6.x 설치시 IPv6가 활성화 된다. 초기에 비활성화 해줄 수 있지만

보통 기본 설치 하게 된다면 활성화 될 것이고, 이로 인해 사용하지 않지만 ::ffff: 으로 시작하는 ipv6형식으로 보이게 된다.

 
 

 
 

  • /etc/modprobe.conf – Kernel driver configuration file.
  • /etc/sysconfig/network – RHEL / CentOS networking configuration file.

     
     

    위 설명처럼 /etc/modprobe.conf 파일 내에 설정 추가 해도 되지만, /etc/modprobe.d 아래에 개별 파일로 관리 하도록 한다.

    # touch /etc/modprobe.d/disable-ipv6.conf

    # echo “install ipv6 /bin/true” > /etc/modprobe.d/disable-ipv6.conf

     
     

    네트워크 설정에서 아래 내용 추가.

    # vi /etc/sysconfig/network

     
     

    NETWORKING_IPV6=no
    IPV6INIT=no

     
     

    만약 ip6tables가 활성화 되어있다면 비활성화 해준다.

    # chkconfig –level 2345 ip6tables off

     
     

    서버 재구동 후 아래 명령을 통해 IPv6 모듈이 비활성화 되었는지 확인한다.

    #  lsmod | grep ipv6

    # /sbin/ifconfig

     
     

     
     

     
     

     
     

DDoS는 아직까지도 IT 쪽에서는 아직 완전히 해결되지 않은 위협요소 중 하나인데,

대부분의 사람들이 DNS 로도 DDoS가 너무나 쉽게 가능함을 모르는 듯 싶다.

 
 

리눅스로 자체 네임서버를 구성하는 경우가 많은데, 보안에 대한 부분은 신경 쓰지 않고 운영되는 경우가 무지기수.. (윈도우도 포함이지만 리눅스에 비해선 구축비율이 적다.)

 
 

 
 

  1.  최신 소스 다운로드 받기 (2013.05.13 기준 9.9.2 P2)

다운로드 주소 : ftp://ftp.isc.org/isc/bind9/

 
 

cd /usr/local/src/

wget  ftp://ftp.isc.org/isc/bind9/9.9.2-P2/bind-9.9.2-P2.tar.gz

 
 

최신버전을 설치 할 것을 권장하며, 가급적 예전 버전의 경우 취약점이 있다고 알려진 것들은 받지 않는다.

  
 

 
 

  1. 기존 설정 백업 

 
 

[root@localhost src]# cp /etc/named.conf named.conf-20130513

[root@localhost src]# /usr/sbin/named -v

BIND 9.2.4

[root@localhost src]# cp /usr/sbin/named /usr/sbin/named-924

혹시 모르니.. 기존 zone 파일 위치 백업도 함께 하자.

[root@localhost src]# mkdir /home/bind_20130513

[root@localhost src]# cp -rp /var/named/chroot/var/named /home/bind_b201305013

 
 

 
 

  1. 컴파일하기 

 
 

[root@localhost src]# tar zxvf bind-9.9.2-P2.tar.gz

[root@localhost src]# cd bind-9.9.2-P2

[root@localhost bind-9.5.0rc1]# vi  bin/named/include/named/globals.h

 
 

EXTERN const char *             ns_g_defaultpidfile     INIT(NS_LOCALSTATEDIR

                                                             "/run/named.pid");

EXTERN const char *             lwresd_g_defaultpidfile INIT(NS_LOCALSTATEDIR

                                                            "/run/lwresd.pid");

이부분을 

  
 

EXTERN const char *             ns_g_defaultpidfile     INIT(NS_LOCALSTATEDIR

                                                             "/named.pid");

EXTERN const char *             lwresd_g_defaultpidfile INIT(NS_LOCALSTATEDIR

                                                            "/lwresd.pid");

 
 

로 수정

 
 

[root@localhost bind-9.9.2-P2]# ./configure –prefix=/usr –sysconfdir=/etc –localstatedir=/var/run/named –enable-threads

[root@localhost bind-9.9.2-P2]# make && make install

 
 

 
 

컴파일후 바로 데몬을 확인하시길 바랍니다.

가끔 데몬이 죽는경우가 생기기 때문입니다.

 
 

[root@localhost bind-9.5.0rc1]# ps -ef | grep named

named    13608     1  0 May19 ?        00:00:00 /usr/sbin/named -u named

root     24320 23450  0 18:15 pts/1    00:00:00 grep named

 
 

재시작 하기전에 위에서 언급 한 보안설정을 적용한다.

[root@localhost bind-9.9.2-P2]# vi /etc/named.conf

 
 

  1. recursion 취약점
    설정

아래 두가지 옵션 중 하나를 사용할 것을 권장.

(메일 서비스 사용하는 서버의 경우 2번 방법 적용 할 것을 권장함)

  1. recursion 기능 비활성화
  • 주의사항
    • recursion 옵션 no로 변경 시 일반 도메인에 대한 질의는 응답하지 않습니다.
    • 자기 자신이 가지고 있는 Zone 파일 내용들만 응답 하게 됩니다.
    • 일반질의가 되지 않을 때 문제가 되는 부분은 서버의 /etc/resolve.conf 자신의 아이피가 등록 되어 있다면 서버내에서 이름풀이가 되지 않는 문제 발생. 이 경우 외부 DNS 지정을 통해 해결. 예) 168.126.63.1 / 168.126.63.2

       
       

/etc/name.conf 혹은 /etc/named.caching-nameserver.conf

options {

        version "UNKNOWN";  // bind
버전을 UNKNOWN으로
표시

        recursion no;  // Recursion 질의
기능 OFF

        allow-transfer { 127.0.0.1; }; // Slove 서버가
존재한다면
추가
기입

};

 
 

  1. recursion 서비스를 신뢰된 호스트로 제한
  • loopback IP와 211.239.151.211/32 서버 IP에 대해 recursion 이용 가능 하도록 하는 예

acl trust { 127.0.0.1/32; 211.239.151.211/32; };

options {

version "UNKNOWN";  // bind
버전을 UNKNOWN으로
표시

allow-recursion { trust; };

allow-transfer { 127.0.0.1; }; // Slove 서버가
존재한다면
추가
기입

 

};

 
 

[root@localhost bind-9.9.2-P2]# service named restart  혹은

[root@localhost bind-9.9.2-P2]# /usr/sbin/named restart

 
 

[root@localhost bind-9.9.2-P2]# /usr/sbin/named -v 

 BIND-9.9.2-P2

 
 

 
 

 
 

 
 

 
 

 
 

Keepalived/ipvs을 이용한 리눅스 L4 – DR(Direct Routing) 구축

작성자

글 쓴 이: 차상환(netggio@netggio.pe.kr)

홈페이지: http://netggio.pe.kr

작 성 일: 2012년 06월 21일

IPVS+keepalived 구성도


리눅스 ipvs기반으로 리눅스L4를 구성 하고 failover를 구현을 목적으로 한다.

실제 서비스에서 트래픽 2G 까지 무난히 버티는게 검증 됐고, 장비 장애시 failover가 정상적으로 되는게 확인 됐다.

저비용 단순 다운로드 용도 펌 구성시 추천할만 하다.

H/W

 

Svr Name

OS

Memory

Hdd

IP

Remarks

1

Active

CentOS 5.xx 64bit

4G

73G x 1EA

192.168.100.98(eth0)

172.16.1.98(eth1)

Load Balance

2

Backup

CentOS 5.xx 64bit

4G

73G x 1EA

192.168.100.99(eth0)

172.16.1.99(eth1)

Load Balance

3

Real01

CentOS 4.xx 32bit

2G

73G x 1EA

192.168.100.101

Real Server

4

Real02

CentOS 4.xx 32bit

2G

73G x 1EA

192.168.100.102

Real Server

5

Real03

CentOS 4.xx 32bit

2G

73G x 1EA

192.168.100.103

Real Server

6

Real04

CentOS 4.xx 32bit

2G

73G x 1EA

192.168.100.104

Real Server

7

Real05

CentOS 4.xx 32bit

2G

73G x 1EA

192.168.100.105

Real Server

  • VIP로 사용할 ip 192.168.100.100
  • failover를 위해 Active <-> Backup 두 장비는 크로스케이블로 연결 되어 있어야 한다.

    APP

 

Svr Name

APP

Remarks

1

Active

Backup

ipvsadm

kernel-devel

sendmail

keepalived

openssl

openssl-devel

ipvsadm,kernel-devel,sendmail,openssl,openssl-devel은

OS에 포함되어 있는 rpm으로 사용

2

Real01

Real02

Real03

Real04

Real05

httpd

arptables_jf

arptables은 OS에 포함되어 있는 rpm으로 사용

keepalived 는 Version 1.2.1버전 사용했음

 http://www.keepalived.org/

 http://www.keepalived.org/software/keepalived-1.2.1.tar.gz

keepalived은 ipvs control, failover, fail notice, vrrp 제공해주는 툴이라고 생각하면 된다.

Active와 backup 장비는 인증절차 없이 양방향 ssh접속이 가능 하게 되어야 한다. (ssh-keygen -t rsa로 구글링 해보면 tip많을것임)

keepalived 설치

tar xzvf keepalived-1.2.1.tar.gz
cd keepalived-1.2.1
./configure –enable-debug –with-kernel-dir=/lib/modules/uname-r/build

configure 결과가 아래와 같이 리스팅됨. 아래와 같이 YES로 되어 있는지 확인

———————————
Keepalived version
 : 1.2.1
Compiler
 : gcc
Compiler flags
 : -g -O2 -DETHERTYPE_IPV6=0x86dd
Extra Lib
 : -lpopt -lssl -lcrypto
Use IPVS Framework
 : Yes
IPVS sync daemon support
 : Yes
Use VRRP Framework
 : Yes
Use Debug flags
 : Yes

conffigure 끝나면 rpm으로 빌드 해서 rpm으로 설치 하면 됨

cp keepalived-1.2.1/keepalived.spec /usr/src/redhat/SPEC/
cp keepalived-1.2.1.tar.gz /usr/sr/redhat/SOURCE/
cd /usr/src/redhat/SPEC
rpmbuild -bb keepalived.spec
rpm -iVh /usr/src/redhat/RPMS/i386/keepalived-*

위 설치 했던 방식으로 동일하게 Backup에서 설치해준다.

Keepalived Active/Backup 설정

Keepalived Active conf

config -> /etc/keepalived/keepalived.conf

global_defs {
notification_email {
se@netggio.pe.kr
}
notification_email_from Ative@netggio.pe.kr
smtp_server localhost
smtp_connect_timeout 30
}
vrrp_instance VI_1 {
interface eth0
state MASTER
virtual_router_id 9
priority 200
garp_master_delay 1
advert_int 1
lvs_sync_daemon_interface eth1
track_interface {
eth0
}
authentication {
auth_type PASS
auth_pass p@ssw0rd
}
virtual_ipaddress {
192.168.100.100/32 brd 192.168.100.255 dev eth0 scope global
}
notify_master “/etc/keepalived/script/M.sh”
notify_backup “/etc/keepalived/script/B.sh”
}
virtual_server 192.168.100.100 80 {
delay_loop 2
lb_algo rr
lb_kind DR
protocol TCP
real_server 192.168.100.101 80 {
TCP_CHECK {
connect_timeout 2
nb_get_retry 2
delay_before_retry 2
}
}
real_server 192.168.100.102 80 {
TCP_CHECK {
connect_timeout 2
nb_get_retry 2
delay_before_retry 2
}
}
real_server 192.168.100.103 80 {
TCP_CHECK {
connect_timeout 2
nb_get_retry 2
delay_before_retry 2
}
}
real_server 192.168.100.104 80 {
TCP_CHECK {
connect_timeout 2
nb_get_retry 2
delay_before_retry 2
}
}
real_server 192.168.100.105 80 {
TCP_CHECK {
connect_timeout 2
nb_get_retry 2
delay_before_retry 2
}
}
}

Keepalived Active Script

1, Script Base Directory Create

mkdir -p /etc/keepalived/script/run
ln -s /sbin/keepalived /etc/keepalived/script/run/keepalived

2, M.sh

keepalived가 Active로 전환될때 자동으로 실행되는 script

script 위치 -> /etc/keepalived/script

/bin/sed -i ‘s/state BACKUP/state MASTER/g’ /etc/keepalived/keepalived.conf
/bin/sed -i ‘s/priority 100/priority 200/g’ /etc/keepalived/keepalived.conf
echo date +%Y/%m/%d" "%H:%M:%S | /bin/mail -s “hostname(date +%Y/%m/%d" "%H:%M:%S)
 :: 192.168.100.98 change Master-LVS” se@netggio.pe.kr

3, B.sh

keepalived가 backup로 전환될때 자동으로 실행되는 script

script 위치 -> /etc/keepalived/script

/bin/sed -i ‘s/state MASTER/state BACKUP/g’ /etc/keepalived/keepalived.conf
/bin/sed -i ‘s/priority 200/priority 100/g’ /etc/keepalived/keepalived.conf
echo date +%Y/%m/%d" "%H:%M:%S | /bin/mail -s “hostname(date +%Y/%m/%d" "%H:%M:%S)
 :: 192.168.100.98 change Backup-LVS” se@netggio.pe.kr

4,START.sh

Keepalived 구동 -> /etc/keepalived/script/START.sh

script 위치 -> /etc/keepalived/script

#!/bin/bash

LOCAL=172.16.1.98
REMOTE=172.16.1.99

NET_CHK=nc -z -w 2 172.16.1.99 22 > /dev/null

if [[ $? == “0” ]]

then
STATUS_REMOTE=ssh $REMOTE ipvsadm -L --daemon | awk '{print $1}'
STATUS_LOCAL=ssh $LOCAL ipvsadm -L --daemon | awk '{print $1}'

if [[ $STATUS_REMOTE == “master” ]]

then

if [[ $STATUS_LOCAL == “” ]]

then
echo “1”
echo “/etc/keepalived/script/B.sh”
/etc/keepalived/script/B.sh
echo “/etc/keepalived/script/run/keepalived start”
/etc/keepalived/script/run/keepalived start
fi
if [[ $STATUS_LOCAL == “master” ]]

then
echo “2”
echo “hostname is Already running master”
fi

if [[ $STATUS_LOCAL == “backup” ]]

then
echo “3”
echo “hostname is Already running Backup”
fi

fi

if [[ $STATUS_REMOTE == “backup” ]]

then

if [[ $STATUS_LOCAL == “” ]]

then
echo “4”
echo “/etc/keepalived/script/M.sh”
/etc/keepalived/script/M.sh
echo “/etc/keepalived/script/run/keepalived start”
/etc/keepalived/script/run/keepalived start
fi
if [[ $STATUS_LOCAL == “master” ]]

then
echo “5”
echo “hostname is Already running master”
fi

fi

if [[ $STATUS_REMOTE == “” ]]

then

if [[ $STATUS_LOCAL == “” ]]

then
echo “6”
echo “/etc/keepalived/script/M.sh”
/etc/keepalived/script/M.sh
echo “/etc/keepalived/script/run/keepalived start”
/etc/keepalived/script/run/keepalived start
fi
if [[ $STATUS_LOCAL == “master” ]]

then
echo “7”
echo “hostname is Already running Master”
fi

if [[ $STATUS_LOCAL == “backup” ]]

then
echo “8”
echo “/etc/keepalived/script/M.sh”
/etc/keepalived/script/M.sh
echo “/etc/keepalived/script/run/keepalived start”
/etc/keepalived/script/run/keepalived start
fi

fi

else

echo “$REMOTE NETWROK Error”

STATUS_LOCAL=ipvsadm -L --daemon | awk '{print $1}'

if [[ $STATUS_LOCAL == “” ]]

then
echo “9”
echo “/etc/keepalived/script/M.sh”
/etc/keepalived/script/M.sh
echo “/etc/keepalived/script/run/keepalived start”
/etc/keepalived/script/run/keepalived start
fi

if [[ $STATUS_LOCAL == “backup” ]]

then
echo “10”
echo “/etc/keepalived/script/M.sh”
/etc/keepalived/script/M.sh
echo “/etc/keepalived/script/run/keepalived start”
/etc/keepalived/script/run/keepalived start

fi

if [[ $STATUS_LOCAL == “master” ]]

then
echo “11”
echo “hostname is Already running Master”

fi

fi

5,STOP.sh

Keepalived 구동 -> /etc/keepalived/script/STOP.sh

script 위치 -> /etc/keepalived/script

/etc/keepalived/script/run/keepalived stop

6,net_stat.sh

밸런스 확인

script 위치 -> /etc/keepalived/

#!/bin/bash
while true
do
sleep 1.5
echo “###############################################”
ipvsadm -L -n –sort
echo “###############################################”
done


7, status.sh

현재 어느 장비가 active/backup인지 확인 하는 script

script 위치 -> /etc/keepalived/


#!/bin/bash

LOCAL=192.168.100.98
REMOTE=192.168.100.99

nc -z -w 2 $REMOTE 22 > /dev/null

if [[ $? == “0” ]]
then
echo “$LOCAL –” ssh $LOCAL ipvsadm -L --daemon | awk '{print $1}'
echo “$REMOTE –” ssh $REMOTE ipvsadm -L --daemon | awk '{print $1}'

else

echo “$LOCAL –” ssh $LOCAL ipvsadm -L --daemon | awk '{print $1}'
echo “$REMOTE — Network error”

fi

Keepalived Backup conf

config -> /etc/keepalived/keepalived.conf

global_defs {
notification_email {
se@netggio.pe.kr
}
notification_email_from backup@netggio.pe.kr
smtp_server localhost
smtp_connect_timeout 30
}
vrrp_instance VI_1 {
interface eth0
state BACKUP
virtual_router_id 9
priority 100
garp_master_delay 1
advert_int 1
lvs_sync_daemon_interface eth1
track_interface {
eth0
}
authentication {
auth_type PASS
auth_pass p@ssw0rd
}
virtual_ipaddress {
192.168.100.100/32 brd 192.168.100.255 dev eth0 scope global
}
notify_master “/etc/keepalived/script/M.sh”
notify_backup “/etc/keepalived/script/B.sh”
}
virtual_server 192.168.100.100 80 {
delay_loop 2
lb_algo rr
lb_kind DR
protocol TCP
real_server 192.168.100.101 80 {
TCP_CHECK {
connect_timeout 2
nb_get_retry 2
delay_before_retry 3
}
}
real_server 192.168.100.102 80 {
TCP_CHECK {
connect_timeout 2
nb_get_retry 2
delay_before_retry 2
}
}
real_server 192.168.100.103 80 {
TCP_CHECK {
connect_timeout 2
nb_get_retry 2
delay_before_retry 2
}
}
real_server 192.168.100.104 80 {
TCP_CHECK {
connect_timeout 2
nb_get_retry 2
delay_before_retry 2
}
}
real_server 192.168.100.105 80 {
TCP_CHECK {
connect_timeout 2
nb_get_retry 2
delay_before_retry 2
}
}
}

Keepalived Backup Script

1, Script Base Directory Create

mkdir -p /etc/keepalived/script/run
ln -s /sbin/keepalived /etc/keepalived/script/run/keepalived

2, M.sh

keepalived가 Active로 전환될때 자동으로 실행되는 script

script 위치 -> /etc/keepalived/script

/bin/sed -i ‘s/state BACKUP/state MASTER/g’ /etc/keepalived/keepalived.conf
/bin/sed -i ‘s/priority 100/priority 200/g’ /etc/keepalived/keepalived.conf
echo date +%Y/%m/%d" "%H:%M:%S | /bin/mail -s “hostname(date +%Y/%m/%d" "%H:%M:%S)
 :: 192.168.100.99 change Master-LVS” se@netggio.pe.kr

3, B.sh

keepalived가 backup로 전환될때 자동으로 실행되는 script

script 위치 -> /etc/keepalived/script

/bin/sed -i ‘s/state MASTER/state BACKUP/g’ /etc/keepalived/keepalived.conf
/bin/sed -i ‘s/priority 200/priority 100/g’ /etc/keepalived/keepalived.conf
echo date +%Y/%m/%d" "%H:%M:%S | /bin/mail -s “hostname(date +%Y/%m/%d" "%H:%M:%S)
 :: 192.168.100.99 change Backup-LVS” se@netggio.pe.kr

4,START.sh

Keepalived 구동 -> /etc/keepalived/script/START.sh

script 위치 -> /etc/keepalived/script

#!/bin/bash

LOCAL=172.16.1.99
REMOTE=172.16.1.98

NET_CHK=nc -z -w 2 172.16.1.99 22 > /dev/null

if [[ $? == “0” ]]

then
STATUS_REMOTE=ssh $REMOTE ipvsadm -L --daemon | awk '{print $1}'
STATUS_LOCAL=ssh $LOCAL ipvsadm -L --daemon | awk '{print $1}'

if [[ $STATUS_REMOTE == “master” ]]

then

if [[ $STATUS_LOCAL == “” ]]

then
echo “1”
echo “/etc/keepalived/script/B.sh”
/etc/keepalived/script/B.sh
echo “/etc/keepalived/script/run/keepalived start”
/etc/keepalived/script/run/keepalived start
fi
if [[ $STATUS_LOCAL == “master” ]]

then
echo “2”
echo “hostname is Already running master”
fi

if [[ $STATUS_LOCAL == “backup” ]]

then
echo “3”
echo “hostname is Already running Backup”
fi

fi

if [[ $STATUS_REMOTE == “backup” ]]

then

if [[ $STATUS_LOCAL == “” ]]

then
echo “4”
echo “/etc/keepalived/script/M.sh”
/etc/keepalived/script/M.sh
echo “/etc/keepalived/script/run/keepalived start”
/etc/keepalived/script/run/keepalived start
fi
if [[ $STATUS_LOCAL == “master” ]]

then
echo “5”
echo “hostname is Already running master”
fi

fi

if [[ $STATUS_REMOTE == “” ]]

then

if [[ $STATUS_LOCAL == “” ]]

then
echo “6”
echo “/etc/keepalived/script/M.sh”
/etc/keepalived/script/M.sh
echo “/etc/keepalived/script/run/keepalived start”
/etc/keepalived/script/run/keepalived start
fi
if [[ $STATUS_LOCAL == “master” ]]

then
echo “7”
echo “hostname is Already running Master”
fi

if [[ $STATUS_LOCAL == “backup” ]]

then
echo “8”
echo “/etc/keepalived/script/M.sh”
/etc/keepalived/script/M.sh
echo “/etc/keepalived/script/run/keepalived start”
/etc/keepalived/script/run/keepalived start
fi

fi

else

echo “$REMOTE NETWROK Error”

STATUS_LOCAL=ipvsadm -L --daemon | awk '{print $1}'

if [[ $STATUS_LOCAL == “” ]]

then
echo “9”
echo “/etc/keepalived/script/M.sh”
/etc/keepalived/script/M.sh
echo “/etc/keepalived/script/run/keepalived start”
/etc/keepalived/script/run/keepalived start
fi

if [[ $STATUS_LOCAL == “backup” ]]

then
echo “10”
echo “/etc/keepalived/script/M.sh”
/etc/keepalived/script/M.sh
echo “/etc/keepalived/script/run/keepalived start”
/etc/keepalived/script/run/keepalived start

fi

if [[ $STATUS_LOCAL == “master” ]]

then
echo “11”
echo “hostname is Already running Master”

fi

fi

5,STOP.sh

Keepalived 구동 -> /etc/keepalived/script/STOP.sh

script 위치 -> /etc/keepalived/script

/etc/keepalived/script/run/keepalived stop

6,net_stat.sh

밸런스 확인

script 위치 -> /etc/keepalived/

#!/bin/bash
while true
do
sleep 1.5
echo “###############################################”
ipvsadm -L -n –sort
echo “###############################################”
done


7, status.sh

현재 어느 장비가 active/backup인지 확인 하는 script

script 위치 -> /etc/keepalived/


#!/bin/bash

LOCAL=192.168.100.99
REMOTE=192.168.100.98

nc -z -w 2 $REMOTE 22 > /dev/null

if [[ $? == “0” ]]
then
echo “$LOCAL –” ssh $LOCAL ipvsadm -L --daemon | awk '{print $1}'
echo “$REMOTE –” ssh $REMOTE ipvsadm -L --daemon | awk '{print $1}'

else

echo “$LOCAL –” ssh $LOCAL ipvsadm -L --daemon | awk '{print $1}'
echo “$REMOTE — Network error”

fi

그 밖에 확인 및 설정들..

1, cat /etc/rc.local

/etc/keepalived/script/START.sh
/sbin/ipvsadm –set 8 5 8

2, cat /etc/sysctl.conf

net.ipv4.ip_forward = 1

3, cat /etc/selinux/config ( selinux설정 변경시 리붓해야 적용됨. 리붓 못하는 상태라면 setenforce 0 으로 바로 적용 가능)

SELINUX=disabled

4, Sendmail 구동 여부

Real Server 구성

1, Arptables 설치되어 있어야 한다. (OS 디플트 패키지로 설치 하면됨)

2, chkconfig –levels 35 arptables_jf on

3, arptables 룰(cat /etc/sysconfig/arptables), arptables는 iptables과 사용방법이 유사함

아래의 룰은 rip 가 192.168.100.101 이고 vip가 192.168.100.100인경우 예시임

*filter
:IN ACCEPT [12:336]
:OUT ACCEPT [1:28]
:FORWARD ACCEPT [0:0]
[0:0] -A IN -d 192.168.100.100 -j DROP
[0:0] -A OUT -d 192.168.100.100 -j mangle –mangle-ip-s 192.168.100.101
COMMIT

arptables -L -n (arptables 룰 상태 확인)

Chain IN (policy ACCEPT)
target source-ip destination-ip source-hw destination-hw hlen op hrd pro
DROP 0.0.0.0/0 192.168.100.100 00/00 00/00 any 0000/0000 0000/0000 0000/0000
Chain OUT (policy ACCEPT)
target source-ip destination-ip source-hw destination-hw hlen op hrd pro
mangle 0.0.0.0/0 192.168.100.100 00/00 00/00 any 0000/0000 0000/0000 0000/0000 –mangle-ip-s 192.168.100.101
Chain FORWARD (policy ACCEPT)
target source-ip destination-ip source-hw destination-hw hlen op hrd pro

4, loopback 설정 cat /etc/sysconfig/network-scripts/ifcfg-lo:0

DEVICE=lo:0
IPADDR=192.168.100.100
NETMASK=255.255.255.255
BROADCAST=192.168.100.100
ONBOOT=yes
NAME=loopback

5, 커널 파라메타값 수정

net.ipv4.tcp_syncookies = 4
net.ipv4.tcp_fin_timeout = 4
net.ipv4.tcp_keepalive_time = 6
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2

6, iptables로 인한 성능 저하 문제로 룰을 넣지 않았다.

7, 아파치 인스톨

출처: <http://netggio.pe.kr/wiki/index.php/Keepalived/ipvs%EC%9D%84_%EC%9D%B4%EC%9A%A9%ED%95%9C_%EB%A6%AC%EB%88%85%EC%8A%A4_L4_-_DR(Direct_Routing)_%EA%B5%AC%EC%B6%95>

일반적으로 트래픽이나 회선 속도는 초당 접속속도인 bps(Bits Per Second)를 가지고 얘기 합니다.

[3Mbps]

= 3*1024*1024 bit

= 3,145,728 bit

bit를 byte로 전환하면 (byte는 bit가 8개 모인 단위)

3Mbps / 8

= 3,145,728 / 8

= 393,216 byte

즉 초당 데이터 전송할 수 있는 양이 384kbyte가 된다.

이를 하루 단위 트래픽
으로 계산하면 다음과 같다

393,216 byte * 86,400 초 (하루 60*60*24)

= 33,973,862,400 byte

= 약 32 Gbyte

[5Mbps]

초당 : 640kbyte

하루 : 약 52Gbyte 

한달 : 약 1,582 Gbyte

평균 10Mbps를 사용한다고 한다면, 한 달에 약 3,164Gbyte 의 누적사용량이 발생한다고 볼 수 있습니다.

[10Mbps]

초당 : 1.25Mbyte

하루 : 약 105 Gbyte

한달 : 약 3,164 Gbyte

Linux의 경우는 rx, tx 가지고 계산하는데 vnstat를 통해서도 확인 해볼 수 있다.

혹은 ifconfig로 해당 인터페이스의 누적 사용량을 확인 해보는 것도 한가지 방법.

[rubi] /var/log/nginx > # vnstat -i bond0 -d

bond0 / daily

day rx | tx | total | avg. rate

————————+————-+————-+—————

03/21/13 31.20 MiB | 9.05 MiB | 40.25 MiB | 3.82 kbit/s

03/22/13 38.36 MiB | 20.28 MiB | 58.64 MiB | 8.48 kbit/s

————————+————-+————-+—————

estimated 58 MiB | 30 MiB | 88 MiB |


계속해서 추가할 예정.

 

트래픽 모니터링

vnstat  (웹으로도 확인 가능하며, 커맨드라인에서도 시간,일,주,월 단위의 사용량을 확인 할 수 있다.)

vnstat

 

[rubi] /home/src > # vnstat -d

eth0 / daily

day rx | tx | total | avg. rate
————————+————-+————-+—————
12/20/12 109.95 MiB | 74.81 MiB | 184.76 MiB | 17.52 kbit/s
12/21/12 108.50 MiB | 74.14 MiB | 182.64 MiB | 17.32 kbit/s
12/22/12 104.44 MiB | 68.69 MiB | 173.13 MiB | 16.41 kbit/s
12/23/12 103.03 MiB | 76.26 MiB | 179.29 MiB | 17.00 kbit/s
12/24/12 6.65 GiB | 6.65 GiB | 13.30 GiB | 1.29 Mbit/s
12/25/12 130.83 MiB | 1.56 GiB | 1.69 GiB | 163.74 kbit/s
12/26/12 99.21 MiB | 74.29 MiB | 173.50 MiB | 16.45 kbit/s
12/27/12 97.46 MiB | 80.57 MiB | 178.04 MiB | 16.88 kbit/s
12/28/12 106.60 MiB | 74.27 MiB | 180.87 MiB | 17.15 kbit/s
12/29/12 97.68 MiB | 71.81 MiB | 169.49 MiB | 16.07 kbit/s
12/30/12 109.26 MiB | 76.76 MiB | 186.02 MiB | 17.64 kbit/s
12/31/12 113.57 MiB | 73.91 MiB | 187.48 MiB | 17.78 kbit/s
01/01/13 109.31 MiB | 74.58 MiB | 183.89 MiB | 17.44 kbit/s
01/02/13 107.82 MiB | 74.22 MiB | 182.04 MiB | 17.26 kbit/s
01/03/13 138.57 MiB | 1.13 GiB | 1.27 GiB | 122.83 kbit/s
01/04/13 113.93 MiB | 100.79 MiB | 214.73 MiB | 20.36 kbit/s
01/05/13 119.92 MiB | 80.13 MiB | 200.05 MiB | 18.97 kbit/s
01/06/13 106.45 MiB | 74.95 MiB | 181.40 MiB | 17.20 kbit/s
01/07/13 115.87 MiB | 85.74 MiB | 201.61 MiB | 19.12 kbit/s
01/08/13 240.98 MiB | 101.50 MiB | 342.48 MiB | 32.47 kbit/s
01/09/13 104.56 MiB | 79.38 MiB | 183.95 MiB | 17.44 kbit/s
01/10/13 109.60 MiB | 113.45 MiB | 223.05 MiB | 21.15 kbit/s
01/11/13 122.02 MiB | 87.76 MiB | 209.78 MiB | 19.89 kbit/s
01/12/13 115.44 MiB | 78.00 MiB | 193.45 MiB | 18.34 kbit/s
01/13/13 117.62 MiB | 87.97 MiB | 205.60 MiB | 19.49 kbit/s
01/14/13 155.19 MiB | 2.36 GiB | 2.51 GiB | 243.66 kbit/s
01/15/13 93.88 MiB | 81.29 MiB | 175.17 MiB | 16.61 kbit/s
01/16/13 864.21 MiB | 155.67 MiB | 1.00 GiB | 96.70 kbit/s
01/17/13 151.58 MiB | 190.49 MiB | 342.07 MiB | 32.43 kbit/s
01/18/13 57.35 MiB | 64.86 MiB | 122.22 MiB | 25.09 kbit/s
————————+————-+————-+—————
estimated 123 MiB | 138 MiB | 261 MiB |

 

darkstat

마찬가지로 트래픽 현황을 웹을 통해서 확인 할 수 있다. 실시간 그래프도 확인 가능하다.

출처 : http://blog.syszone.co.kr/3038

GlusterFS에 관심이 생겨 찾아보다가 좋은 글을 찾아 퍼온 글임을 밝힙니다.

 

GlusterFS로 분산 스토리지 환경 구현하기

작성자 : 서진우
작성일 : 2011-08-06

1. GlusterFS 소개

Gluster 파일 시스템은 수천 PetaByte 용량(actually, 72 brontobyte)에 수천 개의
Client host가 접속하여 사용 가능한 scale-out 방식의 분산 파일 시스템이다.
기존의 분산형 파일 시스템과 비교하여, 간단한 아키텍처 구성에, 안정성, 대용량
대규모 I/O 처리 성능, 응용 호환성 등이 우수하여, 근래 클라우드 인프라 구성에
많이 이용 되고 있다.

 

2. GlusterFS 설치환경 준비

7대의 서버 시스템을 준비한다. (VM을 이용해서 해도 무방. 본 테스트는 Redhat KVM 상에서
테스트 실시함.

– os info

# cat /etc/redhat-release
Red Hat Enterprise Linux Server release 5.5 (Tikanga)

– hosts info

# cat /etc/hosts
192.168.123.61  vmlnx001
192.168.123.62  vmlnx002
192.168.123.63  vmlnx003
192.168.123.64  vmlnx004
192.168.123.65  vmlnx005
192.168.123.66  vmlnx006
192.168.123.67  vmlnx007

vmlnx001~vmlnx004 까지 storage pool server 로 사용하고 vmlnx005~007
까지는 gluster client node 로 사용한다.

이후 storage pool 추가 테스트에서 vmlnx005~vmlnx007까지 서버의 디스크를
이용하여 storage pool을 확장할것이다.

– pre-install pkg

wget, fuse, fuse-libs, fuse-devel

– security configure
firewall off, selinux off

모든 Gluster 서버의 TCP ports 111, 24007,24008, 24009-(24009 + 전체 볼륨수) 해제
NFS 사용시에는 ports 38465-(38465 + Gluster 서버수) 추가로 해제

– download to gluster package

http://www.gluster.org/download

glusterfs-core-3.2.2-1.x86_64.rpm
glusterfs-fuse-3.2.2-1.x86_64.rpm

3. GlusterFS 설치 및 기본 설정

– install package

모든 노드에 pre package 와 glusterfs 관련 package를 설치한다.

# psh rpm -Uvh glusterfs-core-3.2.2-1.x86_64.rpm glusterfs-fuse-3.2.2-1.x86_64.rpm

모든 노드에 gluster 데몬을 시작한다.

# psh  /etc/rc.d/init.d/glusterd start
# psh /sbin/chkconfig –level 345 glusterd on

– storage pool 구성

vmlnx001 서버에서 아래 명령을 수행한다. 해당 명령을 수행하는 서버에서는 자신의 호스트를
추가하는 명령을 수행할 필요가 없다.

# gluster peer probe vmlnx002
# gluster peer probe vmlnx003
# gluster peer probe vmlnx004

– pool 구성 확인

# gluster peer status
Number of Peers: 3

Hostname: vmlnx004
Uuid: 37d37621-e1e3-4f51-bf54-fa42a8425125
State: Peer in Cluster (Connected)

Hostname: vmlnx002
Uuid: 544ef065-ce1e-459d-a400-1ad7f92f55f9
State: Peer in Cluster (Connected)

Hostname: vmlnx003
Uuid: 6a954cf5-d2d1-4850-9cd5-19b8d0b77583
State: Peer in Cluster (Connected)

– pool 구성 제거

# gluster peer detach 호스트명(or 서버주소)

– volume 구성

Glusterfs 에는 서버 노드와 Brick 이라는 개념이 있는데,
서버노드는 Trusted Storage Pools 에 들어가 있는 서버를 의미하며,
Brick 은 서버노드 내에 볼륨을 구성할 때 포함하는 폴더를 의미한다.
따라서 한 서버노드 내에 많은 Brick이 존제할 수 있다.
Brick은 “서버IP:/폴더주소” 로 구성된다.

gluster의 volume 생성 방법은 크게 4가지가 존재한다.

distributed volume
-> 파일을 gluster 서버 노드의 각 Brick으로 분산해서 저장함. (기본)
replicated volume
-> 파일을 gluster 서버 노드의 각 Brick으로 분산해서 저장함.  지정된 replication 수 만큼의복제 파일을 생성함.
stripe volume
-> 여러 서버의 여러 Brick에 파일을 stripe 수로  만큼 나누어 저장함. 단 volume 생성 시 정의한 brick의 수와
Stripe 수가 일치해야 한다.
distributed stripe volume
-> 여러 gluster 서버 노드의 각 Brick 으로 파일을 stripe 수만큼 나누어 저장함.
distributed replicated volme :
-> multiple 한 replicated volume 구성을 형성할때 사용할 수 있다.

일단 모든 storage pool server에 brick으로 사용할 디렉토리를 생성한다.

# psh mkdir /data  -> /data 디렉토리를 brick 으로 사용할 것이다.

– dist 볼륨 구성 방법

gluster volume create <volume_name> server1:/directory server2:/directory …

# gluster volume create vol_dist vmlnx001:/data vmlnx002:/data vmlnx003:/data vmlnx004:/data
Creation of volume vol_dist has been successful. Please start the volume to access data.

# gluster volume info all : volume 정보 확인

Volume Name: vol_dist
Type: Distribute
Status: Created
Number of Bricks: 4
Transport-type: tcp
Bricks:
Brick1: vmlnx001:/data
Brick2: vmlnx002:/data
Brick3: vmlnx003:/data
Brick4: vmlnx004:/data

# gluster volume start vol_dist : volume 시작
Starting volume vol_dist has been successful

– replica volume 생성

gluster volume create <volume_name> replica <repli_number> server1:/directory server2:/directory …

# gluster volume create vol_repl replica 2  vmlnx001:/data vmlnx002:/data vmlnx003:/data vmlnx004:/data

위와 같이 <repli_number>을 2로 지정해 주면, vmlnx001과 002, 003과 004 서버가 pair 로 파일을 서로
복제하게 된다. 즉 dist 방식의 볼륨에 파일을 저장하다가 storage pool 서버 하나가 죽으면, 해당 서버에 저장된
파일은 보이지 않는다. (해당 서버가 복구 되면, 다시 자동으로 파일이 나타남) replica 방식에서는 서버가
1대 죽어도 다른 서버에 복제된 파일로 서비스가 가능한 장점이 있다. 단 이 경우 디스크 용량은 replica 수와
비례해서 줄어들게 된다.

– stripe volume 생성

gluster volume create <volume_name> stripe <stripe_number> transport <tcp,ib>  server1:/directory server2:/directory …

# gluster volume create vol_stripe stripe 2 transport tcp vmlnx001:/data vmlnx002:/data

– dist stripe volume 생성

gluster volume create <volume_name> stripe <stripe_number> transport <tcp,ib>  server1:/directory server2:/directory …

# gluster volume create vol_stripe stripe 4 transport tcp vmlnx001:/data vmlnx002:/data vmlnx003:/data vmlnx004:/data

– client 접근 허가 대역 지정

gluster volume set <volume_name> auth.allow <허가IP대역>

# gluster volume set vol_stripe auth.allow 192.168.123.*

– volume 삭제 방법

# gluster volume stop <volume_name>
# gluster volume delete <volume_name>

4. GlusterFS Native Client 환경 구현하기

gluster-core, gluster-fuse package install

먼저 fuse 모듈을 로딩한다.

# modprobe fuse

fuse 모듈 로딩 상태 확인

# dmesg | grep -i fuse
fuse init (API version 7.10)

적절한 Mount point를 만들어 놓고, mount 실시.

– glusterfs 방식으로 mount

# mount -t glusterfs <server_name>:<volume_name> <mount point>

# mount -t glusterfs vmlnx001:/vol_dist /glusterfs/
# mount
.
.
glusterfs#vmlnx001:/vol_dist on /glusterfs type fuse (rw,allow_other,default_permissions,max_read=131072)

– nfs 방식으로 mount

# mount -t nfs vmlnx001:/vol_dist /glusterfs/
# mount
.
.
vmlnx001:/vol_dist on /glusterfs type nfs (rw,addr=192.168.123.61)

– glusterfs 자동 mount

# vi /etc/fstab

server1:/vol_dist /glusterfs glusterfs defaults,_netdev 0 0

5. gluster volume 관리하기

– 현재 volume 및 brick 구성 확인

# gluster volume info all

Volume Name: vol_dist
Type: Distribute
Status: Started
Number of Bricks: 4
Transport-type: tcp
Bricks:
Brick1: vmlnx001:/data
Brick2: vmlnx002:/data
Brick3: vmlnx003:/data
Brick4: vmlnx004:/data

– clinet 에서의 mount 상태 확인

# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup00-LogVol00
16G  6.0G  8.4G  42% /
/dev/vda1              99M   13M   82M  14% /boot
tmpfs                 982M     0  982M   0% /dev/shm
/dev/vdb1             9.7G  151M  9.0G   2% /data
glusterfs#vmlnx001:/vol_dist
39G  601M   36G   2% /glusterfs

위와 같이 4개의 brick 으로 구성된 distribute volume 에 1개의 신규 trusted storage node를 추가하고,
vol_dist volume 에 추가하여 용량을 확장 시키는 방법이다.

– add server to trusted storage pool

vmlnx001(gluster master) 서버에서 아래 명령 수행

# gluster peer probe vmlnx005
Probe successful

– add volume

gluster volume add-brick <volume_name> <add_server>:<add_directory>
gluster volume info all

– 추가된 volume 및 brick 확인

Volume Name: vol_dist
Type: Distribute
Status: Started
Number of Bricks: 5
Transport-type: tcp
Bricks:
Brick1: vmlnx001:/data
Brick2: vmlnx002:/data
Brick3: vmlnx003:/data
Brick4: vmlnx004:/data
Brick5: vmlnx005:/data

– clinet 에서 추가된 Mount 상태 확인

Clinet 에서 gluster storage와 mount 상태에서 추가된 brick 용량 만큼 증가되는 것을 확인할 수 있다.

# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup00-LogVol00
16G  6.0G  8.4G  42% /
/dev/vda1              99M   13M   82M  14% /boot
tmpfs                 982M     0  982M   0% /dev/shm
/dev/vdb1             9.7G  151M  9.0G   2% /data
glusterfs#vmlnx001:/vol_dist
49G  751M   45G   2% /glusterfs

– 볼륨 추가 후 용량 재 균배

# gluster volume rebalance <vol_name> start
# gluster volume rebalance <vol_name> status

– 볼륨 Migration

Volume에 속해 있는 특정 brick을 새로운 brick으로 교체가 필요할때 수행하는 방법이다.
아래 명령은 server3:/exp3 의 brick 으로 server5:/exp5 로 대체할때 사용하는 명령이다.

gluster volume replace-brick <volume_name> server3:/exp3 server5:/exp5 start

이밖에 migration 관련  operation에 해당하는 명령은 다음과 같다.

To pause the migration operation, if needed, use the following command:
# gluster volume replace-brick VOLNAME BRICK NEW-BRICK pause

To abort the migration operation, if needed, use the following command:
# gluster volume replace-brick VOLNAME BRICK NEW-BRICK abort

Check the status of the migration operation using the following command:
# gluster volume replace-brick VOLNAME BRICK NEW-BRICK status

Commit the migration of data from one brick to another using the following command:
# gluster volume replace-brick VOLNAME BRICK NEW-BRICK commit

Verify the migration of brick by viewing the volume info using the following command:
# gluster volume info VOLNAME

– 볼륨에 추가된 brick 제거

gluster volume remove-brick <vol_name> <server>:<directory>
# gluster volume remove-brick vol_dist vmlnx005:/data

 

6. gluster file system tuning

glusterfs 의 성능튜닝 및 속성 변경을 위해서는 아래 명령을 사용한다.

# gluster volume set <volume_name> <option> <parameter>

예를 들어 cache size 성능을 튜닝하기 위한 설정 방법이다.

# gluster volume set vol_dist performance.cache-size 256MB
Set volume successful

이밖에 성능에 관련된 옵션은 아래와 같다.

7. gluster file system performance

지금까지의 기능 테스트는 VM 서버 상에서 실행하였다. 분산 디스크 성능에 영향을 주는 것은
“Disk 자체 성능/네트워크 성능/메모리 캐쉬 영향” 등이 해당된다.

VM 상에서는 실제 1대의 물리적인 서버를 여러대로 가상화하여 생성한 환경이여서 위 성능 요소
들에 모두 영향을 미치게 된다. 객관적인 성능을 확인하기 위해서는 실제 분산 시스템 환경에서
테스트를 수행하도록 한다.

또한 명확한 테스트를 위해서는 클라이언트의 부하 유발 용량에도 신경을 써야 한다.

테스트에 사용할 disk 성능 측정 프로그램은 iozone 으로 수행한다.
iozone 는 다양한 single과 multiple clinet 환경을 구현하는대 용이하다.

자세한 성능 비교 결과는 아래 내용을 참고 바란다.

http://blog.syszone.co.kr/3089

1. 리눅스 쉘 dir color 바꾸기

 
 

검은화면에 찐한 파랑.. 눈이 빠져버릴 것만 같다.. 산뜻하게 노랭이로 바꿔보자.

 
 

vi /root/.bashrc

export LS_COLORS=”di=01;33″:”fi=01;37″:”ex=01;32″:”ln=01;36″:”so=01;33″ => 라인 추가

 
 

변경 전 (눈이 마구마구 뻐근하다..!!)


 
 

변경 후


 
 

호스트명과

변경 전


 
 

변경 후


 
 

 
 

버스 프로토콜이란?

  • CPU나 메모리 등 주변장치들간 데이터가 이동되는 통로를 데이터 버스라 불리움.
  • 주고 받는 데이터 정보의 전기적 신호가 전달되는 전기적 통로
  • 인텔에서는 버스를 위해 FSB/QPI를, AMD에서는 HT를 사용

 
 

FSB (Front Side Bus)

  • CPU와 CPU / CPU와 메인 메모리간의 데이터 전송 통로
  • CPU의 외부 클럭과 같은 의미로 많이 사용됨
  • CPU와 칩셋의 노스브리지간의 전송 속도를 의미
  • 높은 유연성과 낮은 비용으로 만들 수 있어 아톰,코어2시리즈 등에 최근까지도 사용
  • CPU 연결의 수 제한 및 CPU의 클럭 및 메모리 클럭 향상, 다른 장치들의 처리속도 향상 등에 따른 데이터 병목현상을 가져오고 있어 새로운 규격인 QPI로 대체될 전망

 
 

메모리 연결 구조 : CPU > 노스브릿지 > 메모리

 
 

 
 

QPI (QuickPath Interconnect)

  • 점대점 (Point-to-Point) 링크 방식을 사용
  • CPU안에 있는 각각의 코어들 끼리, 그리고 이들 코어와 메모리 컨트롤러가 서로 연결되는 방식을 사용
  • 대역폭 확보 및 대기시간 감소, CRC 핀 내장으로 오류 확인 및 전체 패킷 크기를 줄여 데이터 전송 효율 증가

     
     

HT (Hyper Transport)

  • CPU와 메모리간의 통신속도를 2배로 끌어올려주는 기술
  • 데이터를 주고 받는 모든 장치에 사용
  • 장치들끼리 직접적으로 연결되어 데이터를 주고 받게되어 전체적인 성능상승 효과

     
     

CPU와 메인보드 간의 속도 및 성능 차이를 극복 하기 위해 지속적인 대역폭의 증가가 필요. 현재 버스 클럭을 높이므로 문제를 해결해 나가는중

 
 

 
 

 
 

참고페이지 : http://nalyojo.blog.me/120121515185

Dual Core 와 Core2Dou 는 같은 뜻이 아니었단 말인가?

 
 

혹시, 호빵과 진빵의 차이를 아십니까?

호빵은 호호~ 불어먹는 빵이 호빵일까요?

찐빵은 쪄서 먹는 빵이 찐빵이고요 그렇죠?

 
 

불과 얼마 전에 알게 된 사실 입니다만, 호빵은 삼림식품에서 만든 제품명이라고 하네요.

찐빵이 맞는 말이고요. 이렇게 제품명 또는 브랜드명이 대표적인 명사인 것 처럼 인식 되는 경우가 종종 있습니다.

이왕 이렇게 된 거 몇 개 더 찾아볼까요?

 
 

포크레인 이라는 말은 우리말인 굴삭기 보다 더 많이 사용 합니다.

굴삭기를 영어로 하면 당연히 포크레인 같습니다만, 포크레인은 프랑스의 굴삭기 회사 제품이 우리나라에 수입되어 널리 쓰이면서 대표명사로 변한 케이스라고 합니다.


 
 

사설이 길었네요. 자 그럼 듀얼코어와 코어2듀오의 차이를 짚어보도록 하겠습니다.

 

CPU, 즉 코어의 개수를 가지고 싱글 / 듀얼 / 쿼드로 나누고 있습니다.

어떤 공사를 함에 있어서 인부(일꾼)의 수 차이라고 볼 수 있습니다. 같은 일을 수행함에 있어 두 명이 나눠 하는 것과 혼자 일하는 것에 대한 차이인 것입니다.

싱글코어 – 코어가 1개,

듀얼코어 – 코어가 2개

쿼드코어 – 코어가 4개

 
 

위와 같이 듀얼코어는 말 그대로 코어가 두 개라는 넓은 개념입니다.

펜티엄 D 시리즈 부터 듀얼코어를 사용 해왔습니다.

초기에는 코어 2개가 서로 붙어서 독립적인 일을 수행하지 못하기 때문에 효율이 떨어졌습니다.

몸은 하나인데 머리만 두 개인 샴쌍둥인셈입니다. 서로 다른 일은 할 수 없었던거죠.

이후 코어가 분리 되면서 두명의 일꾼이 일을 수행하는 형태로 진화 되었습니다.

  • 캐시(Cache) – CPU와 주기억 장치 사이의 자주 쓰이는 데이터를 임시로 기억하는 역할 수행 (임시기억장치)

 
 

위 두 가지의 차이를 결론부터 얘기 하자면, 캐시의 공유 여부 입니다.

 
 

두 일꾼이 같은 집을 짓는 일을 하지만, 다른 공간에서 작업을 진행 합니다. 하지만 서로 얘길 나누지 않기 때문에, 혼자 해도 되는 작업을 둘이서 진행 합니다. 같은 작업을 한다는 것을 알기까지 시간이 소요 됩니다.. 집 주인 입장에서는 혼자 해도 되는 일을 둘이서 하고 있기 때문에, 두 배의 지출이 발생 하고 했습니다.

 
 

같은 일을 하고 서로 얘길 하면서 일에 대한 공유를 하는 일꾼 두 명은 힘든 일이나 많은 일을 할 때 함께 나눠서 합니다. 혼자서 해도 되는 일은 돌아가면서 쉬면서 일을 합니다.

 
 

위 예시에서 보이는 차이와 같이 서로의 공유가 이루어지지 않기 때문에 한 쪽은 많은 지출이 발생 합니다.

컴퓨터 입장에서는 많은 전력 소모가 발생하고 있는 것이죠. 속도도 차이가 납니다.

 
 

코어2듀오로 접어들면서는 각기 다른 일을 수행 가능하며, 앞에서 말한 캐시의 공유가 가능하기 때문에 코어간 정보 이동시 정보손실이 적으며, 전기소모를 감소시키는 전자소자가 (Tdiode) 탑재 되었습니다.

 
 

 
 

 
 

 
 

현재는 Intel 에서 8코어 제온 CPU가 발표 되었다. 최상위 모델인 X7560은 $3660 (약 417만원)

AMD 같은 경우는 12코어 CPU인 옵테론 6100까지 출시 되어있다.