架设基于keepalived与haproxy的web高可用负载均衡集群

架设基于keepalived与haproxy的web高可用负载均衡集群

服务器构架计划

你好! 这是你第一次使用 **Markdown编辑器** 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。

一: 准备工作

注:本博客内所有集群架设在KVM虚拟机上。 使用Centos7.4系统。

1. 创建如图所示六台虚拟机

(kvm相关详情请查询本博客另一片文章:KVM相关技术 )
使用kvm创建六台虚拟机。

2. 按计划分别配置六台虚拟机IP地址及主机名

网关:统一为192.168.122.1
192.168.122.100/24 haproxy01.linux.com
192.168.122.200/24 haproxy02.linux.com
192.168.122.101/24 web01.linux.com
192.168.122.102/24 web02.linux.com
192.168.122.103/24 web03.linux.com
192.168.122.104/24 web04.linux.com

3. 时间同步

1)进行时间同步,保证个服务器中时间的同步。

[root@localhost ~]# ntpdate ntp1.aliyun.com

2)并创建计划任务 每三十分钟同步一次时间。

[root@localhost ~]# crontab -e
在其中输入
*/30 * * * * ntpdate ntp1.aliyun.com

4. 分别配置yum源

(本篇文章配置的为Centos7.4 阿里云源。)

1) 切换到/etc/yum.repos.d目录

[root@localhost ~]# cd /etc/yum.repos.d/

2)创建备份目录

[root@localhost yum.repos.d]# mkdir bak

3) 将所有.repo 结尾的 yum源(软件仓库)的配置文件移到备份目录中

[root@localhost yum.repos.d]# mv * bak/

4)下载Centos 7 阿里云开源镜像

[root@localhost yum.repos.d]#
wget http://mirrors.aliyun.com/repo/Centos-7.repo (如没有wget工具 请先安装)

5)清除系统中所有的yum缓存

[root@localhost ~]# yum clean all

6)生成yum缓存

[root@localhost ~]# yum makecache

二:准备apache服务,并建立测试页面。

1. 分别在已配置配置好yum源的web服务器中下载 安装 apache 服务,并启动。

1)web01

[root@web01 ~]# yum install -y httpd

[root@web01 ~]# systemctl start httpd

[root@web01 ~]# systemctl enable httpd

2)web02

[root@web02 ~]# yum install -y httpd

[root@web02 ~]# systemctl start httpd

[root@web02 ~]# systemctl enable httpd

3)web03

[root@web03 ~]# yum install -y httpd

[root@web03 ~]# systemctl start httpd

[root@web03 ~]# systemctl enable httpd

4)web04

[root@web04 ~]# yum install -y httpd

[root@web04 ~]# systemctl start httpd

[root@web04 ~]# systemctl enable httpd

2. 分别在web01 web02 web03 web04 的 apache 网站根目录 /var/www/html 中创建测试网页

1)web01

[root@web01 ~]# cd /var/www/html

[root@web01 html]# echo " web 01 bbs.linux.com " > index.html

2)web02

[root@web02 ~]# cd /var/www/html

[root@web02 html]# echo " web 02 bbs.linux.com " > index.html

3)web03

[root@web03 ~]# cd /var/www/html

[root@web03 html]# echo " web 03 blog.linux.com " > index.html

4)web04

[root@web04 ~]# cd /var/www/html

[root@web04 html]# echo " web 04 blog.linux.com " > index.html

三:在haproxy01安装haproxy,并配置

1. 下载并安装haproxy 将haproxy01作为主调度

[root@haproxy01 ~]# yum install -y haproxy

2. 修改其配置文件

[root@haproxy01 ~]# vim /etc/haproxy/haproxy.cfg
**注 意 ⚠️ :修 改 配 置 文 件 时 请 删 除 注 释 **

global # 全局配置
 	maxconn2000 #每个进程处理的最大连接数
	nbproc 1 #默认启动一个 haproxy 进程
	user nobody #设置haproxy进程的用户
group nobody #设置haproxy进程的用户的用户组
  log 127.0.0.1 local0 info # 把日志记录到127.0.0.1的local0的设备里面
  daemon #后端服务运行
  pid /var/run/haproxy.pid #pid文件

defaults #默认参数
  mode http #工作模式为http 网站
  retires 3 # 超时多少次终止服务
  timeout connect 5s # 超时时间
  timeout client 10s # 客户端超时时间
  timeout server 30s # 服务器超时时间
  timeout check 2s # 健康状态监测超时时间

