>> Delete Reply from No. 3206 article
No. RE: LVS에서 Realserver check후 업데이트...

등록 2002-02-15 07:57:00     조회 5
이름 다즐링    

		팁입니까 질문입니까?
이걸 정확히 해주시고요.
 보통 inittab 에 넣어버립니다.
 그럼 저 체크 프로그램이 죽어도 다시 살리죠.
 : LVS구축하고 나서..
: Real서버가 죽을수도 있다는 생각에...한번 짜본 건대요...^^
: 제가 아는 랑구아지가 C언어 밖에 없어나서...좀 지저분해도 이해해주시구
: 요..
: sh같은걸 잘했으면 스크립트로 하는건댁..sh는 잘 모르고...그래서
: 걍 c로 했다는...-_-
: 이게 제대로 먹히는지도 몰라요...-_-)/
: LVS Realserver가 다운되면 어케 유지를 해야 하는지 아시는분 조언좀...
: 해주셔용...
: 저도 왕초보라...--)/ 걍 참고만 하세용...
:
: <pre>
: /*
: gcc -o lvs lvs.c
: ./lvs port
: */
:
: #include stdio.h
: #include stdlib.h
: #include string.h
: #include sys/types.h
: #include sys/socket.h
: #include netinet/in.h
: #include arpa/inet.h
: #include unistd.h
:
: //#define       default         1
:
: #ifdef  default
: #define SERVER_PORT             80              //Default 값입니다.
: #endif
:
: #define BUF_SIZE                256
: #define SERVER_IP               "211.xx0.xx2.xx3"// LVS server IP
: #define Choice                  "-i"
: #define Scheduling              "rr"            //스케줄링 방식 wlc rr ...
:
: int     count   =4;                             //Real server 몇개 ?
: int     checkping(char * <>, int size, char * <>);
: void    init(char * <>,int size,char * <>);
: char    *array[10]={
:                         "211.xx7.xx7.xx5",
:                         "211.xx9.xx1.xx6",
:                         "211.xx0.xx2.xx2",
:                         "211.xx9.xx1.xx2"
:                    };                           // Real server ip...^^
:
:
: int main(int argc, char *argv<>)
: {
:         if(strlen(argv[1]) > 0)
:         {
:         init(argv, count, array);
:         }
:
:         else
:         exit(0);
:
:         while(1){
:         checkping(array,count,argv);
:         sleep(60); // 1분...refresh
:         }
: }
:
: int checkping(char *url<>, int size, char *argv<>)
: {
: char    buffer[300];
: char    send_buf[BUF_SIZE],recv_buf[BUF_SIZE];
: int     refresh[size];
: int     SERVER_PORT;
: int     sockfd,conn=0;
: int     compare;
: struct  sockaddr_in server_addr;
:
:         if(strlen(argv[1]) > 1)
:         SERVER_PORT=atoi(argv[1]);
:         else
:         SERVER_PORT=80;
:
:         // 1. Socket 생성하기
:         // sockfd = socket(AF_INET, SOCK_STREAM, 0);
:
:         // 2. Real Server에 연결하기
:
:         for(;size > 0;size--){
:         int conn=0;
:         sockfd = socket(AF_INET, SOCK_STREAM, 0);
:         server_addr.sin_family = AF_INET;
:         server_addr.sin_addr.s_addr = inet_addr(url[size-1]);
:         server_addr.sin_port = htons(SERVER_PORT);
:
:         // Real server port조사..
:         if(connect(sockfd, (struct sockaddr *) &server_addr, sizeof(struct sockaddr)) == -1){
:         conn=-1;
:         refresh[size-1]=0;
:         }
:         else{
:         refresh[size-1]=size;
:         }
:
:         if(conn == 0){
:         sprintf(buffer,"ipvsadm -a -t %s:%d -r %s %s",SERVER_IP,SERVER_PORT,url[size-1],Choice);
:         system(buffer);
:         }
:
:         if(conn == -1){
:         sprintf(buffer,"ipvsadm -d -t %s:%d -r %s ",SERVER_IP,SERVER_PORT,url[size-1]);
:         system(buffer);
:         }
:
:         close(sockfd);
:         } //for
:
: return size;
: }
:
: void init(char *argv<>, int size, char *url<>)
: {
: char buffer[300];
: system("ipvsadm");
: sprintf(buffer,"ipvsadm -D -t %s:%s",SERVER_IP,argv[1]);
: system(buffer);
: sprintf(buffer,"ipvsadm -A -t %s:%s -s %s",SERVER_IP,argv[1],Scheduling);
: system(buffer);
:         for(;size > 0;size--){
:         sprintf(buffer,"ipvsadm -a -t %s:%s -r %s %s",SERVER_IP,argv[1],url[size-1],Choice);
:         system(buffer); 
:         }
: }
:
:
: sysop at netizen.ne.kr : 조경희
: </pre>
[관리자] 패스워드를 입력 하십시오. 답장이 존재하면 함께 삭제됩니다.[ 목록 | 이전 ]
패스워드:    

Copyleft 1999-2026 by JSBoard Open Project
Theme Designed by IDOO All right reserved