1 nginx+keepalived双机热备的目的
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EbeOKoxb-1629896215704)(https://raw.githubusercontent.com/linglongQaQ/cloudimg/master/img/image-20210506112432917.png)]
在访问过程中,如果nginx服务器挂掉了,则web1 和web2中的服务都无法访问,保证nginx的高可用性,使用nginx+keepalived集群保证ngxin的高可用
2 搭建环境
系统:centos7.6
虚拟机:两台(192.168.92.144,192.168.92.145)
软件:ngxin,keepalive
2.1 安装ngxin
#1 切换到nginx的目录,设置ng的默认配置
./configure
#2 安装
make
make install
2.2 配置nginx的负载均衡(两台机器一样)
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
upstream web{
# 名为web的反向代理群组
#访问web服务的服务器ip
server 192.168.92.144;
server 192.168.92.145;
}
#gzip on;
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
root web;
location / {
if ( $request_uri = "/" ) {
##找到代理地址
proxy_pass http://web;
rewrite "/" /html/home.html permanent;
}
}
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|js|css|woff|ttf)$ {
root /usr/local/nginx/web/;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
2.2 安装keepalive
#1 使用yum 安装
yum install keepalive -y
2.3 修改配置文件
##修改keepalive的配置文件
vi /etc/keepalived/keepalived.conf
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
###host主机地址 要进行映射才能找到主机 类似于 127.0.0.1 LVS_DEVEL0 唯一
router_id LVS_DEVEL0
vrrp_skip_check_adv_addr
###vrrp-_strict 要注释掉否则无法ping通虚拟ip
#vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
###keepalive监测nginx服务状态的脚本
###这里的'{'要换行顶格,不能有空格
vrrp_script chk_ng
{
###执行脚本所在的位置 要和文件地址位置一致
script "/usr/local/src/ngx_check.sh"
#检测脚本执行的间隔,单位秒,每个2秒执行一次脚本
interval 2
#权重
weight 2
}
vrrp_instance VI_1 {
##主备模式下的名称 备用节点改为backup
state MASTER
###绑定的网卡名称 我这里是ens33 根据自己的网卡名称进行绑定
interface ens33
###集群模式先的唯一id 主备节点的id要保持一致
virtual_router_id 51
##权重 权重越大 访问次数越多 住节点的权重应大于备用节点的权重
priority 100
advert_int 1
##授权 和备用节点保持一致
authentication {
auth_type PASS
auth_pass 1111
}
###虚拟主机ip 在虚拟机的环境中 该ip应该和master的ip在同一网段
virtual_ipaddress {
192.168.92.100
}
###调用监测脚本
track_script {
##对应的脚本名称
chk_ng
}
}
说明:
**"###"**的说明容易踩坑,在进行配置时需注意
“##”和“#”的注释,是对配置的说明,较灵活
编写监测nginx状态的脚本
##1 创建脚本文件(文件位置看灵活变动,要和keepalive.conf中的脚本文件所在位置保持一致)
cd /usr/local/src/
touch ngx_check.sh
##2 编写脚本
#!/bin/bash
#当nginx进程不存在时,就干掉keepalived
if [ "$(ps -ef | grep "nginx: master process"| grep -v grep )" == "" ]
then
killall keepalived
fi
##3 给脚本授权,不搜授权,脚本无法执行
chmod 775 ngx_check.sh
注:
1 在编写脚本时,注意命名;脚本内容是 查看ngxin进程是否还存在,使用ps -ef|grep nginx查看进程会有三个进程;如果脚本文件命名为nginx_check.sh,那么使用ps查看nginx时就会有四个进程,导致脚本不执行
2 当脚本授权后,先手动执行一次,若能将keepalive服务停掉,则证明脚本编写成功;若出现“killall命令找不到,则使用yum 安装killall命令 yum -y install psmisc
3 测试
##1 两台机器分别启动nginx和keepalive 先后顺序(先启动ng,再启动keepalive服务)
/usr/local/nginx/sbin/nginx
systemctl start keepalived.service
##2 在浏览器输入虚拟IP访问网站,查看master机器的ip,绑定的是虚拟ip,而slave节点的机器没有绑定虚拟ip,若slave节点也有虚拟ip,则表明配置文件有误,需检查keepalive.conf的配置文件
##3 模拟服务器宕机:手动停止nginx服务器,在浏览器继续访问虚拟ip,依然能访问到网站,证明环境搭建成功;此时slave节点机器上的网卡绑定的虚拟IP,当master启动后,虚拟IP又被抢夺回去,绑定在master节点的网卡上
4 其他
数据同步方案:mysql做主从结构,保证数据的可用性和数据的一致性,尊从CAP理论原则
数据传输层:即从采集端到服务端,可以采用冗余方式保证数据的可靠性传输,即准备多台机器保证数据的正常传输,同时保证服务宕机后,服务在其他机器上的切换