高可用逻辑分析示意图
一、配置高可用的准备工作
1、需要准备至少两台Linux服务器172.21.83.182和192.168.209.131
2、在两台Linux服务器上分别安装好nginx
这里我已经在两台Linux服务器中已经安装好了nginx
第一台Linux服务器中安装的nginx
第二台Linux服务器中安装的nginx
3、在两台Linux服务器上分别安装keepalived
两台Linux服务器分别安装keepalived
这里我们使用yum在线安装keepalived,执行命令:yum install keepalived -y
查看是否已经将keepalived安装成功,执行命令:rpm -q -a keepalived
keepalived的安装位置 /etc/keepalived
keepalived的配置文件 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
vrrp_skip_check_adv_addr
vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.200.16
192.168.200.17
192.168.200.18
}
}
virtual_server 192.168.200.100 443 {
delay_loop 6
lb_algo rr
lb_kind NAT
persistence_timeout 50
protocol TCP
real_server 192.168.201.100 443 {
weight 1
SSL_GET {
url {
path /
digest ff20ad2481f97b1754ef3e12ecd3a9cc
}
url {
path /mrtg/
digest 9b3a0c85a887a256d6939da88aabd8cd
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
virtual_server 10.10.10.2 1358 {
delay_loop 6
lb_algo rr
lb_kind NAT
persistence_timeout 50
protocol TCP
sorry_server 192.168.200.200 1358
real_server 192.168.200.2 1358 {
weight 1
HTTP_GET {
url {
path /testurl/test.jsp
digest 640205b7b0fc66c1ea91c463fac6334d
}
url {
path /testurl2/test.jsp
digest 640205b7b0fc66c1ea91c463fac6334d
}
url {
path /testurl3/test.jsp
digest 640205b7b0fc66c1ea91c463fac6334d
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 192.168.200.3 1358 {
weight 1
HTTP_GET {
url {
path /testurl/test.jsp
digest 640205b7b0fc66c1ea91c463fac6334c
}
url {
path /testurl2/test.jsp
digest 640205b7b0fc66c1ea91c463fac6334c
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
virtual_server 10.10.10.3 1358 {
delay_loop 3
lb_algo rr
lb_kind NAT
persistence_timeout 50
protocol TCP
real_server 192.168.200.4 1358 {
weight 1
HTTP_GET {
url {
path /testurl/test.jsp
digest 640205b7b0fc66c1ea91c463fac6334d
}
url {
path /testurl2/test.jsp
digest 640205b7b0fc66c1ea91c463fac6334d
}
url {
path /testurl3/test.jsp
digest 640205b7b0fc66c1ea91c463fac6334d
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 192.168.200.5 1358 {
weight 1
HTTP_GET {
url {
path /testurl/test.jsp
digest 640205b7b0fc66c1ea91c463fac6334d
}
url {
path /testurl2/test.jsp
digest 640205b7b0fc66c1ea91c463fac6334d
}
url {
path /testurl3/test.jsp
digest 640205b7b0fc66c1ea91c463fac6334d
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
二、配置高可用(主从配置)
1、分别修改两台Linux服务器中keepalived的配置文件 keepalived.conf
(1)第一台主Linux服务器172.21.83.182
修改keepalived.conf配置文件
global_defs { # 全局定义
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 172.21.83.182
smtp_connect_timeout 30
router_id LVS_DEVEL #router_id 全局唯一的值,也可以改为自己的ip地址
}
vrrp_script chk_http_port {
script "/usr/local/src/nginx_check.sh" # 检测脚本(主要用于检测Nginx服务是否还活着,如果Nginx服务宕机,则会切换到另外一台Nginx服务上去)
interval 2 # 检测脚本执行间隔
weight 2 # 权重
}
vrrp_instance VI_1 {
state MASTER # 如果是主服务器,那么这里就是MASTER(主),如果是备份服务器,那么这里就是BACKUP(备)
interface eth0 # 网卡名称(这个可以在Linux系统中输入ifconfig查看到具体的网卡名称叫什么)
virtual_router_id 51 # 主、备机的virtual_router_id必须相同
priority 100 # 主、备及取不同的优先级,主机值较大,备份机值较小
advert_int 1 # 心跳检测,默认是每个1秒钟发送一次心跳检测
authentication { # 校验权限的方式,默认是PASS 1111
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.200.16 # 虚拟IP地址
}
}
rooter_id说明:
网卡说明:
修改好keepalived.conf配置文件后,将主机Linux服务器上 /etc/keepalived 目录中的keepalived.conf配置文件替换掉
将nginx_check.sh检测脚本放到对应Linux服务器 /usr/local/src/ 目录中去,注意这里的检测脚本是跟keepalived.conf配置文件中 script "/usr/local/src/nginx_check.sh" 路径一致
检测脚本位置
nginx_check.sh脚本文件
#!/bin/bash
A=`ps -C nginx ¨Cno-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
(2)第二台备份Linux服务器192.168.209.131
修改keepalived.conf配置文件
global_defs { # 全局定义
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 172.21.83.182
smtp_connect_timeout 30
router_id LVS_DEVEL #router_id 全局唯一的值,也可以改为自己的ip地址
}
vrrp_script chk_http_port {
script "/usr/local/src/nginx_check.sh" # 检测脚本(主要用于检测Nginx服务是否还活着,如果Nginx服务宕机,则会切换到另外一台Nginx服务上去)
interval 2 # 检测脚本执行间隔
weight 2 # 权重
}
vrrp_instance VI_1 {
state BACKUP # 如果是主服务器,那么这里就是MASTER(主),如果是备份服务器,那么这里就是BACKUP(备)
interface eno16777736 # 网卡名称(这个可以在Linux系统中输入ifconfig查看到具体的网卡名称叫什么)
virtual_router_id 51 # 主、备机的virtual_router_id必须相同
priority 90 # 主、备及取不同的优先级,主机值较大,备份机值较小
advert_int 1 # 心跳检测,默认是每个1秒钟发送一次心跳检测
authentication {# 校验权限的方式,默认是PASS 1111
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.200.16 # 虚拟IP地址
}
}
rooter_id说明:
网卡说明:
修改好keepalived.conf配置文件后,将主机Linux服务器上 /etc/keepalived 目录中的keepalived.conf配置文件替换掉
将nginx_check.sh检测脚本放到对应Linux服务器 /usr/local/src/ 目录中去,注意这里的检测脚本是跟keepalived.conf配置文件中 script "/usr/local/src/nginx_check.sh" 路径一致
检测脚本位置
nginx_check.sh脚本文件
#!/bin/bash
A=`ps -C nginx ¨Cno-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
2、分别启动主备服务器中的nginx和keepalived
进入到 /usr/local/nginx/sbin 目录下
执行启动nginx命令:./nginx
执行启动keepalived命令:systemctl start keepalived.service 拓展:停止keepalived命令:systemctl stop keepalived.service
3、查看虚拟ip绑定情况
虚拟ip地址:192.168.200.16
172.21.83.182主服务器
192.168.209.131备服务器
三、最终测试
在浏览器中输入虚拟ip地址,192.168.200.16访问nginx首页,然后尝试停止掉一天nginx服务器和keepalived服务看是否还可以成功访问。