keepalived与mysql的简易配置

本文详细介绍了keepalived的原理及其在Linux环境下与MySQL的配合部署,包括软件安装、日志配置、配置文件编写以及VIP漂移测试,确保在节点故障时能自动切换,提供高可用性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、keepalived简介

keepalived是Linux下一个轻量级的高可用解决方案,keepalived主要通过虚拟路由冗余(VRRP)来实现高可用功能,防止因为单点故障导致整个系统架构的不可用的发生。可以实现诸如“服务器状态检测”、“故障隔离”、“高可用集群”的功能。

keepalived最主要的目的是能够自己调用ipvsadm命令来生成规则,并且能够自动实现将用户需求的访问地址转移到其他节点上。

        keepalived在一个节点上提供VIP向外提供服务,将用户的请求转发到后端的real servel上去。

        keepalived自身启动一个服务,它能够工作在两个节点上也可以是多个节点,其中当前持有资源的节点称为活动节点Master,另一个称为备用节点backup;对于Master和backup来讲,Master这个节点会不停的向backup这个节点通告心跳,但他的通告是基于VRRP这种机制来实现的,Master这个节点会一直处于存活状态的,备用节点backup一旦接收不到主节点的心跳传递过来的VRRP信息之后,他就会把资源抢过来在本地使用并在本地生效规则;这个规则的生效是:本地有个服务,它只需要把本地的keepalived的那个生效服务中的某个模块把他生效起来就可以了,所以keepalived自身是模块化设计的,它有着诸多模块;有些模块是监控生效ipvs的,去监控配置文件中跟ipvs相关的一些应用;他的主要目的是为ipvs提供高可用性,keepalived除了能实现资源转移之外,还能自身调用ipvs命令来生成规则;而且还能够实现后端realserver的健康状态检测。

        keepalived是轻量级,适用于节点少的场景;支持多个节点,但是对于同一组服务来讲,仍然跟此前的法则一样,只能有一个节点是活动的,因为VIP只能在一个节点上运行,所以他是一主多从的模式;可以有一个主Master多个backup;但是backup越大浪费越大,资源占用越大。

需要注意的是:virtual_server_group、virtual_server是用来配置LVS。LVS配置是专门为keepalived+LVS集成准备的。这里LVS配置并不是指真的安装LVS然后用ipvsadm来配置他,而是keepalived的配置文件来代替ipvsadm来配置LVS,这样会方便很多,一个配置文件搞定这些,维护方便,配置方便。

二、keepalived的部署

2.1、软件安装

1、系统内核参数修改

vi /etc/sysctl.conf

net.ipv4.ip_forward = 1   --把0改为1。功能:设置或重新设置联网功能,如IP转发、IP碎片去除以及源路由检查等。

使配置生效:sysctl -p

2、下载keepalived安装软件包

wgethttp://www.keepalived.org/software/keepalived-1.2.12.tar.gz

tar xzf keepalived-1.2.12.tar.gz

cd keepalived-1.2.12

yum install -y gcc openssl-devel popt-devel

yum -y install libnl*

./configure

make && make install

3、把keepalived对应文件拷贝到相应目录,并把执行文件加入到服务启动

cp /usr/local/etc/rc.d/init.d/keepalived/etc/init.d/

cp /usr/local/etc/sysconfig/keepalived/etc/sysconfig/

chmod +x /etc/init.d/keepalived

chkconfig --add keepalived

chkconfig keepalived on

mkdir /etc/keepalived

ln -s /usr/local/sbin/keepalived /usr/sbin/

4、测试keepalived启动

service keepalived start

service keepalived status

ps -ef | grep keep

5、下载ipvsadm

yum install -y ipvsadm

2.2、日志文件配置

4、配置日志文件:

vi /etc/sysconfig/keepalived

KEEPALIVED_OPTIONS="-D -d -S 0"

vi /etc/rsyslog.conf

local0.* /var/log/keepalived.log

--重启系统日志服务

/etc/init.d/rsyslog restart

--重启keepalived服务

service keepalived restart

--查看keepalived日志

more /var/log/keepalived.log

2.3、keepalived配置

5、编写mysql.sh脚本

对于为什么需要使用这个脚本的解释:

           因为keepalived本身(在此种配置方法里)监控不到除自己之外的其他服务(mysql)的运行情况,所以在自己的keepalived服务不停止的情况下,另一个节点一直认为对方仍在存活,导致vip不会被切换,而不能通过另外一台keepalived服务器访问绑定在他上的mysql(此种配置是一个keepalived对应一个mysql,只能访问绑定到自己的mysql,没有做负载均衡)。所以在这里把自己的服务停下再启动,以把VIP飘过去。当然还可使用另外的方法配置,比如:vrrp_script(可参考“六、其他场景”的小节2)。

另外,需要说明的是,如果配置为MASTER、BACKUP,那么VIP的漂移是通过权重判断的

vi /usr/local/script/mysql.sh

[root@hadoops2 script]#vi /usr/local/script/mysql.sh

#!/bin/bash

/etc/init.d/keepalived restart        #注:在数据库为另外单独的真实机时,不能分开停启,否则停了启不来。

 

并赋予可执行权限:

chmod u+x /usr/local/script/mysql.sh

 

