欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 艺术 > ubuntu实现负载均衡

ubuntu实现负载均衡

2025/2/21 3:17:26 来源:https://blog.csdn.net/m0_57057282/article/details/139932531  浏览:    关键词:ubuntu实现负载均衡

1.安装环境

sudo apt update
sudo apt install python3 python3-pip nginx


2.python代码

1)服务代码

from http.server import HTTPServer, BaseHTTPRequestHandlerclass SimpleHTTPRequestHandler(BaseHTTPRequestHandler):def do_GET(self):self.send_response(200)self.send_header('Content-type', 'text/html')self.end_headers()self.wfile.write(f"Served by backend server on port {self.server.server_port}".encode())def run(server_class=HTTPServer, handler_class=SimpleHTTPRequestHandler, port=8001):server_address = ('', port)httpd = server_class(server_address, handler_class)print(f"Starting httpd server on port {port}")httpd.serve_forever()if __name__ == '__main__':import sysport = int(sys.argv[1]) if len(sys.argv) > 1 else 8001run(port=port)

python3 backend.py 8001 &
python3 backend.py 8002 &
python3 backend.py 8003 &

2)编写负载均衡器

from http.server import HTTPServer, BaseHTTPRequestHandler
import random
import http.client# 后端服务器列表
backend_servers = [('localhost', 8001),('localhost', 8002),('localhost', 8003)
]class RequestHandler(BaseHTTPRequestHandler):def do_GET(self):# 随机选择一个后端服务器backend_server = random.choice(backend_servers)self.proxy_to(backend_server)def proxy_to(self, backend_server):conn = http.client.HTTPConnection(*backend_server)conn.request('GET', self.path)response = conn.getresponse()self.send_response(response.status)for header, value in response.getheaders():self.send_header(header, value)self.end_headers()self.wfile.write(response.read())conn.close()def run(server_class=HTTPServer, handler_class=RequestHandler, addr="0.0.0.0", port=8000):server_address = (addr, port)httpd = server_class(server_address, handler_class)print(f"Starting httpd server on {addr}:{port}")httpd.serve_forever()if __name__ == "__main__":run()

python3 load_balancer.py &



3.nginx配置

编辑Nginx配置文件 /etc/nginx/sites-available/default(或创建一个新的配置文件):

server {listen 80;location / {proxy_pass http://localhost:8000;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;}
}

sudo systemctl restart nginx

4.访问你的ip就可以看到效果了

5.增加权重

修改load_balancer.py文件的代码

from http.server import HTTPServer, BaseHTTPRequestHandler
import random
import http.client# 后端服务器列表,包含权重
backend_servers = [('localhost', 8001, 3),  # 权重为3('localhost', 8002, 1),  # 权重为1('localhost', 8003, 1)   # 权重为1
]# 扩展服务器列表,根据权重增加出现次数
weighted_servers = []
for server, port, weight in backend_servers:weighted_servers.extend([(server, port)] * weight)class RequestHandler(BaseHTTPRequestHandler):def do_GET(self):# 随机选择一个后端服务器backend_server = random.choice(weighted_servers)self.proxy_to(backend_server)def proxy_to(self, backend_server):conn = http.client.HTTPConnection(*backend_server)conn.request('GET', self.path)response = conn.getresponse()self.send_response(response.status)for header, value in response.getheaders():self.send_header(header, value)self.end_headers()self.wfile.write(response.read())conn.close()def run(server_class=HTTPServer, handler_class=RequestHandler, addr="0.0.0.0", port=8000):server_address = (addr, port)httpd = server_class(server_address, handler_class)print(f"Starting httpd server on {addr}:{port}")httpd.serve_forever()if __name__ == "__main__":run()

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词