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(两台机器相同)
复制代码 代码示例:
wget http://www.keepalived.org/software/keepalived-1.2.12.tar.gz
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
wget http://nginx.org/download/nginx-1.6.0.tar.gz
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配置
复制代码 代码示例:
[root@test60 root]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
test@test.com
}
notification_email_from test@test.com
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配置
复制代码 代码示例:
[root@test61 root]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
test@test.com
}
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" |
linuxjishu/13830.html target=_blank class=infotextkey>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服务器
[root@test60 root]# /etc/init.d/nginx stop
启动WEB1服务器的nginx与keepalived,查看VIP1是否能切换回来到WEB1服务器
复制代码 代码示例:
[root@test60 root]# /etc/init.d/nginx start
[root@test60 root]# /etc/init.d/keepalived start
停止WEB2服务器的nginx,查看VIP2是否切换到WEB1服务器
[root@test61 root]# /etc/init.d/nginx stop
启动WEB2服务器的nginx与keepalived,查看VIP2是否能切换回来到WEB2服务器
复制代码 代码示例:
[root@test61 root]# /etc/init.d/nginx start
[root@test61 root]# /etc/init.d/keepalived start
以上本人测试全部通过
负载均衡
关于如何实现负载均衡,相必大家都看到有两个VIP,实现很简单只需要配置DNS轮询就可以实现负载均衡功能。