keepalived+haproxy

Keepalived+haproxy部署安装测试

本文档基于centos8 进行测试安装部署

Keepalived实现高可用作用,haproxy实现负载均衡。

1 keepalived安装

dnf install keepalived –y

安装成功后keepalived的配置文件再/etc/keepalived目录下

2 haproxy安装

dnf install haproxy –y

安装成功后haproxy的配置文件再/etc/haproxy目录下

3 配置haproxy

#---------------------------------------------------------------------

# Example configuration for a possible webapplication.  See the

# full configuration options online.

#

#  https://www.haproxy.org/download/1.8/doc/configuration.txt

#

#---------------------------------------------------------------------


#---------------------------------------------------------------------

# Global settings

#---------------------------------------------------------------------

global

    #to have these messages end up in /var/log/haproxy.log you will

    #need to:

    #

    #1) configure syslog to accept network log events.  This is done

   #    by adding the '-r' option tothe SYSLOGD_OPTIONS in

   #    /etc/sysconfig/syslog

    #

    #2) configure local2 events to go to the /var/log/haproxy.log

   #   file. A line like thefollowing can be added to

   #   /etc/sysconfig/syslog

    #

   #    local2.*                       /var/log/haproxy.log

    #

   log         127.0.0.1 local2


   chroot      /var/lib/haproxy

   pidfile     /var/run/haproxy.pid

   maxconn     4000

   user        haproxy

   group       haproxy

   daemon

    #turn on stats unix socket

   stats socket /var/lib/haproxy/stats

    #utilize system-wide crypto-policies

   ssl-default-bind-ciphers PROFILE=SYSTEM

   ssl-default-server-ciphers PROFILE=SYSTEM

#---------------------------------------------------------------------

# common defaults that all the 'listen' and'backend' sections will

# use if not designated in their block

#---------------------------------------------------------------------

defaults

   mode                    http

   log                     global

   option                  httplog

   option                 dontlognull

    optionhttp-server-close

   option forwardfor       except127.0.0.0/8

   option                  redispatch

   retries                 3

   timeout http-request    10s

   timeout queue           1m

   timeout connect         10s

   timeout client          1m

   timeout server          1m

   timeout http-keep-alive 10s

   timeout check           10s

   maxconn                 3000


#---------------------------------------------------------------------

# main frontend which proxys to thebackends

#---------------------------------------------------------------------

frontend main

   bind *:80    ##此处可以修改端口号,默认为5000

   stats uri /haproxy   ##此处设置haproxy的监控界面路径

   acl url_static       path_beg       -i /static /images /javascript/stylesheets

    aclurl_static       path_end       -i .jpg .gif .png .css .js

   use_backend static          ifurl_static

   default_backend             app

#---------------------------------------------------------------------

# static backend for serving up images,stylesheets and such

#---------------------------------------------------------------------

backend static

   balance     roundrobin

   server      static 127.0.0.1:80check

#---------------------------------------------------------------------

# round robin balancing between the variousbackends

#---------------------------------------------------------------------

backend app

   balance     roundrobin

   server  app1 192.168.248.155:80check inter 2000 fall 3 weight 30

   server  app2 192.168.248.156:80check inter 2000 fall 3 weight 30

   server  app3 192.168.248.157:80check inter 2000 fall 3 weight 30

server  app4 192.168.248.160:80 check inter 2000 fall3 weight 30

每个变量含义声明

global             

      # 全局参数的设置

log  127.0.0.1 local2

# log语法:log

  <address_1>[max_level_1] # 全局的日志配置,使用log,指定使用127.0.0.1上的syslog服务中的local0日志设备,记录日志等级为info的日志

chroot  /var/lib/haproxy   #改变当前工作目录

pidfile 

  /var/run/haproxy.pid  #当前进程id文件

maxconn 4000 #最大连接数

user haproxy #所属用户

group haproxy #所属组

daemon #以守护进程方式运行haproxy

stats socket /var/lib/haproxy/stats

defaults mode http

#默认的模式mode {

  tcp|http|health },tcp是4层,http是7层,health只会返回OK

log global

#应用全局的日志配置

option httplog

# 启用日志记录HTTP请求,默认haproxy日志记录是不记录HTTP请求日志

option dontlognull

# 启用该项,日志中将不会记录空连接。所谓空连接就是在上游的负载均衡器或者监控系统为了探测该 服务是否存活可用时,需要定期的连接或者获取某一固定的组件或页面,或者探测扫描端口是否在监听或开放等动作被称为空连接;官方文档中标注,如果该服务上游没有其他的负载均衡器的话,建议不要使用该参数,因为互联网上的恶意扫描或其他动作就不会被记录下来

option http-server-close

#每次请求完毕后主动关闭http通道

option forwardfor  except 127.0.0.0/8

#如果服务器上的应用程序想记录发起请求的客户端的IP地址,需要在HAProxy上 配置此选项, 这样 HAProxy会把客户端的IP信息发送给服务器,在HTTP请求中添加"X-Forwarded-For"字段。 启用  X-Forwarded-For,在requests头部插入客户端IP发送给后端的server,使后端server获取到客户端的真实IP。

option redispatch

