高可用Keepalived

安装Keepalived

安装配置例一:

Keepalived的官方站点是http://www.keepalived.org,可以在这里下载到各种版本,我们这里下载的是

keepalived-1.1.19.tar.gz,安装步骤如下:

wget http://www.keepalived.org/software/keepalived-1.1.19.tar.gz

tar xf keepalived-1.1.19.tar.gz

cd keepalived-1.1.19

uname -r

yum install popt popt-devel -y

./configure   --sysconf=/etc --with-kernel-dir=/usr/src/kernels/2.6.32-431.el6.x86_64

make && make install

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

在编译选项中,“--sysconf”指定了Keepalived配置文件的安装路径,即路径为/etc/Keepalived/Keepalived.conf,“--with-kernel-dir”这是个很重要的参数,但这个参数并不是要把Keepalived编译进内核,而是指定使用内核源码里面的头文件,就是include目录。如果要使用LVS时,才需要用到此参数,否则是不需要的.

/etc/init.d/keepalived start

配置Keepalived

Keepalived的配置非常简单,仅仅需要一个配置文件即可完成HA cluster和lvs服务节点监控功能,Keepalived的安装已经在上面章节进行了介绍,在通过Keepalived搭建高可用的LVS集群实例中,主、备Director Server都需要安装Keepalived软件,安装成功后,默认的配置文件路径为vi /etc/keepalived/keepalived.conf。一个完整的keepalived配置文件,有三个部分组成,分别是全局定义部分、vrrp实例定义部分以及虚拟服务器定义部分,下面详细介绍下这个配置文件中每个选项的详细含义和用法:

vi /etc/keepalived/keepalived.conf     参数说明

#全局定义部分

global_defs {

notification_email {

[email protected]

[email protected]    #设置报警邮件地址,可以设置多个,每行一个。注意,如果要开启邮件报警,需要开启本机的sendmail服务。

}

notification_email_from [email protected]     #设置邮件的发送地址。

smtp_server 192.168.200.1 #设置smtp server地址。

smtp_connect_timeout 30 #设置连接smtp服务器超时时间。

router_id  LVS_MASTER    #运行Keepalived服务器的一个标识。发邮件时显示在邮件标题中的信息

}

#vrrp实例定义部分

vrrp_instance VI_1 {

state MASTER  #指定Keepalived的角色,MASTER表示此主机是主用服务器,BACKUP表示是备用服务器。

interface eth0        #指定HA监测网络的接口。

virtual_router_id 51 #虚拟路由标识,这个标识是一个数字,并且同一个vrrp实例使用唯一的标识,即同一个vrrp_instance下,MASTER和BACKUP必须是一致的。

priority 100 #定义优先级,数字越大,优先级越高,在一个vrrp_instance下,MASTER的优先级必须大于BACKUP的优先级。

advert_int 1   #设定MASTER与BACKUP负载均衡器之间同步检查的时间间隔,单位是秒。

authentication {        #设定验证类型和密码。

auth_type PASS     #设置验证类型,主要有PASS和AH两种。

auth_pass 1111 #设置验证密码,在一个vrrp_instance下,MASTER与BACKUP必须使用相同的密码才能正常通信。

}

virtual_ipaddress {  #设置虚拟IP地址,可以设置多个虚拟IP地址,每行一个。

192.168.12.135

}

}

#虚拟服务器定义部分

virtual_server 192.168.12.135 80 {       #设置虚拟服务器,需要指定虚拟ip地址和服务端口,ip与端口之间用空格隔开。

delay_loop 6      #设置健康检查时间,单位是秒。

lb_algo rr  #设置负载调度算法,这里设置为rr,即轮询算法。

lb_kind DR                       #设置LVS实现负载均衡的机制,可以有NAT、TUN和DR三个模式可选。

persistence_timeout 50                  #会话保持时间,单位是秒,这个选项对于动态网页是非常有用的,为集群系统中session共享提供了一个很好的解决方案。有了这个会话保持功能,用户的请求会被一直分发到某个服务节点,直到超过这个会话保持时间。需要注意的是,这个会话保持时间,是最大无响应超时时间,也就是说用户在操作动态页面时,如果在50秒内没有执行任何操作,那么接下来的操作会被分发到另外节点,但是如果一直在操作动态页面,则不受50秒的时间限制。

protocol TCP       #指定转发协议类型,有tcp和udp两种。

real_server 192.168.12.246 80 { #配置服务节点1,需要指定real server的真实IP地址和端口,ip与端口之间用空格隔开。

weight 3 #配置服务节点的权值,权值大小用数字表示,数字越大,权值越高,设置权值的大小可以为不同性能的服务器分配不同的负载,可以对性能高的服务器设置较高的权值,而对性能较低的服务器设置相对较低的权值,这样就合理的利用和分配了系统资源。

TCP_CHECK {   #realserve的状态检测设置部分,单位是秒

connect_timeout 10     #10秒无响应超时

nb_get_retry 3  #重试次数

delay_before_retry 3    #重试间隔

}

}

real_server 192.168.12.237 80 {  #配置服务节点2

weight 1

TCP_CHECK {

connect_timeout 3

nb_get_retry 3

delay_before_retry 3

}

}

}

