高可用实例

 

1.关于高可用
配置负载均衡时,请求通过nginx分发到多个tomcat;
如果其中一个tomcat宕机,将不会被分发请求;
这样保证了稳定性;
但是,nginx也有宕机的可能,会导致请求无法到达tomcat;
配置高可用集群就是为了解决这一问题,也就是nginx宕机了还能正常完成请求;
 
简单的高可用:
    两台nginx,nginx1作为主服务器,nginx2作为从服务器;
    当请求时,首先到达主服务器,然后主服务器分发到多个tomcat中;
    当主服务器宕机时,会自动切换到从服务器;从服务器也可以把请求转发到多个tomcat中;
    这样就达到了高可用效果;
 
高可用需求:多个nginx、keepalived、虚拟ip;
 
关于keepalived:
    作用是通过脚本来检测当前的nginx是否宕机;如果还活着就继续访问,否则切换到另备份nginx服务器;
    
关于虚拟ip:
    高可用的多个nginx服务器ip不同,因此需要对外提供一个虚拟ip;
    通过虚拟ip来绑定服务器的ip来进行访问;
    虚拟ip首先与主服务器绑定,当主服务器挂掉时,会被keepalived检测到,keepalived会将虚拟ip绑定到备份服务器;
    nginx接收真实请求时相对更容易挂掉,而keepalive没那么容易挂掉;
 
总之高可用就是我的服务器挂掉,我的系统依然可以完成请求过程; 
 
2.配置高可用的准备工作
1)准备两个服务器(比如两个虚拟机 ps:因为电脑太差带不动两个虚拟机就不演示了)
 
2)在两个服务器中都装上nginx
 
3)在两台服务器中安装keepalived
yum安装命令:
yum install keepalived –y
 
4)主从配置
安装完成后,在/etc/keepalived目录下可以找到 keepalived.conf
 
1】配置keepalived.conf
global_defs {
    notification_email {
        acassen@firewall.loc
        failover@firewall.loc
        sysadmin@firewall.loc
    }
    notification_email_from Alexandre.Cassen@firewall.loc
    smtp_server 192.168.17.129
    smtp_connect_timeout 30
    router_id LVS_DEVEL
}
vrrp_script chk_http_port {
    script "/usr/local/src/nginx_check.sh"
    interval 2 #(检测脚本执行的间隔)
    weight 2
}
vrrp_instance VI_1 {
    state BACKUP # 备份服务器上将 MASTER 改为 BACKUP
    interface ens33 //网卡
    virtual_router_id 51 # 主、备机的 virtual_router_id 必须相同
    priority 90 # 主、备机取不同的优先级,主机值较大,备份机值较小
    advert_int 1
    authentication {    #权限校验的方式,这里用的是密码,密码为1111
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.17.50 // VRRP H 虚拟地址
    }
}
 
global_def    ->全局定义;主要的是router_id;
    router_id的值为服务器的名字;
    服务器的名字可在etc/host文件中查看;
    
vrrp_script chk_http_port    ->检测脚本及其权重参数;
    script的值为脚本路径;
    interval位脚本检测间隔,如果值为2表示每隔2秒检测一次;
    weight表示权重设置的值;例如:如果weigth的值为-10,当服务器挂掉脚本条件成立时,将服务器的权重降低10;
vrrp_instance VI_1    ->虚拟ip的配置;
    state为状态,如果是主服务器为MASTER,如果是从服务器用BACKUP;
    interface网卡,在哪个网卡上绑定虚拟ip;网卡的名字可用ifconfig命令查看;
    
    advert_int 1,表示每隔1秒发送一个心跳,检测服务器是否还活着;
 
2】在/usr/local/src添加检测脚本nginx_check.sh
#!/bin/bash
A=`ps -C nginx –no-header |wc -l`
if [ $A -eq 0 ];then
    /usr/local/nginx/sbin/nginx
    sleep 2
    if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
        killall keepalived
    fi
fi
在keepalived.conf中的vrrp_script中引用了该脚本;
大概意思是:启动nginx,如果nginx挂掉,关闭keepalived所有进程;
 
3】启动两台服务器上的nginx和keepalived
nginx启动:
./nginx
 
keepalived启动:
systemctl start keeplived.service
 
5)测试效果
从远程浏览器中输入虚拟ip的地址:
 
关掉主服务器上的nginx和keepalived,再次访问虚拟ip,依然可以看到页面
 
 
 
 
 
 
  

 

posted @ 2019-11-08 10:35  L丶银甲闪闪  阅读(407)  评论(0编辑  收藏  举报