简介 Nginx+keepalived单主环境下,其中一台slave机器处于备份状态,有些浪费,其实可以利用DNS轮询来实现双机负载均衡。 具体架构图如下 环境 操作系统:CentOS 6.4 WEB1服务器 IP:192.168.100.60 WEB2服务器 IP:192.168.100.61 VIP1: 192.168.100.62 VIP2: 192.168.100.63 安装keepalived(两台机器相同) tar xzvf keepalived-1.2.12.tar.gz cd keepalived-1.2.12 ./configure make make install if [ 0 = $? ];then echo "keepalived installed" else echo "keepalived not installed" fi cp /usr/local/sbin/keepalived /usr/sbin cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/ cp /usr/local/etc/rc.d/init.d/keepalived /etc/init.d/ mkdir /etc/keepalived cp /usr/local/etc/keepalived/keepalived.conf /etc/keepalived/ ~ 安装nginx(两台机器相同) yum -y install openssl openssl-devel pcre pcre-devel gcc gcc-c++ make wget zlib-static zlib zlib-devel groupadd nginx useradd -g nginx nginx tar xzvf nginx-1.6.0.tar.gz cd nginx-1.6.0 ./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_gzip_static_module --with-http_stub_status_module --user=nginx --group=nginx make && make install if [ $? = 0 ];then echo "nginx installed" fi 配置nginx(从略,相关配置看官方文档) 配置keepalived WEB1服务器keepalived.conf配置 [iyunv@test60 root]# cat /etc/keepalived/keepalived.conf ! Configuration File for keepalived global_defs { notification_email { } smtp_server 192.168.100.252 smtp_connect_timeout 30 router_id NGINX_1 } vrrp_script chk_nginx { script "/tmp/check_http.sh" interval 2 weight 2 } vrrp_instance VI_1 { state BACKUP interface eth0 virtual_router_id 51 priority 99 advert_int 1 authentication { auth_type PASS auth_pass 1111
} track_script { chk_nginx } virtual_ipaddress { 192.168.100.62 dev eth0 label eth0:1 } } vrrp_instance VI_2 { state MASTER interface eth0 virtual_router_id 52 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1111
} virtual_ipaddress { 192.168.100.63 dev eth0 label eth0:2 } } WEB2服务器keepalived.conf配置 [iyunv@test61 root]# cat /etc/keepalived/keepalived.conf ! Configuration File for keepalived global_defs { notification_email { notification_email_from test@test.com
smtp_server 192.168.100.252 smtp_connect_timeout 30 router_id NGINX_2 } vrrp_script chk_nginx { script "/tmp/check_http.sh" interval 2 weight 2 } vrrp_instance VI_1 { state MASTER interface eth0 virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1111
} virtual_ipaddress { 192.168.100.62 dev eth0 label eth0:1 } } vrrp_instance VI_2 { state BACKUP interface eth0 virtual_router_id 52 priority 99 advert_int 1 authentication { auth_type PASS auth_pass 1111 } track_script { chk_nginx } virtual_ipaddress { 192.168.100.63 dev eth0 label eth0:2 } } Nginx状态检查(两台机器相同) vim /tmp/check_http.sh #!/bin/bash url="http://192.168.100.60/" # WEB2机器填192.168.100.61 status=$(/usr/bin/curl -s --head "$url" | awk '/HTTP/ {print $2}') if [ "$status" != "200" ]; then /etc/init.d/keepalived stop fi WEB1服务器增加如下: echo “192.168.100.62” >> /var/www/html/index.html WEB2服务器增加如下: echo “192.168.100.63” >> /var/www/html/index.html 测试 停止WEB1服务器的nginx,查看VIP1是否切换到WEB2服务器
[iyunv@test60 root]# /etc/init.d/nginx stop
启动WEB1服务器的nginx与keepalived,查看VIP1是否能切换回来到WEB1服务器
[iyunv@test60 root]# /etc/init.d/nginx start
[iyunv@test60 root]# /etc/init.d/keepalived start
停止WEB2服务器的nginx,查看VIP2是否切换到WEB1服务器
[iyunv@test61 root]# /etc/init.d/nginx stop
启动WEB2服务器的nginx与keepalived,查看VIP2是否能切换回来到WEB2服务器
[iyunv@test61 root]# /etc/init.d/nginx start
[iyunv@test61 root]# /etc/init.d/keepalived start
以上本人测试全部通过
负载均衡 关于如何实现负载均衡,相必大家都看到有两个VIP,实现很简单只需要配置DNS轮询就可以实现负载均衡功能。
|