listen admin_status #监听状态用来启用haproxy监听页面
  bind 0.0.0.0:9088 # 端口随意写不重复就行
  mode http #工作模式为http 网站
  log 127.0.0.1 local0 err # 单独记录日志 把错误级别以上日志记录在local0设备上 
  stats refresh 30 # 页面数据刷新时间
  stats uri /haproxy-status # 访问页面的uri
  stats realm login #
  stats auth admin:admin # 指定认证的用户名和密码
  stats hide-version # 在页面上隐藏软件版本
  stats admin if TURE #	在监控页面上启用对后端服务器的管理功能

frontend test-proxy #定义前端
  bind *:80 # 对前端提供80端口(网页服务)
  mode http # 工作模式为http 网站
  log global # 日志模式跟随全局模式
  option httplog # 让haproxy日志记录客户端访问请求
  option forwardfor # 让realserver 记录真实ip

#定义两个acl 
  acl host_bbs hdr_dom(host) -i bbs.linux.com #采用域名的方式来匹配主机
  acl host_blog hdr_beg(host) -i blog. #采用匹配主机名以blog.来匹配主机

  use_backend server_bbs if host_bbs # 如果是与host_bbs匹配的代理到到 server_bbs 这组服务器上
  use_backend server_blog if host_blog # 如果是与host_blog匹配的调度到 server_blog 这组服务器上

backend server_bbs #定义后端bbs
  mode http #工作模式
  option redispatch
  cookie SERVERID #回话保持
  option abortonclose # 队列里面长时间不断开的链接主动断开
  balance roundrobin # 调度算法为roundrobin 
  server bbs01 192.168.122.101:80 cookie bbs01 weight 3 check inter 2000 rise 1 fall 2 #指定后端 制定cookie值 权重值 2000ms检测一次 一次成功 两次失败 
  server bbs02 192.168.122.102:80 cookie bbs02 weight 3 check inter 2000 rise 1 fall 2 #指定后端 制定cookie值 权重值 2000ms检测一次 一次成功 两次失败

backend server_blog #定义后端blog ( 如上 bbs)
  mode http 
  option redispatch
  cookie SERVERID
  option abortonclose
  balance roundrobin
  server blog01 192.168.122.103:80 cookie blog01 weight 3 check inter 2000 rise 1 fall 2 
  server blog02 192.168.122.104:80 cookie blog02 weight 3 check inter 2000 rise 1 fall 2

**注 意 ⚠️ :修 改 配 置 文 件 时 请 删 除 注 释 **

3. 启动并设置开机自启

[root@haproxy01 ~]# systemctl start haproxy
[root@haproxy01 ~]# systemctl enable haproxy

4. 在物理机上进行测试

1) 本篇文章未搭建DNS服务器采用修改/etc/hosts文件的方式本地解析域名。(DNS服务器搭建详情请查询本博客另一篇文章:搭建DNS域名解析服务器 )

[root@localhost ~]# vim /etc/hosts

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.122.100 bbs.linux.com
192.168.122.100 blog.linux.com
~                                    
2)通过在浏览器中输入bbs.linux.com可看到web01和web02页面的负载均衡效果,输入blog.linux.com可看到web03和web04的负载均衡效果

在这里插入图片描述
在这里插入图片描述在这里插入图片描述

3)测试访问haproxy的监控页面

此处需要账号和密码为配置文件内所设置密码本文章设置的账号和密码皆为:admin
在这里插入图片描述

4)配置后端服务器记录真实客户端IP地址(分别在四台web服务器上修改httpd配置文件)

[root@web01 ~]# vim /etc/httpd/conf/httpd.conf

把/etc/httpd/conf/httpd.conf 文件中 LogFormat 中的 %h(客户端ip)改为 %{X-Forwarded-For}i
LogFormat “%{X-Forwarded-For}i %l %u %t “%r” %>s %b “%{Referer}i” “%{User-Agent}i”” combined

[root@web01 ~]# systemctl restart httpd

四:在haproxy02安装haproxy,并配置

1. **下载并安装haproxy **

[root@haproxy02 ~]# yum install -y haproxy

2. **同步配置文件 **

[root@haproxy02 ~]# scp 192.168.122.100:/etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg

3. **启动并设置开机自启 **

[root@haproxy02 ~]# systemctl start haproxy.service
[root@haproxy02 ~]# systemctl enable haproxy.service
Created symlink from /etc/systemd/system/multi-user.target.wants/haproxy.service to /usr/lib/systemd/system/haproxy.service.

五:配置keepalived实现haproxy的高可用

(keepalived 可以给任何应用做高可用)

1. 分别在两台haproxy上安装keepalived软件

