首页 > 系统相关 >centos7 源码安装keepalived 【亲测有效,没有效果你来找我】

centos7 源码安装keepalived 【亲测有效,没有效果你来找我】

时间:2023-08-09 22:35:30浏览次数:34  
标签:keepalived centos7 etc 源码 usr ens192 local notify

环境

keepalived 版本: keepalived-2.2.7 操作系统: cenos7 安装方式: 源码编译安装

环境安装

#安装包下载
wget https://keepalived.org/software/keepalived-2.2.7.tar.gz

#安装编译源码所需依赖
yum -y install gcc openssl-devel libnfnetlink-devel libnl libnl-devel popt-devel  gcc make

# 解压至 /usr/local/ 目录下
tar -zxvf keepalived-2.2.7.tar.gz -C /usr/local/

# 进入源码包
cd /usr/local/keepalived-2.2.7/

# 编译安装,-j 后面的参数是CPU核心数,根据自己机器的CPU核心数指定
./configure && make -j 4 && make install

#查找所有keepalived 文件位置
find / -name keepalived

/etc/selinux/targeted/active/modules/100/keepalived
/etc/sysconfig/keepalived
/etc/rc.d/init.d/keepalived
/etc/keepalived
/usr/sbin/keepalived
/usr/local/etc/keepalived
/usr/local/etc/sysconfig/keepalived
/usr/local/sbin/keepalived
/usr/local/share/doc/keepalived
/usr/local/keepalived-2.2.7/keepalived
/usr/local/keepalived-2.2.7/keepalived/etc/sysconfig/keepalived
/usr/local/keepalived-2.2.7/keepalived/etc/openrc/keepalived
/usr/local/keepalived-2.2.7/keepalived/etc/keepalived
/usr/local/keepalived-2.2.7/keepalived/etc/init.d/keepalived
/usr/local/keepalived-2.2.7/keepalived/keepalived
/usr/local/keepalived-2.2.7/bin/keepalived

# 把 keepalived的启动文件复制到init.d下,加入开机启动项
cp /usr/local/keepalived-2.2.7/keepalived/etc/init.d/keepalived /etc/rc.d/init.d/

# 复制启动服务至 /etc/sysconfig/
cp -r cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/

#把 keepalived 加入系统命令目录
cp /usr/local/sbin/keepalived /usr/sbin/

# 创建 keepalived 配置文件夹
mkdir /etc/keepalived

keepalived 配置

1、检测脚本

cat << \EOF >  /etc/keepalived/check.sh
#!/bin/sh

num=`ps -ef | grep test.jar  | grep -v grep | wc -l`
# $? -ne 不存在 0     $? -eq 0 存在
if [ $num -eq 0 ]
then
    systemctl stop keepalived
fi
EOF

检测java程序进程是否存在,如果不清楚有哪些 java 进程可以使用下面命令获取

ps - ef | grep java

2、设置脚本权限

chmod 744 /etc/keepalived/check.sh

3、keepalived.conf 配置(主从节点都需要配置)

