vip       

vip

image-20200111134715261

公有ip地址有个组织统一分配,你需要去买,私有ip地址可以自己分配

设置本地私有ip

$ sudo ifconfig eth1 10.0.0.1/24
$ sudo ifconfig eth1 up

虚拟IP即VIP,这只是一个概念而已,可能会误导你,实际上就是heartbeat临时绑定在物理网卡上的别名(heartbeat3以上也采用了辅助IP),如eth0:x ,x为0-255的任意数字,你可以在一块网卡上绑定多个别名。这个VIP可以看作是你上网的QQ网名、昵称、外号等。 在实际生产环境中,需要在DNS配置中把网站域名地址解析到这个VIP地址,由这个VIP对用户提供服务。如:把www.zhangcong.top解析到VIP 1.1.1.1 上。

别名ip

由Linux系统的 ifconfig 命令来创建和维护

辅助ip

由Linux系统的ip命令创建和维护

heartbeat3 版本起,不再使用别名,而是使用辅助IP提供服务,而 keepalived 软件一直都是使用的辅助IP技术

手动设置vip

1,ifconfig查看当前活动网卡。如:eth0

2,执行

ifconfig eth0:0 166.111.69.100 netmask 255.255.255.0 up

进行vip添加

3,执行ifconfig查看是否生效

4,测试 ping 166.111.69.100

5,写在/etc/rc.local里进行开机自动设置

使用keepalived增加vip

设置/etc/keepalived/keepalived.conf

global_defs {
     notification_email {
     saltstack@163.com
   }
   notification_email_from dba@dbserver.com
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id MySQL-HA
}

vrrp_instance VI_1 {
    state BACKUP
    interface eth1
    virtual_router_id 51
    priority 150
    advert_int 1
    nopreempt

    authentication {
    auth_type PASS
    auth_pass 1111
    }

    virtual_ipaddress {
        192.168.0.88
    }
}

采用的是ip addr add 192.168.40.20/24 dev eth0 增加vip

HA

lvs和haproxy都是实现的负载均衡的作用,keepalived和heartbeat都是提高高可用性的,避免单点故障

实现HA的方式,一般采用两台机器同时完成一项功能,比如数据库服务器,平常只有一台机器对外提供服务,另一台机器作为热备,当这台机器出现故障时,自动动态切换到另一台热备的机器。

怎么实现故障检测的那?

​ 心跳,采用定时发送一个数据包,如果机器多长时间没响应,就认为是发生故障,自动切换到热备的机器上去。

怎么实现自动切换那?

​ 虚IP。何为虚IP那,就是一个未分配给真实主机的IP,也就是说对外提供数据库服务器的主机除了有一个真实IP外还有一个虚IP,使用这两个IP中的 任意一个都可以连接到这台主机,所有项目中数据库链接一项配置的都是这个虚IP,当服务器发生故障无法对外提供服务时,动态将这个虚IP切换到备用主机。

Keepalived

服务器架构中,经常会遇到服务的一个总入口(比如 Nginx/MyCAT)存在单点故障的隐患。Keepalived 正是解决此类问题的高可用软件,它使用单个虚拟IP(VIP),动态检测多个入口节点的可用性并切换 VIP 指向,从而达到高可用

Keepalived是C语言开源的免费路由软件,为 Linux 提供高可用的负载均衡功能:

​ 高可用(HA, High Availability):提供健康检查功能,基于 VRRP(Virtual RouterRedundancy Protocol) 协议实现多台机器间的故障转移服务; ​ 负载均衡(LB, Load Balancing):基于 Linux 虚拟服务器(IPVS)内核模块,提供 Layer4 负载均衡。 image-20200112120644362

Keepalived软件主要是通过VRRP协议实现高可用功能的。VRRP是Virtual Router RedundancyProtocol(虚拟路由器冗余协议)的缩写,VRRP出现的目的就是为了解决静态路由单点故障问题的,它能够保证当个别节点宕机时,整个网络可以不间断地运行

Keepalived高可用服务对之间的故障切换转移,是通过 VRRP (Virtual Router Redundancy Protocol ,虚拟路由器冗余协议)来实现的。

在 Keepalived服务正常工作时,主 Master节点会不断地向备节点发送(多播的方式)心跳消息,用以告诉备Backup节点自己还活看,当主 Master节点发生故障时,就无法发送心跳消息,备节点也就因此无法继续检测到来自主 Master节点的心跳了,于是调用自身的接管程序,接管主Master节点的 IP资源及服务。而当主 Master节点恢复时,备Backup节点又会释放主节点故障时自身接管的IP资源及服务,恢复到原来的备用角色。

Keepalived 分为3个守护进程:

父进程: 很简单,负责 fork 子进程,并监视子进程健康(图中 WatchDog 周期性发送检测包,需要的话重启子进程); 子进程A: 负责VRRP框架(图中 VRRP Stack) 子进程B: 负责健康检查(图中 Checkers)

VRRP

VRRP ,全 称 Virtual Router Redundancy Protocol ,中文名为虚拟路由冗余协议 ,VRRP的出现就是为了解决静态踣甶的单点故障问题,VRRP是通过一种竞选机制来将路由的任务交给某台VRRP路由器的。

以检测web服务器为例,Keepalived从3个层次来检测服务器的状态

(1)IP层

看网络是否正常

Keepalived定期ping目标服务器,如果此IP地址没有激活,Keepalived便报告这台服务器失效,进行移除

(2)TCP层

看web服务器端口是否正常

例如一般web服务的端口为80,Keepalived定期查看80端口,如果没有启动,报告失效

(3)应用层

看应用程序是否正常

Keepalived将根据用户的设定,检查服务器程序的运行是否正常,如果与用户的设定不相符,则Keepalived将把服务器从服务器群中剔除

部署

image-20200114221351338

假设有两台 CentOS: IP[1]=192.168.126.101 和 IP[2]=192.168.126.102 两台都安装 Nginx,分别作为 Master / Backup,同时指定 VIP(虚拟IP) 为 192.168.126.100 则客户端可通过 192.168.126.100 高可用地访问两个 Nginx

安装keepalived

sudo yum -y install keepalived

Nginx 检测脚本

#!/bin/bash
## sudo vim /etc/keepalived/nginx_check.sh
## sudo chmod +x /etc/keepalived/nginx_check.sh

NGINX_COUNT=`ps -C nginx --no-header | wc -l`
if [ $NGINX_COUNT -eq 0 ]; then
    sudo systemctl stop keepalived
fi

配置 Keepalived

## sudo cp /etc/keepalived/keepalived.conf{,.bak}
## sudo vim /etc/keepalived/keepalived.conf

global_defs {
    router_id HOSTNAME ## 本节点标识,可使用主机名(centos1/centos2)
}

vrrp_script nginx_check { ## 定义检测脚本,设定名称
    script "/etc/keepalived/nginx_check.sh" ## 检测脚本的路径
    interval 1 ## 重复执行脚本的时间间隔(s)
    weight -20  ## 每失败一次,当前 VRRP 节点的优先级就下降 20
}

vrrp_instance VRRP_100 { ## VRRP_100 是 VRRP 的实例名称
    state BACKUP ## 状态: 两台节点都用 BACKUP。支持两种:MASTER(主节点,优先使用)/BACKUP(备节点,主节点失效时才自动转换为MASTER,主节点恢复后会主动让位)
    interface ens33 ## VIP绑定的网卡接口名称,使用命令 ifconfig 查看
    virtual_router_id 100 ## 虚拟路由的ID,各节点必须一样,可以取 VIP 的末段
    priority 100 ## 节点优先级(0~255),MASTER高于BACKUP
    advert_int 1 ## 发送组播时间间隔(s),两个节点必须一样
    nopreempt ## 非抢占模式

    ## 验证信息,两个节点必须一样
    authentication {
        auth_type PASS
        auth_pass 1111
    }

    ## VIP(可以多个,每行一个,不要分隔符),两个节点必须一样
    virtual_ipaddress {
        192.168.126.100
    }

    ## 定时检测 nginx 状态
    track_script {
        nginx_check ## 前面的 vrrp_script 中设定
    }
}
非抢占模式(推荐)

节点类型全部是 BACKUP, BACKUP-1 故障时,BACKUP-2 会抢占 VIP, BACKUP-1 从故障中恢复后,不会从 BACKUP-2 抢回 VIP。 优点:故障恢复时,可避免 VIP 切换造成的服务延迟。

配置要点:

vrrp_instance VRRP_100 {
    state BACKUP ## 各节点类型都是 BACKUP
    nopreempt ## 非抢占(preempt 意思是抢占)
}
抢占模式

节点类型分别 MASTER/BACKUP, MASTER 故障时,BACKUP 会抢占 VIP, MASTER 从故障中恢复后,会从 BACKUP 抢回 VIP。

配置要点:

vrrp_instance VRRP_100 {
    state MASTER|BACKUP ## 节点类型分为 MASTER/BACKUP
    ## 不要指定 nopreempt(默认为抢占)
}

reference

https://blog.csdn.net/chengxuyuanyonghu/article/details/83539966

https://www.cnblogs.com/clsn/p/8052649.html

https://blog.csdn.net/kefengwang/article/details/81430712