6、在当前主203上配置keepalived.conf

vi /etc/keepalived/keepalived.conf

[root@hadoops3 keepalived-1.2.12]#vi /etc/keepalived/keepalived.conf

 

#! Configuration File for keepalived

global_defs {

 router_id hadoops3 #修改为自己的主机名

}

 

vrrp_instance VI_1 {

 state BACKUP #都修改成BACKUP

 interface eth0

 virtual_router_id 60 #默认51 主从都修改为60

 priority 100 #初始优先级(1-254之间),另一台改为80,备用节点必须比主节点优先级低。

 advert_int 1 #通告几个

 nopreempt #不抢占资源,意思就是它活了之后也不会再把主抢回来

 authentication { #认证机制

 #设置验证信息,两个节点必须一致

 auth_type PASS

 auth_pass 1111

 }

 

virtual_ipaddress {

 192.168.171.200

 }

}

 

virtual_server 192.168.171.200 3306 {

 delay_loop 6 #每隔6秒检测Realserver健康状况

 lb_algo wrr #LVS算法,其他算法请参考ipvsadm十大算法

 lb_kind DR #LVS模式,DR模式即直接路由,其他还有TUN和NAT两种模式。

 nat_mask 255.255.255.0

 persistence_timeout 50 #会话保持时间

 protocol TCP

 

 real_server 192.168.171.203 3306 { #真实ip转发端口,请注意80和后面{之间有个空格

  weight 1 # 权重

  notify_down /usr/local/script/mysql.sh #检测到服务down后执行的脚本

 

  TCP_CHECK {

   connect_timeout 10 #连接超时时间

   nb_get_retry 3 #重连次数

   connect_port 3306 #健康检查端口

  }

 }

}

 

7、在当前从202上配置keepalived.conf

改优先级、state改为BACKUP,优先级priority改为比MASTER小

[root@hadoops2 script]#vi /etc/keepalived/keepalived.conf

 

#! Configuration File for keepalived

global_defs {

 router_id hadoops2 #修改为自己的主机名

}

 

vrrp_instance VI_1 {

 state BACKUP #都修改成BACKUP

 interface eth0

 virtual_router_id 60 #默认51 主从都修改为60

 priority 80 #在hadoops3上LVS上修改成100

 advert_int 1

 nopreempt #不抢占资源,意思就是它活了之后也不会再把主抢回来

 authentication {

 #设置验证信息,两个节点必须一致

 auth_type PASS

 auth_pass 1111

 }

 

virtual_ipaddress {

 192.168.171.200

 }

}

 

virtual_server 192.168.171.200 3306 {

 delay_loop 6

 lb_algo wrr #LVS算法

 lb_kind DR #LVS模式

 nat_mask 255.255.255.0

 persistence_timeout 50 #会话保持时间

 protocol TCP

 

 real_server 192.168.171.202 3306 {#真实ip转发端口

  weight 1

  notify_down /usr/local/script/mysql.sh #检测到服务down后执行的脚本

 

  TCP_CHECK {

   connect_timeout 10 #连接超时时间

   nb_get_retry 3 #重连次数

   connect_port 3306 #健康检查端口

  }

 }

}

 

2.4、配置发送邮件功能(可选)

1、下载环境依赖

yum-y install perl-CPAN

cpanNet::SMTP_auth

2、编写如下脚本:标黄处对应修改下

#!/usr/bin/perl -w

use Net::SMTP_auth;

use strict;

my $mailhost = 'smtp.163.com';

my $mailfrom = 'shanshan20060801@163.com';

my @mailto  = ('619901002@qq.com');

my $subject  = 'keepalived up on 202;

my $text = "邮件\nlinux发来的。"; 

my $user  = 'shanshan20060801@163.com';

my $passwd = 'xxxxxxxx';

&SendMail();

##############################

# Send notice mail

##############################

sub SendMail() {

    my $smtp = Net::SMTP_auth->new( $mailhost, Timeout => 120, Debug => 1 )

      or die "Error.\n";

    $smtp->auth( 'LOGIN', $user, $passwd );

    foreach my $mailto (@mailto) {

        $smtp->mail($mailfrom);

        $smtp->to($mailto);

        $smtp->data();

        $smtp->datasend("To: $mailto\n");

        $smtp->datasend("From:$mailfrom\n");

        $smtp->datasend("Subject: $subject\n");

        $smtp->datasend("\n");

        $smtp->datasend("$text\n\n");

        $smtp->dataend();

    }

    $smtp->quit;

}

执行测试,发现邮件发送成功。

[root@hadoops3script]#/etc/keepalived/sendmail.pl


在如下位置添加:notify_master /etc/keepalived/sendmail.pl


在主从vip切换的时候即会发送邮件。

 

2.5、测试

8、先重启主hadoops3,在重启hadoops2,可以看到现在vip在hadoops3上


 

然后停止主hadoops3上的mysql服务,发现vip又飘到了hadoops2上。

期间,在hadoops3上绑定的mysql服务未启动时,hadoops3的日志会显示反复重启keepalived服务,直至绑定在其上的mysql正常启动后。

如下:

tail -f/var/log/messages

 

到此,部署完毕!


说明:本实验仅是验证keepalive在mysql间的VIP的漂移。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值