Nginx 负载均衡
1. 介绍¶
实现Nginx负载均衡的组件主要由两个,见下表
Nginx http功能模块 | 模块说明 |
---|---|
ngx_http_proxy_module | proxy代理模块,用于把请求后抛给服务器节点或upstream服务器池。 |
ngx_http_upstream_module | 负载均衡模块,可以实现网站的负载均衡功能及节点的健康检查。 |
官方介绍连接:http://nginx.org/en/docs/http/ngx_http_upstream_module.html
2. 环境准备¶
2.1 硬件准备¶
准备4台VM虚拟机(有物理服务器更佳),两台做负载均衡,两台做RS,如下表。
HOSTNAME | IP | 说明 |
---|---|---|
lb01 | 10.0.0.7 | Nginx主负载均衡器 |
lb02 | 10.0.0.8 | Nginx辅负载均衡器 |
web01 | 10.0.0.9 | web01服务器 |
web02 | 10.0.0.10 | web02服务器 |
2.2 安装Nginx软件¶
下面将在以上4台服务器上安装Nginx。完整的安装过程见上面的说明,这里只写出安装的命令部分。
- 安装依赖软件包命令集合。
yum install openssl-devel pcre-devel -y
- 安装Nginx软件包的命令集合
wget http://nginx.org/download/nginx-1.6.3.tar.gz useradd nginx -M -s /sbin/nologin tar xf nginx-1.6.3.tar.gz cd nginx-1.6.3 ./configure --prefix=/app/nginx-1.6.3 --user=nginx --group=nginx --with-http_ssl_module --with-http_stub_status_module --with-pcre make && make install ln -s /app/nginx-1.6.3/ /app/nginx
2.3 Nginx upstream¶
lb01和lb02的nginx配置文件如下:
worker_processes 1; pid logs/nginx.pid; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; upstream server_pools { #配置一个upstream标签,名称为server_pools server 172.16.1.7:80 weight=1; #后端两台web服务器的ip地址和端口,weight=1表示权重都是1 server 172.16.1.8:80 weight=1; } server { listen 80; server_name www.caimengzhi.org; location / { proxy_pass http://server_pools; #访问www.etiantian.org 就抛给上面的upstream server_pools proxy_set_header Host $host; #把客户端的请求头也一起抛过去 proxy_set_header X-Forwarded-For $remote_addr; #把客户端的IP地址也抛过去,web服务器端记录客户端真实IP地址 } } server { listen 80; server_name blog.caimengzhi.org; location / { proxy_pass http://server_pools; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $remote_addr; } } }
3. keepalived¶
在lb01和lb02负载均衡服务器上安装keepalived,安装命令如下:
yum install keepalived -y
keepalived的默认配置文件路径在/etc/keepalived/keepalived.conf
3.1 主负载均衡配置¶
! Configuration File for keepalived global_defs { notification_email { 610658552@qq.com #管理员邮箱 } notification_email_from 610658552@qq.com #管理员邮箱 smtp_server 192.168.200.1 smtp_connect_timeout 30 router_id LVS_DEVEL #这里是keepalived的ID,不同服务器的id不能相同 } vrrp_instance VI_1 { #实例 state MASTER # MASTER主的意思,高可用里有一主一备 interface eth0 #绑定IP的网卡 virtual_router_id 51 #两端的route_id 要一致 priority 150 #优先级数值越高越优先,主的一定要被备的大 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 10.0.0.3/24 dev eth0 label eth0:1 #要配置的虚拟IP地址 } }
3.2 备负载均衡配置¶
! Configuration File for keepalived global_defs { notification_email { 610658552@qq.com #管理员邮箱 } notification_email_from 610658552@qq.com smtp_server 192.168.200.1 smtp_connect_timeout 30 router_id LVS_DEVEL1 #这里是keepalived的ID,不同服务器的id不能相同 } vrrp_instance VI_1 { #实例 state BACKUP # 状态是备用,高可用里有一主一备 interface eth0 #绑定IP的网卡 virtual_router_id 51 #两端的route_id 要一致 priority 100 #优先级数值越高越优先,主的一定要被备的大 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 10.0.0.3/24 dev eth0 label eth0:1 #要配置的虚拟IP地址 } }
/etc/init.d/keepalived start
做IP解析的时候,只要解析到10.0.0.3这个IP即可