keepalived是集群管理中保证集群高可用的一个服务软件,其功能类似于heartbeat,用来防止单点故障。

一、下载keepalived

http://www.keepalived.org/

如:keepalived-1.3.4.tar.gz

二、安装keepalived

> tar xf keepalived-1.3.4.tar.gz
> cd keepalived-1.3.4
> ./configure --prefix=/data/keepalived
> make && make install

复制/sbin/keepalived到/usr/sbin下

> cp /data/keepalived/sbin/keepalived /usr/sbin/

keepalived默认会读取/etc/keepalived/keepalived.conf配置文件

> mkdir /etc/keepalived
> cp /data/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf

复制sysconfig文件到/etc/sysconfig下

> cp /data/keepalived/etc/sysconfig/keepalived /etc/sysconfig/

复制启动脚本到/etc/init.d下

> cd /data/keepalived-1.3.4
> cp ./keepalived/etc/init.d/keepalived /etc/init.d/
> chmod 755 /etc/init.d/keepalived

  

三、实验环境说明

两台虚拟机,IP分别为192.168.1.222和192.168.1.233,虚拟机与真实主机是桥接模式上网并互通。

分别装上了nginx和haproxy,nginx创建了两个虚拟主机,端口号为8080和8082,配置如下:

server {
listen 8080;
server_name localhost; location / {
root /data/www/site1;
index index.html index.htm;
}
}
server {
listen 8082;
server_name localhost; location / {
root /data/www/site2;
index index.html index.htm;
}
}

haproxy绑定80端口,反向代理这四台主机,配置如下:

global
log 127.0.0.1 local3 info
chroot /data/haproxy
user haproxy
group haproxy
daemon
stats socket /data/haproxy/haproxy.sock mode 600 level admin
stats timeout 2m defaults
log global
mode http
option httplog
option dontlognull
timeout connect 5000
timeout client 50000
timeout server 50000 frontend http_front
bind *:80
stats uri /haproxy?stats
#默认使用的后端
default_backend http_back backend http_back
balance roundrobin
option httpchk GET /index.html
option forwardfor header X-Forwarded-For
server node1 192.168.1.222:8080 check inter 2000 rise 3 fall 3 weight 30
server node2 192.168.1.222:8082 check inter 2000 rise 3 fall 3 weight 30
server node3 192.168.1.233:8080 check inter 2000 rise 3 fall 3 weight 30
server node4 192.168.1.233:8082 check inter 2000 rise 3 fall 3 weight 30

  

三、keepalived的配置

两台虚拟主机上分别装上keepalived
keepalived的配置文件/etc/keepalived/keepalived.conf

#全局配置
global_defs {
#接收通知的email
notification_email {
lackone@126.com
}
#发送通知的email
notification_email_from haproxy_01@126.com
#smtp服务器地址
smtp_server 127.0.0.1
smtp_connect_timeout 30
#运行的标识
router_id haproxy_01
}
#vrrp的实例配置
#haproxy_01名称可自定义
vrrp_instance haproxy_01 {
#主节点
state MASTER
#实例绑定的网卡
#注意centos7下第一块网卡不是eth0,请自行查看,不然keepalived无法启动成功
interface eno16777736
#虚拟路由ID,唯一
virtual_router_id 51
#权重
priority 150
#检查的时间间隔
advert_int 2
#验证
authentication {
auth_type PASS
auth_pass haproxy_01
}
#设置虚拟IP地址
virtual_ipaddress {
192.168.1.10
192.168.1.11
}
}

另一台主机上的配置只需修改

state BACKUP
priority 100

配置好后,启动keepalived服务

> service keepalived start

查看网络接口列表

> ip addr list

tcpdump查看,这里的eno16777736是我的网卡名

> tcpdump -i eno16777736 -n 'host 224.0.0.18'
19:13:30.260858 IP 192.168.1.222 > 224.0.0.18: VRRPv2, Advertisement, vrid 51, prio 150, authtype simple, intvl 2s, length 24
19:13:32.261878 IP 192.168.1.222 > 224.0.0.18: VRRPv2, Advertisement, vrid 51, prio 150, authtype simple, intvl 2s, length 24
19:13:34.263286 IP 192.168.1.222 > 224.0.0.18: VRRPv2, Advertisement, vrid 51, prio 150, authtype simple, intvl 2s, length 24

然后我们手动把MASTER的keepalived关掉

> service keepalived stop

然后再用tcpdump查看

