haproxy+keepalived主备与双主模式配置
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主备与双主模式配置的更多相关文章
- nginx+keepalived 简单实现主备和双主模式
准备nginx和keepalived 安装nginx(自行安装) yum install nginx 安装keepalived(安装包安装总报错,yum安装能好一点) yum install keep ...
- keepAlived主备及双主
nginx用默认配置即可 1.主备配置 1.主keepAlived配置 vrrp_instance VI_1 { state MASTER #主备区分 interface eth0 virtual_r ...
- Centos7+nginx+keepalived集群及双主架构案例
目录简介 一.简介 二.部署nginx+keepalived 集群 三.部署nginx+keepalived双主架构 四.高可用之调用辅助脚本进行资源监控,并根据监控的结果状态实现动态调整 一.简介 ...
- 高可用Mysql架构_Mycat集群部署(HAProxy + 两台Mycat+Mysql双主双从)
既然大家都知道了Mysql分布式在大型网站架构中的作用,在这里就不再阐述.本片博客文章是基于我曾经搭建过的一个Mysql集群基础上实现的,实现过双主热备.读写分离.分库分表. 博客链接:http:// ...
- MYSQL主从复制、主主复制、双主多从配置
一.如何配置MYSQL的主从复制? 1. 两台数据库服务器,IP分别为 192.168.216.128 和 192.168.216.129,在服务器上装MYSQL(我的配置版本为5.5.56) 2. ...
- nginx+keepalived高可用及双主模式
高可用有2中方式. 1.Nginx+keepalived 主从配置 这种方案,使用一个vip地址,前端使用2台机器,一台做主,一台做备,但同时只有一台机器工作,另一台备份机器在主机器不出现故障的时候, ...
- nginx+keepalived高可用及双主模式【h】
高可用有2中方式. 1.Nginx+keepalived 主从配置 这种方案,使用一个vip地址,前端使用2台机器,一台做主,一台做备,但同时只有一台机器工作,另一台备份机器在主机器不出现故障的时候, ...
- mysql 主主复制(双主复制)+ 配置KEEPALIVED实现热备
binlog-do-db和replicate-do-db表示需要同步的数据库 binlog-ignore-db和replicate-ignore-db表示不需要同步的数据库 云端服务器为master配 ...
- Nginx+Keepalived 主备高可用 安装与配置
环境说明:操作系统:CentOS6.7 x86_64Nginx版本:nginx-1.9.7Keepalived版本:keepalived-1.2.24 主nginx + Keepalived :10. ...
随机推荐
- springmvc 全局的异常拦截处理 @ControllerAdvice注解 @ExceptionHandler
第一步: Dispatcher前端控制器的源码中 默认的 private boolean throwExceptionIfNoHandlerFound = false;说明如果没有找到匹配的执行器,不 ...
- Python爬虫之三种数据解析方式
一.引入 二.回顾requests实现数据爬取的流程 指定url 基于requests模块发起请求 获取响应对象中的数据 进行持久化存储 其实,在上述流程中还需要较为重要的一步,就是在持久化存储之前需 ...
- Nodejs 如何制作命令行工具
# 全局安装,安装报错是需要前面加上sudo $ sudo npm install -g xxxb # 输出帮助 $ xxxb -h Usage: xxxb 这里是我私人玩耍的命令哦![options ...
- 字符串安全处理:CRT安全增强以及安全模板重载
Secure Template Overloads :http://msdn.microsoft.com/en-us/library/ms175759(v=vs.80).aspx Security E ...
- Java反射创建带构造参数的类 并执行方法
部分代码 public void go(ServletRequest request,ServletResponse response){ String methodName = "inde ...
- echart 折线图、柱状图、饼图、环形图颜色修改
之前在做报表的时候用过echart 用完也就完了,而这次在用的时候已经忘了,所以这里简单记录一下,好记性不如烂笔头!!! 1.折线图修改颜色: xAxis: { type: 'category', b ...
- Android(java)学习笔记7:多线程程序练习
需求: 某电影院目前正在上映贺岁大片,共有100张票,而它有3个售票窗口售票,请设计一个程序模拟该电影院售票. 两种方式实现 A:继承Thread类 B:实现Runnable接 1. 首先我们利用方式 ...
- 高通Vuforia
这里使用高通的Vuroria来做一个AR歌姬. 工具: Vuforia,MMD4Mecanim 模型: 初音未来pmd模型文件,极乐净土vmd动作文件. 逻辑: 当发现识别卡时:开启音乐,模型速度为1 ...
- AQS(一) 对CLH队列的增强
基本概念 AQS(AbstractQueuedSynchronizer),顾名思义,是一个抽象的队列同步器. 它的队列是先进先出(FIFO)的等待队列 基于这个队列,AQS提供了一个实现阻塞锁的机制 ...
- Docker 安装mysql8.0
1. 下载Mysql的Docker镜像: $ docker search mysql (搜索mysql镜像) $ docker pull mysql (下载mysql镜像,默认最新版本) 2. 运行镜 ...