注:本博客内所有集群架设在KVM虚拟机上。 使用Centos7.4系统。
(kvm相关详情请查询本博客另一片文章:KVM相关技术 )
使用kvm创建六台虚拟机。
网关:统一为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
[root@localhost ~]# ntpdate ntp1.aliyun.com
[root@localhost ~]# crontab -e
在其中输入
*/30 * * * * ntpdate ntp1.aliyun.com
(本篇文章配置的为Centos7.4 阿里云源。)
[root@localhost ~]# cd /etc/yum.repos.d/
[root@localhost yum.repos.d]# mkdir bak
[root@localhost yum.repos.d]# mv * bak/
[root@localhost yum.repos.d]#
wget http://mirrors.aliyun.com/repo/Centos-7.repo (如没有wget工具 请先安装)
[root@localhost ~]# yum clean all
[root@localhost ~]# yum makecache
[root@web01 ~]# yum install -y httpd
[root@web01 ~]# systemctl start httpd
[root@web01 ~]# systemctl enable httpd
[root@web02 ~]# yum install -y httpd
[root@web02 ~]# systemctl start httpd
[root@web02 ~]# systemctl enable httpd
[root@web03 ~]# yum install -y httpd
[root@web03 ~]# systemctl start httpd
[root@web03 ~]# systemctl enable httpd
[root@web04 ~]# yum install -y httpd
[root@web04 ~]# systemctl start httpd
[root@web04 ~]# systemctl enable httpd
[root@web01 ~]# cd /var/www/html
[root@web01 html]# echo " web 01 bbs.linux.com " > index.html
[root@web02 ~]# cd /var/www/html
[root@web02 html]# echo " web 02 bbs.linux.com " > index.html
[root@web03 ~]# cd /var/www/html
[root@web03 html]# echo " web 03 blog.linux.com " > index.html
[root@web04 ~]# cd /var/www/html
[root@web04 html]# echo " web 04 blog.linux.com " > index.html
[root@haproxy01 ~]# yum install -y haproxy
[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
**注 意 ⚠️ :修 改 配 置 文 件 时 请 删 除 注 释 **
[root@haproxy01 ~]# systemctl start haproxy
[root@haproxy01 ~]# systemctl enable haproxy
[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
~
此处需要账号和密码为配置文件内所设置密码本文章设置的账号和密码皆为:admin
[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
[root@haproxy02 ~]# yum install -y haproxy
[root@haproxy02 ~]# scp 192.168.122.100:/etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg
[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 可以给任何应用做高可用)
[root@haproxy01 ~]# yum install -y keepalived
[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负载均衡集群规则全部删掉
[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负载均衡集群规则全部删掉
[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.
[root@haproxy01 ~]# ip a
1: lo:
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:
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
[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
搭建DNS服务器:添加A记录解析网站名称 应解析本实验中的VIP。
在实际企业生产环境中:DNS添加A记录解析网站名称的VIP应做NAT记录对应的公网IP。
[root@haproxy01 ~]# systemctl stop keepalived.service
[root@haproxy01 ~]# ip a
1: lo:
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:
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
[root@haproxy02 ~]# ip a
1: lo:
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:
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
注 : keepalived配置完成后 :
当主服务器宕机时 从服务器接替主服务器的功能 实现高可用。
当主服务器排除故障后,重新启动,主从服务器调换。
默认使用以前的从服务器为主服务器,以前的主服务器为从服务器。