2013년 7월 12일 금요일

[Nginx] apache를 nginx로 window를 CentOS 로 !




최근에 Window 7, Apache ,Node , Mysql , Redis 로 구성된 서버에

Stress Test를 하게되었습니다.

첫 페이지에서 PHP로 MySQL 로 로그인 하고,

여러 과정을 지나 Node에서 서비스를 해주는 것이었습니다.

사람들 60여명 정도에게 테스트를 했는데

정말 생각지도 못하게 로그인 페이지 부터 막혔습니다.

Win7 + Apache가 그 정도일 줄이야...


그날 바로 서버를 완전히 백업하고

Centos 를 설치한 후

Apahce를 Nginx 로 바꾸고 다른 것들도 올려 보았습니다.

그 사이에 있었던 (지금 생각해보면 어처구니 없는, 하나당 몇시간동안 고생했던)

잊지 말아야 할 것들을 적어 봅니다.

####################################################
# USB로 Centos 설치할 때는 부트로더가 USB에 설치되지 않도록 주의한다.
(이 상황에서 재부팅시 부트로더 뻥난것처럼 검은화면에 커서만 깜빡거립니다.)
이 경우, 재설치 하지말고 설치한 USB로 다시 부트로더를 잡아주면 됩니다.

# PHP Session을 이용하려면 최신버젼을 설치해야 한다.

# Nginx 에서 해야할 설정들
PHP , 특히 Websocket을 이용하기 위한 설정들

# 방화벽 설정을 잘 해준다. 열어야 할 포트를 열어준다.

# Mysql 백업했던거 복원할 때 < ,  > 절대 헷갈리지 말것.

# 현재 디렉토리부터 하위디렉토리 까지 문자열 /SL/ 을 /sl/로 바꾸어야 할 때
# 단, 신중하게 사용하여야 합니다. 반드시 바꿀 폴더에 들어가서 작업 하세요.
# 잘못사용했다가 서버가 날아갔습니다.
find ./ -type f -exec sed -i 's#/SL/#/sl/#' {} \;


#삼바 폴더 권한 설정을 해도 권한 문제로 안될 때
vi /etc/selinux/config
Set
//SELINUX=enforcing
SELINUX=disabled

#whereis , ps -e | grep "찾을 프로세스" 로 잘 설치되었고 실행되는지 확인한다.

# 더 있었던것 같은데 기억이 안나는 관계로...
####################################################



CentOS 와 Nginx 로 바꾼 다음 , 신세계가 펼쳐졌습니다. 정말 확실히 느껴지는 속도차이!


여담으로..CentOS에 대해서

"누가 센트 오에스라고 읽냐 센토스라고 읽어야지" 라는 분도 계시고

Cent + OS(Operating System) 이기 때문에

센트 오에스 라고 읽어야 된다고 하는 분도 계십니다.

뭐가 맞는 건지는 잘 모르겠지만 전 그냥 센트오에스 라고 읽으렵니다 ㅋㅋ


2013년 7월 4일 목요일

[Node.js] 객체 정렬, 방 찾기, Usage

Hello SyntaxHighlighter

Tools.


var Tools={

//소켓 전체를 받아서 방을 돌려준다.
  getRoomBySocket:function(obj){
   var sockId=io.sockets.manager.roomClients[obj.id];
   var r= null;
   for(var k in sockId){
    if(!sockId.hasOwnProperty(k))
     continue
    r=k;
   }
   if(r!=null && typeof r !="undefined") r=r.split("/")[1];
   else r=null;
   console.log("[ function ] getRoomBySocket : ",r);
   return r;
  },

//객체를 소팅한다.
  sorting: function(f, r, p){
   var key = function (x) {return p ? p(x[f]) : x[f]};
      return function (a,b) {
          var A = key(a), B = key(b);
          return ((A < B) ? -1 : (A > B) ? +1 : 0) * [-1,1][+!!r];
      }
  },

//CPU , MEMORY 정보를 알려준다.
updateServerState:function(callback){
   var freemem=os.freemem();
   var totalmem=os.totalmem();
   var memUse=Math.round((totalmem-freemem)/totalmem*100);
   var r=null;
   os_util.cpuUsage(function(v){
    cpuUse=Math.round(v*100);
       r={cpu : cpuUse , mem : memUse};
       callback(r);
   });
  }
};


/*
 *사용법 
 * 소켓 가지고 그 소켓이 join된 방을 찾고 싶을 때. */ 
 Tools.getRoomBySocket(socket);  

/*
* 객체 소팅 */
  var book=[ { "price" : "500",
               "name"  : "andromeda" },
             { "price" : "1500",
               "name"  : "thebook" }];
// '가격' 높은거에서 낮은거로 소팅
book.sort(Tools.sorting('price', true, parseInt)); 
// '책 제목'의 a-z까지 순서로 소팅
book.sort(Tools.sorting('name', false, function(a){
return a.toUpperCase()
})); 

/*
* Server의 CPU, MEM 사용량 조사를 동기적으로 받아서 처리하고 싶을 때.
*/
 Tools.updateServerState(function(r){
 console.log("cpu : ",r.cpu," mem : ",r.mem);
 })

다음에 Node.js 프로젝트를 할때 유용하게 쓰일 것 같아서 포스팅합니다. 마음껏 쓰셔도 좋습니다. 혹시 코드에 문제가 있으면 저한테도 알려주세요 ^^

[Node.js] Redis 의 데이터 관리(쿼리,삽입,삭제)

Hello SyntaxHighlighter

Redis 의 hset , hget , hdel

var redis = require('redis');
/*
*자동으로 JSON String화 되어 들어가고 나오게 할 방법이 있습니다.
*npm install redis-jsonify 로 다운받으시면 됩니다.
*
*사용법
*var jsonify=require('redis-jsonify');
*var client=jsonify(redis.createClient(포트,호스트,null));
*
*/
var client=redis.createClient(포트,호스트,null);
var tempobj={test: "hi", test2:"ho"}
client.hset('test','a',JSON.stringify(tempobj) ); 
client.hget('test','a',function(err,obj){
 obj=JSON.parse(obj);
 console.log(obj.test);
});
client.hdel("test","a"); 
//test 키 전체가 삭제되는 것이 아니라 test 의 a와 내용만 삭제합니다.

github.com/mranney/node_redis 이곳에서 함수를 찾아보곤 했었는데 이곳에 없는 것들이 많더라구요. hget, hdel이 있다는 사실은 나중에 실험을 통해 알게 되었습니다.