# 当使用了cookie时,haproxy将会将其请求的后端服务器的serverID插入到cookie中,以保证会话的SESSION持久性;而此时,如果后端的服务器宕掉了,  但是客户端的cookie是不会刷新的,如果设置此参数,将会将客户的请求强制定向到另外一个后端server上,以保证服务的正常。

retries 3

# 定义连接后端服务器的失败重连次数,连接失败次数超过此值后将会将对应后端服务器标记为不可用

timeout http-request 10s

#http请求超时时间

timeout queue 1m

#一个请求在队列里的超时时间

timeout connect 10s

#连接超时

timeout client 1m

#客户端超时

timeout server 1m

#服务器端超时

timeout http-keep-alive 10s

#设置http-keep-alive的超时时间

timeout check 10s

#检测超时

maxconn 3000

#每个进程可用的最大连接数

frontend  main *:80

#监听地址为80

acl url_static   path_beg   -i /static  /images /javascript /stylesheets

acl url_static   path_end   -i .jpg .gif .png  .css .js

use_backend static  if url_static

default_backend   my_webserver

#定义一个名为my_app前端部分。此处将对于的请求转发给后端

Backend static          


          #使用了静态动态分离(如果url_path匹配 .jpg .gif .png .css .js静态文件则访问此后端)

balance roundrobin

 #负载均衡算法(#banlance roundrobin 轮询,balance

  source 保存session值,支持static-rr,leastconn,first,uri等参数)

server      static 127.0.0.1:80 check

#静态文件部署在本机(也可以部署在其他机器或者squid缓存服务器)

backend my_webserver

#定义一个名为my_webserver后端部分。PS:此处my_webserver只是一个

自定义名字而已,但是需要与frontend里面配置项default_backend

  值相一致

balance     roundrobin     

  #负载均衡算法

server  web01 172.31.2.33:80  check inter 2000 fall 3

  weight 30

#定义的多个后端

server  web02 172.31.2.34:80  check inter 2000

  fall 3 weight 30

#定义的多个后端

server  web03 172.31.2.35:80  check inter 2000

  fall 3 weight 30

#定义的多个后端

4 配置keepalived

主节点keepalived配置

! Configuration File for keepalived

global_defs {

  notification_email {

    acassen@firewall.loc

    failover@firewall.loc

    sysadmin@firewall.loc

   }

   notification_email_fromAlexandre.Cassen@firewall.loc

  smtp_server 192.168.200.1

  smtp_connect_timeout 30

  router_id LVS_DEVEL

  vrrp_skip_check_adv_addr

  vrrp_garp_interval 0

  vrrp_gna_interval 0

}


vrrp_instance VI_1 {

   state MASTER   ##表示为主节点

   interface ens33  ##表示添加虚ip的网卡信息

   virtual_router_id 51

   priority 100     ##表示权重信息,主从节点要不一样

   advert_int 1

   authentication {

       auth_type PASS

       auth_pass 1111

    }

   virtual_ipaddress {

       192.168.248.158  ##表示添加的vip

    }

}

从节点keepalived配置

! 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.200.1

  smtp_connect_timeout 30

  router_id LVS_DEVEL

  vrrp_skip_check_adv_addr

  vrrp_garp_interval 0

  vrrp_gna_interval 0

}


vrrp_instance VI_1 {

   state BACKUP

   interface ens33

   virtual_router_id 51

   priority 80

   advert_int 1

   authentication {

       auth_type PASS

       auth_pass 1111

    }

   virtual_ipaddress {

       192.168.248.158

    }

}

扩展

提高利用率由于一个 VIPA 只能配置在一台机器上,如果共有两台机器,则浪费了 50% 的资源。如果要提高资源的利用率,可以再申请一个 VIPA。把备机配置为 Master,把主机配置为 Backup。

VIPA 争抢由于 nopreempt 只能配置在 BACKUP 上,如果 state 为 MASTER 的机器故障并恢复,则会把 VIPA 抢过去。整个过程是:

主机 A 故障

VIPA 漂移到主机B

主机 A 恢复

VIPA 漂移到主机A

这样就会导致第四步多漂移了一次。而漂移可能会对服务有很短暂的影响。如果希望主机 A 恢复后,仍然让主机 B 持有 VIPA,则要在主机的 Keepalived 启动之前修改配置中的 state,改为 BACKUP。

避免丢包在 VIPA 漂移到备机之间,短暂的时间内数据包仍然会发送到主机。如果主机能够连上,则可以使用防火墙将数据包转发到备机。然后停止 Keepalived 。

iptables -F

iptables -t nat -I PREROUTING -i eth0 -j DNAT--to-destination 192.168.1.102

iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE

数据库的问题数据库如果使用双主,在 VIPA 切换的时候,数据可能未同步完成,可能会造成自增 ID 冲突。可以配置 Keepalived 等一段时间后再发送 ARP 请求,以此等待同步完成。配置项是:vrrp_garp_master_delay 10 表示延迟 10 秒返送。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,968评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,601评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,220评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,416评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,425评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,144评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,432评论 3 401
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,088评论 0 261
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,586评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,028评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,137评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,783评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,343评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,333评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,559评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,595评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,901评论 2 345