Linux 集群 Keepalived+nginx

Linux 集群 Keepalived+nginx

 

搭建高可用集群

高可用集群,即“HA集群”,也常称作“双机热备”,用于关键业务。常见实现高可用的开源软件有heartbeatkeepalived,其中keepalived还有负载均衡的功能。这两个软件类似,核心原理都是通过心跳线连接两台服务器,正常情况下由一台服务器提供服务,当这台服务器宕机,备用服务器顶替。

nginx安装

nginx官网地址:nginx: download

这两个随便下载一个,传到你的服务器上

[root@nginx ~]# yum -y install pcre-devel openssl openssl-devel gcc gcc-c++

 开启nginx:

复制代码
复制代码
[root@nginx ~]# ll
总用量 1056
-rw-------. 1 root root    1311 12月 20 22:36 anaconda-ks.cfg
-rw-r--r--  1 root root 1073364 2月  28 17:32 nginx-1.21.6.tar.gz
[root@nginx ~]# tar -zxvf nginx-1.21.6.tar.gz
[root@nginx ~]# cd nginx-1.21.6
[root@nginx nginx-1.21.6]# ./configure
[root@nginx nginx-1.21.6]# make && make install
[root@nginx nginx-1.21.6]# cd /usr/local/nginx/sbin/
[root@nginx sbin]# ./nginx
[root@nginx sbin]# netstat -lntp |grep nginx (或者用 yum install -y net-tools)
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      4539/nginx: master 
复制代码
复制代码

访问服务器:

 

 1.安装keepalived

VRRP协议有1个master角色和至少1个backup角色,所以做本实验需要准备至少两台Linux机器。

master:192.168.200.52     安装keepalived+Nginx 

backup:192.168.200.25       安装keepalived+Nginx 

VIP:192.168.200.100

分别在两台机器上执行如下操作:

# yum install -y keepalived

CentOS默认的yum源里就有keepalived包,安装keepalived很简单,但重点在于配置,下面我们拿一个实际案例来阐述 keepalived的高可用功能。

2.Keepalived配置文件:

编辑master(192.168.200.52)的keepalived配置文件:

复制代码
[root@master ~]# vim /etc/keepalived/keepalived.conf      //内容如下
global_defs {         #全局配置标识,表明这个区域{}是全局配置
   notification_email {    
        131917381@qq.com   #表示发送通知邮件时邮件源地址是谁
   }
   notification_email_from root@aaaaa.com    #表示keepalived在发生诸如切换操作时需要发送email通知,以及email发送给哪些邮件地址,邮件地址可以多个,每行一个
   smtp_server 127.0.0.1                     #表示发送email时使用的smtp服务器地址,这里可以用本地的sendmail来实现
   smtp_connect_timeout 30                   #连接smtp连接超时时间
   router_id LVS_DEVEL                       #机器标识
}

vrrp_script chk_nginx {    
    script "/usr/local/sbin/check_ng.sh"    #检查服务是否正常,通过写脚本实现,脚本检查服务健康状态
    interval 3                              #检查时间间断是3秒
    }

vrrp_instance VI_1 {                        #VRRP配置标识 VI_1是实例名称
    state MASTER                            #定义master相关
    interface ens33                         #通过vrrp协议去通信、去发广播。此为网卡名
    virtual_router_id 51                    #定义路由器ID ,配置的时候和从机器一致    
    priority 100                            #权重,主角色和从角色的权重是不同的,一般主比从大
    advert_int 1                            #设定MASTER与BACKUP主机质检同步检查的时间间隔,单位为秒
    authentication {                        #认证相关信息
        auth_type PASS                      #认证类型
        auth_pass 5201314>g                 #密码的形式是一个字符串
    }
    virtual_ipaddress {                     #设置虚拟IP地址 (VIP),又叫做漂移IP地址
        192.168.200.100
    }
    track_script {                          #加载脚本
        chk_nginx    
    }
}
【小技巧】全部删除下面的时候:按123然后接着按dd后面的就全删除了

