LVS구축하고 나서..
Real서버가 죽을수도 있다는 생각에...한번 짜본 건대요...^^
제가 아는 랑구아지가 C언어 밖에 없어나서...좀 지저분해도 이해해주시구
요..
sh같은걸 잘했으면 스크립트로 하는건댁..sh는 잘 모르고...그래서
걍 c로 했다는...-_-
<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>