Keepalived是一个用于实现高可用性和负载均衡的开源软件。它主要用于服务器集群环境中,通过监控真实服务器的状态,实现故障转移和负载均衡的功能。
Keepalived使用了VRRP(Virtual Router Redundancy Protocol)协议来管理多个服务器之间的冗余路由器。它通过将多台服务器组成一个虚拟IP地址(VIP)组,并选举出一台主服务器来处理所有传入的请求,其他服务器则处于备份状态。如果主服务器出现故障或不可用,Keepalived会自动将备份服务器切换为主服务器,以确保服务的持续可用性。
除了故障转移,Keepalived还可以进行负载均衡。它可以根据配置的策略(如轮询、加权轮询、最少连接数等),将传入的请求分发到不同的服务器上,从而实现请求的平衡分配,提高系统的性能和可扩展性。
总之,Keepalived是一个强大的工具,可以帮助构建高可用性和负载均衡的服务器集群,提高系统的可靠性和性能。
在 /usr/java下面创建keepalived文件夹
下载keepalived安装包
wget https://www.keepalived.org/software/keepalived-2.0.10.tar.gz
[root@localhost keepalived]# tar -zxvf keepalived-2.0.10.tar.gz
[root@localhost keepalived]#
yum -y install popt-devel libnl libnl-devel libnfnetlink-devel net-tools
[root@localhost ~]# cd keepalived-2.0.10
[root@localhost keepalived-2.0.10]#
./configure --prefix=/usr/java/keepalived
安装执行
[root@localhost keepalived-2.0.10]# make && make install
将脚本文件复制到/etc/init.d 文件夹里
cp /usr/java/keepalived/keepalived-2.0.10/keepalived/etc/init.d/keepalived /etc/init.d/
在etc里面创建 一个文件夹 keepalived
mkdir /etc/keepalived
将配置文件拷贝到刚才创建的文件夹里面
cp /usr/java/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
将keepalived的文件信息存放到/etc/sysconfig/里面
cp /usr/java/keepalived/keepalived-2.0.10/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
将可执行的文件存放到sbin文件夹里面
cp /usr/java/keepalived/sbin/keepalived /usr/sbin/
[root@os004 keepalived-2.0.10]# systemctl start keepalived
[root@os004 keepalived-2.0.10]# systemctl status keepalived
[root@os004 keepalived-2.0.10]# ps -aux|grep keepalived
还有一种十分简单的安装方法
直接使用
yum -y install keepalived
虚拟ip:192.168.162.33
192.168.162.36
Keppalived1:主33Nginx
Keppalived2:从36Nginx
主服务器修改192.168.162.33的配置文件/etc/keepalived/keepalived.conf
# 全局配置,框住的地方改成对应的ip地址
global_defs { # 全局的定义
notification_email {
[email protected] #设置报警邮件地址,可以设置多个,可以不设置
}
notification_email_from [email protected] #发送通知邮件时邮件源地址
smtp_server 127.0.0.1 # 发送email时使用的smtp服务器地址,这里可以用本地的sendmail来实现
smtp_connection_timeout 30 #连接smtp连接超时时间
router_id 192.168.162.33 #定义路由标识信息,相同局域网唯一
}
vrrp_script aaa {
script "/usr/local/src/check_nginx_pid.sh" #最后手动执行下此脚本,以确保此脚本能够正常执行
interval 2 #(检测脚本执行的间隔,单位是秒)
weight -2 #当检查失败后,将vrrp_instance的priority减小2
fall 3 #连续监测失败3次,才认为真的健康检查失败。并调整优先级
rise 2 #连续监测2次成功,就认为成功。但不调整优先级
}
# 虚拟ip配置 vrrp
vrrp_instance VI_1 {
state MASTER # 指定keepalived的角色,MASTER为主,BACKUP为备,大写
interface ens32 # 当前进行vrrp通讯的网络接口卡(当前centos的网卡)
mcast_src_ip 192.168.184.33 #发送心跳包的源IP,可使用绑定的网卡IP
virtual_router_id 51 # 虚拟路由编号,主从要一直0-255
priority 100 # 优先级,数值越大,获取处理请求的优先级越高
advert_int 1 # 检查间隔,默认为1s(vrrp组播周期秒数)
authentication {
auth_type PASS #设置验证类型和密码,MASTER和BACKUP必须使用相同的密码才能正常通信
auth_pass 1111
}
track_script {
aaa #(调用检测脚本)
}
virtual_ipaddress {
192.168.162.100 # 定义虚拟ip(VIP),可多设,每行一个
}
}
备用服务器也对该文件进行修改,记住修改对应的部分
以下是针对nginx状态进行检测的脚本,第一次nginx服务死掉时,会重新启动,如果Nginx服务无法正常启动,则杀掉keepalived进程
vim /usr/local/src/check_nginx_pid.sh
#!/bin/bash
A=`ps -C nginx --no-header |wc -l`
if [ $A -eq 0 ];then
/usr/local/nginx/sbin/nginx
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
killall keepalived
fi
fi
脚本中使用的killall需要安装一下
yum -y install psmisc
给脚本一个执行的权限
chmod a+x /usr/local/src/check_nginx_pid.sh
# 配置开机自启动
systemctl enable keepalived
启动之后,项目的访问就变成了以下样子,这样单点故障的时候就不会严重影响到客户端的访问