nginx搭建高可用集群
在本文中,将利用keepalived + nginx搭建高可用集群,分别介绍主从模式和双主模式。
环境准备
首先需要准备环境,本文使用两台虚拟机搭建一个nginx高可用集群,虚拟机上分别安装nginx和keepalived,安装步骤如下:
-
使用如下命令安装相关依赖:
yum -y install make zlib zlib devel gcc c++ libtool openssl openssl dev el
-
安装nginx,去官网下载对应tar包,上传到虚拟机,解压,进行解压后的nginx安装包目录使用如下命令:
./configure make && make install
-
关闭防火墙或开放对应端口。(不同版本linux命令有所不同,下面是centos7使用firewall命令)
firewall-cmd --list-all #查看开放的端口号 firewall-cmd --add-service=80/tcp --permanent #设置开放的端口号 firewall-cmd --reload #重启防火墙 systemctl stop firewalld.service #停止firewall systemctl disable firewalld.service #禁止firewall开机启动
-
安装keepalived,使用如下命令:安裝完成后再/etc目录下生成keepalived文件,其中有keepalived.conf配置文件。
sudo yum install keepalived -y
主从模式
主从模式是在搭建的nginx集群中有一个启用节点,在没有出现宕机情况下由该节点完成反向代理等工作,当该节点宕机时,将会启动备用节点,达到高容错、高可用,不会因为一台nginx服务器挂掉而无法调用服务。
接下来进行配置文件的修改,首先查看本机联网网卡的名字,利用ifconfig(centos7是使用ip命令),如下图联网网卡是eth1,记住这个id,后面再配置文件中有用。
-
修改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_DEVEL #路由id vrrp_skip_check_adv_addr vrrp_strict vrrp_garp_interval 0 vrrp_gna_interval 0 } vrrp_script chk_http_port { script "/usr/local/src/nginx_check.sh" #检测脚本 interval 2 weight 2 } vrrp_instance VI_1 { state MASTER #该节点的状态,从节点需要设置为BACKUP interface eth1 #联网网卡 virtual_router_id 51 #主从节点的virtual_router_id必须相同 priority 100 #主从节点取冉优先级,主机较大,从机较小 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.145.220 #虚拟ip地址 } }
-
在
/usr/local/src/
目录下增加检测脚本,nginx_check.sh
,检测脚本内容如下:#!/bin/bash A=`ps -C nginx –no-header |wc -l` if [ $A -eq 0 ];then /usr/local/nginx/sbin/nginx sleep 2 if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then killall keepalived fi fi
-
两台虚拟机分别启动nginx和keepalived,命令如下:
./nginx #启动nginx service keepalived start #centos6使用该命令启动 systemctl start keepalived.service #centos7使用该命令启动
下图显示表示启动成功:
- 启动完成后,可以使用主机访问虚拟ip地址,可以看到能够正确访问到nginx服务器,接下来停止刚才为MASTER的节点的nginx和keepalived,之后再用该虚拟地址访问,同样可以访问到nginx服务器。这便是主从模式,当主节点宕机后,备份节点将代替主节点工作,继续工作。
双主模式
双主模式,每个节点既是主节点也是备份节点,当一个节点宕机,两个虚拟地址的请求都会转移到另外一个节点。
主从模式情况下,一台做主,一台做从,但同时只有一台机器工作,当主节点不出现故障时,另一台机器便一直处于资源浪费状态。所以双主模式可以解决资源浪费的情况。
- 配置双主模式,需要修改keepalived.conf配置文件,文件内容如下:(在主从模式情况下,主节点配置文件中添加虚拟实例VI_2即可)
! 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_DEVEL
vrrp_skip_check_adv_addr
vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_script chk_http_port {
script "/usr/local/src/nginx_check.sh"
interval 2
weight 2
}
vrrp_instance VI_1 {
state BACKUP
interface eth1
virtual_router_id 51
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.145.220
}
}
vrrp_instance VI_2 {
state BACKUP
interface eth1
virtual_router_id 52
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.145.230
}
}
在备份节点的keepalived.conf文件中添加以下内容:
vrrp_instance VI_2 {
state MASTER
interface eth1
virtual_router_id 52
priority 150
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.145.230
}
}
修改完成后重启keepalived即可,这时通过192.168.145.220
和192.168.145.230
两个虚拟地址都可以访问到nginx服务器,停止其中一台主机的keepalived和nginx服务后,还是可以访问到。
来源:oschina
链接:https://my.oschina.net/u/4412708/blog/3230585