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,则表示安装成功

stickPicture.png

注意:
用 /etc/init.d/keepalived status 或者 systemctl status keepalived.service 命令查看服务是关闭状态,并没有启动起来

stickPicture.png
原因是:配置文件并没有配置好

三、 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