使用linux的工具keepalived实现ip虚拟,监控端口状态,实现数据库故障切换

一、keepalived工具简介

1.Keepalived高可用软件

    Keepalived软件起初是专为LVS负载均衡软件设计的,用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入了可以实现高可用的VRRP功能。因此,keepalived除了能够管理LVS软件外,还可以作为其他服务的高可用解决方案软件。

    keepalived软件主要是通过VRRP协议实现高可用功能的。VRRP是Virtual  Router  Redundancy Protocol(虚拟路由冗余协议)的缩写,VRRP出现的目的就是为了解决静态路由的单点故障问题的,它能保证当个别节点宕机时,整个网络可以不间断地运行。所以,keepalived一方面具有配置管理LVS的功能,同时还具有对LVS下面节点进行健康检查的功能,另一方面也可以实现系统网络服务的高可用功能。

2.Keepalived高可用故障切换转移原理

    Keepalived高可用服务对之间的故障切换转移,是通过VRRP来实现的。在keepalived服务工作时,主Master节点会不断地向备节点发送(多播的方式)心跳消息,用来告诉备Backup节点自己还活着。当主节点发生故障时,就无法发送心跳的消息了,备节点也因此无法继续检测到来自主节点的心跳了。于是就会调用自身的接管程序,接管主节点的IP资源和服务。当主节点恢复时,备节点又会释放主节点故障时自身接管的IP资源和服务,恢复到原来的备用角色。

 

二、使用keepalived配合mysql实现数据库故障切换

1.keepalived安装

  准备两台linux服务器,master服务器和slave服务器

  在linux服务器上,有两种安装方式:一是使用yum命令进行安装,二是使用rpm包进行安装

  相比之下,yum命令安装较简单,会自动下载各种依赖,而rpm不会下载相关依赖,需要自己下载

在master服务器上使用yum方式:

  yum install keepalived -y

 

 

安装完成之后,会在默认路径下产生一个配置文件、etc/keepalived/keepalived.conf

启动keepalived:service keepalived start

查看keepalived的运行状态:service keepalived status

 

使用ip a命令可以查看虚拟出来的ip地址情况

 

成功启动之后,可以按照自己的需求修改keepalived.conf文件

master的配置

global_defs {
script_user root  #指定脚本的执行用户
enable_script_security 
vrrp_skip_check_adv_addr
router_id LVS_DEVEL1    #id唯一,两个服务器上配置需要不同

}
vrrp_instance VI_1 
{
state MASTER   #设置服务器的状态,分为:MASTER和BACKUP两种
interface enp2s0   #网卡名,使用ifconfig命令可以查看服务器的网卡名
virtual_router_id 51   
priority 100   #虚拟ip的权重,值越高,越能获取ip资源
advert_int 1
authentication 
{
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.84.200  #虚拟的ip
}
}
virtual_server 192.168.84.200 3306 {  #监听的ip及端口
delay_loop 2
lb_algo wrr
lb_kind DR
persistence_timeout 60
protocol TCP
real_server 192.168.84.56 3306 {  #真实ip及端口
weight 3
notify_down /etc/keepalived/mysql.sh   #监听到端口不能访问后执行该脚本
TCP_CHECK {
connect_timeout 10  #超时时间
nb_get_retry 3
delay_before_retry 3
connect_port 3306
}
}
}

详细配置见

https://www.cnblogs.com/panbc/articles/8258282.html

/etc/keepalived/mysql.sh脚本的作用是检测mysql数据库是否还正常运行,如果数据库不能正常运行,则停掉keepalived服务,虚拟ip的指向会自动变为slave服务器的ip,能够访问slave服务器的mysql

 

mysql.sh脚本的内容

#!/bin/bash
log="/etc/keepalived/sh.log"
echo "进入mysql.sh脚本" >> $log
MYSQL=/usr/local/mysql/bin/mysql
MYSQL_HOST=localhost
MYSQL_USER=username
MYSQL_PASSWORD=password
CHECK_TIME=3
#mysql is working MYSQL_OK is 0 , mysql down MYSQL_OK is 1
MYSQL_OK=1
function check_mysql_helth() {
$MYSQL -h$MYSQL_HOST -u$MYSQL_USER -p$MYSQL_PASSWORD -e"show status;" > /dev/null 2>&1
if [ $? = 0 ] ;then
MYSQL_OK=0
else
MYSQL_OK=1
fi
return $MYSQL_OK
}
while [ $CHECK_TIME -ne 0 ]
do
let "CHECK_TIME -= 1"
check_mysql_helth
echo $MYSQL_OK >> $log
if [ $MYSQL_OK = 0 ] ; 
then
CHECK_TIME=0
exit 0
fi
if [ $MYSQL_OK -eq 1 ] && [ $CHECK_TIME -eq 1 ]
then
pkill keepalived
exit 1
fi
sleep 1
done

