centos7安装部署Haproxy+keepalived高可用负载均衡调度器------源码方式

一、实验环境

IP地址 主机名称 角色
192.168.200.111 haproxy_master haproxy,keepalived
192.168.200.112 haproxy_slave haproxy,keepalived
192.168.200.113 nginx_master nginx,keepalived
192.168.200.114 nginx_slave nginx,keepalived

二、haproxy安装配置(111、112都配置不同的地方会指出)

1. haproxy下载安装包

 haproxy下载地址:https://pan.baidu.com/s/1n4-8mIOy9sdfs8iT08eSOA

提取码:vv35

 

2.安装haproxy

  uname -r
  3.10.0-229.el7.x86_64

 1 #配置主机名
 2  hostname haproxy-master
 3  bash
 4 [root@haproxy-master ~]# 
 5 ------------------------------------------
 6  ls
 7 anaconda-ks.cfg  haproxy-1.7.8.tar.gz
 8 -----------------------------------------------
 9 #解压安装包
10 tar xf haproxy-1.7.8.tar.gz -C /usr/src/
11 [root@haproxy-master ~]# cd /usr/src/haproxy-1.7.8/
12 #编译安装haproxy
13 make TARGET=linux3100 PREFIX=/usr/local/haproxy
14 make install PREFIX=/usr/local/haproxy
15 #查看安装haproxy的安装版本
16 /usr/local/haproxy/sbin/haproxy -v
17 HA-Proxy version 1.7.8 2017/07/07
18 Copyright 2000-2017 Willy Tarreau <willy@haproxy.org>
19 #配置启动软链接
20 ln -s /usr/local/haproxy/sbin/haproxy /usr/sbin/
21 #创建启动程序用户
22 useradd -M -s /sbin/nologin haproxy
23 #配置配置文件
24  mkdir /etc/haproxy
25 vim /etc/haproxy/haproxy.cfg

 

3. 配置文件内容

global
log 127.0.0.1 local3 info
chroot /usr/local/haproxy
user haproxy
group haproxy
daemon
maxconn 4000

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.200.113:80 check inter 2000 rise 3 fall 3 weight 30
server node2 192.168.200.114:80 check inter 2000 rise 3 fall 3 weight 30

 

4. 配置rsyslog

1 vim /etc/rsyslog.conf
2 $ModLoad imudp
3 $UDPServerRun 514
4 local3.* /var/log/haproxy.log
5 #重新启动rsyslog
6 systemctl restart rsyslog

 

5.  启动haproxy

haproxy -f /etc/haproxy/haproxy.cfg 
#查看端口
netstat -lnupt | grep haproxy
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      29996/haproxy       
udp        0      0 0.0.0.0:50181           0.0.0.0:*                           29996/haproxy     

 

 三、安装配置keepalived

1. 安装keepalived

yum -y install keepalived

2. 配置keepalived文件

vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
 
vrrp_script chk_http_port {
    script "/etc/keepalived/check_haproxy.sh"
    interval 2
 
    global_defs {
        router_id LVS_DEVEL
    }
    
    vrrp_instance VI_1 {
        state MASTER    #备服务器要改为BACKUP
        interface eno16777728
        virtual_router_id 51 
        priority 100  #备服务器优先级要降低
        advert_int 1
        
        authentication {
            auth_type PASS
            auth_pass 1111
        }
 
        track_script {
            chk_http_port
        }
 
        virtual_ipaddress {
            192.168.200.254 
        }
    }
}

准备脚本

 vim /etc/keepalived/check_haproxy.sh
#!/bin/bash
num=`ps -C haproxy --no-header |wc -l`
if [ $num -eq 0 ]
then
    systemctl restart haproxy
    sleep 3
    if [ `ps -C haproxy --no-header |wc -l` -eq 0 ]
    then
        systemctl stop keepalived
    fi
fi
#脚本执行权限
chmod +x /etc/keepalived/check_haproxy.sh

启动keepalived

systemctl restart keepalived
#查看是否有VIP
 ip a | grep inet
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host 
    inet 192.168.200.111/24 brd 192.168.200.255 scope global eno16777728
    inet 192.168.200.254/32 scope global eno16777728
    inet6 fe80::20c:29ff:feed:63fb/64 scope link 

 

 四、haproxy配置文件解析(及模板配置文件)

 

