nginx+keepalived:局域网内网和公网外网 搭建nginx HA 双机热备 高可用

 

日萌社

人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战(不定时更新)


 

nginx+keepalived:局域网内网和公网外网 搭建nginx HA 双机热备 高可用

nginx 把 POST请求数据 写入到 日志文件中

nginx 自动解压gzip压缩数据的两种方式:nginx自动解压、后台java程序解压

nginx安装、nginx反向代理/负载均衡、Lua、LuaJIT、openresty、lua-nginx-module、ngx_devel_kit 的安装

nginx 配置获取GET请求参数、POST请求参数、nginx配置开启跨域访问、nginx+keepalived配置主备切换/双机热备、nginx优化配置


yum -y install gcc gcc-c++ lua-devel pcre pcre-devel zlib zlib-devel


禁用 防火墙(重启生效)
    查看防火墙状态 systemctl status firewalld
    查看开机是否启动防火墙服务 systemctl is-enabled firewalld
    关闭防火墙 systemctl stop firewalld
    禁用防火墙 systemctl disable firewalld

 

禁用 SELINUX
    1.临时关闭SELINUX
        setenforce 0 ##设置SELinux 成为permissive模式
        getenforce ##可以用这个命令检查是否为Permissive 或者为 Disabled
    2.永久关闭SELINUX 
        修改配置文件 vim /etc/selinux/config(重启生效) 
        将 SELINUX=enforcing 改为 SELINUX=disabled 
    3.查看SELINUX状态 sestatus
        getenforce ##可以用这个命令检查是否为Permissive 或者为 Disabled
        reboot 重启机器后 执行 sestatus 显示 SELinux status:  disabled


nginx+keepalived:局域网内网 搭建nginx HA 双机热备 高可用

要求master和backup两台机器的广播地址要一致,那么才能通信进行master和backup之间的选举机制,也才能让vip在master和backup之间进行切换的通信

192.168.88.100 node1(master) 安装 nginx + Keepalived
192.168.88.101 node2(backup) 安装 nginx + Keepalived
192.168.88.110 vip(该IP可以为不存在的局域网内IP,只用于一开始映射master的网卡)


192.168.88.100 node1(master) 和 192.168.88.101 node2(backup) 安装 nginx 

    tar -zxvf nginx-1.17.0.tar.gz
    cd /root/nginx
    ./configure --prefix=/usr/local/nginx
    make
    make install
 
    修改 /usr/local/nginx/html/index.html 的页面内容 用于识别浏览器切换到哪台机器上的 nginx
 
    nginx 启动 和 加载指定nginx.conf配置文件的方式启动
         cd /usr/local/nginx/sbin 执行./nginx 或 ./nginx -c /usr/local/nginx/conf/nginx.conf
         
        /usr/local/nginx/sbin/nginx
        /usr/local/nginx/sbin/nginx -s stop
        /usr/local/nginx/sbin/nginx -s reload
 
    浏览器访问 192.168.88.100 和 192.168.88.101
    默认日志存放路径:/usr/local/nginx/logs
    ps aux|grep nginx


192.168.88.100 node1(master) 和 192.168.88.101 node2(backup) 安装 keepalived
 
    tar -zxvf keepalived-2.0.16.tar.gz
    cd /root/keepalived
    ./configure --prefix=/usr/local/keepalived
    make
    make install
 
     建立软链接
        ln -s /usr/local/keepalived/sbin/keepalived /sbin/
        ln -s /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
        ln -s /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/

    keepalived 启动 和 加载指定nginx.conf配置文件的方式启动
        keepalived -D -f /usr/local/keepalived/etc/keepalived/keepalived.conf

    keepalived 关闭
        killall keepalived
        
    ps aux|grep keepalived
    
    service keepalived restart     或 /bin/systemctl restart keepalived.service
    service keepalived status     或 /bin/systemctl status keepalived.service
    service keepalived stop     或 /bin/systemctl stop keepalived.service
    service keepalived start     或 /bin/systemctl start keepalived.service
        
    默认keepalived 日志存放在系统日志:cat /var/log/messages 