脚本编写也是一个大坑,在windows上编写的文件,在linux上不能正常执行,需要用工具格式化,或者直接在linux上编写shell脚本,使用命令给mysql.sh脚本赋可执行权限

chmod   +x    mysql.sh

 

slave服务器也需要进行相同的安装操作,只是配置上会有所不同

slave的配置:

global_defs {
router_id LVS_DEVEL2 #id需要唯一
script_user root
enable_script_security 
}
vrrp_instance VI_1 
{
state BACKUP #状态设为BACKUP,必须为大写
interface ens33
virtual_router_id 51
priority 90
advert_int 1
authentication 
{
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.228.200
}
}
virtual_server 192.168.228.200 3306 {
delay_loop 2
lb_algo wrr
lb_kind DR
persistence_timeout 60
protocol TCP
real_server 192.168.228.130 3306 {
weight 3
notify_down /etc/keepalived/mysql.sh
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 3306
}
}
}

1.成功启动两台服务器的keepalived之后,测试master服务器上的keepalived挂掉,虚拟ip转移到slave服务器

2.重新启动master的keepalived服务,如果master上的配置参数priority 100>slave的priority 90,master服务器会抢夺资源,虚拟ip会重新指向master服务器

3.测试停掉master上的mysql服务,master上的keepalived会在脚本的作用下挂掉,虚拟ip指向slave服务器

三、keepalived的日志

  可以使用命令service keepalived status查看启动状态及小部分启动日志,看到启动的报错,keepalived的默认日志文件在/var/log/message文件中,根据日志查看问题,寻找解决方案

四、注意事项

  在使用keepalived时,服务器会通过vrrp发送消息给组内的服务器,但是要接受到其他服务器的vrrp消息,需要关闭防火墙或将vrrp加入到防火墙的设置中,否则会出现,BACKUP状态的从服务器接收不到主服务器的消息,强制将自己的状态转为MASTER,会有两个vip,出现keepalived脑裂的情况。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在OpenStack中实现keepalived虚拟IP,需要进行以下配置: 1. 安装keepalived软件包:在每个集群节点中安装keepalived软件包。 2. 配置keepalived:在每个集群节点中配置keepalived,包括虚拟IP地址、优先级、监控端口等。 3. 配置虚拟IP地址:在OpenStack中配置虚拟IP地址,使其与keepalived中配置的虚拟IP地址相同。 4. 配置集群节点IP地址:在OpenStack中配置每个集群节点的IP地址,使其与keepalived中配置的IP地址相同。 以下是一个示例配置文件: ``` vrrp_script chk_haproxy { script "/usr/bin/killall -0 haproxy" interval 2 weight 2 } vrrp_instance haproxy_vip { interface eth0 virtual_router_id 50 priority 100 advert_int 1 authentication { auth_type PASS auth_pass mypassword } virtual_ipaddress { 10.0.0.100/24 } track_script { chk_haproxy } } ``` 在上述示例中,配置了一个名为haproxy_vip的vrrp_instance,其虚拟路由器ID为50,虚拟IP地址为10.0.0.100/24,优先级为100,使用密码验证。同时,还配置了一个名为chk_haproxy的vrrp_script,用于监控Haproxy进程是否正常运行。如果haproxy进程不正常,就会引发故障转移,将虚拟IP地址切换到另一个节点上。 在OpenStack中,还需要配置每个节点的IP地址和虚拟IP地址。可以使用Neutron服务来配置这些网络设置。例如,可以使用以下命令创建一个名为my-network的网络: ``` $ openstack network create my-network ``` 然后,可以使用以下命令创建一个名为my-subnet的子网,并将其分配给my-network: ``` $ openstack subnet create --network my-network --subnet-range 10.0.0.0/24 my-subnet ``` 接下来,可以使用以下命令创建一个名为my-router的路由器,并将其连接到my-subnet: ``` $ openstack router create my-router $ openstack router add subnet my-router my-subnet ``` 最后,在每个节点上使用以下命令配置IP地址: ``` $ sudo ip addr add 10.0.0.101/24 dev eth0 ``` 在完成上述配置后,就可以使用keepalived实现虚拟IP地址的故障转移了。如果其中一个节点故障keepalived会自动将虚拟IP地址切换到另一个节点上,确保服务的高可用性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值