lsyncd+keepalived实现主备双机文件热备

此操作说明基于麒麟V10 SP3中离线安装

1、设置SSH免密登录

  • 在主服务器生成默认密钥,执行:
shell 复制代码
ssh-keygen -t rsa
  • 一路回车,会生成:

    ~/.ssh/id_rsa
    ~/.ssh/id_rsa.pub

  • 然后再执行:
shell 复制代码
ssh-copy-id root@备服务器ip
  • 输入备服务器密码即可,此时主服务器可以SSH免密登录备服务器

  • 根据以上操作流程,在备服务器中也配置SSH免密登录主服务器

2、安装配置lsyncd

官方地址:https://lsyncd.github.io/lsyncd/

2.1、下载安装包

2.2、执行安装

  • 使用以下命令安装lsyncd
shell 复制代码
rpm -ivh lsyncd-2.2.3-2.ky10.x86_64.rpm

2.3、配置lsyncd

  • 查看环境变量文件,可根据自己需要修改该环境变量,这里使用默认环境变量
shell 复制代码
cat /etc/sysconfig/lsyncd
  • 备份原配置文件
shell 复制代码
mv /etc/lsyncd.conf /etc/lsyncd.conf.bak
  • 创建配置文件
shell 复制代码
vi /etc/lsyncd.conf
  • 插入如下基础配置
lua 复制代码
-- 全局配置
settings {
    -- 运行日志目录
    logfile = "/var/log/lsyncd.log",
    -- 同步状态日志目录
    statusFile = "/var/log/lsyncd-status.log",
    -- 更新状态日志时间间隔(秒)
    statusInterval = 20
}

-- 通用配置
common = {
    -- 同步模式:rsync + ssh 同步
    default.rsyncssh,
    -- 远程服务器
    host = "192.168.239.180",
    -- rsync参数
    rsync = {
        -- 保持文件完整属性
        archive = true,
        -- 是否压缩传输,局域网推荐关闭
        compress = false,
        -- 是否使用增量同步
        whole_file = false
    },
    -- ssh配置
    ssh = {
        -- 远程服务器ssh端口
        port = 22
    }
}
-- 同步任务配置(同步多个目录写多个sync {} 块)
sync {
    common,
    -- 需要监控并同步的本地目录
    source = "/home/test1",
    -- 同步排除规则文件
    excludeFrom="/etc/lsyncd.exclude",
    -- 远程服务器目录
    targetdir = "/home/test1"
}

sync {
    common,
    source = "/home/test2",
    excludeFrom="/etc/lsyncd.exclude",
    targetdir = "/home/test2"
}
  • 创建排除规则文件
shell 复制代码
vi /etc/lsyncd.exclude
  • 插入如下配置(按需修改)

    日志文件

    *.log

    临时文件

    *.tmp
    *.swp
    *.bak

    缓存目录

    cache/
    tmp/
    logs/

核心规则

复制代码
*.log        → 文件
tmp/         → 目录
*/tmp/       → 任意目录
  • 启动lsyncd
shell 复制代码
systemctl start lsyncd

此时:

​ 主服务器/home/test1目录下的任何文件变更都会同步至备服务器的/home/test1目录中

​ 主服务器/home/test2目录下的任何文件变更都会同步至备服务器的/home/test2目录中

  • 根据以上操作流程,在备服务器中也安装配置好lsyncd

3、安装配置keepalived

3.1、下载安装包

3.2、执行安装

  • 使用以下命令安装keepalived
shell 复制代码
rpm -ivh *.rpm

3.3、配置keepalived

  • 备份原配置文件
shell 复制代码
mv /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak
  • 创建配置文件
shell 复制代码
vi /etc/keepalived/keepalived.conf
  • 插入如下基础配置
    • 按照注释说明修改为自己需要的配置
    • 此处主、备服务器的初始状态均设为 BACKUP,实际 MASTER 由 priority 决定
    • 建议主服务器priority设为100,备服务器priority设为90
shell 复制代码
# 定义一个检测脚本,用于检查 lsyncd 是否正常运行
vrrp_script chk_lsyncd {

    # 要执行的脚本路径
    script "/etc/keepalived/check_lsyncd.sh"

    # 每 2 秒执行一次检测
    interval 2

    # 如果检测失败,当前节点 priority 减 20
    # 用于触发主备切换
    weight -20
}

# 定义一个 VRRP 实例
vrrp_instance VI_1 {

    # 初始状态为 BACKUP
    # 实际 MASTER 由 priority 决定
    state BACKUP

    # 绑定的网卡
    interface ens33

    # VRRP 路由ID
    # 同一组高可用节点必须一致
    virtual_router_id 51

    # 节点优先级
    # 数值越大越容易成为 MASTER
    priority 100

    # VRRP 心跳发送间隔(秒)
    advert_int 1

    # 不抢占模式
    # MASTER 恢复后不会自动抢回 VIP
    nopreempt

    # VRRP 认证配置
    authentication {

        # 认证方式
        auth_type PASS

        # 认证密码
        # 主备必须一致
        auth_pass 1111
    }

    # 配置虚拟IP(VIP)
    # MASTER 节点会绑定这个IP
    virtual_ipaddress {
        192.168.239.200
    }

    # 监控脚本
    # 当脚本失败时会调整 priority
    track_script {
        chk_lsyncd
    }

    # 当节点变为 MASTER 时执行脚本
    # 通常用于启动 lsyncd
    notify_master "/etc/keepalived/master.sh"

    # 当节点变为 BACKUP 时执行脚本
    # 通常用于停止 lsyncd
    notify_backup "/etc/keepalived/backup.sh"

    # keepalived 服务停止时执行脚本
    # 防止 lsyncd 残留运行
    notify_stop "/etc/keepalived/backup.sh"
}
  • 创建节点变为 MASTER 时执行脚本
shell 复制代码
vi /etc/keepalived/master.conf
  • 插入如下内容
shell 复制代码
#!/bin/bash
systemctl start lsyncd
  • 创建节点变为 BACKUP 或 keepalived 服务停止时执行脚本
shell 复制代码
vi /etc/keepalived/backup.conf
  • 插入如下内容
shell 复制代码
#!/bin/bash
systemctl stop lsyncd
  • 创建检测脚本,用于防脑裂
shell 复制代码
vi /etc/keepalived/check_lsyncd.sh
  • 插入如下内容
shell 复制代码
#!/bin/bash

systemctl is-active lsyncd > /dev/null 2>&1

if [ $? -eq 0 ]; then
    exit 0
else
    exit 1
fi
  • 赋予上述脚本执行权限
shell 复制代码
chmod +x /etc/keepalived/*.sh
  • 设置开机自启
shell 复制代码
systemctl enable keepalived
  • 启动keepalived
shell 复制代码
systemctl start keepalived
  • 若服务器开启了防火墙,需对vrrp放行
shell 复制代码
firewall-cmd --permanent --add-protocol=vrrp
firewall-cmd --reload
  • 在主、备服务器均按上述流程安装并启用keepalived
  • 通过使用以下命令查看主服务器是否存在VIP
shell 复制代码
ip addr
  • 停止主服务器的keepalived服务后,VIP会飘移至备服务器,且停止主服务器的lsyncd服务,启动备服务器的lsyncd服务

至此,lsyncd+keepalived对主备双机文件热备配置完成