ip addr 查看网卡名称,用以配置keepalived.conf中的interface
    查看到 网卡名称为ens33。其他机器有可能是 eth0

keepalived帮助nginx热备切换的原理
    1.当MASTER的nginx宕掉时,则可在循环检测的脚本中自动停止MASTER的keepalived,然后MASTER的vip就会移动到BACKUP上的nginx。 
    2.MASTER的keepalived停止会导致MASTER的vip移动到BACKUP上的nginx上,那么BACKUP 就会变成 MASTER,那么变成由MASTER的nginx提供服务。
      当原本的MASTER上重启keepalived和nginx后,BACKUP重新变为BACKUP,MASTER重新又变为MASTER,重新由MASTER的nginx提供服务。
    3.结论:要想达到nginx热备切换,就是当MASTER的nginx宕掉时,就需要通过脚本必须也把MASTER的keepalived停止掉,然后vip才会发生转移,
            vip的转移体现在:通过ip addr查看到MASTER的网卡中的IP消失,IP转而出现在BACKUP的网卡中。
            vip的转移的作用:通过IP访问nginx时,就会从MASTER的nginx转而访问BACKUP的nginx。

默认keepalived 日志存放在系统日志:cat /var/log/messages  


192.168.88.100 node1(master)  配置keepalived.conf:vim /usr/local/keepalived/etc/keepalived/keepalived.conf
(在默认的keepalive.conf里面还有 virtual_server,real_server 这样的配置,我们这用不到,它是为lvs准备的。) 

vim /home/data/keepalived/etc/keepalived/keepalived.conf

vrrp_script chk_http_port {
    script "/root/chk_nginx_pid.sh"
    interval 2                #检测脚本执行的间隔
    weight 2
}

vrrp_instance VI_1 {  
    state MASTER               #指定keepalived的角色,MASTER为主,BACKUP为备     
    interface ens33         #当前进行vrrp通讯的网络接口卡(使用 ip addr 查看当前centos7的网卡名称,可能是ens33或eth0)
    virtual_router_id 51      #虚拟路由编号,主备的virtual_router_id要一致
    priority 100              #定义优先级,数字越大,优先级越高,获取处理请求的优先级越高,MASTER要比BACKUP的priority值高
    advert_int 1              #检查间隔,默认为1s(vrrp组播周期秒数)
    authentication {  
        auth_type PASS  
        auth_pass 1111  
    }  
  track_script {
       chk_http_port        #调用检测脚本 执行监控的服务
   }
    virtual_ipaddress {  
        192.168.88.110       #VIP:该IP不是真正存在的IP,是虚拟的不存在的IP
    }  
}  


192.168.88.101 node2(backup) 配置keepalived.conf:vim /usr/local/keepalived/etc/keepalived/keepalived.conf
(在默认的keepalive.conf里面还有 virtual_server,real_server 这样的配置,我们这用不到,它是为lvs准备的。)

vim /home/data/keepalived/etc/keepalived/keepalived.conf

vrrp_script chk_http_port {
    script "/root/chk_nginx_pid.sh"
    interval 2
    weight 2
}

vrrp_instance VI_1 {  
    state BACKUP 		# 这里改为 BACKUP
    interface ens33  
    virtual_router_id 51  
    priority 99 		# 当前BACKUP这里改为99,master优先级是100
    advert_int 1  
    authentication {  
        auth_type PASS  
        auth_pass 1111  
    }  
    track_script {
       chk_http_port
   }
    virtual_ipaddress {  
        192.168.88.110   
    }  
}

检测脚本

vim /root/chk_nginx_pid.sh
chmod 777 chk_nginx_pid.sh

#!/bin/bash
A=`ps -C nginx --no-header |wc -l`
if [ $A -eq 0 ]
then
    echo 'nginx server is died'
    sudo killall keepalived
fi

    默认keepalived 日志存放在系统日志:cat /var/log/messages  


nginx+keepalived:公网外网 搭建nginx HA 双机热备 高可用

应该要符合以下3条才能成功的
1.广播地址要 一样的
2.外网IP 之间可以互相ping通
3.vip虚拟IP 要用通过路由创建出来的外网IP(并且能访问外网),不能用外网网卡唯一IP