在配置Keepalived.conf时,需要特别注意配置文件的语法格式,因为Keepalived在启动时并不检测配置文件的正确性,即使没有配置文件,Keepalived也照样能启动起来,因而配置文件一定要正确。

在默认情况下,Keepalived在启动时会查找/etc/Keepalived/Keepalived.conf配置文件,如果你的配置文件放在了其它路径下,可以通过“Keepalived  -f”参数指定你所在的配置文件路径即可。

Keepalived.conf配置完毕后,将此文件拷贝到备用Director Server对应的路径下,然后做两个简单的修改即可:

将“state MASTER”更改为“state BACKUP”

将priority 100更改为一个较小的值,这里改为“priority 80”

最后,还要配置集群的Real server节点,以达到与Director Server相互广播通信并忽略arp的目的,脚本的内容已经在前面文章中进行过介绍,这里不做解释。

让其分别作web及Nginx的HA

global_defs {

notification_email {

[email protected]

}

notification_email_from [email protected]

smtp_server 127.0.0.1

smtp_connect_timeout 30

router_id LVS_DEVEL

}

vrrp_instance VI_1 {

state MASTER

interface eth0

virtual_router_id 51

mcast_src_ip 192.168.0.154    <==主nginx的IP地址

priority 100

advert_int 1

authentication {

auth_type PASS

auth_pass chtopnet

}

virtual_ipaddress {

192.168.0.188                      <==vip地址

}

}

我们来看一下日志:

[[email protected] ~]# tail /var/log/messages

Oct 6 03:25:03 ltos avahi-daemon[2306]: Registering new address record for 192.168.0.188 on eth0.

Oct 6 03:25:03 ltos avahi-daemon[2306]: Registering new address record for 192.168.0.154 on eth0.

Oct 6 03:25:03 ltos avahi-daemon[2306]: Registering HINFO record with values ‘I686‘/‘LINUX‘.

Oct 6 03:25:23 ltos avahi-daemon[2306]: Withdrawing address record for fe80::20c:29ff:feb9:eeab on eth0.

Oct 6 03:25:23 ltos avahi-daemon[2306]: Withdrawing address record for 192.168.0.154 on eth0.

Oct 6 03:25:23 ltos avahi-daemon[2306]: Host name conflict, retrying with <ltos-31>

很显然vrrp已经启动,我们还可以通过命令来检查

[[email protected] html]# ip addr

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue

link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

inet 127.0.0.1/8 scope host lo

inet6 ::1/128 scope host

valid_lft forever preferred_lft forever

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000

link/ether 00:0c:29:ba:9b:e7 brd ff:ff:ff:ff:ff:ff

inet 192.168.0.154/24 brd 192.168.0.255 scope global eth0

inet 192.168.0.188/32 scope global eth0

inet6 fe80::20c:29ff:feba:9be7/64 scope link

valid_lft forever preferred_lft forever

3: sit0: <NOARP> mtu 1480 qdisc noop

link/sit 0.0.0.0 brd 0.0.0.0

说明vip已经启动,这样主服务器就配置好了,辅机的配置大致一样,除了配置文件有少部分的变化,下面贴出辅机的配置文件:

global_defs {

notification_email {

[email protected]

}

notification_email_from [email protected]

smtp_server 127.0.0.1

smtp_connect_timeout 30

router_id LVS_DEVEL

}

vrrp_instance VI_1 {

state BACKUP

interface eth0

virtual_router_id 51

mcast_src_ip 192.168.0.155              <==辅nginx的IP的地址

priority 100

advert_int 1

authentication {

auth_type PASS

auth_pass chtopnet

}

virtual_ipaddress {

192.168.0.188

}

}

针对Keepalived的不足,用Nginx_pid.sh来监控nginx进程,实现真正意义上的负载均衡高可用。

针对Nginx+Keepalived,编写nginx监控脚本nginx_pid.sh,此脚本思路其实也很简单,即放置在后台一直监控nginx进程;如进程消失,尝试重启nginx,如是失败则立即停掉本机的keepalived服务,让另一台负载均衡器接手,此脚本直接从生产环境下载:

vim /root/nginx_pid.sh

