mon+heartbeat+fake+coda 해결책
http://tunelinux.pe.kr/virtual/HighAvailability.html 여깁니닥..
: : 소스만 참고하시라고 올렸어요...--)/ 허접이쥐만..
: : 다즐링님 rc.local등에 기술하라는 말씀이시조 ? 아닌가...
: : cron을 써도 무방 하지 않을까용 ..? (while빼버리고...)
)/
: : 저 같은경우 아는게 없으니..이렇게라도 해서...유지해볼려고 했구요..
: : 좋은 방안이 있으면 알고 싶어 올린 글이지요.....
: :
:
: init 로 하여금 직접 컨트롤 하도록 하시라는 듯 하군요.
:
:
: :
: : : 팁입니까 질문입니까?
: : : 이걸 정확히 해주시고요.
: : :
: : : 보통 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>