要求master和backup两台机器的广播地址要一致,那么才能通信进行master和backup之间的选举机制,也才能让IP在master和backup之间进行切换的通信

默认keepalived 日志存放在系统日志:cat /var/log/messages 

node1(master) 安装 nginx + Keepalived
外网IP例子(一台机器有多个公网IP)
        130.110.22.26 (外网网卡eno1中唯一的真正的公网IP)
        130.110.22.27(通过路由创建出来的公网IP,并非本机的唯一真正的公网IP,但也可以通过该路由出来的公网IP访问本机)
    
node2(backup) 安装 nginx + Keepalived
外网IP例子(一台机器有多个公网IP)
        130.110.22.50(外网网卡eno1中唯一的真正的公网IP)
        130.110.22.51(通过路由创建出来的公网IP,并非本机的唯一真正的公网IP,但也可以通过该路由出来的公网IP访问本机)

使用node1(master) 的其中一个路由创建出来的公网IP 130.110.22.27 作为vip,可用于master和backup之间切换使用的vip。

注意1:通过路由创建出来的公网IP也必须是注册在互联网上服务器的唯一可用IP地址。

注意2:绝对不能使用外网网卡中唯一的真正的公网IP来作为vip,不然当vip切换的时候,外网网卡中唯一的真正 的公网IP就会变会被注册到别的机器上,那么便无法访问原主机了。因此只能使用通过路由创建出来的公网IP来作为vip。


检测脚本 

vim /home/data/chk_nginx_pid.sh
cd /home/data
chmod 777 chk_nginx_pid.sh

#!/bin/bash
A=`ps -C nginx --no-header |wc -l`
if [ $A -eq 0 ]
then
    echo 'nginx server is died'
    sudo killall keepalived
fi

node1(master) 安装 nginx + Keepalived
外网IP例子(一台机器有多个公网IP) 

        130.110.22.26 (外网网卡eno1中唯一的真正的公网IP)
        130.110.22.27(通过路由创建出来的公网IP,并非本机的唯一真正的公网IP,但也可以通过该路由出来的公网IP访问本机)

注意:绝对不能使用外网网卡中唯一的真正的公网IP来作为 vip,不然当vip切换的时候,外网网卡中唯一的真正 的公网IP就会变会被注册到别的机器上,那么便无法访问原主机了。因此只能使用通过路由创建出来的公网IP来作为 vip。

vim /home/data/keepalived/etc/keepalived/keepalived.conf

global_defs
{
	script_user root #用户名
	enable_script_security
}

vrrp_script check_nginx {            
   script "/home/data/chk_nginx_pid.sh"  
   interval 3                         
}

vrrp_instance http {
    state MASTER
    interface eno1  		
    lvs sync daemon interface eno1 
 
    mcast_src_ip 130.110.22.26
    garp_master_delay 6
    virtual_router_id 60
    priority 110
    advert_int 1

    authentication {
    auth_type PASS
    autp_pass 1234
    }

    virtual_ipaddress {
     130.110.22.27
    }
 
    track_script {
    check_nginx 
    }
}

node2(backup) 安装 nginx + Keepalived
外网IP例子(一台机器有多个公网IP)
        130.110.22.50(外网网卡eno1中唯一的真正的公网IP)
        130.110.22.51(通过路由创建出来的公网IP,并非本机的唯一真正的公网IP,但也可以通过该路由出来的公网IP访问本机)

注意:绝对不能使用外网网卡中唯一的真正的公网IP来作为 vip,不然当 vip切换的时候,外网网卡中唯一的真正 的公网IP就会变会被注册到别的机器上,那么便无法访问原主机了。因此只能使用通过路由创建出来的公网IP来作为 vip。

vim /home/data/keepalived/etc/keepalived/keepalived.conf

global_defs
{
	script_user root #用户名
	enable_script_security
}

vrrp_script check_nginx {
   script "/home/data/chk_nginx_pid.sh" 
   interval 3
}

vrrp_instance http {
    state BACKUP
    interface eno1
    lvs sync daemon interface eno1
 
    mcast_src_ip 130.110.22.50
    garp_master_delay 6
    virtual_router_id 60
    priority 105
    advert_int 1

    authentication {
    auth_type PASS
    autp_pass 1234
    }

    virtual_ipaddress {
     130.110.22.27
    }

    track_script {
    check_nginx 
    }
}

