Nginx是一款高性能的Web服务器和反向代理服务器,通常用来进行负载均衡,提供高可用的服务。而Keepalived是一款开源的高可用性解决方案,可以提高系统的可靠性和稳定性。
使用Nginx和Keepalived来配置高可用服务的具体步骤如下:
1. 安装Nginx和Keepalived
首先需要在所有的服务器上安装Nginx和Keepalived,具体安装方式可以参考相关的官方文档。
2. 配置Nginx服务
为了实现负载均衡,需要在所有的服务器上安装Nginx,并配置load balancing。可以在Nginx配置文件nginx.conf中添加如下内容:
```upstream webapp {
server 192.168.1.1:80;
server 192.168.1.2:80;
}
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://webapp;
}
}```
这里配置的是两台服务器的IP地址和端口号,实现了一个负载均衡的环境。通过location /配置Nginx将请求转发到指定的upstream服务中。
3. 配置Keepalived服务
为了实现高可用性,需要在所有的服务器上安装Keepalived,并配置虚拟IP(VIP)。
在主服务器上的Keepalived配置文件/etc/keepalived/keepalived.conf中添加如下内容:
```vrrp_script chk_nginx {
script "/etc/keepalived/nginx_chk.sh"
interval 2
}
vrrp_instance VI_1 {
interface eth0
state MASTER
virtual_router_id 51
priority 100
virtual_ipaddress {
192.168.1.100/24 dev eth0
}
track_script {
chk_nginx
}
}```
在备份服务器上的Keepalived配置文件/etc/keepalived/keepalived.conf中添加如下内容:
```vrrp_script chk_nginx {
script "/etc/keepalived/nginx_chk.sh"
interval 2
}
vrrp_instance VI_1 {
interface eth0
state BACKUP
virtual_router_id 51
priority 90
virtual_ipaddress {
192.168.1.100/24 dev eth0
}
track_script {
chk_nginx
}
}```
这里配置的是虚拟IP地址为192.168.1.100,通过virtual_ipaddress实现了虚拟IP的绑定。同时使用track_script实现master和backup服务器之间的自动切换,实现高可用性。
4. 编写健康检查脚本
为了保证服务的可靠性,需要实现健康检查脚本。可以自己编写一个nginx_chk.sh脚本,在主服务器和备份服务器上都需要放置该脚本,并赋予可执行权限。
```#!/bin/bash
A=`ps -C nginx --no-header |wc -l`
if [ $A -eq 0 ];then
systemctl restart keepalived
fi```
脚本中的A=`ps -C nginx --no-header |wc -l`表示查找nginx进程的数量,如果没有找到,则重新启动keepalived服务。
以上就是使用Nginx和Keepalived来配置高可用服务的具体步骤,它们的配合可以保证业务的高可用性和可靠性。
两台nginx服务器(主、备),需要一个共用的虚拟ip才能对外实习高可用
需要下载keepalived,在配置文件中配置。
yum install -y keepalived
[root@localhost ~]# ll /etc/keepalived/
总用量 4
-rw-r--r-- 1 root root 3598 10月 1 2020 keepalived.conf
主服务器80.123
! 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.80.123
smtp_connect_timeout 30
router_id mzptest1 # 主机名字
}
vrrp_script chk_http_port {
script "/root/nginx_check.sh"
interval 2 #(检测脚本执行的间隔)
weight 2 # 权重
}
vrrp_instance VI_1 {
state MASTER # 备份服务器上将 MASTER 改为 BACKUP
interface ens32 # 网卡
virtual_router_id 51 # 主、备机的 virtual_router_id 必须相同
priority 100 # 主、备机取不同的优先级,主机值较大,备份机值较小
advert_int 1 # 检测本机是否正常,时间间隔
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.80.50 # VRRP H 虚拟地址
192.168.80.51 # VRRP H 虚拟地址
}
}
添加脚本:检测服务器是否连接正常或者死机
#!/bin/bash
A=`ps -C nginx –no-header | wc -l`
if [ $A -eq 0 ];then
/usr/sbin/nginx
sleep 2
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
killall keepalived
fi
fi
从服务器80.99
! 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.80.123
smtp_connect_timeout 30
router_id mzptest2 # 理解为进程号,每个服务器上都是不一样的
}
vrrp_script chk_http_port {
script "/root/nginx_check.sh"
interval 2 #(检测脚本执行的间隔)
weight 2 # 权重
}
vrrp_instance VI_1 {
state BACKUP # 备份服务器上将 MASTER 改为 BACKUP
interface ens32 # 网卡
virtual_router_id 51 # 主、备机的 virtual_router_id 必须相同
priority 90 # 主、备机取不同的优先级,主机值较大,备份机值较小
advert_int 1 # 检测本机是否正常,时间间隔
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.80.50 # VRRP H 虚拟地址
192.168.80.51 # VRRP H 虚拟地址
}
}
添加脚本:
#!/bin/bash
A=`ps -C nginx –no-header | wc -l`
if [ $A -eq 0 ];then
/usr/sbin/nginx
sleep 2
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
killall keepalived
fi
fi
动静分离:
配置:autoindex 列出访问目录
错误收集:
重启配置文件不生效,重启失败报错
nginx无法绑定在0.0.0.0:808端口,错误码为“Permission denied”
原因是selinux
解决:getenforce