需求
1、我有两个服务器,一台A是正常处理数据的,还有一台B是备用机器;A如果网络异常或者崩了,B开启采集技术
2、但是其他人访问的ip地址,如果从A变成B,地址改变了,会影响业务需求的;所以需要A与B共用一个Ip地址,A服务器崩了,B还在,不影响对外的业务
方案实现
我有两台服务器,分别是11.11.1.110 和11.11.1.112
1.安装keepalived,两台机器都要安装
yum install keepalived
2、两台服务器都安装完毕以后,可以下面的操作了
修改配置文件 vi /etc/keepalived/keepalived.conf
进入以后,删除所有的行,输入命令1000dd
输入
vrrp_script chk_nginx {
script "/home/keepalived/nginx_check.sh"
interval 2
weight -20
}
vrrp_instance VI_1 {
state BACKUP
interface ens192
virtual_router_id 100
mcast_src_ip 11.11.1.112
priority 99
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
chk_nginx
}
virtual_ipaddress {
11.11.1.116
}
}
耐心解释一下:
vrrp_script chk_nginx 这里是一个执行脚本,定时2S执行一次,这里的演示我没有创建这个脚本,所以它不会执行,也就是这句不会生效了。因此你如果不需要脚本的时候,可以把这句连同track_script 这句一起去掉。留着也不会有什么影响。
state BACKUP 表示这两个服务器都是备用服务器。
interface ens192 表示当前使用的网卡,通过ifconfig可以查看到,这我用的是ens192。
virtual_router_id 100 这个是个分组标记,在一个网内,所有的virtual_router_id为100的服务器自动分到一个组里面,由于这里面我把两台服务器的status都设置成为了BACKUP,那么这两台服务器就会利用priority这个值来决定谁是主服务器,谁是备用服务器,高的那个会抢占当前的vip,也就是它就会变成主服务器。
mcast_src_ip 填写你当前机器的真实ip即可
advert_int 1 没有仔细研究,应该是两台服务器之间的心跳间隔
authentication 就用默认的就可以了。
track_script 和vrrp_script chk_nginx 配合使用的。
virtual_ipaddress 两台机器共有的vip,注意,要和两台服务器在一个网关里面。
根据自己的情况,修改 ,然后保存退出:wq
另一台服务器的设置如下
vrrp_script chk_nginx {
script "/home/keepalived/nginx_check.sh"
interval 2
weight -20
}
vrrp_instance VI_1 {
state BACKUP
interface ens192
virtual_router_id 100
mcast_src_ip 11.11.1.110
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
chk_nginx
}
virtual_ipaddress {
11.11.1.116
}
}
A与B虚拟的ip地址是11.11.1.116
priority 100比priority 99的级别要高,所以100是主机,99是从机;
两台机器都重启keepalived
systemctl restart keepalived
并且设置开机自重启
systemctl enable keepalived.service
测试配置是否成功!
1、我的两台服务器上都有http服务器,因此只需要用postman请求这个接口;
打印请求参数,两台机器都完好的情况下,priority 100的肯定是主机,
会出现打印的信息,priority 99的是从机,不会启用;
2、关闭priority 100的机器;这个时候同样的操作,用postman请求这个接口;
若priority 99的出现打印的请求参数,说明成功!!!若不出现,说明不成功!!
因为此时priority 100的机器已经关机了,priority 99就是唯一的主机了!!!