Haproxy+Keepalived主备模式

主备节点设置

  • 主备节点上各安装配置haproxy,配置内容且要相同
global

log         127.0.0.1 local2

    chroot      /var/lib/haproxy
pidfile /var/run/haproxy.pid
maxconn 4000
user haproxy
group haproxy
daemon defaults #defaults段默认值对frontend和backend和listen段生效
mode http #运行模式为http
log global
option httplog
option dontlognull
option http-server-close
option forwardfor except 127.0.0.0/8 #添加客户端真实ip地址
option redispatch # #如果后端有服务器宕机,强制切换到正常服务器
retries 3 #三次连接失败,则判断服务不可用
timeout http-request 10s #请求超时时间
timeout connect 10s #连接超时
timeout client 1m #客户端超时
timeout server 1m #服务端超时
timeout http-keep-alive 10s #长连接超时时间
timeout check 10s 检查超时时间
maxconn 3000 每个进程最大连接数 frontend web :80 #自定义一个web静态页面匹配前端
acl url_html path_beg -i /
acl url_html path_end -i .html use_backend website if url_html #如果符合匹配就使用website的后端主机 frontend imgs :80 #自定义一个图片匹配前端
acl url_img path_beg -i /
acl url_img path_end -i .jpg .png .jpeg .gif use_backend img if url_img #如果符合匹配就使用img后端主机 backend img #定义后端主机组 img
server img1 192.168.214.135:80 check backend website #定义后端主机组website
server html1 192.168.214.133:80 check
server html2 192.168.214.135:80 check

haproxy开启日志记录

日志定义在haproxy的配置文件中已经说明了,haproxy使用rsyslog服务记录日志,需要在rsyslog日志服务中定义:

vim /etc/rsyslog.conf

$ModLoad imudp                       #取消注释 ,使用udp传输日志
$UDPServerRun 514 #取消注释 ,使用udp传输日志
local2.* /var/log/haproxy.log #按照配置文件里提示写即可

注意:上面必须要选择使用tcp或udp方式传输日志,如果不选择光定义日志路径是不生效的

定义master节点的keepalived配置

global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.214.1
smtp_connect_timeout 30
router_id LVS_DEVEL
vrrp_skip_check_adv_addr
vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
vrrp_iptables #禁止keepalived启动生成默认的iptables规则
vrrp_mcast_group4 224.17.17.17 #定义主备节点通过组播地址进行通告状态
} vrrp_script chk_down {
script "/bin/bash -c '[[ -f /etc/keepalived/down ]]' && exit 1 || exit 0"
interval 1
weight -10
} vrrp_script chk_haproxy { #调用外部的辅助脚本进行资源监控,并根据监控的结果状态能实现优先动态调整
script "/usr/bin/killall -0 haproxy && exit 0 || exit 1"
#script指令:先定义一个执行脚本,如果脚本执行结果状态为0则不操作后续步奏,如果状态为非0,则执行相应的操作
interval 1 #每秒检查执行一次
weight -10 #如果脚本执行结果为非0 ,则keepalived的优先级减去10
fall 2 #如果连续两次检测为错误状态则认为服务部可用
rise 1 #检测一次成功就认为服务正常
} vrrp_instance VI_1 { #配置虚拟路由实例
state MASTER #定义该节点为MASTER节点
interface ens33 #定义VIP绑定的物理网卡
virtual_router_id 55 #设置虚路由拟路由id,同一集群的节点群必须相同
priority 100 #设定优先级
advert_int 1 #设定master与backup之间vrrp通告的时间间隔,单位是秒
# nopreempt #设定keepalived的切换模式,默认是抢占failover,这里是非抢占,没有启用
authentication { #定义验证方式与密码
auth_type PASS
auth_pass 12345678 #密码最长8位
}
virtual_ipaddress { #定义虚拟路由IP,也是对外接收请求的ip
192.168.214.100
} track_script { #用于追踪脚本执行状态,定义在vrrp_instance段中
chk_down
chk_haproxy }
}

定义BACKUP节点Keepalived配置

BACKUP节点与MASTER节点定义大致相同,只有BACKUP节点的角色,优先级需要修改,其他都不需要改动

! Configuration File for keepalived

global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.214.1
smtp_connect_timeout 30
router_id LVS_DEVEL
vrrp_skip_check_adv_addr
vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
vrrp_iptables
vrrp_mcast_group4 224.17.17.17
} vrrp_script chk_down {
script "/bin/bash -c '[[ -f /etc/keepalived/down ]]' && exit 1 || exit 0"
interval 1
weight -10
} vrrp_script chk_haproxy {
script "/usr/bin/killall -0 haproxy && exit 0 || exit 1"
interval 1
weight -10
fall 2
rise 1
} vrrp_instance VI_1 {
state BACKUP
interface ens33
virtual_router_id 55
priority 95
advert_int 1
# nopreempt
authentication {
auth_type PASS
auth_pass 12345678
}
virtual_ipaddress {
192.168.214.100
} track_script {
chk_down
chk_haproxy }
}