#!/bin/bash

while  :

do

nginxpid=`ps -C nginx --no-header | wc -l`

if [ $nginxpid -eq 0 ];then

/usr/local/nginx/sbin/nginx

sleep 5

nginxpid=`ps -C nginx --no-header | wc -l`

if [ $nginxpid -eq 0 ];then

/etc/init.d/keepalived stop

fi

fi

sleep 5

done

我稍为解释一下,这是一个无限循环的脚本,放在主Nginx机器上(因为目前主要是由它提供服务),每隔5秒执行一次,用ps -C 命令来收集nginx的PID值到底是否为0,如果是0的话(即Nginx进程死掉了),尝试启动nginx进程;如果继续为0,即nginx启动失改,则关闭本机的Keeplaived进程,VIP地址则会由备机接管,当然了,整个网站就会由备机的Nginx来提供服务了,这样保证Nginx进程的高可用

然后置于后台运行 sh /root/nginx_pid.sh &,这种写法是错误的,这样你用root用户logout后,此进程会消失;正确写法为nohup/bin/bash /root/nginx_pid.sh &,附带下注释:如果你正在运行一个进程,而且你觉得在退出帐户时该进程还不会结束,那么可以使用nohup命令。该命令可以在你退出root帐户之后继续运行相应的进程。nohup就是不挂起的意思( no hang up),哈哈,差点老马失蹄了。

后记:

我的线上环境网络非常复杂,这也是LVS+Keepalived失败的原因。目前此套架构在1000并发的电子商务网站非常稳定,带来的直接影响就是nginx_backup一直处于闲置状态。相对于张宴的双机轮询而言,我感觉他的可能更加完美,因为目前我的Nginx仅仅只做了负载均衡器,如果以后有机会我会尝试做负载均衡器/反向代理加速。

安装配置二:

LVS/DR + keepalived配置

接上上面rs1和rs2的vim /usr/local/sbin/lvs_dr_rs.sh配置

注意:前面虽然我们已经配置过一些操作,但是下面我们使用keepaliave操作和之前的操作是有些冲突的,所以若是之前配置过DR,请首先做如下操作:dr上执行:

$ipv -C

ifconfig eth0:0  down

前面的lvs虽然已经配置成功也实现了负载均衡,但是我们测试的时候发现,当某台real server把httpd进程停掉,那么director照样会把请求转发过去,这样就造成了某些请求不正常。所以需要有一种机制用来检测real server的状态,这就是keepalived。它的作用除了可以检测rs状态外,还可以检测备用director的状态,也就是说keepalived可以实现ha集群的功能,当然了也需要一台备用director.

备用director也需要安装一下keepalived软件

yum install -y keepalived

安装好后,编辑配置文件

vim /etc/keepalived/keepalived.conf   //加入如下:

vrrp_instance VI_1 {

state MASTER   #备用服务器上为 BACKUP

interface eth0

virtual_router_id 51

priority 100  #备用服务器上为90

advert_int 1

authentication {

auth_type PASS

auth_pass 1111

}

virtual_ipaddress {

192.168.3.135         #vip的ip

}

}

virtual_server 192.168.3.135 80 {

delay_loop 6                  #(每隔10秒查询realserver状态)

lb_algo wlc                  #(lvs 算法)

lb_kind DR                  #(Direct Route)

persistence_timeout 60        #(同一IP的连接60秒内被分配到同一台realserver)

protocol TCP                #(用TCP协议检查realserver状态)

real_server 192.168.3.138 80 {

weight 100               #(权重)

TCP_CHECK {

connect_timeout 10       #(10秒无响应超时)

nb_get_retry 3

delay_before_retry 3

connect_port 80

}

}

real_server 192.168.3.168 80 {

weight 100

TCP_CHECK {

connect_timeout 10

nb_get_retry 3

delay_before_retry 3

connect_port 80

}

}

}

/etc/init.d/keepalived start

ipvsadm -ln

ifconfig

ip add

以上为主director的配置文件,从director的配置文件只需要修改

state MASTER  -> state BACKUP

priority 100 -> priority 90

配置完keepalived后,需要开启端口转发(主从都要做):

echo 1 > /proc/sys/net/ipv4/ip_forward

然后,两个rs上执行 /usr/local/sbin/lvs_dr_rs.sh 脚本

最后,两个director上启动keepalived服务(先主后从):

/etc/init.d/keepalived start

时间: 2024-08-24 12:26:56

高可用Keepalived的相关文章

mysql高可用+keepalived

