一:什么是nginx高可用
我们在使用nginx进行负载均衡是,服务器高可用了,但一旦nginx宕机了,整个服务就不可用了,我们可以使用keepalived实现nginx高可用
二:什么是keepalived
keepalived是以VRRP(Virtual Router Redundancy protocol)协议为实现基础的,VRRP是虚拟路由冗余协议,它是实现路由器高可用的协议,将多台路由器设备虚拟成一个设备,对外提供一个虚拟的IP也就是VIP,多台服务器里有一个master,其他都是backup,master会发组包vrrp包给backup,用于证明自己活着,当backup收不到vrrp包时就认为master挂掉了,这时就需要VRRP的优先级来选举一个backup当master。
keepalived结合nginx的整体架构
三: 配置高可用的准备工作
- 准备两台服务器 101.133.165.241 和101.133.165.242
- 在两台服务器上都安装nginx(nginx的安装可以看我前面的博客,这里就不介绍了)
- 在两台服务器上安装keepalived
1.第一种方式安装:使用yum命令安装
yum install keepalived -y
# 查看版本:
rpm -q -a keepalived
2.第二中方式安装,上传压缩包到自己的目录然后解压安装
tar -zxvf keepalived-2.0.18.tar.gz
cd keepalived-2.0.18
./configure
make && make install
3.安装成功以后,在etc里面生产keepalived目录,有文件keepalived.conf文件,主从模式就在这个文件里面配置
四:高可用配置(主从配置)
- 进入到/etc/keepalived目录,修改keepalived.conf文件
cd /etc/keepalived
vi keepalived.conf
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 101.133.165.241
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_script chk_http_port {
script "/usr/local/src/nginx_check.sh"
interval 2 #(检测脚本执行的间隔)
weight 2
}
vrrp_instance VI_1 {
state MASTER # 备份服务器上将 MASTER 改为 BACKUP
interface eth0 //网卡,需要使用ifconfig查看
virtual_router_id 51 # 主、备机的 virtual_router_id 必须相同
priority 100 # 主、备机取不同的优先级,主机值较大,备份机值较小
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
208.208.128.50 // VRRP H 虚拟地址
}
}
- 网卡,使用ifconfig就可以看到
- 添加检测脚本
1.进入到/usr/local/src中,添加nginx_check.sh文件
cd usr/local/src/
#!/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和keepalived启动
1.启动nginx
cd /usr/local/nginx/sbin
./nginx
2.启动keepalived
systemctl start keepalived.service #启动服务
ps -ef |grep keepalived #查看进程
- 测试,使用虚拟ip访问页面,停止主的服务器,也能访问到页面
- 高可用配置文件详解
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 101.133.165.241
smtp_connect_timeout 30
router_id LVS_DEVEL #访问到主机 ,可以在/etc/hosts文件中添加
}
vrrp_script chk_http_port {
script "/usr/local/src/nginx_check.sh"
interval 2 #(检测脚本执行的间隔)
weight 2 #权重
}
vrrp_instance VI_1 {
state MASTER # 备份服务器上将 MASTER 改为 BACKUP
interface eth0 //网卡,需要使用ifconfig查看
virtual_router_id 51 # 主、备机的 virtual_router_id 必须相同
priority 100 # 主、备机取不同的优先级,主机值较大,备份机值较小
advert_int 1 #一秒检测一次
authentication { #密码认证的方式
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
208.208.128.50 // VRRP H 虚拟地址
}
}