测试

	keepalived 启动 和 加载指定nginx.conf配置文件的方式启动
		keepalived -D -f /data/keepalived/etc/keepalived/keepalived.conf
		/data/keepalived/etc/sysconfig/keepalived -D -f /data/keepalived/etc/keepalived/keepalived.conf
		
	keepalived 关闭(yum install psmisc)
		killall keepalived
		
	netstat -an | grep 112  默认端口 	
	ps aux|grep keepalived
	
默认日志存放在系统日志:cat /var/log/messages 
ip addr

cdh01(master)
	eno1:存在 vip地址
   
cdh02(backup) 
	eno1:不存在 vip地址
	
测试:停掉cdh01的nginx,同时keepalived自动执行脚本chk_nginx_pid.sh,keepalived也会自动停止
		/data/nginx/sbin/nginx -s stop
		ps aux|grep nginx
 
cdh01(master)
	eno1:不存在 vip地址
   
cdh02(backup) 
	eno1:存在 vip地址
	
测试:重新启动cdh01的nginx、keepalived,必须先启动nginx 再启动keepalived,因为一启动keepalived,cdh02的vip就会重新漂移回到cdh01上
		keepalived -D -f /data/keepalived/etc/keepalived/keepalived.conf
		/data/nginx/sbin/nginx -c /data/nginx/conf/nginx.conf
		ps aux|grep keepalived
		ps aux|grep nginx
	默认日志存放在系统日志:cat /var/log/messages 
	日志中错误信息1:
			Unsafe permissions found for script 
			script_user #脚本执行用户,该参数是我们根据官方说明手动添加的,默认没有,如果不添加,会报错 WARNING - default user 'keepalived_script' for script execution does not exist - please create.
			enable_script_security #设置脚本的可运行性,该参数是我们根据官方说明手动添加的,默认没有,如果不添加,会报错 WARNING - default user 'keepalived_script' for script execution does not exist - please create.
	解决:
		global_defs
		{
			script_user gzp #用户名
			enable_script_security
		}

 

  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
是可以的,你可以通过Keepalived来实现Nacos和Kafka的双机热备,而不用通过Nginx代理转发。下面是具体的配置步骤: 1. 安装Keepalived 在双机中的一台服务器上安装Keepalived,可以通过以下命令来安装: ``` yum install keepalived ``` 2. 配置Keepalived 在每台服务器上都需要进行以下配置步骤: 创建一个Keepalived配置文件,比如`/etc/keepalived/keepalived.conf`,并添加以下内容: ``` vrrp_script check_nacos { script "/bin/bash /usr/local/nacos/bin/startup.sh status" interval 2 } vrrp_instance VI_1 { interface eth0 state MASTER virtual_router_id 51 priority 101 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.1.100/24 } track_script { check_nacos } } ``` 其中,`vrrp_script`部分是用来检查Nacos是否正常运行的脚本,`vrrp_instance`部分是用来配置Keepalived的虚拟IP地址和其它参数的。在`vrrp_instance`中,`state`参数需要设置为`MASTER`或`BACKUP`,分别表示当前服务器的角色是主服务器还是备份服务器。`priority`参数则用来确定当前服务器的优先级,数字越大表示优先级越高。 3. 启动Keepalived 在每台服务器上启动Keepalived服务,可以通过以下命令来启动: ``` systemctl start keepalived ``` 4. 配置Nacos和Kafka 在Nacos和Kafka的配置文件中,将它们的地址指向Keepalived的虚拟IP地址即可。比如,在Nacos的`application.properties`文件中添加以下内容: ``` spring.cloud.nacos.discovery.server-addr=192.168.1.100:8848 ``` 在Kafka的`server.properties`文件中添加以下内容: ``` listeners=PLAINTEXT://192.168.1.100:9092 ``` 这样,当一台服务器宕机时,另一台服务器会自动接管虚拟IP地址,从而实现Nacos和Kafka的双机热备

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

あずにゃん

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值