keepalived简单案例

----------------------------------

一、前言

二、环境

三、Keepalived体系架构

四、安装Keepalived

五、案例配置

----------------------------------

一、前言

keepalived是一个类似于layer3,4&5交换机制的软件,也就是我们平时说的第3层、第4层和第5层交换。Keepalived的作用是检测web服务器的状态,如果有一台web服务器死机,或工作出现故障,Keepalived将检测到,并将有故障的web服务器从系统中剔除,当web服务器工作正常后Keepalived自动将web服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的web服务器。

二、环境

系统:CentOS6.4 32位

软件包:keepalived-1.2.1.tar.gz

Keepalived官网:http://www.keepalived.org/

三、Keepalived体系架构

1)WatchDog 负责监控checkers和VRRP进程的状况。

2)Checkers 负责真实服务器的健康检查healthchecking,是keepalived最主要的功能。换句话说—可以没有VRRP Stack,但健康检查healthchecking是一定要有的。

3)VRRP Stack负责负载均衡器之间失败切换FailOver。如果只用一个负载均衡器,则VRRP不是必须的。

4) IPVS wrapper 用来发送设定的规则到内核ipvs代码。

5) Netlink Reflector 用来设定 vrrp 的vip地址等。

四、安装Keepalived

# yum groupinstall "Additional Development"         //安装开发工具
# yum groupinstall "Development tools"
# tar -zxvf keepalived-1.2.1.tar.gz -C /usr/local/src/
# cd /usr/local/src/keepalived-1.2.1
# ./cnfigure
Keepalived configuration
------------------------
Keepalived version       : 1.2.1
Compiler                 : gcc
Compiler flags           : -g -O2
Extra Lib                : -lpopt -lssl -lcrypto 
Use IPVS Framework       : No    //配置出现错误
IPVS sync daemon support : No
Use VRRP Framework       : Yes
Use Debug flags          : No
解决方法:
# yum install kernel-devel ipvsadm
# ln -s /usr/src/kernels/2.6.32-358.el6.i686/ /usr/src/linux

# ./cnfigure                    //再次配置环境
# make                          //编译
# make install                  //安装

# cd /usr/local/etc             //keepalived默认安装路径
# ll
drwxr-xr-x. 3 root root 4096 May 24 00:37 keepalived
drwxr-xr-x. 3 root root 4096 May 24 00:29 rc.d
drwxr-xr-x. 2 root root 4096 May 24 00:29 sysconfig
 

配置以系统方式service启动
# cp /usr/local/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/ 
# cp /usr/local/etc/sysconfig/keepalived  /etc/sysconfig/
# mkdir /etc/keepalived
# cp /usr/local/etc/keepalived/keepalived.conf /etc/keepalived/
# cp /usr/local/sbin/keepalived /usr/sbin/

# service keepalived start
Starting keepalived:                                       [  OK  ]
# ps aux |grep keepalived
root      4809  0.0  0.0   6480   764 ?        Ss   00:51   0:00 keepalived -D
root      4811  0.2  0.1   6536  1788 ?        S    00:51   0:00 keepalived -D
root      4812  0.1  0.1   6536  1192 ?        S    00:51   0:00 keepalived -D
root      4819  0.0  0.0   4356   756 pts/0    S+   00:52   0:00 grep keepalived

五、案例配置

案例简介:

两台服务器实现高可用web,每台服务器均一张网卡。

(1)前端:当任一服务器的网卡宕掉后,web服务切换到另一web服务器。

(2)后端:当任一服务器的web服务宕掉后,web服务切换到另一web服务器。

1.拓扑图:

IP规划:

MASTER:

eth0:192.168.2.20/24

BACKUP:

eth0:192.168.2.30/24

VIP:192.168.2.10/24

2.MASTER配置:

# cat /etc/keepalived/keepalived.conf  //keepalived主配置文档

#guration File for keepalived
#global define
global_defs {
        router_id Haweb_1
        }
vrrp_sync_group VGM {
        group {
        VI_HA
        }
}
vrrp_script chk_http_port {
	script "killall -0 httpd"
       #script "/tcp/127.0.0.1/80"
interval 1
}
# vvrp_instance define #
vrrp_instance VI_HA {
        state MASTER
        interface eth1
        lvs_sync_daemon_inteface eth1
        virtual_router_id 51
        priority 100
        advert_int 5
        authentication {
	        auth_type PASS
	        auth_pass 123456
        }
	track_script {
		chk_http_port
}
	virtual_ipaddress {
        	192.168.2.10/24 dev eth1
        }
}

