이 글의 내용은 PHP 면접 질문 7번에서 nginx의 로드 밸런싱을 구성하는 방법에 대한 것입니다. 특정 참고 값이 있습니다. 이제 필요한 친구들이 참고할 수 있도록 공유하겠습니다.
nginx 로드 밸런싱에는 4가지 모드가 있습니다:
1), Polling(기본값)
각 요청은 시간순으로 하나씩 다른 백엔드 서버에 할당됩니다. 백엔드 서버가 다운되면 자동으로 제거될 수 있습니다.
2)、체중
폴링 확률을 지정하며 가중치는 접속률에 비례하며 백엔드 서버 성능이 고르지 않을 때 사용됩니다.
2), ip_hash
각 요청은 액세스 IP의 해시 결과에 따라 할당되므로 각 방문자는 백엔드 서버에 대한 고정 액세스 권한을 갖게 되어 세션 문제를 해결할 수 있습니다.
3), fair(제3자)
백엔드 서버의 응답 시간에 따라 요청을 할당하고, 응답 시간이 짧은 요청부터 먼저 할당합니다.
4), url_hash(타사)
Open nginx.cnf 파일
http 노드 아래에 업스트림 노드 추가:
upstream webname { server 192.168.0.1:8080; server 192.168.0.2:8080; }
여기서 webname은 선택한 이름이며 마지막으로 이 이름이 사용됩니다. in 위의 예시처럼 URL에서 접속할 경우, 아무것도 추가하지 않는 것이 기본 폴링입니다. 첫 번째 요청은 첫 번째 서버에 액세스하고, 두 번째 요청은 두 번째 서버에 액세스합니다. 차례로 오세요.
upstream webname { server 192.168.0.1:8080 weight 2; server 192.168.0.2:8080 weight 1; }
이 가중치도 이해하기 쉽습니다. 위의 예에서는 server1이 두 번 액세스되고 server2가 한 번 액세스됩니다. 이렇게 하면 동일한 IP에서 오는 모든 사람이 동일한 서버로 이동합니다
그런 다음 서버 노드에서 구성합니다.
upstream webname { ip_hash; server 192.168.0.1:8080; server 192.168.0.2:8080; }
proxy_pass는 원래 IP 주소를 위에서 구성한 웹 이름으로 바꿉니다.
이렇게 하면 기본적으로 로드 밸런싱 구성이 완료됩니다.
다음은 활성 및 백업 구성입니다.
아직 업스트림에 있습니다
location /name { proxy_pass http://webname/name/; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; }
특정 노드를 백업으로 설정하면 일반적으로 모든 요청은 server1에 액세스합니다.
upstream webname { server 192.168.0.1:8080; server 192.168.0.2:8080 backup; }노드를 다운으로 설정하면 이 서버는 로드에 참여하지 않습니다. 구현 예로드 밸런싱은 트래픽이 많은 우리 웹 사이트에서 수행해야 할 작업입니다. 이제 Nginx 서버의 로드 밸런싱 구성 방법이 필요한 학생들에게 도움이 되길 바랍니다. 로드 밸런싱먼저 로드 밸런싱이 무엇인지 간단히 알아보겠습니다. 문자 그대로 이해하면 N개의 서버가 로드를 균등하게 공유하며, 특정 서버의 로드가 높아서 특정 서버가 유휴 상태가 되지 않는다는 의미로 설명할 수 있습니다. . 상태. 그러면 로드 밸런싱의 전제는 여러 서버에서 달성할 수 있다는 것입니다. 즉, 두 대 이상의 서버이면 충분합니다. 테스트 환경
서버가 없으므로 지정된 도메인 이름을 직접 호스팅한 후 VMware에 CentOS 3개를 설치하는 테스트입니다.
테스트 도메인 이름: a.com
A 서버를 메인 서버, 도메인 이름은 서버 A(192.168.5.149)로 직접 확인되고, 서버 A는 서버 B(192.168.5.27)와 서버 C(192.168.5.126)로 로드 밸런싱됩니다.
도메인 이름 확인
끝에 C:WindowsSystem32driversetchosts
upstream webname { server 192.168.0.1:8080; server 192.168.0.2:8080 down; }를 추가하여 저장하고 종료한 다음 명령 모드를 시작하고 ping을 실행하여 설정이 성공했는지 확인하세요스크린샷에서 a.com이 192.168.5.149로 성공적으로 확인되었습니다. IPA 서버 nginx.conf 설정
nginx.conf를 엽니다. 파일 위치는 nginx 설치 디렉터리의 conf 디렉터리에 있습니다.
http 섹션에 다음 코드를 추가하세요
192.168.5.149 a.comnginx를 저장하고 다시 시작하세요B 및 C 서버 nginx.conf 설정
nginx.confi를 열고 http 섹션에 다음 코드를 추가하세요
upstream a.com { server 192.168.5.126:80; server 192.168.5.27:80; } server{ listen 80; server_name a.com; location / { proxy_pass http://a.com; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }
nginx를 저장하고 다시 시작하세요
a.com 접속 시 어떤 서버로 리다이렉트되어 처리되는지 구분하기 위해 서버 B와 C 각각에 내용이 다른 index.html 파일을 작성하여 구분했습니다.
브라우저를 열고 a.com을 방문하여 새로고침하면 모든 요청이 메인 서버(192.168.5.149)에 의해 서버 B(192.168.5.27)와 서버 C(192.168.5.126)에 할당되어 로드 밸런싱이 이루어지는 것을 확인할 수 있습니다. . 효과.
특정 서버가 다운되면 접속에 영향이 있나요?
먼저 예시를 살펴보겠습니다. 위의 예시를 바탕으로 머신 C 서버 192.168.5.126이 다운되었다고 가정하고 (다운타임 시뮬레이션이 불가능해서 C 서버를 종료했습니다) 방문해보세요. 다시.
如果b.com也要设置负载均衡怎么办?
很简单,跟a.com设置一样。如下:
假设b.com的主服务器IP是192.168.5.149,负载均衡到192.168.5.150和192.168.5.151机器上
现将域名b.com解析到192.168.5.149IP上。
在主服务器(192.168.5.149)的nginx.conf加入以下代码:
upstream b.com { server 192.168.5.150:80; server 192.168.5.151:80; } server{ listen 80; server_name b.com; location / { proxy_pass http://b.com; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }
保存重启nginx
在192.168.5.150与192.168.5.151机器上设置nginx,打开nginx.conf在末尾添加以下代码:
server{ listen 80; server_name b.com; index index.html; root /data0/htdocs/www; }
保存重启nginx
完成以后步骤后即可实现b.com的负载均衡配置。
主服务器不能提供服务吗?
以上例子中,我们都是应用到了主服务器负载均衡到其它服务器上,那么主服务器本身能不能也加在服务器列表中,这样就不会白白浪费拿一台服务器纯当做转发功能,而是也参与到提供服务中来。
如以上案例三台服务器:
A服务器IP :192.168.5.149 (主)
B服务器IP :192.168.5.27
C服务器IP :192.168.5.126
我们把域名解析到A服务器,然后由A服务器转发到B服务器与C服务器,那么A服务器只做一个转发功能,现在我们让A服务器也提供站点服务。
我们先来分析一下,如果添加主服务器到upstream中,那么可能会有以下两种情况发生:
1、主服务器转发到了其它IP上,其它IP服务器正常处理;
2、主服务器转发到了自己IP上,然后又进到主服务器分配IP那里,假如一直分配到本机,则会造成一个死循环。
怎么解决这个问题呢?因为80端口已经用来监听负载均衡的处理,那么本服务器上就不能再使用80端口来处理a.com的访问请求,得用一个新的。于是我们把主服务器的nginx.conf加入以下一段代码:
server{ listen 8080; server_name a.com; index index.html; root /data0/htdocs/www; }
重启nginx,在浏览器输入a.com:8080试试看能不能访问。结果可以正常访问
既然能正常访问,那么我们就可以把主服务器添加到upstream中,但是端口要改一下,如下代码:
upstream a.com { server 192.168.5.126:80; server 192.168.5.27:80; server 127.0.0.1:8080; }
由于这里可以添加主服务器IP192.168.5.149或者127.0.0.1均可以,都表示访问自己。
重启Nginx,然后再来访问a.com看看会不会分配到主服务器上。
主服务器也能正常加入服务了。
最后
一、负载均衡不是nginx独有,著名鼎鼎的apache也有,但性能可能不如nginx。
二、多台服务器提供服务,但域名只解析到主服务器,而真正的服务器IP不会被ping下即可获得,增加一定安全性。
三、upstream里的IP不一定是内网,外网IP也可以。不过经典的案例是,局域网中某台IP暴露在外网下,域名直接解析到此IP。然后又这台主服务器转发到内网服务器IP中。
四、某台服务器宕机、不会影响网站正常运行,Nginx不会把请求转发到已宕机的IP上
相关推荐:
php面试题五之nginx如何调用php和php-fpm的作用和工作原理
위 내용은 PHP 인터뷰 질문 7: nginx 로드 밸런싱을 구성하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!