一、keepalived简介
Keepalived的作用是检测服务器的状态,如果有一台web服务器宕机,或工作出现故障,Keepalived将检测到,并将有故障的服务器从系统中剔除,同时使用其他服务器代替该服务器的工作,当服务器工作正常后Keepalived自动将服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的服务器。
二、实验前期准备
VIP | IP | 端口 | 主从 |
192.168.148.120 | 192.168.148.128 | 88 | 主 |
192.168.148.129 | 88 |
从 |
软件:1、Redhat 6.7两台,ip地址分别为192.168.148.128、192.168.148.129
2、keepalived-1.2.18.tar.gz
3、nginx-1.13.10.tar.gz
三、安装NGINX
首先需要安装编译 Nginx 所需的依赖包
# yum install gcc gcc-c++ make automake autoconf libtool pcre pcre-devel zlib zlib-devel openssl openssl-devel
1、下载nginx包并分别上传上传到两台linux主机上/usr/local/src目录下
2、解压并编译安装
# cd /usr/local/src/
# tar -zxvf nginx-1.13.0.tar.gz
# cd nginx-1.13.0
# ./configure --prefix=/usr/local/nginx
# make && make install
3、 配置nginx
# vim /usr/local/nginx/conf/nginx.com
server {
listen 88;#修改监听端口为88
server_name localhost;
}
4、修改nginx欢迎页面标题,以便区分
# vim /usr/local/nginx/html/index.html
5、 关闭防火墙,并测试是否安装成功
# service iptables stop
iptables: Setting chains to policy ACCEPT: filter [ OK ]
iptables: Flushing firewall rules: [ OK ]
iptables: Unloading modules: [ OK ]
# /usr/local/nginx/sbin/nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
6、相关命令
# /usr/local/nginx/sbin/nginx #启动
# /usr/local/nginx/sbin/nginx -s reload #重启
# /usr/local/nginx/sbin/nginx -s stop #关闭
# /usr/local/nginx/sbin/nginx -t #检测配置文件语法是否有错误
7、 分别查看两个主机的页面
四、keepalived安装与配置
1、下载解压并安装
# cd /usr/local/src
# tar -zxvf keepalived-1.2.18.tar.gz
# cd keepalived-1.2.18
# ./configure --prefix=/usr/local/keepalived
# make && make install
2、将keepalived安装成系统服务方便管理
# mkdir /etc/keepalived
# cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
# cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
# cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
3、节点配置
编写一个脚本来检测nginx服务是否开启,如果没开启就自动杀掉keepalived。
#!/bin/bash
A=`ps -C nginx --no-header |wc -l` #其中-C参数是指定执行指令的名称,并列出该指令的进程的状况
if [ $A -eq 0 ];
then
systemctl stop keepalived.service
fi
3.1 主节点--MASTER
# vi /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
## keepalived 自带的邮件提醒需要开启 sendmail 服务。 建议用独立的监控或第三方 SMTP
router_id liuyazhuang133 ## 标识本节点的字条串,通常为 hostname
}
vrrp_script chk_nginx {
script "/etc/keepalived/nginx_check.sh"
interval 2 #每两秒检测一次
weight -20
}
## 定义虚拟路由, VI_1 为虚拟路由的标示符,自己定义名称
vrrp_instance VI_1 {
state MASTER ## 主节点为 MASTER, 对应的备份节点为 BACKUP
interface eth0 ## 绑定虚拟 IP 的网络接口,与本机 IP 地址所在的网络接口相同, 我的是 eth0
virtual_router_id 33 ## 虚拟路由的 ID 号, 两个节点设置必须一样, 可选 IP 最后一段使用, 相同的 VRID 为一个组,他将决定多播的 MAC 地址
mcast_src_ip 192.168.148.128 ## 本机 IP 地址
priority 100 ## 节点优先级, 值范围 0-254, MASTER 要比 BACKUP 高
nopreempt ## 优先级高的设置 nopreempt 解决异常恢复后再次抢占的问题
advert_int 1 ## 组播信息发送间隔,两个节点设置必须一样, 默认 1s
## 设置验证信息,两个节点必须一致
authentication {
auth_type PASS
auth_pass 1111 ## 真实生产,按需求对应该过来
}
track_script {
chk_nginx
}
# 虚拟 IP 池, 两个节点设置必须一样
virtual_ipaddress {
192.168.148.120 ## 虚拟 ip,可以定义多个
}
}
3.2 从节点--BACKUP
# vi /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id liuyazhuang134
}
vrrp_instance VI_1 {
state BACKUP #从节点为BACKUP
interface eth1
virtual_router_id 33 #两个节点必须保持一致
mcast_src_ip 192.168.50.134 #本机ip
priority 90 #优先级,主节点要高于从节点
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.148.120 #虚拟地址
}
}
4、启动keepalived
#service keepalived on
5、keepalived+nginx高可用测试
两台主机都启动nginx和keepalived,浏览器地址栏输入192.168.148.120(虚拟ip),可以看到
关闭主节点的keepalived和nginx,浏览器地址栏输入192.168.148.120(虚拟ip),可以看到