global    #全局参数设置                                           
    log         127.0.0.1 local2    #指定使用127.0。0.1上的syslog服务中的local2日志设备,记录日志等级为info                  
    chroot      /var/lib/haproxy    #当前的haproxy的工作目录                  
    pidfile     /var/run/haproxy.pid #当前进程的pid号                 
    maxconn     4000                 #最大连接数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请求,默认是不支持http请求的日志               
                                                                 
    option                  dontlognull  #启用该项,日志中将不会记录空连接。            
    option http-server-close  #每次请求完毕后主动关闭http通道                        
    option forwardfor       except 127.0.0.0/8   #如果服务器上的应用程序想记录发起请求的客户端的IP地址     
    option                  redispatch # 当使用了cookie时,haproxy将会将其请求的后端服务器的serverID插入到
cookie中,以保证会话的SESSION持久性 retries
3 #访问后端服务器的失败次数,超过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 #这里建议使用bind *:80的方式,要不然做集群高可用的时候有问题,vip切换到其他机器就不能访问了监听地址为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后端部分。 balance roundrobin #负载均衡算法,支持static-rr,leastconn,first,uri等参数 server web01 172.31.2.33:80 check inter 2000 rise 2 fall 3 weight 30 #check inter 检测心跳频率 server web02 172.31.2.34:80 check inter 2000 rise 2 fall 3 weight 30  #rise 表示2次正确认为服务器可用 server web03 172.31.2.35:80 check inter 2000 rise 2 fall 3 weight 30 #fall 3次失败认为服务器不可用 errorfile 400 /etc/haproxy/errorpages/400badreq.http #代表如果是错误的话返回本地的一个页面 errorfile 403 /etc/haproxy/errorpages/403forbid.http errorfile 503 /etc/haproxy/errorpages/503sorry.http listen admin bind :9090 server web6c 192.168.137.111:9090 check stats enable #开启监听 stats uri /status #设置监听的url stats auth admin:123 #认证信息 stats auth qq:123 stats realm admin\ xxx #设置认证的默认提示 stats hide-version #隐藏版本 stats refresh 10s stats admin if TRUE #TRUE这个关键字表示只有经过认证成功后才能被管理


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

在用户请求不存在的页面时,返回一个页面文件给客户端而非由haproxy生成的错误代码;可用于所有段中。
code 指定对HTTP的哪些状态码返回指定的页面;这里可用的状态码有200、400、403、408、500、502、503和504;
file :指定用于响应的页面文件;

ACL
(1).4层常用检查标准
src <ip_addr>
src_port
dst <ip_addr>
dst_port
其中src、src_port、dst和dst_port就是检查标准creiterion,其后的值就是value。
例如:
acl accept_clients src 192.168.100.0/24
acl reject_clients src 172.16.0.0/16
tcp-request content accept if accept_clients
tcp-request content reject if reject_clients
tcp-request content reject # 此项表明不匹配前两项的默认都拒绝

(2).7层常用检查标准
hdr(HEADER):检查首部字段的值是否为指定的值,如hdr(Connection) -i close表示首部字段Connection的值是否为不区分大小写的close。hdr(Host) -i www.linuxidc.com表示首部字段Host的值是否为www.linuxidc.com,即请求的主机是否是指定的值。
•hdr_reg(HEADER):检查首部字段是否匹配指定的模式。如hdr_reg(Host) -i .*.linuxidc.com。
•http_first_req:当正处理的请求是第一个请求时返回true。
•method:请求的方法为指定的方法时返回方法对应的数值,也就表示true。例如"method GET"。
◦acl valid_method method GET
◦http-request deny if ! valid_method

•path:匹配uri的path部分,一般用来匹配精确的文件资源。例如path -i /a.png。
•path_beg:匹配path的前缀部分。
•path_end:匹配path的后缀部分。
•path_reg:使用正则表达式来匹配path。
•url:对整个url进行匹配。
•url_beg:对url的前缀进行匹配。

acl url_static path_beg /static /images /img /css /viedo /download # 定义静态检查标准
acl url_static path_end .gif .png .jpg .css .js .bmp # 定义静态检查标准
acl host_www path /index.html # 为主页专门定制acl
acl url_dynamic path_end .php .php5 # 定义动态检查标准
acl host_www hdr_beg(Host) -i www.linuxidc.com # 定位到主页
use_backend static if url_static #表示若满足url_static 则请求给static的所代表的后端服务器
use_backend dynamic if url_dynamic #同上
use_backend www if host_www #同上

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted @ 2020-01-27 14:25  风之老凌  阅读(702)  评论(0)    收藏  举报