keepalived与mysql的简易配置

一、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 = "邮件n从linux发来的。";

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: $mailton");

$smtp->datasend("From:$mailfromn");

$smtp->datasend("Subject: $subjectn");

$smtp->datasend("n");

$smtp->datasend("$textnn");

$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

到此,部署完毕!



文章标题:keepalived与mysql的简易配置
文章路径:http://ybzwz.com/article/cjjjjs.html