复制代码

3.keepalived要实现高可用,监控Nginx服务是必不可少的,它本身没有这个功能,需要借助自定义脚本实现,所以接下来我们还需要定义一个监控Nginx服务的脚本,如下

复制代码
[root@master ~]# vim /usr/local/sbin/check_ng.sh  //添加如下内容
#!/bin/bash                                     
              #时间变量,用于记录日志
d=`date --date today +%Y%m%d_%H:%M:%S`
              #计算nginx进程数量  
  n=`ps -C nginx --no-heading|wc -l`
              #如果进程为0,则启动nginx,并且再次检测nginx进程数量    
  if [ $n -eq "0" ]; then      
         /etc/init.d/nginx start
          n2=`ps -C nginx --no-heading|wc -l`   
              #如果还为0,说明nginx无法启动,此时需要关闭keepalived
          if [ $n2 -eq "0"  ]; then
                  echo "$d nginx down,keepalived will stop" >> /var/log/check_ng.log
                  systemctl stop keepalived
          fi
 fi
复制代码

4.编辑完监控Nginx服务的脚本,还需要给它x权限,否则无法被keepalived调用,命令如下:

[root@master ~]# chmod a+x /usr/local/sbin/check_ng.sh   

5.完成以上操作,就可以启动master上的keepalived了,如果没有启动Nginx服务,它会帮我们自动拉动起来,并监听VIP

复制代码
[root@master ~]# systemctl start keepalived
[root@master ~]# ip add
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:f8:e3:b9 brd ff:ff:ff:ff:ff:ff
    inet 192.168.200.52/24 brd 192.168.200.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet 192.168.200.100/32 scope global ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::a709:f89:6e2d:666a/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
    inet6 fe80::f47a:43ff:375e:c80/64 scope link tentative noprefixroute dadfailed 
       valid_lft forever preferred_lft forever
复制代码

可以看到master上已经自动配置192.168.200.100这个IP。再来看看Nginx服务是否已经启动

[root@master ~]# ps aux |grep nginx

6.配置backup:

复制代码
[root@backup ~]# vim /etc/keepalived/keepalived.conf    //内容如下
global_defs {
   notification_email {
        131917381@qq.com
   }
   notification_email_from root@aaaaa.com
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}

vrrp_script chk_nginx {
    script "/usr/local/sbin/check_ng.sh"
    interval 3
    }

vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    virtual_router_id 51
    priority 90
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 5201314>g
    }
    virtual_ipaddress {
        192.168.200.100
    }
    track_script {
        chk_nginx
    }
}
!!!下面的也要删掉
复制代码

7.编辑监控脚本,如下:

复制代码
[root@backup ~]# vim /usr/local/sbin/check_ng.sh    //内容如下
d=`date --date today +%Y%m%d_%H:%M:%S`
n=`ps -C nginx --no-heading|wc -l`
if [ $n -eq "0" ]; then
        systemctl start nginx
        n2=`ps -C nginx --no-heading|wc -l`
        if [ $n2 -eq "0"  ]; then
                echo "$d nginx down,keepalived will stop" >> /var/log/check_ng.log
                systemctl stop keepalived
        fi
fi
复制代码

8.编辑完监控Nginx服务的脚本,还需要给它x权限,否则无法被keepalived调用:

[root@backup ~]# chmod a+x /usr/local/sbin/check_ng.sh    //添加权限

9.启动nginx跟keepalived

复制代码
[root@backup ~]# nginx
[root@backup ~]# systemctl start keepalived
[root@backup ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:58:3f:62 brd ff:ff:ff:ff:ff:ff
    inet 192.168.200.25/24 brd 192.168.200.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet 192.168.200.100/32 scope global ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::af2f:833c:2874:5380/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
复制代码

10.测试:

 

 

 

 

posted @ 2022-03-03 10:22  蜡笔小新๑  阅读(57)  评论(0编辑  收藏  举报