本来想采用Docker的方式拉取并运行HAProxy镜像,折腾了好几天搞不定,HAProxy启动不了,故采用源码安装的方式安装HAProxy。
配置两个HAProxy节点实现负载均衡:
1. 安装HAProxy
- 下载
由于到官网下载需要kexue上网,这里提供百度云链接。
链接:
https://pan.baidu.com/s/1uaSJa3NHFiE1E6dk7iHMwQ 提取码: irz6
- 将haproxy-1.7.8.tar.gz拷贝至/opt目录下,解压缩:
tar zxvf haproxy-1.7.8.tar.gz
- 进入目录,编译成可执行文件。
将源代码解压之后,需要运行make来将HAProxy编译成为可执行文件。如果是在Linux2.6系统上面进行编译的话,需要设置TARGET=linux26以开启epoll支持,这也是为什么网上许多博客里面都是这么写的。对于其他的UNIX系统来说,直接采用TARGET=generic方式,本文进行安装的系统为CentOS7 ,内核3.10版本。
cd haproxy-1.7.8
make TARGET=generic
执行完毕之后,目录下出现haproxy的可执行文件。
2. 配置HAProxy
HAProxy配置文件说明
HAProxy配置文件通常分为三个部分,即global、defaults和listen。global为全局配置,defaults为默认配置,listen为应用组件配置。
global为全局配置部分,属于进程级别的配置,通常和使用的操作系统配置相关。
defaults配置项配置默认参数,会被应用组件继承,如果在应用组件中没有特别声明,将使用默认配置参数。
以配置RabbitMQ集群的负载均衡为例,在安装目录下面新建一个haproxy.cfg,输入下面配置信息:
global
#日志输出配置,所有日志都记录在本机,通过local0输出
log 127.0.0.1 local0 info
#最大连接数
maxconn 10240
#以守护进程方式运行
daemon
defaults
#应用全局的日志配置
log global
mode http
#超时配置
timeout connect 5000
timeout client 5000
timeout server 5000
timeout check 2000
listen http_front #haproxy的客户页面
bind 192.168.16.128:8888
mode http
option httplog
stats uri /haproxy
stats auth admin:123456
stats refresh 5s
stats enable
listen haproxy #负载均衡的名字
bind 0.0.0.0:5666 #对外提供的虚拟的端口
option tcplog
mode tcp
#轮询算法
balance roundrobin
server rabbit1 192.168.16.128:5672 check inter 5000 rise 2 fall 2
server rabbit2 192.168.16.128:5673 check inter 5000 rise 2 fall 2
server rabbit3 192.168.16.128:5674 check inter 5000 rise 2 fall 2
3. 启动
启动命令:
/opt/haproxy-1.7.8/haproxy -f /opt/haproxy-1.7.8/haproxy.cfg
验证一下是否启动成功:
[root@localhost haproxy-1.7.8]# lsof -i:8888
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
haproxy 45031 root 3u IPv4 228341 0t0 TCP localhost.localdomain:ddi-tcp-1 (LISTEN)
在浏览器上访问
http://192.168.16.128:8888/haproxy,输入配置的用户名和密码登录以后,可以看到如下画面:
再以相同的方式在192.168.16.129服务器上面启动一个HAProxy。
到此,负载均衡配置完成。
三、KeepAlived配置高可用
Keepalived,它是一个高性能的服务器高可用或热备解决方案,Keepalived主要来防止服务器单点故障的发生问题,可以通过其与Nginx、Haproxy等反向代理的负载均衡服务器配合实现web服务端的高可用。Keepalived以VRRP协议为实现基础,用VRRP协议来实现高可用性(HA)。
1. KeepAlived安装
Keepalived的官网下载Keepalived的安装文件,目前最新的版本为:keepalived-2.0.17.tar.gz,下载地址为
http://www.keepalived.org/download.html。
下载之后进行解压和编译安装。
tar zxvf keepalived-2.0.17.tar.gz
cd keepalived-2.0.17
./configure --prefix=/opt/keepalived --with-init=SYSV
#注:(upstart|systemd|SYSV|SUSE|openrc) #根据你的系统选择对应的启动方式
make
make install
2. KeepAlived配置
之后将安装过后的Keepalived加入系统服务中,详细步骤如下:
cp /opt/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
cp /opt/keepalived/etc/sysconfig/keepalived /etc/sysconfig
cp /opt/keepalived/sbin/keepalived /usr/sbin/
chmod +x /etc/init.d/keepalived
chkconfig --add keepalived
chkconfig keepalived on
#Keepalived默认会读取/etc/keepalived/keepalived.conf配置文件
mkdir /etc/keepalived
cp /opt/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
接下来修改
/etc/keepalived/keepalived.conf文件,在Keepalived的Master上配置详情如下:
#Keepalived配置文件
global_defs {
router_id NodeA #路由ID, 主备的ID不能相同
}
#自定义监控脚本
vrrp_script chk_haproxy {
script “/etc/keepalived/check_haproxy.sh”
interval 5
weight 2
}
vrrp_instance VI_1 {
state MASTER #Keepalived的角色。Master表示主服务器,从服务器设置为BACKUP
interface eth0 #指定监测网卡
virtual_router_id 1
priority 100 #优先级,BACKUP机器上的优先级要小于这个值
advert_int 1 #设置主备之间的检查时间,单位为s
authentication { #定义验证类型和密码
auth_type PASS
auth_pass root123
}
track_script {
chk_haproxy
}
virtual_ipaddress { #VIP地址,可以设置多个:
192.168.16.130
}
}
Backup中的配置大致和Master中的相同,不过需要修改global_defs{}的router_id,比如置为NodeB;其次要修改vrrp_instance VI_1{}中的state为BACKUP;最后要将priority设置为小于100的值。注意Master和Backup中的virtual_router_id要保持一致。下面简要的展示下Backup的配置:
#Keepalived配置文件
global_defs {
router_id NodeB #路由ID, 主备的ID不能相同
}
#自定义监控脚本
vrrp_script chk_haproxy {
script “/etc/keepalived/check_haproxy.sh”
interval 5
weight 2
}
vrrp_instance VI_1 {
state BACKUP
interface eth0 #指定监测网卡
virtual_router_id 1
priority 80 #优先级,BACKUP机器上的优先级要小于这个值
advert_int 1 #设置主备之间的检查时间,单位为s
authentication { #定义验证类型和密码
auth_type PASS
auth_pass root123
}
track_script {
chk_haproxy
}
virtual_ipaddress { #VIP地址,可以设置多个:
192.168.16.130
}
}
为了防止HAProxy服务挂了,但是Keepalived却还在正常工作而没有切换到Backup上,所以这里需要编写一个脚本来检测HAProxy服务的状态。当HAProxy服务挂掉之后该脚本会自动重启HAProxy的服务,如果不成功则关闭Keepalived服务,如此便可以切换到Backup继续工作。这个脚本就对应了上面配置中vrrp_script chk_haproxy{}的script对应的值,
/etc/keepalived/check_haproxy.sh的内容如代码清单所示。
#!/bin/bash
if [ $(ps -C haproxy --no-header | wc -l) -eq 0 ];then
haproxy -f /opt/haproxy-1.7.8/haproxy.cfg
fi
总结
面试难免让人焦虑不安。经历过的人都懂的。但是如果你提前预测面试官要问你的问题并想出得体的回答方式,就会容易很多。
此外,都说“面试造火箭,工作拧螺丝”,那对于准备面试的朋友,你只需懂一个字:刷!
给我刷刷刷刷,使劲儿刷刷刷刷刷!今天既是来谈面试的,那就必须得来整点面试真题,这不花了我整28天,做了份“Java一线大厂高岗面试题解析合集:JAVA基础-中级-高级面试+SSM框架+分布式+性能调优+微服务+并发编程+网络+设计模式+数据结构与算法等”
且除了单纯的刷题,也得需准备一本【JAVA进阶核心知识手册】:JVM、JAVA集合、JAVA多线程并发、JAVA基础、Spring 原理、微服务、Netty与RPC、网络、日志、Zookeeper、Kafka、RabbitMQ、Hbase、MongoDB、Cassandra、设计模式、负载均衡、数据库、一致性算法、JAVA算法、数据结构、加密算法、分布式缓存、Hadoop、Spark、Storm、YARN、机器学习、云计算,用来查漏补缺最好不过。
AVA集合、JAVA多线程并发、JAVA基础、Spring 原理、微服务、Netty与RPC、网络、日志、Zookeeper、Kafka、RabbitMQ、Hbase、MongoDB、Cassandra、设计模式、负载均衡、数据库、一致性算法、JAVA算法、数据结构、加密算法、分布式缓存、Hadoop、Spark、Storm、YARN、机器学习、云计算,用来查漏补缺最好不过。
[外链图片转存中…(img-u52XyPtf-1714692883681)]