意义
在公司Web或某个API访问量巨大时,一个中心化服务器是难以维持巨大的访问量的。这时候我们需要对此服务器做一个高可用负载均衡。也就是web高可用集群。
一、 什么是负载均衡高可用
为了防止服务器的宕机,我们需要建立一个备份机。主服务器和备份机上都运行高可用(High Availability)监控程序,通过传送诸如“I am alive”这样的信息来监控对方的运行状况。当备份机不能在一定的时间内收到这样的信息时,它就接管主服务器的服务IP并继续提供负载均衡服务;当备份管理器又从主管理器收到“I am alive”这样的信息时,它就释放服务IP地址,这样的主服务器就开始再次提供负载均衡服务。这时候我们就要用到keepalived
二、集群规划
规划
IP地址 | 主机名 | 角色 | |
192.168.220.128 |
master | master,nginx | |
192.168.220.129 | BACKUP | BACKUP、nginx |
三、安装
1.安装nginx
1.1 yum安装
yum install -y nginx
或
1.2 rpm安装nginx
1、添加源
默认情况Centos7中无Nginx的源,最近发现Nginx官网提供了Centos的源地址。因此可以如下执行命令添加源:
sudo rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
2、安装Nginx
通过yum search nginx看看是否已经添加源成功。如果成功则执行下列命令安装Nginx。
sudo yum install -y nginx
3、启动Nginx并设置开机自动运行
sudo systemctl start nginx.service sudo systemctl enable nginx.service
2.安装keepalived
1.yum install -y keepalived
2.systemctl start keepalived
3.systemctl enble keepalived
四、配置
1. 配置主master(在master上执行)
vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
# notification_email {
# [email protected]
# [email protected]
# [email protected]
# }
# notification_email_from [email protected]
# smtp_server 192.168.200.1
# smtp_connect_timeout 30
router_id LVS_DEVEL
# vrrp_skip_check_adv_addr
# vrrp_strict
# vrrp_garp_interval 0
# vrrp_gna_interval 0
}
vrrp_script check_ng {
script "/etc/keepalived/check_ng.sh"
interval 3
weight -20
} # 这里的大括号前面也不能有空格
vrrp_instance VI_1 {
state MASTER # 标识为主服务
interface ens32 #绑定虚拟机的IP
virtual_router_id 51 # 虚拟路由id,和从机保持一致
#mcast_src_ip 192.168.126.2 #本机ip
priority 100 #权重,需要高于从机
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.220.99 #/32 brd 255.255.255.0 dev ens33 label ens33:vip #虚拟IP地址
# 192.168.200.17
# 192.168.200.18
}
track_script {
check_ng
}
}
2.配置备节点(在backup上执行)
vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
# notification_email {
# [email protected]
# [email protected]
# [email protected]
# }
# notification_email_from [email protected]
# smtp_server 192.168.200.1
# smtp_connect_timeout 30
router_id dreamer1
# vrrp_skip_check_adv_addr
# vrrp_strict
# vrrp_garp_interval 0
# vrrp_gna_interval 0
}
vrrp_script check_ng {
script "/etc/keepalived/check_ng.sh"
interval 3
weight -20
}
vrrp_instance VI_1 {
state BACKUP
interface ens32
virtual_router_id 51
#mcast_src_ip 192.168.136.4 ## 本机 IP 地址
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.220.99
#192.168.200.17
#192.168.200.18
}
track_script {
check_ng ## 执行 Nginx 监控的服务
}
3.添加nginx检测脚本
vim /etc/keepalived/check_ng.sh
#!/bin/bash
counter=$(ps -C nginx --no-heading|wc -l)
if [ "${counter}" = "0" ]; then
systemctl restart nginx
sleep 1
counter=$(ps -C nginx --no-heading|wc -l)
if [ "${counter}" = "0" ]; then
killall keepalived
fi
fi
ps:特别注意,很多人在keepalived配置中 脚本无法执行时因为三个原因:
1.脚本没执行权限 解决方案:chmod 777 ....sh
2. vrrp_script check_ng { (大括号前少了一个空格)
}(大括号前多了一个空格)
3.脚本中sleep的时间大于了vrrp_script check_ng 中的interval时间。
五、测试
1.我们输入虚拟IP 访问web服务。
2.当我们kill掉主服务器中的nginx服务时,虚拟ip跑到了backup 中,并启动了服务、
3.当我们恢复主服务器中的服务时,虚拟IP跑回了master中,并启动了服务
到达以上效果代表测试成功、明日我们将基于keepalived搭建k8s高可用集群。