Linux 搭建 nginx+keepalived 高可用 (主备 + 双主模式)
一、在 Linux 中搭建 centos
参考链接
https://www.osyunwei.com/archives/7829.html
二、Linux 搭建 nginx+keepalived
1.keepalived 常用命令:
启动:service keepalived start
停止:service keepalived stop
重启:service keepalived restart
查看状态 :systemctl status keepalived.service
2. 安装 keepalived
(1)安装基础依赖包,有的话就没必要安装了:
主要是 gcc ,openssl-devel, libnl, libnl-devel, libnfnetlink-devel, net-tools, vim 这几个包
yum install -y gcc openssl-devel libnl libnl-devel libnfnetlink-devel net-tools vi
(2) 在官网下载安装包
wget https://www.keepalived.org/software/keepalived-2.2.2.tar.gz
(3)解压到指定目录,并重命名:
解压,移动到 /usr/local 目录,重命名 keepalived 文件夹
tar -zxvf keepalived-2.2.2.tar.gz
mv keepalived-2.2.2 /usr/local/k
(4)进入目录编译安装:
cd /usr/local/keepalived/
./configure
make && make install
(5)复制相关文件到系统中:(之所以不喜欢编译安装,就是这一步,由于版本不同,移少移错都可能导致启动失败)
确定好自己的文件路径,复制到系统相关文件夹即可
mkdir /etc/keepalived
cp /usr/local/keepalived/keepalived/etc/init.d/keepalived /etc/init.d/
cp /usr/local/keepalived/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
cp /usr/local/keepalived/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
cp /usr/local/sbin/keepalived /usr/sbin/
(6)启动测试
/etc/init.d/keepalived start
提示 正确或者 OK,则表示安装成功
注意:
用 /etc/init.d/keepalived status 或者 systemctl status keepalived.service 命令查看服务是关闭状态,并没有启动起来
原因是:配置文件并没有配置好
三、 keepalived 配置文件基础配置
1. 基本模块介绍
此配置为主备模式,先理解主备后,在配置双主模式更简单
配置文件位置:/etc/keepalived/keepalived.conf打开也许会很懵,其实用不了太多模块,先备份原配置,然后删掉其他留下最基础的配置(配置全部参数说明参考本文最后)
cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak vim /etc/keepalived/keepalived.conf
基础三个模块,global_defs 全局模块,vrrp_instance 配置 vip 模块,vrrp_script 脚本模块,用来检测 nginx 服务。
注:vrrp_script 定义脚本后,在 vrrp_instance 模块必须加上 track_script 参数。我就入了这个坑,导致脚本不
global_defs 模块参数
notification_email : keepalived 在发生诸如切换操作时需要发送 email 通知地址,后面的 smtp_server 相比也都知道是邮件服务器地址。也可以通过其它方式报警,毕竟邮件不是实时通知的。
router_id : 机器标识,通常可设为 hostname。故障发生时,邮件通知会用到。【可以任意设定
vrrp_instance 模块参数
state : 指定 instance(Initial) 的初始状态, MASTER 或者 BACKUP,不是唯一性的,跟后面的优先级 priority 参数有关。
interface : 实例绑定的网卡,因为在配置虚拟 IP 的时候必须是在已有的网卡上添加的,(注意自己系统,我的默认是 ens33, 有的是 eth0) 。Liunx 的主机名:用 hostname 查看
mcast_src_ip : 发送多播数据包时的源 IP 地址,这里注意了,这里实际上就是在那个地址上发送 VRRP 通告,这个非常重要,一定要选择稳定的网卡端口来发送,这里相当于 heartbeat 的心跳端口,如果没有设置那么就用默认的绑定的网卡的 IP,也就是 interface 指定的 IP 地址
virtual_router_id : 这里设置 VRID,这里非常重要,相同的 VRID 为一个组,他将决定多播的 MAC 地址
priority: 设置本节点的优先级,优先级高的为 master(1-255)
advert_int : 检查间隔,默认为 1 秒。这就是 VRRP 的定时器,MASTER 每隔这样一个时间间隔,就会发送一个 advertisement 报文以通知组内其他路由器自己工作正常
authentication : 定义认证方式和密码,主从必须一样
virtual_ipaddress : 这里设置的就是 VIP,也就是虚拟 IP 地址,他随着 state 的变化而增加删除,当 state 为 master 的时候就添加,当 state 为 backup 的时候删除,这里主要是有优先级来决定的,和 state 设置的值没有多大关系,这里可以设置多个 IP 地址
track_script: 引用 VRRP 脚本,即在 vrrp_script 部分指定的名字。定期运行它们来改变优先级,并最终引发主备切换。
vrrp_script 模块参数
告诉 keepalived 在什么情况下切换,所以尤为重要。可以有多个 vrrp_script
script : 自己写的检测脚本。也可以是一行命令如 killall -0 nginx
interval 2: 每 2s 检测一次
weight -5 : 检测失败(脚本返回非 0)则优先级 -5
fall 2: 检测连续 2 次失败才算确定是真失败。会用 weight 减少优先级(1-255 之间)
rise 1 : 检测 1 次成功就算成功。但不修改优先级
2. 整体基本配置
192.168.36.5:服务器
! Configuration File for keepalived
global_defs {
router_id Nginx_01
}
vrrp_script check_nginx {
script “/etc/keepalived/check_nginx.sh”
interval 2
weight 2
fall 3
rise 2
}
vrrp_instance VI_1 {
// 代表主
state MASTER
interface ens192
virtual_router_id 51
priority 150
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.36.10 虚拟地址
}
track_script {
check_nginx
}
}
192.168.36.6:
! Configuration File for keepalived
global_defs {
router_id Nginx_02
}
vrrp_script check_nginx {
script “/etc/keepalived/check_nginx.sh”
interval 2
weight 2
fall 3
rise 2
}
vrrp_instance VI_1 {
state BACKUP
interface ens192
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.36.10 虚拟地址
}
track_script {
check_nginx
}
}
注意:只要当 keepalived 和 NG 都挂了,才会去漂移其他地址。当 NG 挂了,keepalived 通过 check_nginx.sh 去重启 NG
1 项目上 V5 版本使用有哪些调优参数,以及需要注意的点
2 文案中未提及双主模式的项目步骤、配置
3 文案中的 check_nginx.sh 的内容没看到,是否可以补充帖子