前言
本文用来记录nginx加keepalived实现高可用,避免出现单点故障。
准备
- Linux CentOS7 系统
- nginx 1.12.2
- keepalived 1.3.5
规划图
虚拟IP | 真实IP | hostname | nginx端口 | 主从 |
---|---|---|---|---|
10.200.1.200 | 10.200.1.5 | nginx_master | 80 | Master |
10.200.1.200 | 10.200.1.6 | nginx_backup | 80 | Backup |
注意点
把搭建过程中的坑写的前边,避免下次再遇到
- 机器的hostname一定要修改,不能出现相同的,相同会导致VIP不漂移
- 防火墙开放80端口
- selinux对keepalived的影响,我遇到的是在执行监控脚本无法调用系统服务命令(systemctl stop keepalived),解决办法有3
- 不调用系统服务命令来启动或关闭应用,只用kill杀死进程
- 关闭selinux
- 找到selinux具体是什么权限导致在监控脚本无法调用系统服务命令(我没找到)
安装
- 在VirtualBox下安装CentOS7操作系统,配置IP地址和hostname
通过yum命令来安装epel-release、nginx、keepalived
123# yum install epel-release -y# yum install nginx -y# yum install keepalived -y复制第一步安装好的系统,配置IP地址和hostname
配置
Master配置
keepalived 配置
1# vi etc/keepalived/keepalived.conf12345678910111213141516171819202122232425262728293031323334353637383940414243! Configuration File for keepalived#全局配置global_defs {#运行keepalived的机器的一个标识router_id LVS_DEVEL_MASTER}#VRRPD配置vrrp_script check_nginx {#脚本监测script "/opt/check_nginx.sh"#脚本执行间隔,每2s检测一次interval 2#脚本结果导致的优先级变更,检测失败(脚本返回非0)则优先级 -20weight -20}#定义vrrp实例vrrp_instance VI_1 {#指定keepalived的角色,MASTER表示此主机是主服务器,BACKUP表示此主机是备用服务器state MASTER#指定HA监测网络的接口。与本机 IP 地址所在的网络接口相同interface enp0s3#虚拟路由标识,这个标识是一个数字,同一个vrrp实例使用唯一的标识。即同一vrrp_instance下,MASTER和BACKUP必须是一致的virtual_router_id 51#定义优先级,数字越大,优先级越高priority 100#设定MASTER与BACKUP负载均衡器之间同步检查的时间间隔,单位是秒advert_int 1#设置验证类型和密码。主从必须一样authentication {auth_type PASSauth_pass 1111}#VRRP HA 虚拟地址 如果有多个VIP,继续换行填写virtual_ipaddress {10.200.1.200}#执行nginx检测脚本。注意这个设置不能紧挨着写在vrrp_script配置块的后面(实验中碰过的坑),否则nginx监控失效!!track_script {check_nginx}}监测脚本编写
12345678910111213141516#!/bin/bash#检查nginx进程是否存在counter=$(ps -C nginx --no-heading|wc -l)pids=$(pidof keepalived)if [ "${counter}" = "0" ]; then#尝试启动一次nginx,停止5秒后再次检测#/usr/bin/systemctl start nginxsleep 2counter=$(ps -C nginx --no-heading|wc -l)if [ "${counter}" = "0" -a "${pids}" != "" ]; then#如果启动没成功,就杀掉keepalive触发主备切换#/usr/bin/systemctl stop keepalived#如果关闭了selinux可以只用上边的命令,如果没有直接用kill#kill -9 $pidsfifi监测脚本授权
1# chmod +x /opt/check_nginx.sh
Backup配置
keepalived 配置
1# vi /etc/keepalived/keepalived.conf1234567891011121314151617181920212223242526272829303132! Configuration File for keepalivedglobal_defs {#和Master不同的地方router_id LVS_DEVEL_BACKUP}vrrp_script check_nginx {script "sh /opt/check_nginx.sh"interval 2weight -20}vrrp_instance VI_1 {#和Master不同的地方state BACKUPinterface enp0s3virtual_router_id 51#和Master不同的地方priority 90advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {10.200.1.200}track_script {check_nginx}}直接把Master的脚本拷贝过来
测试
关闭master的nginx服务,测试nginx是否会被重启
检查页面是否正常测试VIP是否会漂移
- 注释检测脚本启动nginx服务的命令
- 查看页面
- 执行systemctl stop nginx命令,查看页面
结语
本记录只记录了核心的部分,如果是生成环境用,还有在熟悉其他的配置,比如发邮件配置等