双主模式配置

在上面配置的基础上,只要在各节点新建一个vrrp_instance VI_2 实例即可,在原来的MASTER节点定义第二个实例的为BACKUP角色,在原来的BACKUP节点再添加一个新的实例为MASTER,设置另一个虚拟路由实例的VIP为:192.168.214.200

vrrp_instance VI_2配置

最终在上面原来的MASTER节点配置如下(添加了最后一段vrrp_instance VI_2的定义)

[root@node-1 ~]# vim /etc/keepalived/keepalived.conf

! Configuration File for keepalived

global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.214.1
smtp_connect_timeout 30
router_id LVS_DEVEL
vrrp_skip_check_adv_addr
vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
vrrp_iptables
vrrp_mcast_group4 224.17.17.17
} vrrp_script chk_down { #定义vrrp_instance VI_1实例的检测文件
script "/bin/bash -c '[[ -f /etc/keepalived/down ]]' && exit 1 || exit 0"
interval 1
weight -10
} vrrp_script chk_node2 { #定义vrrp_instance VI_2实例的检测文件
script "/bin/bash -c '[[ -f /etc/keepalived/nodedown ]]' && exit 1 || exit 0"
interval 1
weight -10
} vrrp_script chk_haproxy {
script "/usr/bin/killall -0 haproxy && exit 0 || exit 1"
interval 1
weight -10
fall 2
rise 1
} #高可用组1 vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id 55
priority 100
advert_int 1
# nopreempt
authentication {
auth_type PASS
auth_pass 12345678
}
virtual_ipaddress {
192.168.214.100
} track_script {
chk_down
chk_haproxy }
} #高可用组2 vrrp_instance VI_2 {
state BACKUP
interface ens33
virtual_router_id 33
priority 95
advert_int 1
# nopreempt
authentication {
auth_type PASS
auth_pass 87654321
}
virtual_ipaddress {
192.168.214.200
} track_script {
chk_node2
chk_haproxy }
}

最终在上面原来的BACKUP节点配置如下(添加了最后一段vrrp_instance VI_2的定义)

[root@node-2 ~]# vim /etc/keepalived/keepalived.conf

! Configuration File for keepalived

global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.214.1
smtp_connect_timeout 30
router_id LVS_DEVEL
vrrp_skip_check_adv_addr
vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
vrrp_iptables
vrrp_mcast_group4 224.17.17.17
} vrrp_script chk_down {
script "/bin/bash -c '[[ -f /etc/keepalived/down ]]' && exit 1 || exit 0"
interval 1
weight -10
} vrrp_script chk_node2 {
script "/bin/bash -c '[[ -f /etc/keepalived/nodedown ]]' && exit 1 || exit 0"
interval 1
weight -10
} vrrp_script chk_haproxy {
script "/usr/bin/killall -0 haproxy && exit 0 || exit 1"
interval 1
weight -10
fall 2
rise 1
} vrrp_instance VI_1 {
state BACKUP
interface ens33
virtual_router_id 55
priority 95
advert_int 1
# nopreempt
authentication {
auth_type PASS
auth_pass 12345678
}
virtual_ipaddress {
192.168.214.100
} track_script {
chk_down
chk_haproxy }
} vrrp_instance VI_2 {
state MASTER
interface ens33
virtual_router_id 33
priority 100
advert_int 1
# nopreempt
authentication {
auth_type PASS
auth_pass 87654321
}
virtual_ipaddress {
192.168.214.200
} track_script {
chk_node2
chk_haproxy }
}

双主节点配置时要注意的地方

配置配置文件中有如下两段检测内容:

vrrp_script chk_down {
script "/bin/bash -c '[[ -f /etc/keepalived/down ]]' && exit 1 || exit 0"
interval 1
weight -10
} vrrp_script chk_node2 {
script "/bin/bash -c '[[ -f /etc/keepalived/nodedown ]]' && exit 1 || exit 0"
interval 1
weight -10
}

这两段配置的作用是通过判断指定的路径下有无指定的文件来进行调整keepalived的优先级,从而可以实现不关闭服务就可以随时调整高可用的负载节点主备状态切换,这样可以方便服务的配置修改等操作。

上面的两段配置分别是针对两个 vrrp_instance 实例的配置,让两个不同的节点分别去检测不同的文件名,如果同时去检测同一个文件,会造成混乱。

另外一个就是,在主备节点设置优先级的时候,要确保当MASTER节点降级后的优先级要比BACKUP的优先级低,否则,VIP是无法进行漂移的。

上面的配置实验都正常,包括图片与页面的分离负载,主备节点的切换,和双主模式下的各主备节点切换