[root@haproxy01 ~]# yum install -y keepalived

2. haproxy01配置文件

[root@haproxy01 ~]# vim /etc/keepalived/keepalived.conf

 Configuration File for keepalived
       global_defs {
       #删除掉邮件配置暂时使用不到
       router_id haproxy01 
    }
    
   vrrp_instance VI_1 #设置实例名
    {
        state MASTER #设置为主服务器
        interface eth0 #vip出现在eth0网卡上(网卡名根据实际设置)
        virtual_router_id 80
        priority 100 #优先级
        advert_int 1 #心跳时间
        authentication #认证相关配置
        {
            auth_type PASS 
            auth_pass redhat #认证密码
        }
        virtual_ipaddress #设置虚拟ip
        { 
            192.168.122.111
        }
    }
    # 后面lvs负载均衡集群规则全部删掉

3. haproxy02配置文件

[root@haproxy02 ~]# cat /etc/keepalived/keepalived.conf

! Configuration File for keepalived

global_defs {
    #删除掉邮件配置暂时使用不到
   router_id haproxy02 #注意修改名称
}

vrrp_instance VI_1#设置实例名
 {
    state BACKUP # 设置为从服务器
    interface eth0 #vip出现在eth0网卡上(网卡名根据实际设置)
    virtual_router_id 80
    priority 50 #优先级相比较主服务器小一点
    advert_int 1
    authentication #认证
    {
        auth_type PASS
        auth_pass redhat #认证密码
    }
    virtual_ipaddress {
        192.168.122.111
    }
}
 # 后面lvs负载均衡集群规则全部删掉

3. 分别启动haproxy01 haproxy02 上的keepalived

[root@haproxy01 ~]# systemctl start keepalived
[root@haproxy01 ~]# systemctl enable keepalived
Created symlink from/etc/systemd/system/mult-iuser.target.wants/keepalived.service to /usr/lib/systemd/system/keepalived.service.

[root@haproxy02 ~]# systemctl start keepalived
[root@haproxy02 ~]# systemctl enable keepalived
Created symlink from /etc/systemd/system/multi-user.target.wants/keepalived.service to /usr/lib/systemd/system/keepalived.service.

4. 查看网卡状态

[root@haproxy01 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 52:54:53:48:0b:85 brd ff:ff:ff:ff:ff:ff
inet 192.168.122.100/24 brd 192.168.122.255 scope global eth0
valid_lft forever preferred_lft forever
inet 192.168.122.111/32 scope global eth0 #此处可以看见vip
valid_lft forever preferred_lft forever
inet6 fe80::5054:53ff:fe48:b85/64 scope link
valid_lft forever preferred_lft forever

5. 修改物理主机本地解析

[root@localhost ~]# vim /etc/hosts

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.122.111 bbs.linux.com
192.168.122.111 blog.linux.com

6. ** 实际企业生产环境**

搭建DNS服务器:添加A记录解析网站名称 应解析本实验中的VIP。
在实际企业生产环境中:DNS添加A记录解析网站名称的VIP应做NAT记录对应的公网IP。

六:测试web高可用负载均衡集群实际效果

** 1.模拟haproxy01 出现故障**

1)手动关闭haproxy01 服务器上的keepalived 服务

[root@haproxy01 ~]# systemctl stop keepalived.service

2)查看 haproxy01 上 ip 发现vip 已经消失 (此时vip已转移到 haproxy02上)

[root@haproxy01 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 52:54:53:48:0b:85 brd ff:ff:ff:ff:ff:ff
inet 192.168.122.100/24 brd 192.168.122.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::5054:53ff:fe48:b85/64 scope link
valid_lft forever preferred_lft forever

2)查看 haproxy02 上 ip 发现vip 已经转移到了此服务器上

[root@haproxy02 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 52:54:67:4b:b2:3e brd ff:ff:ff:ff:ff:ff
inet 192.168.122.200/24 brd 192.168.122.255 scope global eth0
valid_lft forever preferred_lft forever
inet 192.168.122.111/32 scope global eth0 #此处可以看见vip
valid_lft forever preferred_lft forever
inet6 fe80::5054:67ff:fe4b:b23e/64 scope link
valid_lft forever preferred_lft forever

** 2.测试在haproxy01服务器出现故障时 web服务器效果**

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

注 : keepalived配置完成后 :
当主服务器宕机时 从服务器接替主服务器的功能 实现高可用。
当主服务器排除故障后,重新启动,主从服务器调换。
默认使用以前的从服务器为主服务器,以前的主服务器为从服务器。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值