Linux負載均衡器

2022-05-18 13:01:33 字數 3934 閱讀 8223

這次主要是想上傳一下**,寫了乙個負載均衡器。

//客戶端**:

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

const int buff_size = 128;

const char *ip = "127.0.0.1";

int conn(int port)

return sockfd;

}int main(int argc,char *ar**)

else

char buf[5];

memset(buf,0,5);

int n = recv(load_sockfd,buf,5,0);

if(n <= 0)

int port = atoi(buf);

printf("port = %d\n",port);

n = send(load_sockfd,"ok",2,0);

if(n<0)

close(load_sockfd);

int sockfd = conn(port);

if(sockfd<0)

while(1)

memset(buff,0,127);

n = recv(sockfd,buff,2,0);

if(n <= 0)

printf("recv = %s\n",buff);

}close(sockfd);

return 0;

}均衡器**:#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

const int buff_size = 128;

const int max_event_numble = 100;

const int server_numble = 5;

const char *ip = "127.0.0.1";

pthread_mutex_t mutex;

typedef struct node

node;

node server_data[5] =

, ,,,

,};int min_server_data()

}++server_data[j].count;

printf("count port\n");

for(i = 0; i<5; ++i)

return j;

}void *worker(void *arg)

memset(buff,0,5);

n = recv(cli_sockfd,buff,2,0);

if(n<0)

printf("buff = %s\n",buff);

close(cli_sockfd);

}int main(int argc,char *ar**)

pthread_mutex_init(&mutex,null);

int port = atoi(ar**[1]);

int listenfd = socket(af_inet,sock_stream,0);

assert(listenfd>=0);

struct sockaddr_in saddr;

saddr.sin_family = af_inet;

inet_pton(af_inet,ip,&saddr.sin_addr);

saddr.sin_port = htons(port);

int res = bind(listenfd,(struct sockaddr*)&saddr,sizeof(saddr));

assert(res != -1);

res = listen(listenfd,5);

assert(res != -1);

while(1)

close(listenfd);

pthread_mutex_destroy(&mutex);

return 0;

}伺服器**:#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

const int buff_size = 128;

const int max_event_numble = 100;

const char *ser_ip = "127.0.0.1";

typedef struct fds

fds;

/*將檔案描述符設定為非阻塞的*/

int setnonblocking(int fd)

/*將檔案描述符fd的epollin事件註冊到核心事件表中,引數enable_et指定是否對fd

採用epolloneshut事件*/

void addfd(int epollfd,int fd,int enable_et)

epoll_ctl(epollfd,epoll_ctl_add,fd,&event);

setnonblocking(fd);

}/*重置fd上的事件,這樣操作以後,儘管fd上的epolloneshot事件被註冊,但是作業系統仍然會觸發fd上的epollin事件,且只觸發一次*/

void reset_oneshot(int epollfd,int fd)

void *worker(void *arg)

else if(n<0)

close(cli_sockfd);

break;

}else

memset(buff,0,buff_size);}}

}int main(int argc,char *ar**)

int port = atoi(ar**[1]);

int listenfd = socket(af_inet,sock_stream,0);

assert(listenfd>=0);

struct sockaddr_in saddr;

saddr.sin_family = af_inet;

inet_pton(af_inet,ser_ip,&saddr.sin_addr);

saddr.sin_port = htons(port);

int res = bind(listenfd,(struct sockaddr*)&saddr,sizeof(saddr));

assert(res != -1);

res = listen(listenfd,5);

assert(res != -1);

struct epoll_event events[max_event_numble];

int epollfd = epoll_create(5);

assert(epollfd != -1);

addfd(epollfd,listenfd,0);

while(1)

else if(events[i].events & epollin)}}

close(listenfd);

return 0;

}

負載均衡器

負載均衡器f5 負載均衡是高可用網路基礎架構的關鍵元件,通常用於將工作負載分布到多個伺服器來提高 應用 資料庫或其他服務的效能和可靠性。負載均衡器可以處理什麼樣的請求?負載均衡器的管理員能主要為下面四種主要型別的請求設定 規則 負載均衡器如何選擇要 的後端伺服器?負載均衡器一般根據兩個因素來決定要將...

負載均衡器簡介

負載均衡器可以根據實際的響應時間制定優先順序交付決策,從而實現高效能 智慧型化流量管理,達到最佳的伺服器群效能。採用第七層應用控制還可以減少通訊高峰期的錯誤訊息,因為差錯控制和流量管理技術可以偵測到一些錯誤資訊,並透明地將會話重定向到另乙個伺服器,使使用者順利地進行使用。例如,伺服器 a不可用或者資...

LVS負載均衡器

lvs是乙個開源的軟體,可以實現linux平台下的簡單負載均衡。lvs是linux virtual server的縮寫,意思是linux虛擬伺服器。優點 1 開源,免費 2 在網上能找到一些相關技術資源 3 具有軟體負載均衡的一些優點 缺點 1 具有開源產品常有的缺點,最核心的就是沒有可靠的支援服務...