安装web服务器:
# yum install httpd
# service httpd start
# cd /var/www/html/
# echo "This is Master web.">index.html
# service keepalived start                //启动keepalived
# tail -f /var/log/messages              //查看日志状态
May 24 23:32:25 localhost Keepalived_vrrp: VRRP_Group(VGM) Syncing instances to MASTER state

3.BACKUP配置:

# cat /etc/keepalived/keepalived.conf 
#guration File for keepalived
#global define
global_defs {
        router_id Haweb_1
        }
vrrp_sync_group VGM {
        group {
        VI_HA
        }
}
vrrp_script chk_http_port {
	script "killall -0 httpd"
#       script "/tcp/127.0.0.1/80"
interval 1
}
# vvrp_instance define #
vrrp_instance VI_HA {
        state BACKUP
        interface eth2
        lvs_sync_daemon_inteface eth2
        virtual_router_id 51
        priority 90
        advert_int 5
        authentication {
	        auth_type PASS
	        auth_pass 123456
        }
	track_script {
		chk_http_port
}
	virtual_ipaddress {
        	192.168.2.10/24 dev eth2
        }
}

安装web服务器:
# yum install httpd
# service httpd start
# cd /var/www/html/
# echo "This is Backup web.">index.html
# service keepalived start
# tail -f /var/log/messages
May 24 23:40:33 localhost Keepalived_vrrp: VRRP_Instance(VI_HA) Entering BACKUP STATE

4.测试

(1)前端master服务器的网卡宕掉

# ip addr                //master端,查看IP绑定。
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 1000
    link/ether 00:0c:29:08:52:3f brd ff:ff:ff:ff:ff:ff
    inet 192.168.2.20/24 brd 192.168.2.255 scope global eth0
    inet 192.168.2.10/24 scope global secondary eth0
    inet6 fe80::20c:29ff:fe08:523f/64 scope link 
       valid_lft forever preferred_lft forever

浏览器访问VIP  http://192.168.2.10

# ifconfig eth1 down        //模拟master端网卡宕掉(模拟后请再次打开)
# ip addr                   //backup端,查看IP绑定。
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 1000
    link/ether 00:0c:29:6c:f9:45 brd ff:ff:ff:ff:ff:ff
    inet 192.168.2.30/24 brd 192.168.2.255 scope global eth0
    inet 192.168.2.10/24 scope global secondary eth0
    inet6 fe80::20c:29ff:fe6c:f945/64 scope link 
       valid_lft forever preferred_lft forever

刷新页面:

(2)后端web服务宕掉

# ip addr                   //master端,查看IP绑定。
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 1000
    link/ether 00:0c:29:08:52:3f brd ff:ff:ff:ff:ff:ff
    inet 192.168.2.20/24 brd 192.168.2.255 scope global eth0
    inet 192.168.2.10/24 scope global secondary eth0
    inet6 fe80::20c:29ff:fe08:523f/64 scope link 
       valid_lft forever preferred_lft forever

浏览器访问VIP  http://192.168.2.10

# service httpd stop         //模拟master端web服务宕掉
Stopping httpd:                            [  OK  ]       
# ip addr                   //backup端,查看IP绑定。
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 1000
    link/ether 00:0c:29:6c:f9:45 brd ff:ff:ff:ff:ff:ff
    inet 192.168.2.30/24 brd 192.168.2.255 scope global eth0
    inet 192.168.2.10/24 scope global secondary eth0
    inet6 fe80::20c:29ff:fe6c:f945/64 scope link 
       valid_lft forever preferred_lft forever

刷新页面:

案例总结:

1) 当停止MASTER的网卡或web服务时,由BACKUP接管VIP,提供WEB服务。

2) 当停止BACKUP的网卡或web服务时,由MASTER接管VIP,提供WEB服务。

3)从上可以看出故障切换是由keepalived进程的存活而产生的IP飘移。

ps:关于Keepalived抢占问题如何优化?

两台服务器组成高可用集群,分别处于Master与Backup状态,当Master出现故障时由Backup来接管

所有任务,那么当Master恢复时,Master会抢回所有权。虽然是高可用,但是对客户来说,来回的切换是比较烦恼的事。 如何让master状态的主机挂掉后不抢占的办法:可将两服务器均设成backup状态是因为nopreempt(不抢占)只支持backup模式,而让哪一台backup成为master,这个由优先级priority为决定。

keepalived简单案例,布布扣,bubuko.com

时间: 2024-09-29 17:56:08

keepalived简单案例的相关文章

[Design Pattern] Mediator Pattern 简单案例

