安装指南
IFY
计算机网络知识
nginx负载均衡
sudo apt-get install libssl-dev
sudo apt-get install libpopt-dev
sudo apt-get install daemon
sudo apt-get install build-essential
sudo apt-get install libssl-dev
sudo apt-get install openssl
sudo apt-get install libpopt-dev
选择一种
1.直接安装
sudo apt-get install keepalived
2.下载编译安装
sudo apt-get install build-essential libssl-dev # 安装编译工具和openssl依赖
wget http://www.keepalived.org/software/keepalived-2.0.7.tar.gz # 下载源码
tar -zxvf keepalived-2.0.7.tar.gz # 解压源码
cd keepalived-2.0.7/
./configure --prefix=/usr/local/keepalived # 配置keepalived的安装目录
make # 编译源码
sudo make install # 安装到安装目录,需要使用root权限
sudo mkdir -p /etc/keepalived
sudo ln -s /usr/local/keepalived/sbin/keepalived /usr/sbin/
sudo ln -s /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf
sudo ln -s /usr/local/keepalived/etc/sysconfig/keepalived /etc/default/keepalived
采用systemd的方式添加到系统服务,执行如下命令:
(
cat <<EOF
[Unit]
Description=Keepalive Daemon (LVS and VRRP)
After=syslog.target network-online.target
Wants=network-online.target
# Only start if there is a configuration file
ConditionFileNotEmpty=/etc/keepalived/keepalived.conf
[Service]
Type=forking
KillMode=process
# Read configuration variable file if it is present
EnvironmentFile=-/etc/default/keepalived
ExecStart=/usr/sbin/keepalived $KEEPALIVED_OPTIONS
ExecReload=/bin/kill -HUP $MAINPID
[Install]
WantedBy=multi-user.target
EOF
) > keepalived.service
sudo cp -a keepalived.service /lib/systemd/system/keepalived.service
sudo ln -s /lib/systemd/system/keepalived.service /etc/systemd/system/multi-user.target.wants/keepalived.service
此处使用最简单的配置入门,假设我们以/tmp/目录下是否存在service_ok这个文件来判断服务是否可用。
touch /tmp/service_ok
同理可以监控nginx的pid文件是否存在,判断nginx服务是否可用。
从机配置文件
! Configuration File for keepalived
global_defs {
#添加以下参数即可
script_user root
enable_script_security
}
vrrp_script chk_service_ok {
script "/bin/ls /tmp/service_ok"
interval 2
}
vrrp_instance VI_1 {
interface enp5s0
state BACKUP
virtual_router_id 51
priority 100
virtual_ipaddress {
192.168.1.92/25
}
track_script {
chk_service_ok
}
}
这里的interface
网卡名称和宿主机物理网卡名称一致
虚拟地址填和MASTER一致。(BACKUP/MASTER)
global_defs {
#添加以下参数即可
script_user root
enable_script_security
}
vrrp_script chk_service_ok {
script "/bin/ls /tmp/service_ok"
interval 2
}
vrrp_instance VI_1 {
interface enplo
state MASTER
virtual_router_id 51
priority 100
virtual_ipaddress {
192.168.1.92/25
}
track_script {
chk_service_ok
}
}
启动keepalived进程,并设置为开机启动,通过sudo systemctl status keepalived查看状态:
sudo systemctl start keepalived
sudo systemctl status keepalived
sudo systemctl enable keepalived
如果遇到这种情况按照提示执行命令即可
systemctl daemon-reload
touch /etc/keepalived/check_nginx.sh
chmod +x /etc/keepalived/check_nginx.sh
可以配置KPL执行该脚本监控ng的情况。
#!/bin/bash
A=`ps -C nginx --no-header |wc -l`
if [ $A -eq 0 ];then
/usr/local/nginx/sbin/nginx #尝试重启nginx
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then #nginx重启失败,则停掉keepalived服务
killall keepalived
fi
fi
参考
# 检测nginx的脚本
# keepalived会定时执行脚本并对脚本执行的结果进行分析,动态调整vrrp_instance的优先级。
# 如果脚本执行结果为0,并且weight配置的值大于0,则优先级相应的增加。如果脚本执行结果非0,
# 并且weight配置的值小于 0,则优先级相应的减少。其他情况,维持原本配置的优先级,即配置文件中priority对应的值
vrrp_script chk_nginx {
script "/etc/keepalived/check_nginx.sh"
interval 2 # 每2秒检测一次nginx的运行状态
weight -5 # 失败一次,将自己的优先级减5
}
global_defs {
router_id ubuntu01 #标识本节点的名称,通常为hostname
}
vrrp_instance VI_1 {
state MASTER # 状态,主节点为MASTER,备份节点为BACKUP
interface enp0s3 # 绑定VIP的网络接口,通过ifconfig查看自己的网络接口
virtual_router_id 200 # 虚拟路由的ID号,两个节点设置必须一样,可选IP最后一段使用,相同的VRID为一个组,他将决定多播的MAC地址
mcast_src_ip 192.168.1.104 # 本机IP地址
priority 100 # 节点优先级,值范围0~254,MASTER要比BACKUP高
advert_int 1 # 组播信息发送时间间隔,两个节点必须设置一样,默认为1秒
nopreempt # 表示不争抢vip
# 设置验证信息,两个节点必须一致
authentication {
auth_type PASS
auth_pass 123456
}
# nginx存活状态检测脚本
track_script {
chk_nginx
}
# 虚拟IP,两个节点设置必须一样。可以设置多个,一行写一个
virtual_ipaddress {
192.168.1.200/24
}
}