ps -ef | grep java
```bash
cat <<\EOF >/etc/keepalived/keepalived.conf

# 全局参数
global_defs {
   # 脚本执行用户
   script_user root
   enable_script_security
}

# 健康检查脚本,检查Haproxy状态,脚本返回0正常,返回非0失败,失败后节点降级 weight -15
# 名字自定义
vrrp_script maint-checkHaproxy {
    script "/etc/keepalived/check.sh"
    interval 3 # 检查间隔3秒
    weight -15 # 降低本节点权重
    fall 2   # 2次失败算失败
    rise 2   # 2次成功算成功
    timeout 2  # 超时
}

# 实例1,名字自定义
vrrp_instance Vs_1 {
    state BACKUP # 定义节点主/备,主MASTER,备BACKUP,这里2个节点均为BACKUP
    interface ens192 # 服务IP绑定的网卡
    virtual_router_id 45 # 集群号,所有节点需要相同
    priority 100 # 权重,weight -15 降低权重值,2个节点权重一致,降低权重后会发生切换
    advert_int 1 # 检测间隔

    # 抢占模式,(nopreempt非抢占模式),配置为抢占模式时,当节点权重降低时,另外一个高权重节点会抢占服务,发生切换;
    # 如果为非抢占模式,上面配置的检查脚本在检查到服务失败后,降低权重,但是不会发生切换。
    !nopreempt

    authentication {
        auth_type PASS
        auth_pass 1718 # 各节点密码一致
    }

    #开启邮件通知
    smtp_alert

    # 单播模式
    # keepalived在组播模式下所有的信息都会向224.0.0.18的组播地址发送,产生众多的无用信息,并且会产生干扰和冲突,所以需要改为单播。
    # 这是一种安全的方法,避免局域网内有大量的keepalived造成虚拟路由id的冲突。
    # 单薄模式需要关闭vrrp_strict,严格遵守vrrp协议这个选项
    # 需要在VIP实例配置段加入单播的源地址和目标地址
    # 在全局配置中global_defs那一段,不能配置vrrp_strict参数,如果有需注释。
    # 否则会因为不是组播而无法启动keepalived

    unicast_src_ip 192.168.46.56 # 本端,源地址
    unicast_peer {
        192.168.46.55 # 对端,目标地址
    }
    
	# 虚拟IP
    virtual_ipaddress {
        192.168.46.77
    }
    
    track_script {
        maint-checkHaproxy # 健康检查脚本,与上面同名;如果不配置也可以,就不检查状态。
    }

    track_interface {
        ens192 # 检查网卡健康
    }
    
     # 邮箱通知配置
     notify_master "/usr/bin/sudo /etc/keepalived/notify.sh master"
     notify_backup "/usr/bin/sudo /etc/keepalived/notify.sh backup"
     notify_fault "/usr/bin/sudo /etc/keepalived/notify.sh fault"
}
EOF

需要修改的地方

  • unicast_src_ip: 本机,源地址
  • unicast_peer: 对端,目标地址
  • unicast_peer: 服务IP地址 ens192 为网卡名称
  • track_interface: 检查网卡健康
  • vrrp_instance Vs_1.interface: 服务IP绑定的网卡
  • vrrp_instance Vs_1.state MASTER或者BACKUP

4、防火墙配置

firewall-cmd --direct --permanent --add-rule ipv4 filter INPUT 0 --protocol vrrp -j ACCEPT

firewall-cmd --reload

5、安装邮件推送服务

yum install -y mailx

5.1、设置邮箱参数

vim /etc/mail.rc
# 添加如下参数
# 发件人邮箱
set [email protected]
# 邮箱服务器
set smtp=smtp.163.com
# 发件人邮箱账号
set [email protected]
# 发件人邮箱授权码
set smtp-auth-password=DFXCFXXX

5.2、测试邮件发送是否成功

echo "邮件内容1" | mail -s "邮件主11题" [email protected]

5.3、邮件发送脚本

:red_circle: 修改 contact 收件人邮箱

cat << \EOF > /etc/keepalived/notify.sh
#收件人邮箱
contact='[email protected]'
#ip=`ifconfig -a|grep inet|grep -v 127.0.0.1|grep -v inet6|awk '{print $2}'|tr -d "addr:"`
notify() {
local mailsubject="$(hostname) to be $1, vip floating"
local mailbody="$(date +'%F %T'): vrrp transition, $(hostname) changed to be $1"
echo "$mailbody" | mail -s "$mailsubject" $contact
}

case $1 in
master)
        notify master
        ;;
backup)
        notify backup
        ;;
fault)
     notify fault
     ;;
*)
        echo "Usage: $(basename $0) {master|backup|fault}"
        exit 1
        ;;
esac


EOF

5.4 修改脚本权限

chmod 777 /etc/keepalived/notify.sh

6、重启keepalived 服务

systemctl restart keepalived
systemctl start keepalived
systemctl stop keepalived
systemctl status keepalived

7、检查虚拟IP是否正常运行

ens192 为虚拟IP设置的网卡名称

[root@curry keepalived]# ip addr | grep ens192
2: ens192: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    inet 192.168.16.12/24 brd 192.138.16.255 scope global noprefixroute ens192
    inet 192.168.46.19/24 scope global secondary ens192

inet 192.168.46.19/24 scope global secondary ens192 为我们设置的虚拟IP

8、测试高可用

停止java服务看虚拟IP是否会切换到另一台机器

通过 ip addr | grep ens192 判断是否切换成功,如果本机是主节点则存在两个IP如下

2: ens192: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    inet 192.168.16.12/24 brd 192.138.16.255 scope global noprefixroute ens192
    inet 192.168.46.19/24 scope global secondary ens192

标签:keepalived,centos7,etc,源码,usr,ens192,local,notify
From: https://blog.51cto.com/u_16221193/7026426

相关文章

  • 在docker上运行一个centos7.9的系统
    dockerpullcentos:centos7.9.2009dockerimagesdockerrun-itd--name=centos--privileged=true-p3333:22centos:centos7.9.2009/usr/sbin/initdockerpsdockerexec-itcentos/bin/bashyuminstallopenssh*-ysystemctlrestartsshdsystemctlstatusss......
  • Centos7安装Python3.8
    Centos7安装Python3.8Centos7安装Python3.8安装编译相关工具yum-ygroupinstall"Developmenttools"yum-yinstallzlib-develbzip2-developenssl-develncurses-develsqlite-develreadline-develtk-develgdbm-develdb4-devellibpcap-develxz-develyum-yin......
  • centos7.9究极法-基础篇
    @目录前言Linux发行版本帮助命令man命令help命令文件目录管理命令ls命令pwd命令cd命令mkdir命令cp命令scp命令rm命令mv命令chmod命令chown命令文本内容管理命令cat命令echo命令less命令tail命令用户和组管理命令useradd命令userdel命令passwd命令usermod命令groupadd命令groupdel......
  • 大连人工智能计算平台——华为昇腾AI平台——高性能计算HPC的pytorch源码编译报错——
     如题:pytorch源码编译报错——USE_CUDA=OFF  在编译pytorch源码的时候发现错误,虽然编译环境中已经安装好CUDA和cudnn,环境变量也都设置好,但是编译好的pytorch包wheel总是在运行torch.cuda.is_available()显示false,于是从编译源码的过程中进行重新检查,发现在编译的过程中提......
  • SpringBoot源码实用场景:SpringBoot 3.1.0 环境下 PageHelper 1.4.0不生效问题排查
    1、技术栈:JDK17+SpringBoot3.1.0+PageHelper1.4.01<?xmlversion="1.0"encoding="UTF-8"?>2<project...>3<parent>4<groupId>org.springframework.boot</groupId>5<arti......
  • 在直播系统源码中接入谷歌支付
    支付在直播系统源码中有很重要的作用,在直播平台中,送礼物、买东西等很多功能都需要用到支付这个功能,支付方式上的接入服务也是越来越来,下面就给大家介绍下载直播系统源码中接入谷歌支付的过程。android同胞我相信很多人跟我一样谷歌支付运行自己的直播系统源码的时候调用支付发现......
  • 基于keepalived+gtid半同步主从复制的MySQL集群
    mysql的安装(二进制安装)[root@my-slv1~]#catmysql_install.sh#!/bin/bash#解决软件的依赖关系yuminstallcmakencurses-develgccgcc-c++vimlsofbzip2openssl-develncurses-compat-libs-y#解压mysql二进制安装包tarxfmysql-5.7.38-linux-glibc2.12-x86_64.ta......
  • fastapi后台任务模块<BackgroundTasks>源码理解
      该文档主要对fastapi的后台模块《BackgroundTasks》一些源码的理解,这样也可以加深理解异步及后台任务处理的理解。 使用导入例子: fromfastapiimport BackgroundTasks  fromfastapiimportBackgroundTasks,FastAPIapp=FastAPI()defwrite_file(data:st......
  • 智慧工地源码,基于Vue+Spring Cloud +UniApp框架开发
    源码技术架构:微服务+JavaVue+SpringCloud+UniApp+MySql智慧工地管理平台是依托物联网、互联网、AI、可视化建立的大数据管理平台,是一种全新的管理模式,能够实现劳务管理、安全施工、绿色施工的智能化和互联网化。智慧工地管理平台功能包括:劳务实名制管理系统、监测系统、区域安......
  • centos7环境- ipaddr使用
    yumcleanallwget-O/etc/yum.repos.d/CentOS-Base.repohttp://mirrors.aliyun.com/repo/Centos-7.repoyummakecacheyumupdate-yyum-yinstallinitscriptsyumcleanall:这个命令用于清理YUM软件包管理器的缓存。YUM会在本地存储已下载的软件包,以便稍后安装或更......