Meditor Pattern,即调解模式,用一个调解类类处理所有的沟通事件,使得降低多对象之间的沟通难度,属于行为类的设计模式.为了方便理解记忆,我也称其为,沟通模式. 下面是一个调解模式的简单案例. ChatRoom 提供公用发送短信的方法.User 全部通过 ChatRoom 类发送信息进行沟通.MediatorPatternDemo 演示调解模式. 代码实现 ChatRoom 提供发送信息的方法 public class ChatRoom { public static void sho

[Design Pattern] Iterator Pattern 简单案例

Iterator Pattern,即迭代时模式,按照顺序依次遍历集合内的每一个元素,而不用了解集合的底层实现,属于行为类的设计模式.为了方便理解记忆,我也会称其为遍历模式. 下面是一个迭代器模式的简单案例. Iterator 定义了迭代接口, 仅 hasNext 和 next 两个方法.Container 定义了集合的接口,必须包含一个返回迭代器类 Iterator 的方法.NameRepository 是容器的具体类,实现 Container 接口,并拥有一个内部类 NameIterator

[Design Pattern] Observer Pattern 简单案例

Observer Pattern,即观察者模式,当存在一对多关系,例如一个对象一有变动,就要自动通知被依赖的全部对象得场景,属于行为类的设计模式. 下面是一个观察者模式的简单案例. Observer 定义观察者的接口,定义需要观察的对象,已经被通知的接口.BinaryObserver, OctalObserver, HexaObserver 各自实现了 Observer 接口. Subject 是被观察的对象,记录了观察该对象的观察者列表,自身有变动,即可通知观察者列表中的各个观察者. 代码实现

[Design Pattern] Command Pattern 简单案例

Command Pattern, 即命令模式,把一个命令包裹在一个对象里面,将命令对象传递给命令的执行方,属于行为类的设计模式 下面是命令模式的一个简单案例. Stock 代表被操作的对象.Order 定义命令的接口,BuyStock, SellStock 是具体类,实现 Order 接口.Broker 是命令的执行方.CommandPatternDemo 演示命令模式. 代码实现 Order, 命令接口 public interface Order { public void execute(

[Design Pattern] Proxy Pattern 简单案例

Proxy Pattern, 即代理模式,用一个类代表另一个类的功能,用于隐藏.解耦真正提供功能的类,属于结构类的设计模式. 下面是 代理模式的一个简单案例. Image 定义接口,RealImage, ProxyImage 都实现该接口.RealImage 具有真正显示功能,ProxyImage 作为代表,暴露给客户端使用. 代码实现: public interface Image { public void display(); } RealImage 的实现,提供真正的功能 public

[Design Pattern] Facde Pattern 简单案例

Facade Pattern, 即外观模式,用于隐藏复杂的系统内部逻辑,提供简洁的接口给客户端调用,属于结构类的设计模式.我会将其名字理解为,门户模式. 下面是 Facade Pattern 的一个简单案例. Shape 定义一个接口,Circle, rectangle, Square 分别实现 Shape 接口,代表系统内部的一个功能.ShapeMaker 作为一个对外类,提供简洁的接口给外部调用. 代码实现: Shape 接口 public interface Shape { public

Keepalived 简单搭建高可用

环境: node1:192.168.11.26 node2:192.168.11.28 VIP:192.168.11.99 Centos版本6.5 Keepalived Centos6.4+就收入base仓库,可直接Yum安装,本次采用Yum安装 一.node1配置 [[email protected] keepalived]# yum isntall -y keepalived    #安装keepallived [[email protected] keepalived]# cd /etc/

[Design Pattern] Flywight Pattern 简单案例

Flywight Pattern, 即享元模式,用于减少对象的创建,降低内存的占用,属于结构类的设计模式.根据名字,我也将其会理解为 轻量模式. 下面是享元模式的一个简单案例. 享元模式,主要是重用已有的对象,通过修改部分属性重新使用,避免申请大量内存. 本模式需要主要两个点: 1. 对象的 key 应该是不可变得,本例中 color 作为 key,所以我在 color 前添加了 final 的修饰符. 2. 并非线程安全,多个线程同时获取一个对象,并同时修改其属性,会导致无法预计的结果. 代码

[源码]Condition的原理,简单案例(ArrayBlockingQueue),复杂案例(LinkedBlockingQueue).

源代码解析 Re'entrantLock lock = new ReentrantLock(fair); Condition   notEmpty = lock.newCondition(); //返回内部类 AbstractQueuedSyncronizer.ConditionObject 各自维护了两个队列.一个是阻塞同步队列 syncQueue 双向队列,一个是条件等待队列. Condition.await两个作用.1.放入同步队列 park 2.realse锁,3等待别人获取锁acqui