Nginx有很强代理功能,但是一台nginx就形成了单点,现在使用keepalived来解决这个问题,keepalived的故障转移时间很短.Nginx+keepalived双机实现nginx反向代理服务的高可用,一台nginx挂掉之后不影响应用也不影响内网访问外网。
keepalived它是一个基于VRRP协议来实现的WEB服务高可用方案,可以利用其来避免单点故障。一个WEB服务至少会有2台服务器运行Keepalived,一台为主服务器(MASTER),一台为备份服务器(BACKUP),但是对外表现为一个虚拟IP,主服务器会发送特定的消息给备份服务器,当备份服务器收不到这个消息的时候,即主服务器宕机的时候,备份服务器就会接管虚拟IP,继续提供服务,从而保证了高可用性。
nginx的安装在我之前的博客中已经写过,这里就不再赘述。
然后就是安装keepalived
命令:wget http://www.keepalived.org/software/keepalived-1.1.20.tar.gz
根据需要选择适合自己版本的keepalived下载。
解压:tar -zxvf /root/keepalived-1.2.19.tar.gz(根据自己的下载路径填写)
进入解压后的文件中cd /root/keepalived-1.2.19。如图有一个configure的可执行文件
在/usr/local文件下新建keepalived文件夹
mkdir /usr/local/keepalived
接着运行./configure --prefix=/usr/local/keepalived
这里用nginx来负载均衡不用lvs来负载所以不用管这一行。
make&&make install 来安装完后/usr/local/keepalived下生成四个文件夹代表安装成功。
这是/usr/local/keepalived文件夹的目录结构
安装完以后执行以下命令以方便以后管理
mkdir /etc/keepalived
cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig
cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/
cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
启动keepalived:service keepalived start
keepalived 双主配置
主:真实ip192.168.110.134 vip192.168.110.80
备:真实ip192.168.110.135 vip192.168.110.90
主:
vrrp_instance VI_1 {
state MASTER // 定义为主服务器
interface eth0 //vip绑定的网卡
virtual_router_id 51 //虚拟路由的id,主从必须一致
priority 100 //优先级,随机值但是主服务器的一定比从服务器的大
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.110.80 //绑定的虚拟ip
}
}
vrrp_instance VI_2 {
state BACKUP //定义为从服务器
interface eth0 //vip绑定的网卡
virtual_router_id 52 //虚拟路由的id,主从必须一致
priority 90 //优先级,随机值但是主服务器的一定比从服务器的大
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress{
192.168.110.90 //绑定vip
}
}
配置玩重启keepalived:service keepalived restart
ip addr 查看
备:
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.110.80
}
}
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.110.90
}
}
测试:主服务器正常工作时,为了方便区别验证
主服务器关机或者服务进程死掉立马切换备服务器,切换时间人感觉不出来。
负载均衡:
nginx 的 upstream默认是以轮询的方式实现负载均衡,这种方式中,每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。另外一种方式是ip_hash:每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
每个主服务器如下配置
vi /etc/nginx/nginx.conf
upstream test {
server 127.0.0.1 down; //本地服务器不参与负载
server 192.168.110.136:80 weight=5; //后台服务器
server 192.168.110.137:80 weight=5;//后台服务器
#ip_hash;
}
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://test;
root /usr/share/nginx/html;
index index.html index.htm;
}
配置非常详细文章:https://yq.aliyun.com/articles/47355