原理
- 常见的Web集群调度器
目前常见的Web集群调度器分为软件和硬件
软件通常使用开源的LVS、Haproxy、Nginx
硬件一般使用比较多的是F5,梭子鱼、绿盟等 - Haproxy应用分析
LVS在企业应用中抗负载能力很强,但存在不足,LVS不支持正则处理,不能实现动静分离;
对于大型网站,LVS的实施配置复杂,维护成本相对较高;Haproxy是一款可提供高可用性、负载均衡、及基于TCP和HTTP应用的代理的软件,适用于负载大的Web站点;
运行在硬件上可支持数以万计的并发连接的连接请求; - Haproxy支持的调度算法
Round Robin(RR) 轮询调度
Least Connections(LC) 最少连接数
Source Hashing(SH) 基于来源访问调度算法 - Keepalived工具介绍(作用)
专为LVS和HA设计的一款健康检查工具
支持故障自动切换(Failover)
支持节点健康状态检查(Health Checking)
官方网站: http://www.keepalived.orgl - Keepalived实现原理
Keepalived采用VRRP热备份协议实现Linux服务器的多机热备功能
VRRP(虚拟路由冗余协议)是针对路由器的一种备份解决方案
由多台路由器组成一个热备组,通过共用的虚拟IP地址对外提供服务;
每个热备组内同时只有一台主路由器提供服务,其他路由器处于冗余状态;
若当前在线的路由器失效,则其他路由器会根据设置的优先级自动接替虚拟IP地址,继续提供服务; - Keepalived安装与启动
在LVS群集环境中应用时,也需用到ipvsadm管理工具
YUM安装Keepalived
启用Keepalived服务 - 配置Keepalived master服务器2-1
Keepalived配置目录位于letc/keepalived/
keepalived.conf是主配置文件
global_defs {…}区段指定全局参数;
vrrp_instance 实例名称{…}区段指定VRRP热备参数;
注释文字以"!"符号开头;
·目录samples,提供了许多配置样例作为参考 - 配置Keepalived master服务器2-2
常用配置选项
router_id HA_TEST_R1:本路由器(服务器)的名称
vrrp_instance Vl_1∶定义VRRP热备实例
state MASTER:热备状态,MASTER表示主服务器
interface ens33:承载VIP地址的物理接口
virtual _router_id 1:虚拟路由器的ID号,每个热备组保持一致
priority 100:优先级,数值越大优先级越高
advert_int 1:通告间隔秒数(心跳频率)
auth_type PASS:认证类型
auth_pass 123456:密码字串
virtual_ipaddress { vip}:指定漂移地址(VIP),可以有多个
Keepalived日志文件:/var/log/messages
案例部署
组成部分
- 调度器 2台
- web服务器 2台
- nfs服务器 1台
- 客户机
具体部署
- 在第一台调度器(主调度器)上的部署
部署haproxy
1. Yum安装依赖包
yum -y install gcc gcc-c++ make pcre-devel bzip2-devel
2. 下载并解压haproxy软件包
tar zxvf haproxy-1.4.24.tar.gz
3. 进入haproxy主文件,进行编译,安装
make TARGET=linux26
make install
4. 创建haproxy的主配置文件目录,并将样板文件拷贝进去,对配置文件进行修改
mkdir /etc/haproxy
cp examples/haproxy.cfg /etc/haproxy/
vim /etc/haproxy/haproxy.cfg
#chroot /usr/share/haproxy 加#将这一行注释掉
#redispatch 加#将这一行注释掉
maxconn 10240 最大连接数,默认2000
删除listen开始往下的所有内容,并自己增加内容
listen webcluster 0.0.0.0:80
option httpchk GET /index.html
balance roundrobin
server web1 192.168.31.30:80 check inter 2000 fall 3
server web2 192.168.31.50:80 check inter 2000 fall 3
5. 将haproxy设为开机自启
cp examples/haproxy.init /etc/init.d/haproxy
vim /etc/init.d/haproxy
# chkconfig: 35 85 15 将-改为35
chmod 755 /etc/init.d/haproxy
chkconfig --add haproxy
ln -s /usr/local/sbin/haproxy /usr/sbin/
6. 开启haproxy
systemctl start haproxy
部署keepalived
1. Yum安装依赖包
yum -y install gcc gcc-c++ make popt-devel kernel-devel openssl-devel
2. 下载并解压keepalived工具的软件包
tar zxvf keepalived-2.0.13.tar.gz
3 对keepalived工具进行配置,编译,安装
cd keepalived-2.0.13/
./configure --prefix=/
make && make install
4. 将keepalived工具加入系统管理服务
cp keepalived/etc/init.d/keepalived /etc/init.d
5. 设置开机自启
systemctl enable keepalived
6. 编辑keepalived工具的配置文件
vim /etc/keepalived/keepalived.conf(将里面除第一行以外的内容删除)
! Configuration File for keepalived
global_defs {
router_id lvs_01
}
vrrp_instance vi_1 {
state MASTER
interface ens33
virtual_router_id 10
priority 150
advert_int 1
authentication {
auth_type PASS
auth_pass 123456
}
virtual_ipaddress {
192.168.31.100
}
}
- 第二台调度器(备用调度器)上的部署
部署haproxy
1. Yum安装依赖包
yum -y install gcc gcc-c++ make pcre-devel bzip2-devel
2. 下载并解压haproxy软件包
tar zxvf haproxy-1.4.24.tar.gz
3. 进入haproxy主文件,进行编译,安装
make TARGET=linux26
make install
4. 创建haproxy的主配置文件目录,并将样板文件拷贝进去,对配置文件进行修改
mkdir /etc/haproxy
cp examples/haproxy.cfg /etc/haproxy/
vim /etc/haproxy/haproxy.cfg
#chroot /usr/share/haproxy 加#将这一行注释掉
#redispatch 加#将这一行注释掉
maxconn 10240 最大连接数,默认2000
删除listen开始往下的所有内容,并自己增加内容
listen webcluster 0.0.0.0:80
option httpchk GET /index.html
balance roundrobin
server web1 192.168.31.30:80 check inter 2000 fall 3
server web2 192.168.31.50:80 check inter 2000 fall 3
5. 将haproxy设为开机自启
cp examples/haproxy.init /etc/init.d/haproxy
vim /etc/init.d/haproxy
# chkconfig: 35 85 15 将-改为35
chmod 755 /etc/init.d/haproxy
chkconfig --add haproxy
ln -s /usr/local/sbin/haproxy /usr/sbin/
6. 开启haproxy
systemctl start haproxy
部署keeplived
1. Yum安装依赖包
yum -y install gcc gcc-c++ make popt-devel kernel-devel openssl-devel
2. 下载并解压keepalived工具的软件包
tar zxvf keepalived-2.0.13.tar.gz
3 对keepalived工具进行配置,编译,安装
cd keepalived-2.0.13/
./configure --prefix=/
make && make install
4. 将keepalived工具加入系统管理服务
cp keepalived/etc/init.d/keepalived /etc/init.d
5 设置开机自启
systemctl enable keepalived
6. 编辑keepalived工具的配置文件
vim /etc/keepalived/keepalived.conf(将里面除第一行以外的内容删除)
! Configuration File for keepalived
global_defs {
router_id lvs_02
}
vrrp_instance vi_1 {
state BACKUP
interface ens33
virtual_router_id 10
priority 145
advert_int 1
authentication {
auth_type PASS
auth_pass 123456
}
virtual_ipaddress {
192.168.31.100
}
}
- 第一台web服务器部署
1. Yum安装依赖包
yum -y install gcc gcc-c++ make pcre-devel zlib-devel
2. 创建不带家目录,不可登录用户
useradd -M -s /sbin/nologin nginx
3. 下载并解压nginx软件包
tar zxvf nginx-1.13.7.tar.gz
4. 对nginx的主文件进行配置,编译,安装
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx
make && make install
5. 将nginx的命令做软连接
ln -s /usr/local/nginx/sbin/nginx /usr/local/bin/
6. 挂载使用nfs服务器上的共享资源
mount 192.168.31.40:/web1 /usr/local/nginx/html/
7. 启动nginx
nginx
- 第二台web服务器上的部署
1. Yum安装依赖包
yum -y install gcc gcc-c++ make pcre-devel zlib-devel
2. 创建不带家目录,不可登录用户
useradd -M -s /sbin/nologin nginx
3. 下载并解压nginx软件包
tar zxvf nginx-1.13.7.tar.gz
4. 对nginx的主文件进行配置,编译,安装
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx
make && make install
5. 将nginx的命令做软连接
ln -s /usr/local/nginx/sbin/nginx /usr/local/bin/
6. 挂载使用nfs服务器上的共享资源
mount 192.168.31.40:/web2 /usr/local/nginx/html/
7. 启动nginx
nginx
nfs服务器上的部署
yum -y install nfs-utils rpcbind #rpcbind默认已安装
配置共享目录
mkdir /web1
echo "<h1>wawawaw<h1>" > /opt/web1/index.html
mkdir /web2
echo "<h1>hahahaha<h1>" > /opt/web2/index.html
资源共享
vim /etc/exports
/web1 192.168.31.30/24(ro)
/web2 192.168.31.50/24(ro)
将服务重启
systemctl restart nfs
systemctl restart rpcbind
查看资源共享情况
showmount –e
访问测试
Haproxy日志管理
- 第一台调度器上的部署
在配置文件中做修改
vim /etc/haproxy/haproxy.cfg
log /dev/log local0 info
log /dev/log local0 notice
重启haproxy
systemctl restart haproxy.service
vim /etc/rsyslog.d/haproxy.conf
if ($programname == 'haproxy' and $syslogseverity-text == 'info')
then -/var/log/haproxy/haproxy-info.log
&~
if ($programname == 'haproxy' and $syslogseverity-text == 'notice')
then -/var/log/haproxy/haproxy-notice.log
&~
systemctl restart rsyslog.service
systemctl restart haproxy.service
- 第二台调度器上的部署
在配置文件中做修改
vim /etc/haproxy/haproxy.cfg
log /dev/log local0 info
log /dev/log local0 notice
重启haproxy
systemctl restart haproxy.service
vim /etc/rsyslog.d/haproxy.conf
if ($programname == 'haproxy' and $syslogseverity-text == 'info')
then -/var/log/haproxy/haproxy-info.log
&~
if ($programname == 'haproxy' and $syslogseverity-text == 'notice')
then -/var/log/haproxy/haproxy-notice.log
&~
systemctl restart rsyslog.service
systemctl restart haproxy.service
然后查看一下是否生成了日志文件
验证keepalived功能
将主调度器关闭后,进行访问测试
查看备用调度器的日志信息
tail -100 /var/log/messages
通过上述一系列验证,我们不难发现,主调度器关闭后,依然可以正常访问,因为虚拟地址已经漂移到了备用调度器上
然后我们将主调度器修复后,重新开启,然后查看主调度器的日志信息
tail -100 /var/log/messages
我们发现,主调度器成功i抢占,恢复正常功能。