> tcpdump -i eno16777736 -n 'host 224.0.0.18'
19:16:05.120377 IP 192.168.1.233 > 224.0.0.18: VRRPv2, Advertisement, vrid 51, prio 100, authtype simple, intvl 2s, length 24
19:16:07.121645 IP 192.168.1.233 > 224.0.0.18: VRRPv2, Advertisement, vrid 51, prio 100, authtype simple, intvl 2s, length 24
19:16:09.122353 IP 192.168.1.233 > 224.0.0.18: VRRPv2, Advertisement, vrid 51, prio 100, authtype simple, intvl 2s, length 24

很明显看到已从222切换到了233了。

然后我们通过浏览器访问192.168.1.10或192.168.1.11可以看到后台服务切换正常,实现了222和233两台主机间服务的高可用。

centos7下keepalived1.3.4安装与使用的更多相关文章

  1. SVN CentOS7 下配置svn的安装及基础配置介绍

    CentOS7 下配置svn的安装及基础配置介绍 by:授客 QQ:1033553122 目录 一. 二. 三. 四. 五. 六. 七. 一.      实践环境 CentOS 7操作系统(CentO ...

  2. centos7下源码方式安装gitlab8.9+发送邮件+ldap

    CentOS7下源码方式安装gitlab 环境描述 操作系统: centos7 redis: >=2.8 mysql >=5.5.14 git >=2.7.4 架构设计 一台gitl ...

  3. centos7下mysql5.7的安装与配置

    centos7下MySQL5.7的安装与配置 下载 下载地址 根据系统和版本选择红框中的四个RPM包下载即可,然后放到centos7系统中的/opt目录下,等待稍后安装. 安装前的准备 1. 检查系统 ...

  4. inux centos7下源码 tar安装5.7.26详解

    inux centos7下源码 tar安装5.7.26图文详解 官网地址 https://dev.mysql.com/downloads/mysql/ 1.卸载Linux系统上自带的mysql插件(o ...

  5. CentOS7下MySQL5.7的安装-RPM方式

    Installing MySQL on Linux Using RPM Packages 下载安装包 mysql下载地址:https://dev.mysql.com/downloads/mysql/ ...

  6. CentOS7下通过rpm方式安装MySQL及插入中文问题解决 [原创]

    一 CentOS下通过rpm方式安装MySQL CentOS版本:CentOS-7 MySQL版本:MySQL-5.6.22 在网上搜了一下,Linux下安装MYSQL有三种方式: 1) 通过yum命 ...

  7. 【CentOS】在Centos7 下无图形界面安装 Oracle11g

    目标 - 在虚拟机CentOS7中无图形界面安装Oracle11G R2版本 ① 系统要求以及准备 1. 物理内存不小于1G: 查看方式: # grep MemTotal /proc/meminfo ...

  8. centos7下redis和php-redis安装

    centos7下redis安装和php-redis扩展安装 //一直yes就可以了 yum install redis //配置 whereis redis.conf vi /etc/redis.co ...

  9. centos7下oracle11g详细的安装与建表操作

    一.oracle的安装,在官网下载oracle11g R2 1.在桌面单击右键,选择“在终端中打开”,进入终端 输入命令:su 输入ROOT密码: 创建用户组oinstall:groupadd oin ...

随机推荐

  1. c#自定义类型的转换方式operator,以及implicit(隐式)和explicit (显示)声明

    https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/keywords/explicit https://docs.mic ...

  2. NETIF_F_LLTX 的属性

    在bond初始化的时候,我们可以看到如下属性: /* don't acquire bond device's netif_tx_lock when transmitting */     bond_d ...

  3. linux 协议栈tcp的rst报文中,seq的选取问题

    之前在<深入理解并行编程>的群里,有个小米的兄弟问了一个问题,服务器A发包给服务器B,Seq是1,但是在未能收到服务器B的报文回复的情况下,发送了rst,但是rst报文中,对应的seq是1 ...

  4. 关于servlet转发和重新定向

    1:重新定向, 是sendRdix(记忆关键词R),firbug中的请求是两个 2:转发 是dispt,(记忆关键词是F),firbug中的请求时一个

  5. Java学习06 (第一遍) - JSP与Servlet

    EL(Expression Language) <% User user=(User)session.getAttribute("user"); Dept dept=user ...

  6. Oracle ORA-00911: 无效字符

    SQL语句后多了个分号 “ ; ”.

  7. 实例的render方法渲染组件

    1.普通渲染组件 在app容器中插入login组件 <login></login>  一个app可以多个这种组件 <script> var login = { te ...

  8. Java的学习01

    记录每天的学习情况.加油. /** * 测试包装类 * @author 小白 * */ public class TestWrappedClass { public static void main( ...

  9. java spring bean的什么周期

    http://www.cnblogs.com/TIMHY/p/7794973.html

  10. c/c++ 中的重要函数

    1,strtod: 函数原型: #include <cstdlib> double strtod(const char *nptr, char **endptr); strtod 原型 名 ...