常用的负载均衡
1.HTTP重定向
将http请求进行转移,在web开发中我们经常会用它来完成自动跳转,比如用户登陆成功过后跳转到相应的管理页面,这种重定向完全由Http定义,并且由Http代理和web服务器共同实现。
备注:http重定向具备了请求转移和自动跳转的本领,所以除了满足应用程序需要的自动跳转之外,它还可以用于实现负载均衡,以达到web扩展的目的。
2.DNS负载均衡 (轮询机制)
DNS 负责提供域名解析服务,当我们访问某个站点时,实际上首先需要通过该站点域名的DNS服务器来获取域名指向的IP地址,在这个过程中,DNS服务器便充当了负载均衡调度器(也称均衡器),它就像前面提到的重定向转移策略一样,将用户的请求分散到多台服务器上,但是它的实现机制完全不同
3.反向代理负载均衡
反向代理服务器的核心工作便是转发HTTP请求,因此它工作在HTTP层面,也就是TCP七层结构中的应用层(第七层),所以基于反向代理的负载均衡也称为七层负载均衡,实现它并不困难,目前几乎所有主流的web服务器都热衷于支持基于反向代理的负载均衡。
4.IP负载均衡
事实上,在数据链路层(第二层)、网络层(第三层)以及传输层(四层)都可以实现不同机制的负载均衡,但有所不同的是,这些负载均衡调度器的工作必须由linux内核来王城,因为我们希望网络数据包在从内核进入缓冲区进入进程用户地址空间之前,尽早的被转发到其他的实际服务器上,而linux中位于内核的Netfilter和IPVS可以解决问题,而用户空间的应用程序对此却束手无策。另一方面,也正是因为可以调度器工作在应用层一下,这些负载均衡系统可以支持更多的网络服务器协议
一般做法会使用DNS负载均衡(DNS轮训机制)+nginx负载均衡
开始部署负载均衡 - 首先部署Master服务器
1.下载keepalived
wget http://www.keepalived.org/software/keepalived-1.2.7.tar.gz
tar zxf keepalived-1.2.7.tar.gz
2.安装依赖包
yum -y install gcc pcre-devel zlib-devel openssl-devel
yum -y install popt-devel
3.执行keepalived中的configure文件
cd keepalived-1.2.7
./configure
make
make install
4.迁移文件
cp /usr/local/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/
cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/
mkdir /etc/keepalived
cp /usr/local/etc/keepalived/keepalived.conf /etc/keepalived/
cp /usr/local/sbin/keepalived /usr/sbin/
5.加入启动服务 使得开机自启动
echo "/usr/local/nginx/sbin/nginx" >> /etc/rc.local
echo "/etc/init.d/keepalived start" >> /etc/rc.local
6.配置Nginx
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
upstream opslinux.com {
ip_hash;
server 192.168.1.249:80
server 192.168.1.250:80
server 192.168.1.251:80
}
server {
listen 80;
location / {
proxy_pass http://opslinux.com;
}
}
7.配置keepalived.conf文件
vi /etc/keepalived/keepalived.conf
global_defs {
router_id NGINX_UPSTEAM
}
#实例
vrrp_instance VI_1 {
state MASTER #主服务
interface eth0 #网卡接口名称
virtual_router_id 51 #虚拟路由id
priority 100 #优先级
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
#虚拟 ip
virtual_ipaddress {
192.168.0.100
}
}
8.开启keepalived :
service keepalived start
9.查看虚拟IP是否绑定在服务器上
ip add
10.监控nginx状态
- 最简单的做法是监控NginX进程,更靠谱的做法是检查NginX端口,最靠谱的做法是检查多个url能否获取到页面。
如何尝试恢复服务
- 如果发现NginX不正常,重启之。等待3秒再次校验,仍然失败则不再尝试。
- 根据上述策略很容易写出监控脚本。这里使用nmap检查nginx端口来判断nginx的状态,记得要首先安装nmap。监控脚本如下:
#!/bin/bash
# check nginx server status
NGINX=/usr/local/nginx/sbin/nginx
PORT=8080
nmap localhost -p $PORT | grep "$PORT/tcp open"
#echo $?
if [ $? -ne 0 ];then
$NGINX -s stop
$NGINX
sleep 3
nmap localhost -p $PORT | grep "$PORT/tcp open"
[ $? -ne 0 ] && /etc/init.d/keepalived stop
fi
不要忘了设置脚本的执行权限,否则不起作用。
11.在keepalived.conf中新增下列代码
vrrp_script chk_http_port {
script "/opt/chk_nginx.sh"
interval 1
weight -2
}
track_script {
chk_http_port
}
12.为了避免 keepalived 在启动之前 nginx没有启动
所有我们要在 /etc/init.d/keepalived的 start中 先启动nginx
start() {
/usr/local/nginx/sbin/nginx
sleep 3
echo -n $"Starting $prog: "
daemon keepalived ${KEEPALIVED_OPTIONS}
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && touch /var/lock/subsys/$prog
}
备注:此处需要关闭ip防火墙 否则会造成nginx通信问题,导致多台主机认为自己是master,虚拟ip绑定在每个主机上
命令:service iptables stop
这样我们的master服务就部署完毕了,接着我们开始部署backup服务器【backup的部署与master的部署很相似,本来要分开成两篇的。。。】
1.下载keepalived
wget http://www.keepalived.org/software/keepalived-1.2.7.tar.gz
tar zxf keepalived-1.2.7.tar.gz
2.安装依赖包
yum -y install gcc pcre-devel zlib-devel openssl-devel
yum -y install popt-devel
3.执行keepalived中的configure文件
cd keepalived-1.2.7
./configure
make
make install
4.迁移文件
cp /usr/local/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/
cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/
mkdir /etc/keepalived
cp /usr/local/etc/keepalived/keepalived.conf /etc/keepalived/
cp /usr/local/sbin/keepalived /usr/sbin/
5.配置keepalived.conf文件
vi /etc/keepalived/keepalived.conf
global_defs {
router_id NGINX_DEVEL
}
#实例
vrrp_instance VI_1 {
state BACKUP #主服务
interface eth0 #网卡接口名称
virtual_router_id 51 #虚拟路由id
priority 99 #优先级
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
#虚拟 ip
virtual_ipaddress {
192.168.0.100
}
}
若有多台主机则需要添加MASTER服务器中的 8,9,10,11,12,的操作要在其他的backup服务器中添加