欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

集群

程序员文章站 2022-04-16 09:39:02
Linux集群 使用多台服务器搭建成一个集群来运行应用程序,不仅可以避免单点故障,还能提升服务器的承载能力 集群从功能实现上分为两种:高可用集群和负载均衡集群 高可用集群,当一台服务器宕机不能提供服务时,还有另外的服务器顶替 负载均衡集群,把用户的请求分摊到多台服务器上 搭建高可用集群 高可用集群, ......

linux集群

使用多台服务器搭建成一个集群来运行应用程序,不仅可以避免单点故障,还能提升服务器的承载能力

集群从功能实现上分为两种:高可用集群和负载均衡集群

高可用集群,当一台服务器宕机不能提供服务时,还有另外的服务器顶替

负载均衡集群,把用户的请求分摊到多台服务器上

搭建高可用集群

高可用集群,即“ha集群”,也称作“双机热备”

常见实现高可用的开源软件有heartbeat和keepalived

keepalived工作原理

vrrp协议,是实现路由高可用的一种通信协议,在这个协议里会将多台功能相同的路由器组成一个小组,这个小组里有一个master主机和n个backup备用机,工作时,master会通过组播的形式向各个backup发送vrrp协议的数据包,当backup收不到master发来的vrrp数据包时,就会认为master宕机了。

keepalived就是采用vrrp协议实现的高可用。keepalived要有三个模块,分别是core、check和vrrp。其中core模块为keepalived的核心,负责主进程的启动、维护以及全局配置文件的加载和解析;check模块负责健康检查;vrrp模块用来实现vrrp协议

实现wed高可用

vip:虚拟ip,服务器靠这个ip对外提供服务,当master机器宕机时,vip被分配到backup

安装服务

准备两台机器,一台master,一台backup

在两台机器上安装keepalived和nginx服务

# yum install -y keepalived

# yum install -y epel-release

# yum install -y nginx

配置keepalived文件

编辑master的配置文件

# vi /etc/keepalived/keepalived.conf

集群

global_defs {

     notification_email {

     kei@keilinux.com       //定义接收告警的人
   }
   notification_email_from root@keilinux.com   //定义发邮件地址
   smtp_server 127.0.0.1    //定义发邮件地址,127.0.0.1为使用本机自带邮件服务器发送
   smtp_connect_timeout 30
   router_id lvs_devel
}
vrrp_script kei_nginx {
    script "/usr/local/sbin/check_ng.sh"    //自定义脚本,该脚本为监控nginx服务的脚本
    interval 3    //每隔3s执行一次该脚本
}
vrrp_instance vi_1 {
    state master      //角色为master
    interface ens33     //针对哪个网卡监听vip
    virtual_router_id 51
    priority 100    //权重为100,master要比backup大
    advert_int 1
    authentication {
        auth_type pass
        auth_pass kei>com    //定义自定义密码
    }
    virtual_ipaddress {
        192.168.37.100     //定义vip
    }
    track_script {
        kei_nginx     //定义监控脚本
    }
}
退出保存
 
编辑backup的配置文件
# vi /etc/keepalived/keepalived.conf

集群

global_defs {

   notification_email {
     kei@keilinux.com
   }
   notification_email_from root@keilinux.com
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id lvs_devel
}
vrrp_script kei_nginx {
    script "/usr/local/sbin/check_ng.sh"
    interval 3
}
vrrp_instance vi_1 {
    state backup     //角色为backup
    interface ens33
    virtual_router_id 51
    priority 90     //比master数值小
    advert_int 1
    authentication {
        auth_type pass
        auth_pass kei>com
    }
    virtual_ipaddress {
        192.168.37.100
    }
    track_script {
        kei_nginx
    }
}
退出保存

编辑监控脚本(此脚本两台机器配置一样)

定义一个监控nginx服务的脚本
# vi /usr/local/sbin/check_ng.sh
集群

d=`date --date today +%y%m%d_%h:%m:%s`

//时间变量,用于记录日志

n=`ps -c nginx --no-heading|wc -l`

计算nginx进程数量
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
//如果进程为0,则启动nginx,并再次检测进程数量
//如果还为0,说明nginx无法启动,此时需要关闭keepalived

其他配置(两台机器操作)

给脚本权限

# chmod a+x /usr/local/sbin/check_ng.sh

启动keepalived

# systemctl start keepalived

查看状态

在master机器上

查看ip

# ip addr

 

集群

查看nginx服务进程

# ps aux |grep nginx

集群

验证高可用 

先把master上的nginx关掉

# systemctl stop nginx

集群

 等3s再次检测端口,发现服务被启动

集群

模拟master宕机

# iptables -i output -p vrrp -j drop 

在backup机器上查看是否被设置vip

集群