1、首先准备两个linux虚拟服务器:
192.168.132.130(服务器1)、192.168.132.132(服务器2),虚拟ip:192.168.132.131
2、nginx安装及启动:
1、首先先把linux一般要用到的组件装一下:
yum install gcc-c++:gcc是Gnu的C语言编译器,至于C++编译器,它的名字叫做g++
yum install -y pcre pcre-devel:在Nginx编译需要 PCRE(Perl Compatible Regular Expression),因为Nginx 的Rewrite模块和HTTP 核心模块会使用到PCRE正则表达式语法
yum install -y zlib zlib-devel:压缩和解压缩库
yum install -y openssl openssl-devel:是一个SSL协议的开源实现
2、官网下载nginx-1.9.9.tar.gz并传至linux服务器/usr/local下
cd /usr/local:进入目录
tar -zxvf nginx-1.9.9.tar.gz:解压
cd nginx-1.9.9:进入解压后的文件夹下
./configure --prefix=/usr/local/nginx --conf-path=/usr/local/nginx/nginx.conf --with-http_stub_status_module --with-http_ssl_module:使用/usr/local/nginx/nginx.conf下的配置
make:编译
make install:安装
cd /usr/local/nginx/sbin/:进入安装后的nginx文件夹
./nginx -c /usr/local/nginx/nginx.conf:指定配置文件
./nginx -s reload:启动
其他命令:
./nginx -s stop 等待nginx处理任务完毕,停止nginx进程
./nginx -s quit 先查出进程ID,再使用kill命令强制杀掉进程
./nginx -s reload 不用重启nginx,使配置文件生效(若修改了nginx.conf)
ps -ef | grep nginx 查询 nginx 进程
whereis nginx 查询nginx的安装路径
./nginx -t 检查nginx.cnf的语法是否正确
3、启动nginx后需要关掉防火墙才能访问,nginx默认监听端口号为80:
systemctl disable firewalld:永久关闭防火墙
systemctl stop firewalld:暂时关闭防火墙
systemctl status firewalld:查看防火墙状态
通过192.168.132.130或192.168.132.132访问时会到nginx的index.html,分别修改index.html使其能分清楚是哪个服务器。
3、keepalived安装与配置:
1、首先安装要用到的组件:
yum install -y curl :一款很强大的http命令行工具。它支持文件的上传和下载,是综合传输工具,但按传统,习惯称url为下载工具
yum install -y libnl3-devel;提供了一套应用于Linux系统基于Netlink协议通信的API接口
yum install -y net-snmp-devel;网络管理协议,它属于TCP/IP五层协议中的应用层协议
2、下载keepalived:yum install -y keepalived
3、查看并编辑:vi /etc/keepalived/keepalived.conf
服务器1(主):
! 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 # 用户标识本节点的名称,通常为hostname
vrrp_skip_check_adv_addr
#vrrp_strict 要注释掉否则虚拟ip访问不了
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_instance VI_1 {
state MASTER
interface ens33 # 虚拟id(vip)绑定的网卡接口,可通过ip addr查看
virtual_router_id 51 # 虚拟路由的ID号,每个节点设置必须一样,可选择IP最后一段使用,相同的 VRID 为一个组,他将决定多播的 MAC 地址。
priority 100 # 权重,比备份服务器的大时当主服务器从宕机恢复过来时会抢占主服务器
advert_int 1 # MASTER与BACKUP节点间同步检查的时间间隔,单位为秒
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress { # 虚拟IP地址池,可以有多个IP,每个IP占一行
192.168.132.131
}
}
服务器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 # 用户标识本节点的名称,通常为hostname
vrrp_skip_check_adv_addr
#vrrp_strict 要注释掉否则虚拟ip访问不了
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_instance VI_1 {
state BACKUP
interface ens33 # 虚拟id(vip)绑定的网卡接口,可通过ip addr查看
virtual_router_id 51 # 虚拟路由的ID号,每个节点设置必须一样,可选择IP最后一段使用,相同的 VRID 为一个组,他将决定多播的 MAC 地址。
priority 99 # 权重,比主服务器的小
advert_int 1 # MASTER与BACKUP节点间同步检查的时间间隔,单位为秒
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress { # 虚拟IP地址池,可以有多个IP,每个IP占一行
192.168.132.131
}
}
4、启动:systemctl start keepalived
其他命令:
systemctl restart keepalived:重启
systemctl stop keepalived:停止
systemctl status keepalived:查看状态
tail -f /var/log/messages:查看是否启动
通过ip addr命令查看:
服务器1:
ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:12:b1:31 brd ff:ff:ff:ff:ff:ff
inet 192.168.132.130/24 brd 192.168.132.255 scope global noprefixroute dynamic ens33
valid_lft 1519sec preferred_lft 1519sec
inet 192.168.132.131/32 scope global ens33
valid_lft forever preferred_lft forever
inet6 fe80::9b3e:6d14:d65:c286/64 scope link noprefixroute
valid_lft forever preferred_lft forever
服务器2:并没有192.168.132.131虚拟地址,这是因为此时主服务器权重高抢占了虚拟ip,当主服务器关闭后备份服务器会出现虚拟ip
ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:43:0a:46 brd ff:ff:ff:ff:ff:ff
inet 192.168.132.132/24 brd 192.168.132.255 scope global noprefixroute dynamic ens33
valid_lft 1374sec preferred_lft 1374sec
inet6 fe80::e8b1:993c:4765:abb7/64 scope link noprefixroute
valid_lft forever preferred_lft forever
4、此时keepalived监控的是自身,要想监控nginx状态需要编写vrrp_script脚本(这样在nginx挂掉时会切换到备份服务器,nginx启动后主服务器又会抢占虚拟ip):
check_ng.sh文件如下:
#!/bin/bash
run=`ps -C nginx --no-header | wc -l`
if [ $run -eq 0 ]
then
killall keepalived
fi
【注】此文件一定要在linux下看下文件格式,在notepad编辑的为:使用vi查看文件,:set ff查看格式,如为fileformat=dos则:set fileformat=unix
将keepalived修改为:
! 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_garp_interval 0
vrrp_gna_interval 0
}
vrrp_script chk_nginx {
script "/usr/local/sbin/check_ng.sh" #监控服务脚步
interval 2 #检测时间间隔(执行脚步间隔)
weight -2
}
vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.132.131
}
track_script { #以脚本为监控chk_nginx是前面填写的(一定要放在virtual_ipaddress 后面)
chk_nginx
}
}