生产环境中一台mysql主机存在单点故障,所以我们要确保mysql的高可用性,即俩台mysql服务器如果其中有一台mysql服务器挂掉后,另外一台就能立刻接替进行工作. MYSQL的高可用方案一般有 Keepalived+双主,MHA,PXC,MMM,Heartbeat+DRBD等 比较常用的是keepalived+双主MHA和PXC 这次主要介绍利用keepalived实现MYSQL数据库的高可用. 基本思路:俩台MYSQL互为主从关系(双主),通过keepalived配置配置虚拟IP,实现当

Linux集群实现高可用--keepalived

高可用:lvs本身不支持高可用: 在lvs集群中,可能有两种故障: 1.Director故障不可用: keepalived:原生的lvs的Director高可用解决方案: heartbeat corosync/pacemaker:通用的高可用解决方案: 2.后端RS故障不可用: lvs的Director不考虑后端RS的可用与否,只是按照调度算法进行客户端请求调度: 完整的实现:周期性的对各个RS进行健康状态检测: 检测失败:应该从lvs集群服务中将对应的RS移除: 检测成功:将对应RS重新加入l

高可用keepalived学习笔记

keepalived完全遵守VRRP协议包括竞选机制,至于VRRP是什么这里不说了参考http://wenku.baidu.com/link?url=1UbkmHuQlGECgC90P7zF6u2xYyifLK0F-G_7pehNVUitZZExISjZ-B22TJKKGyYIZXh9X7uULA8lA1nKw0NsyNGelrt_yQ317knkVyjwCqW,不同的是VRRP里的路由器在keepalive中变成服务器 vrrp的术语:虚拟路由器.VRID.Master.Backup.VIP.

mysql系列之8.mysql高可用 (keepalived)

环境: centos6.5_x64 准备: 两台mysql机器 主1 master:  192.168.32.130 主2 backup:  192.168.32.131 VIP: 192.168.32.100 步骤: 1.配置mysql的双主架构 2.安装keepalived keepalived-1.2.23.tar.gz yum -y install openssl openssl-devel wget http://www.keepalived.org/software/keepaliv

14、高可用keepalived搭建及切换

keepalived主从切换试验: 1.先搭建192.168.1.20与192.168.1.21的主主架构     192.168.1.76为VIP 2.在2机都安装keepalived  tar -zxvf keepalived-1.2.13.tar.gz   cd keepalived-1.2.13  ./configure -prefix=/usr/local/keepalived  make make install  [[email protected] keepalived-1.2.

高可用Keepalived+MySQL Replication

mysql架构为主从形式,当master故障时,会自动切换到slave上,当然也可设置为双master,但是有个弊端,比如,当某用户发表文章时,由于此时主机的压力很大,假设落后2000s,那么这台主机就挂了,另一台主机接管,vip漂移到从机上时,因为同步延长大,用户刚才发表的文章还没有复制过来,于是用户又发表了一篇文章,当原来的master修好后,由于SQL和IO线程还处于开启状态,因此还会继续同步刚才没有复制完的数据,这时有可能把用户新发表的文章更改掉,造成用户数据丢失.主从架构,故障切换后,

Ansible实现主备模式的高可用(Keepalived)

前言 Ansible是一款极其简单的IT自动化运维工具,基于Python开发,集合了众多运维工具(puppet.cfengine.chef.func.fabric)的优点,实现了批量系统配置.批量程序部署.批量运行命令等功能.Ansible是基于模块工作的,本身没有批量部署的能力,真正具有批量部署的是Ansible所运行的模块,Ansible只是提供一种框架.Ansible主要承担的工作包括:配置管理.服务即时开通.应用部署.流程编排.监控告警.日志记录等. Ansible的基本架构: 核心模块

Keepalived + LVS 高可用负载均衡集群部署

Keepalived(高可用) 通过在两台主.备调度器上实现Keepalived高可用解决调度器单点失败问题 主.备调度器上配置LVS,正常情况下主调度器工作 主调度器异常时,Keepalived启用备用调度器,保证了调度器的高可用 调度器保证了后台服务的高可用 Keepalived机制把同一个IP一直分配给同一个Web服务器 IP地址分配: Web1:        192.168.10.20      ifcfg-lo:0   192.168.10.50 Web2:        192.1

mysql主主复制及keepalived高可用群集

mysql主主复制及keepalived高可用 Keepalived+mysql双主来实现MySQL-HA,我们必须保证两台MySQL数据库的数据完全一样,基本思路是两台MySQL互为主从关系(双主),通过Keepalived配置虚拟IP,实现当其中的一台MySQL数据库宕机后,应用能够自动切换到另外一台MySQL数据库,保证系统的高可用. 实验基本拓扑: 主主同步就是两台机器互为主从的关系,在任何一台机器上写入都会同步. 在master1 mysql主配置文件中添加下面参数(/etc/my.c