haproxy+keepalived主备与双主模式配置的更多相关文章

  1. nginx+keepalived 简单实现主备和双主模式

    准备nginx和keepalived 安装nginx(自行安装) yum install nginx 安装keepalived(安装包安装总报错,yum安装能好一点) yum install keep ...

  2. keepAlived主备及双主

    nginx用默认配置即可 1.主备配置 1.主keepAlived配置 vrrp_instance VI_1 { state MASTER #主备区分 interface eth0 virtual_r ...

  3. Centos7+nginx+keepalived集群及双主架构案例

    目录简介 一.简介 二.部署nginx+keepalived 集群 三.部署nginx+keepalived双主架构 四.高可用之调用辅助脚本进行资源监控,并根据监控的结果状态实现动态调整 一.简介 ...

  4. 高可用Mysql架构_Mycat集群部署(HAProxy + 两台Mycat+Mysql双主双从)

    既然大家都知道了Mysql分布式在大型网站架构中的作用,在这里就不再阐述.本片博客文章是基于我曾经搭建过的一个Mysql集群基础上实现的,实现过双主热备.读写分离.分库分表. 博客链接:http:// ...

  5. MYSQL主从复制、主主复制、双主多从配置

    一.如何配置MYSQL的主从复制? 1. 两台数据库服务器,IP分别为 192.168.216.128 和 192.168.216.129,在服务器上装MYSQL(我的配置版本为5.5.56) 2. ...

  6. nginx+keepalived高可用及双主模式

    高可用有2中方式. 1.Nginx+keepalived 主从配置 这种方案,使用一个vip地址,前端使用2台机器,一台做主,一台做备,但同时只有一台机器工作,另一台备份机器在主机器不出现故障的时候, ...

  7. nginx+keepalived高可用及双主模式【h】

    高可用有2中方式. 1.Nginx+keepalived 主从配置 这种方案,使用一个vip地址,前端使用2台机器,一台做主,一台做备,但同时只有一台机器工作,另一台备份机器在主机器不出现故障的时候, ...

  8. mysql 主主复制(双主复制)+ 配置KEEPALIVED实现热备

    binlog-do-db和replicate-do-db表示需要同步的数据库 binlog-ignore-db和replicate-ignore-db表示不需要同步的数据库 云端服务器为master配 ...

  9. Nginx+Keepalived 主备高可用 安装与配置

    环境说明:操作系统:CentOS6.7 x86_64Nginx版本:nginx-1.9.7Keepalived版本:keepalived-1.2.24 主nginx + Keepalived :10. ...

随机推荐

  1. java常用API之字符串缓冲区

    StringBuffer类: StringBuffer是个字符串的缓冲区,是可变的字符串数组,即就是它是一个容器,容器中可以装很多字符串.并且能够对其中的字符串进行各种操作 StringBuffer的 ...

  2. scss-@for 指令

    此指令用于循环输出,具有两种循环方式,下面分别做一下介绍. (1).@for $var from <start> through <end>: 此种方式的遍历索引区间是[sta ...

  3. BZOJ5249: [2018多省省队联测]IIIDX(线段树 贪心)

    题意 题目链接 Sol 不难发现题目给出的是一个树,其中\(\frac{i}{K}\)是\(i\)的父亲节点 首先,当\(d_i\)互不相同时,一个显然的贪心策略就是优先给编号小的分配较大的权值.可以 ...

  4. Web站点如何防范XSS、CSRF、SQL注入攻击

    XSS跨站脚本攻击 XSS跨站脚本攻击指攻击者在网页中嵌入客户端脚本(例如JavaScript),当用户浏览此网页时,脚本就会在用户的浏览器上执行,从而达到攻击者的目的,比如获取用户的Cookie,导 ...

  5. canvas玩转微信红包

    CSS3相关属性: <!DOCTYPE html> <html> <head lang='en'> <meta charset='UTF-8'/> &l ...

  6. python 动态导入模块、断言

    断言: 类似与判断,后面的程序依赖前面的,可以加一个断言,断言成功继续执行.断言失败报错停止执行. a = 'abc' assert type(a) is str print('yes') asser ...

  7. C#转Java之路之三:多线程并发容器即线程安全的容器

    CopyOnWriteArrayList 和 CopyOnWriteArraySet: 是java中两个比较重要的并发容器.适用于读多于写的场景,且集合数据不太大的场合. 特别是CopyOnWrite ...

  8. ABAP的权限检查跟踪(Authorization trace)工具

    事务码 STAUTHTRACE 1. 点击"Activate Trace" button激活跟踪: 可以看到跟踪状态已经处于打开状态. 在同一个application server ...

  9. JavaMail简单应用

    版权声明:本文为博主原创文章,未经博主同意不得转载. --caicongyang https://blog.csdn.net/caicongyang/article/details/33731395 ...

  10. BZOJ1951:[SDOI2010]古代猪文(Lucas,CRT)

    Description “在那山的那边海的那边有一群小肥猪.他们活泼又聪明,他们调皮又灵敏.他们自由自在生活在那绿色的大草坪,他们善良勇敢相互都关心……” ——选自猪王国民歌 很久很久以前,在山的那边 ...