Nginx高可用
# Nginx高可用
# 什么是Keepalived
Keepalived是一个免费开源的,用C编写的类似于layer3, 4 & 7交换机制软件,具备我们平时说的第3层、第4层和第7层交换机的功能。主要提供loadbalancing(负载均衡)和 high-availability(高可用)功能,负载均衡实现需要依赖Linux的虚拟服务内核模块(ipvs),而高可用是通过VRRP协议实现多台机器之间的故障转移服务。
上图是Keepalived的功能体系结构,大致分两层:用户空间(user space)和内核空间(kernel space)。
# Keepalived特点
**
内核空间:
**主要包括IPVS(IP虚拟服务器,用于实现网络服务的负载均衡)和NETLINK(提供高级路由及其他相关的网络功能)两个部份。用户空间:
WatchDog:负载监控checkers和VRRP进程的状况
VRRP Stack:负载负载均衡器之间的失败切换FailOver,如果只用一个负载均稀器,则VRRP不是必须的。
Checkers:负责真实服务器的健康检查healthchecking,是keepalived最主要的功能。换言之,可以没有VRRP Stack,但健康检查healthchecking是一定要有的。
IPVS wrapper:用户发送设定的规则到内核ipvs代码
Netlink Reflector:用来设定vrrp的vip地址等。
Keepalived的所有功能是配置keepalived.conf文件来实现的。
# Keepalived实现
- 需要两台nginx服务器
- 需要keepalived
- 需要虚拟IP
# 配置高可用准备工作
- 需要两台服务器192.168.0.136和192.168.0.137
- 在两台服务器安装nginx
- 在两台服务器安装keepalived
# 1、两台服务器安装nginx
[root@apache ~]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
[root@apache ~]# yum install -y nginx
# 2、两台服务器安装Keepalived
安装之后,在etc/里面生成目录keepalived,有文件keepalived.conf
[root@nginx1 ~]# yum install -y keepalived
[root@nginx2 ~]# yum install -y keepalived
[root@nginx1 ~]# cd /etc/keepalived/
[root@nginx1 keepalived]# ll
total 4
-rw-r--r-- 1 root root 3598 Oct 1 2020 keepalived.conf #基本的配置都是这这里完成
# 2、配置Keepalived
keepalived的配置文件详解,配置成如下配置
[root@nginx1 keepalived]# echo "127.0.0.1 LVS_DEVEL" >> /etc/hosts
[root@nginx2 keepalived]# echo "127.0.0.1 LVS_DEVEL" >> /etc/hosts
[root@nginx1 keepalived]# cat keepalived.conf
! Configuration File for keepalived
global_defs { # 全局模块
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_DEVELBACK # 访问到主机
vrrp_skip_check_adv_addr
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_script chk_http_port { # 执行脚本
script "/opt/nginx_check.sh"
interval 2 # 检测脚本执行的间隔
weight 2
}
vrrp_instance VI_1 {
state MASTER # 备份服务器上将MASTER修改成BACKUP
interface eth0 # 指定网卡名称
virtual_router_id 51 # 主备机的virtual_router_id必须相同
priority 100 # 主备机取值不同的优先级,主机值比较大,备份值比较小
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
chk_http_port
}
virtual_ipaddress { # 虚拟IP地址
192.168.0.119
}
}
# 3、编写执行脚本
该脚本是存放在opt下面的
[root@nginx1 opt]# cat nginx_check.sh
#!/bin/bash
A=`ps -C nginx - no-header | wc -l`
if [ $A -eq 0];then
systemctl start nginx
sleep 2
if [ `ps -C nginx --no-header | wc -l ` -eq 0 ];then
killall keepalived
fi
fi
# 4、启动测试
重启服务之后通过访问192.168.0.119的虚拟ip
[root@nginx1 ~]# systemctl restart keepalived
[root@nginx2 ~]# systemctl restart keepalived
上次更新: 2023/11/28, 22:03:59