keepalived

docker部署keepalived(搭建keepalived) 阅读详情

一、高可用集群keepalived

解决问题:可以实现当lvs即挂了以后,架构依然可用,客户端依然能够连接到服务器

1.1 集群类型

LB:Load Balance 负载均衡

​ LVS/HAProxy/nginx(http/upstream, stream/upstream)

HA:High Availability 高可用集群

​ 数据库、Redis

SPoF: Single Point of Failure,解决单点故障

​ HPC:High Performance Computing 高性能集群

1.2 系统可用性

SLA:Service-Level Agreement 服务等级协议(提供服务的企业与客户之间就服务的品质、水准、性能 等方面所达成的双方共同认可的协议或契约)

A = MTBF / (MTBF+MTTR)

例如:99.95%:(60X24X30)X(1-0.9995)=21.6分钟 #一般按一个月停机时间统计

指标 :99.9%, 99.99%, 99.999%,99.9999%

计算结果越大,越可用

1.3 实现高可用

提升系统高用性的解决方案:降低MTTR- Mean Time To Repair(平均故障时间) 解决方案:建立冗余机制

  • active/passive 主/备
  • active/active 双主
  • active --> HEARTBEAT --> passive
  • active <–> HEARTBEAT <–> active

1.4 vrrp

思路:虚拟一个网关,让终端连接这个虚拟网关。同时真实的路由器会竞争这个虚拟网关的身份,竞争成功则成为主网关,竞争失败则成为从网关,当主网关挂了以后,从网关就会晋升为主网关,从而实现备份效果。

二、keepalived部署

vrrp协议的软件设计,原生设计目的为了高可用 ipvs服务

支持nginx、haproxy等服务

官网: http://keepalived.org/

在这里插入图片描述

2.1 环境准备

四台:linux7,一个网卡,net模式

KA1:172.25.254.10

KA2:172.25.254.20

realserver1:172.25.254.110

realserver2:172.25.254.120

VIP:172.25.254.100


realserver1

[root@realserver1 ~]# vmset.sh eth0 172.25.254.110 realserver1.timinglee.org

realserver2

[root@realserver2 ~]# vmset.sh eth0 172.25.254.120 realserver.timinglee.org

KA1

[root@ka1 ~]# vmset.sh eth0 172.25.254.10 ka1.timinglee.org

KA1

[root@ka2 ~]# vmset.sh eth0 172.25.254.20 ka2.timinglee.org

ALL

查看selinux状态

[root@local ~]# getenforce
Disabled

查看防火墙状态—确认为防火墙关闭

[root@ka1 ~]# systemctl status firewalld
● firewalld.service
Loaded: masked (/dev/null; bad)
Active: inactive (dead)

realserver1

下载httpd

[root@realserver1 ~]# yum install httpd -y

在静态网页中写入172.25.254.110

[root@realserver1 ~]# echo 172.25.254.110 > /var/www/html/index.html

设置为开机自启动

[root@realserver1 ~]# systemctl enable --now httpd

realserver2

下载httpd

[root@realserver2 ~]# yum install httpd -y

在静态网页中写入172.25.254.120

[root@realserver2 ~]# echo 172.25.254.120 > /var/www/html/index.html

设置为开机自启动

[root@realserver2 ~]# systemctl enable --now httpd

2.2 keepalived配置

配置文件:/etc/keepalived/keepalived.conf

配置文件组成

​ GLOBAL CONFIGURATION

​ Global definitions: 定义邮件配置,route_id,vrrp配置,多播地址等

​ VRRP CONFIGURATION

​ VRRP instance(s): 定义每个vrrp虚拟路由器

​ LVS CONFIGURATION

​ Virtual server group(s)

​ Virtual server(s): LVS集群的VS和RS

KA1

安装keepalived

[root@ka1 ~]# yum install keepalived -y

全局配置—修改发送警报邮件的邮箱

[root@ka1 ~]# vim /etc/keepalived/keepalived.conf

global_defs {
   notification_email {
     1540509690@qq.com
   }
   notification_email_from keepalived@timinglee.org
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id ka1.timinglee.org
   vrrp_skip_check_adv_addr
   vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
   vrrp_mcast_group4 224.0.0.18
}

配置vrrp

[root@ka1 ~]# vim /etc/keepalived/keepalived.conf

vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 100
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.25.254.100/24 dev eth0 label eth0:1
    }
}

开机自启动keepalived

[root@ka1 ~]# systemctl enable --now keepalived.service

传递配置给ka2

[root@ka1 ~]# scp /etc/keepalived/keepalived.conf root@172.25.254.20:/etc/keepalived/keepalived.conf

The authenticity of host '172.25.254.20 (172.25.254.20)' can't be established.
ECDSA key fingerprint is SHA256:E3qE8JvU9z/9Q6iQNWX4FB2C7Of1r+MKoHRNklKH9ow.
ECDSA key fingerprint is MD5:26:47:a1:e9:a2:08:3a:f9:fa:eb:2d:a8:99:11:bf:6b.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '172.25.254.20' (ECDSA) to the list of known hosts.
root@172.25.254.20's password:
keepalived.conf                                        100% 3552     3.9MB/s   00:00

测试

[root@ka1 ~]# tcpdump -i eth0 -nn host 224.0.0.18

tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
20:31:10.631725 IP 172.25.254.10 > 224.0.0.18: VRRPv2, Advertisement, vrid 100, prio 100, authtype simple, intvl 1s, length 20
20:31:11.632742 IP 172.25.254.10 > 224.0.0.18: VRRPv2, Advertisement, vrid 100, prio 100, authtype simple, intvl 1s, length 20

KA2

安装keepalived

[root@ka2 ~]# yum install keepalived -y

全局配置

[root@ka2 ~]# vim /etc/keepalived/keepalived.conf

vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 100
    priority 80
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.25.254.100/24 dev eth0 label eth0:1
    }
}

[root@ka2 ~]# systemctl enable --now keepalived.service

测试

realserver1

远程登录ka1

[root@realserver1 ~]# ssh -l root 172.25.254.10

The authenticity of host '172.25.254.10 (172.25.254.10)' can't be established.
ECDSA key fingerprint is SHA256:E3qE8JvU9z/9Q6iQNWX4FB2C7Of1r+MKoHRNklKH9ow.
ECDSA key fingerprint is MD5:26:47:a1:e9:a2:08:3a:f9:fa:eb:2d:a8:99:11:bf:6b.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '172.25.254.10' (ECDSA) to the list of known hosts.
root@172.25.254.10's password:
Last login: Sun Aug 11 19:28:30 2024 from 172.25.254.1

在realserver1机上远程登陆ka1,关闭服务,模拟ka1的keepalived服务故障

[root@ka1 ~]# systemctl stop keepalived.service

在ka1机上检查

[root@ka1 ~]# tcpdump -i eth0 -nn host 224.0.0.18

20:32:37.737668 IP 172.25.254.10 > 224.0.0.18: VRRPv2, Advertisement, vrid 100, prio 100, authtype simple, intvl 1s, length 20
20:32:38.129269 IP 172.25.254.10 > 224.0.0.18: VRRPv2, Advertisement, vrid 100, prio 0, authtype simple, intvl 1s, length 20
20:32:38.817522 IP 172.25.254.20 > 224.0.0.18: VRRPv2, Advertisement, vrid 100, prio 80, authtype simple, intvl 1s, length 20
20:32:39.819082 IP 172.25.254.20 > 224.0.0.18: VRRPv2, Advertisement, vrid 100, prio 80, authtype simple, intvl 1s, length 20

# ka1挂了以后,ka2无缝衔接

在realserver1机上恢复ka1的keepalived服务

[root@ka1 ~]# systemctl start keepalived.service

在ka1机上检查

[root@ka1 ~]# tcpdump -i eth0 -nn host 224.0.0.18

20:32:55.827526 IP 172.25.254.20 > 224.0.0.18: VRRPv2, Advertisement, vrid 100, prio 80, authtype simple, intvl 1s, length 20
20:32:56.828071 IP 172.25.254.20 > 224.0.0.18: VRRPv2, Advertisement, vrid 100, prio 80, authtype simple, intvl 1s, length 20
20:32:56.828462 IP 172.25.254.10 > 224.0.0.18: VRRPv2, Advertisement, vrid 100, prio 100, authtype simple, intvl 1s, length 20
20:32:57.829287 IP 172.25.254.10 > 224.0.0.18: VRRPv2, Advertisement, vrid 100, prio 100, authtype simple, intvl 1s, length 20

#因为为抢占模式,所以恢复为ka1的服务

2.3 keepalived’开启通信功能

linux7可以使用,linux9不可以

在全局里面添加该参数,允许vip可以通信

ka1机

[root@ka1 ~]# vim /etc/keepalived/keepalived.conf

global_defs {
   notification_email {
     1540509690@qq.com
   }
   notification_email_from keepalived@timinglee.org
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id ka1.timinglee.org
   vrrp_skip_check_adv_addr
   vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
   vrrp_mcast_group4 224.0.0.18
   vrrp_iptables
}

[root@ka1 ~]# systemctl restart keepalived.service

ka2机

[root@ka2 ~]# vim /etc/keepalived/keepalived.conf

global_defs {
   notification_email {
     1540509690@qq.com
   }
   notification_email_from keepalived@timinglee.org
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id ka1.timinglee.org
   vrrp_skip_check_adv_addr
   vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
   vrrp_mcast_group4 224.0.0.18
   vrrp_iptables
}

[root@ka2 ~]# systemctl restart keepalived.service

测试

[root@realserver1 ~]# ping 172.25.254.100

PING 172.25.254.100 (172.25.254.100) 56(84) bytes of data.
64 bytes from 172.25.254.100: icmp_seq=1 ttl=64 time=0.237 ms
64 bytes from 172.25.254.100: icmp_seq=2 ttl=64 time=0.583 ms

ka1机

[root@ka1 ~]# vim /etc/keepalived/keepalived.conf

global_defs {
   notification_email {
     1540509690@qq.com
   }
   notification_email_from keepalived@timinglee.org
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id ka1.timinglee.org
   vrrp_skip_check_adv_addr
   #vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
   vrrp_mcast_group4 224.0.0.18
   #vrrp_iptables
}

[root@ka1 ~]# systemctl restart keepalived.service

ka2机

[root@ka2 ~]# vim /etc/keepalived/keepalived.conf

global_defs {
   notification_email {
     1540509690@qq.com
   }
   notification_email_from keepalived@timinglee.org
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id ka1.timinglee.org
   vrrp_skip_check_adv_addr
   #vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
   vrrp_mcast_group4 224.0.0.18
   #vrrp_iptables
}

[root@ka2 ~]# systemctl restart keepalived.service

测试

[root@realserver1 ~]# ping 172.25.254.100

PING 172.25.254.100 (172.25.254.100) 56(84) bytes of data.
64 bytes from 172.25.254.100: icmp_seq=1 ttl=64 time=0.237 ms
64 bytes from 172.25.254.100: icmp_seq=2 ttl=64 time=0.583 ms

2.4 keepalived配置独立日志

ka1机

[root@ka1 ~]# vim /etc/sysconfig/keepalived

# --log-facility       -S    0-7 Set local syslog facility (default=LOG_DAEMON)
#

KEEPALIVED_OPTIONS="-D -S 6"

[root@ka1 ~]# systemctl restart keepalived.service

[root@ka1 ~]# vim /etc/rsyslog.conf

# Save boot messages also to boot.log
local7.*                                                /var/log/boot.log
local6.*                                                /var/log/keepalived.log

[root@ka1 ~]# systemctl restart rsyslog.service

[root@ka1 ~]# systemctl restart keepalived.service

测试

[root@ka1 ~]# ll /var/log/keepalived.log
-rw------- 1 root root 8168 Aug 11 21:11 /var/log/keepalived.log

2.5 keepalived配置独立子配置文件

独立子配置文件:将配置改到子配置文件中

注释以后,虚拟路由消失

ka1机

[root@ka1 ~]# vim /etc/keepalived/keepalived.conf

#vrrp_instance VI_1 {
#    state MASTER
#    interface eth0
#    virtual_router_id 100
#    priority 100
#    advert_int 1
#    authentication {
#        auth_type PASS
#        auth_pass 1111
#    }
#    virtual_ipaddress {
#        172.25.254.100/24 dev eth0 label eth0:1
#    }
#}
include "/etc/keepalived/conf.d/*.conf"

[root@ka1 ~]# systemctl restart keepalived.service

# 因为找不到conf.d目录,所以报错
Job for keepalived.service failed because the control process exited with error code. See "systemctl status keepalived.service" and "journalctl -xe" for details.

[root@ka1 ~]# mkdir -p /etc/keepalived/conf.d

[root@ka1 ~]# vim /etc/keepalived/conf.d/172.25.254.100.conf

vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 100
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.25.254.100/24 dev eth0 label eth0:1
    }
}

[root@ka1 ~]# systemctl restart keepalived.service

三、工作过程

3.1 抢占模式和非抢占模式、延迟抢占

抢占模式:优先级高的直接抢

非抢占模式:等优先级低的挂了在抢

延迟抢占:优先级高的在指定时间后抢占

非抢占模式配置

ka1

[root@ka1 ~]# vim /etc/keepalived/keepalived.conf

vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 100
    priority 100
    advert_int 1
    nopreempt          #设置非抢占模式
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.25.254.100/24 dev eth0 label eth0:1
    }
}

#include "/etc/keepalived/conf.d/*.conf"

[root@ka1 ~]# systemctl restart keepalived.service

ka2

[root@ka2 ~]# vim /etc/keepalived/keepalived.conf

vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 100
    priority 80
    advert_int 1
    nopreempt   #设置非抢占模式
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.25.254.100/24 dev eth0 label eth0:1
    }
}

[root@ka2 ~]# systemctl restart keepalived.service

测试:ka1:ip a

延迟抢占模式配置

ka1

[root@ka1 ~]# vim /etc/keepalived/keepalived.conf

vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 100
    priority 100
    advert_int 1
    preempt_delay 5s   #设置延迟5s抢占
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.25.254.100/24 dev eth0 label eth0:1
    }
}

#include "/etc/keepalived/conf.d/*.conf"

[root@ka1 ~]# systemctl restart keepalived.service

ka2

[root@ka2 ~]# vim /etc/keepalived/keepalived.conf

vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 100
    priority 80
    advert_int 1
    preempt_delay 5s   #设置延迟5s抢占
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.25.254.100/24 dev eth0 label eth0:1
    }
}

[root@ka2 ~]# systemctl restart keepalived.service

测试:ka1:ip a

3.2 VIP单播配置

默认keepalived主机之间利用多播相互通告消息,会造成网络拥塞,可以替换成单播,减少网络流量

组播换成单播配置

前提,两个ka机中,全局配置global_defs 中vrrp_strict参数要注释掉,因为它不支持单播

ka1

[root@ka1 ~]# vim /etc/keepalived/keepalived.conf

vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 100
    priority 100
    advert_int 1
    #nopreempt
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.25.254.100/24 dev eth0 label eth0:1
    }
    unicast_src_ip 172.25.254.10
    unicast_peer {
        172.25.254.20
   }
}

#include "/etc/keepalived/conf.d/*.conf"

[root@ka1 ~]# systemctl restart keepalived.service

ka2

[root@ka2 ~]# vim /etc/keepalived/keepalived.conf

vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 100
    priority 80
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.25.254.100/24 dev eth0 label eth0:1
    }
    unicast_src_ip 172.25.254.20
    unicast_peer {
          172.25.254.10
    }
}

[root@ka2 ~]# systemctl restart keepalived.service

测试

ka1和ka2同时使用该命令

[root@ka1 ~]# tcpdump -i eth0 -nn src host 172.25.254.10 and dst 172.25.254.20

[root@ka2 ~]# tcpdump -i eth0 -nn src host 172.25.254.20 and dst 172.25.254.10

终端中

[root@realserver1 ~]# ssh -l root 172.25.254.10
[root@ka1 ~]# systemctl stop keepalived.service
[root@ka1 ~]# systemctl start keepalived.service

一方获得ip地址以后,另一方就停止:ka1有结果时,ka2就无结果。当ka1挂了以后,ka2立马就有结果

四、邮件通知

让linux可以发邮件

4.1 给qq邮箱发邮件

让linux的邮件发送到qq邮箱中,前提:QQ邮箱->账户与安全->安全设置->POP3/IMAP/SMTP/Exchange/CardDAV 服务开启

ka1配置

[root@ka1 ~]# yum install mailx -y

[root@ka1 ~]# vim /etc/mail.rc

# For Linux and BSD, this should be set.
set bsdcompat
set from=1540509690@qq.com
set smtp=smtp.qq.com
set smtp-auth-user=1540509690@qq.com
set smtp-auth-password=pbqcsmebsewfbabi
set smtp-auth=login
set ssl-verify=ignore

测试

给自己的qq邮箱发邮件

[root@ka1 ~]# echo hello world | mail -s test 1540509690@qq.com
在这里插入图片描述

ka2

[root@ka2 ~]# yum install mailx -y

[root@ka2 ~]# vim /etc/mail.rc

# For Linux and BSD, this should be set.
set bsdcompat
set from=1540509690@qq.com
set smtp=smtp.qq.com
set smtp-auth-user=1540509690@qq.com
set smtp-auth-password=pbqcsmebsewfbabi
set smtp-auth=login
set ssl-verify=ignore

测试

给自己的qq邮箱发邮件

[root@ka2 ~]# echo hello world2 | mail -s test 1540509690@qq.com
在这里插入图片描述

4.2 脚本编写

ka1、2

[root@ka1 ~]# vim /etc/keepalived/mail.sh

#! /bin/bash

mail_dst="1540509690@qq.com"
send_message()
{
   mail_sub="$HOSTNAME to be $1 vip move"
   mail_msg="`date +%F\ %T`:vrrp move $HOSTNAME chage $1"
   echo $mail_msg | mail -s "$mail_sub" $mail_dst
}

case $1 in
        master)
        send_message master
        ;;
        backup)
        send_message backup
        ;;
        fault)
        send_message fault
        ;;
        *)
        ;;
esac

~

[root@ka1 ~]# chmod +x /etc/keepalived/mail.sh

[root@ka1 ~]# vim /etc/keepalived/keepalived.conf

vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 100
    priority 100
    advert_int 1
    #nopreempt
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.25.254.100/24 dev eth0 label eth0:1
    }
    unicast_src_ip 172.25.254.10
    unicast_peer {
        172.25.254.20
   }
   #如下为添加的配置
   notify_master "/etc/keepalived/mail.sh master"
   notify_backup "/etc/keepalived/mail.sh backup"
   notify_fault "/etc/keepalived/mail.sh fault"

}

#include "/etc/keepalived/conf.d/*.conf"

[root@ka1 ~]# systemctl restart keepalived.service

测试

[root@ka1 ~]# /etc/keepalived/mail.sh fault

在这里插入图片描述

五、实现keepalived双主结构

给两台keepalived一台配置一个vip

配置

ka1

[root@ka1 ~]# vim /etc/keepalived/keepalived.conf

vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 100
    priority 100
    advert_int 1
    #nopreempt
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.25.254.100/24 dev eth0 label eth0:1
    }
    unicast_src_ip 172.25.254.10
    unicast_peer {
        172.25.254.20
   }
}

vrrp_instance VI_2 {
    state BACKUP
    interface eth0
    virtual_router_id 200
    priority 80
    advert_int 1
    #nopreempt
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.25.254.200/24 dev eth0 label eth0:2
    }
    unicast_src_ip 172.25.254.10
    unicast_peer {
        172.25.254.20
   }
}

[root@ka1 ~]# systemctl restart keepalived.service

ka2

[root@ka2 ~]# vim /etc/keepalived/keepalived.conf

以下为两个,第一个保持不变,变更名称即可,下图为复制的

vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 100
    priority 80
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.25.254.100/24 dev eth0 label eth0:1
    }
    unicast_src_ip 172.25.254.20
    unicast_peer {
          172.25.254.10
    }
}

vrrp_instance VI_2 {
    state MASTER
    interface eth0
    virtual_router_id 200
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.25.254.200/24 dev eth0 label eth0:2
    }
    unicast_src_ip 172.25.254.20
    unicast_peer {
          172.25.254.10
    }
}

[root@ka2 ~]# systemctl restart keepalived.service

六、实现ipvs的高可用性(lvs+keepalived)

6.1 虚拟·服务器配置结构

virtual_server IP port {
 	...
 real_server {
 ...
 }
 real_server {
 ...
 }
 …
 }

6.2 虚拟服务器配置

virtual_server IP port {		#VIP和PORT                
delay_loop <INT>               	#检查后端服务器的时间间隔
lb_algo rr|wrr|lc|wlc|lblc|sh|dh    #定义调度方法
lb_kind NAT|DR|TUN                  #集群的类型,注意要大写        
persistence_timeout <INT>			#持久连接时长         
protocol TCP|UDP|SCTP				#指定服务协议,一般为TCP              
sorry_server <IPADDR> <PORT>        #所有RS故障时,备用服务器地址   
real_server <IPADDR> <PORT> {       #RS的IP和PORT   
weight <INT>                        #RS权重   
notify_up <STRING>|<QUOTED-STRING>  #RS上线通知脚本   
notify_down <STRING>|<QUOTED-STRING>   #RS下线通知脚本
HTTP_GET|SSL_GET|TCP_CHECK|SMTP_CHECK|MISC_CHECK { ... }   #定义当前主机健康状
态检测方法
}
 }
 #注意:括号必须分行写,两个括号写在同一行,如: }} 会出错

6.3 应用层检测

应用层检测:HTTP_GET|SSL_GET

HTTP_GET|SSL_GET {
 url {
 	path <URL_PATH>    #定义要监控的URL      
	status_code <INT>  #判断上述检测机制为健康状态的响应码,一般为 200      
 }
 connect_timeout <INTEGER>  #客户端请求的超时时长, 相当于haproxy的timeout server
 nb_get_retry <INT>         #重试次数
 delay_before_retry <INT>   #重试之前的延迟时长
 connect_ip <IP ADDRESS>    #向当前RS哪个IP地址发起健康状态检测请求
 connect_port <PORT>        #向当前RS的哪个PORT发起健康状态检测请求
 bindto <IP ADDRESS>        #向当前RS发出健康状态检测请求时使用的源地址
 bind_port <PORT>           #向当前RS发出健康状态检测请求时使用的源端口
}

6.4 TCP检测

传输层检测:TCP_CHECK

TCP_CHECK {					
connect_ip <IP ADDRESS>     #向当前RS的哪个IP地址发起健康状态检测请求   
connect_port <PORT>         #向当前RS的哪个PORT发起健康状态检测请求   
bindto <IP ADDRESS>         #发出健康状态检测请求时使用的源地址   
bind_port <PORT>            #发出健康状态检测请求时使用的源端口   
connect_timeout <INTEGER>   #客户端请求的超时时长
							#等于haproxy的timeout server
}

6.5 实现双主的LVS-DR模式

rs1

[root@realserver1 ~]# ip a a 172.25.254.100/32 dev lo

[root@realserver1 ~]# cd /etc/sysconfig/network-scripts/

[root@realserver1 network-scripts]# vim ifcfg-lo

DEVICE=lo
IPADDR0=127.0.0.1
NETMASK0=255.0.0.0

IPADDR1=172.25.254.100
NETMASK1=255.255.255.255

NETWORK=127.0.0.0
# If you're having problems with gated making 127.0.0.0/8 a martian,
# you can change this to something else (255.255.255.255, for example)
BROADCAST=127.255.255.255
ONBOOT=yes
NAME=loopback

[root@realserver1 network-scripts]# systemctl restart network

Job for network.service failed because the control process exited with error code. See "systemctl status network.service" and "journalctl -xe" for details.

删除多余网卡-ens33

[root@realserver1 network-scripts]# rm -fr ifcfg-ens33

[root@realserver1 network-scripts]# systemctl restart network

rs2

[root@realserver2 ~]# ip a a 172.25.254.100/32 dev lo

[root@realserver2 ~]# vim /etc/sysctl.d/arp.conf

net.ipv4.conf.all.arp_ignore=1
net.ipv4.conf.all.arp_announce=2
net.ipv4.conf.lo.arp_ignore=1
net.ipv4.conf.lo.arp_announce=2

查看是否生效

[root@realserver2 ~]# sysctl --system

* Applying /usr/lib/sysctl.d/00-system.conf ...
* Applying /usr/lib/sysctl.d/10-default-yama-scope.conf ...
kernel.yama.ptrace_scope = 0
* Applying /usr/lib/sysctl.d/50-default.conf ...
kernel.sysrq = 16
kernel.core_uses_pid = 1
kernel.kptr_restrict = 1
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.default.promote_secondaries = 1
net.ipv4.conf.all.promote_secondaries = 1
fs.protected_hardlinks = 1
fs.protected_symlinks = 1
* Applying /etc/sysctl.d/99-sysctl.conf ...
* Applying /etc/sysctl.d/arp.conf ...

#查看如下内容 
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
* Applying /etc/sysctl.conf ...

[root@realserver2 ~]# scp /etc/sysctl.d/arp.conf root@172.25.254.110:/etc/sysctl.d/arp.conf

The authenticity of host '172.25.254.110 (172.25.254.110)' can't be established.
ECDSA key fingerprint is SHA256:E3qE8JvU9z/9Q6iQNWX4FB2C7Of1r+MKoHRNklKH9ow.
ECDSA key fingerprint is MD5:26:47:a1:e9:a2:08:3a:f9:fa:eb:2d:a8:99:11:bf:6b.
Are you sure you want to continue connecting (yes/no)? yes  #输入yes
Warning: Permanently added '172.25.254.110' (ECDSA) to the list of known hosts.
root@172.25.254.110's password:   #输入密码
arp.conf                                               100%  127   162.7KB/s   00:00

查看结果

[root@realserver2 ~]# sysctl --system

[root@realserver2 ~]# cat /etc/sysctl.d/arp.conf

net.ipv4.conf.all.arp_ignore=1
net.ipv4.conf.all.arp_announce=2
net.ipv4.conf.lo.arp_ignore=1
net.ipv4.conf.lo.arp_announce=2

ka1

[root@ka1 ~]# yum install ipvsadm -y

[root@ka1 ~]# vim /etc/keepalived/keepalived.conf

#include "/etc/keepalived/conf.d/*.conf"
virtual_server 172.25.254.100 80 {
    delay_loop 6
    lb_algo wrr
    lb_kind DR
    #persistence_timeout 50
    protocol TCP
#################################################################
    real_server 172.25.254.110 80 {
        weight 1
        SSL_GET {
            url {
              path /
              status_code 200
            }
            connect_timeout 3
            nb_get_retry 2
            delay_before_retry 2
        }
    }
###############################################################
    real_server 172.25.254.120 80 {
        weight 1
        SSL_GET {
            url {
              path /
              status_code 200
            }
            connect_timeout 3
            nb_get_retry 2
            delay_before_retry 2
        }
    }
#################################################################
}

[root@ka1 ~]# systemctl restart keepalived.service

在这里插入图片描述

ka2

[root@ka2 ~]# yum install ipvsadm -y

查询是否能curl 172.25.254.100

[root@ka2 ~]# curl 172.25.254.100
172.25.254.110

[root@ka2 ~]# vim /etc/keepalived/keepalived.conf

virtual_server 172.25.254.100 80{
    delay_loop 6
    lb_algo wrr
    lb_kind DR
    #persistence_timeout 50
    protocol TCP

    real_server 172.25.254.110 80 {
        weight 1
        SSL_GET {
            url {
              path /
              status_code 200
            }
            connect_timeout 3
            nb_get_retry 2
            delay_before_retry 2
        }
    }
##################################################################
    real_server 172.25.254.120 80 {
        weight 1
        SSL_GET {
            url {
              path /
              status_code 200
            }
            connect_timeout 3
            nb_get_retry 2
            delay_before_retry 2
        }
    }

}

[root@ka2 ~]# systemctl restart keepalived.service

6.6 实现其他应用的高可用性 vrrp script(haproxy+keepalived)

6.6.1 利用脚本实现主从角色切换

ka1

[root@ka1 ~]# vim /etc/keepalived/test.sh

#! /bin/bash
[ ! -f /mnt/lee ]

[root@ka1 ~]# sh /etc/keepalived/test.sh

[root@ka1 ~]# echo $?

​ 0

[root@ka1 ~]# touch /mnt/lee

[root@ka1 ~]# sh /etc/keepalived/test.sh

[root@ka1 ~]# echo $?

​ 1

[root@ka1 ~]# chmod +x /etc/keepalived/test.sh

[root@ka1 ~]# vim /etc/keepalived/keepalived.conf

vrrp_script check_file {
    script "/etc/keepalived/test.sh"
    interval 1
    weight -30
    fall 2
    rise 2
    timeout 2
}

vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 100
    priority 100
}

vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 100
    priority 100
    advert_int 1
    #nopreempt
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.25.254.100/24 dev eth0 label eth0:1
    }
    unicast_src_ip 172.25.254.10
    unicast_peer {
        172.25.254.20
    }
    track_script {
        check_file
    }
}

[root@ka1 ~]# systemctl restart keepalived.service

check_file后的空格删除干净

[root@ka1 ~]# ls /mnt/lee

/mnt/lee

测试

[root@ka1 ~]# tcpdump -i eth0 -nn src host 172.25.254.10 and dst host 172.25.254.20

tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
01:43:30.217900 ARP, Request who-has 172.25.254.20 tell 172.25.254.10, length 28
01:43:31.218509 ARP, Request who-has 172.25.254.20 tell 172.25.254.10, length 28
01:43:32.220167 ARP, Request who-has 172.25.254.20 tell 172.25.254.10, length 28
01:43:34.222801 ARP, Request who-has 172.25.254.20 tell 172.25.254.10, length 28
01:43:35.224120 ARP, Request who-has 172.25.254.20 tell 172.25.254.10, length 28

6.6.2 haproxy+keepalived实现高可用的配置

ka1

root@ka1 ~]# yum install haproxy -y

[root@ka1 ~]# vim /etc/sysctl.conf

# sysctl settings are defined through files in
# /usr/lib/sysctl.d/, /run/sysctl.d/, and /etc/sysctl.d/.
#
# Vendors settings live in /usr/lib/sysctl.d/.
# To override a whole file, create a new file with the same in
# /etc/sysctl.d/ and put new settings there. To override
# only specific settings, add a file with a lexically later
# name in /etc/sysctl.d/ and put new settings there.

#For more information, see sysctl.conf(5) and sysctl.d(5).
net.ipv4.ip_nonlocal_bind=1

[root@ka1 ~]# sysctl -p

net.ipv4.ip_nonlocal_bind = 1

ka2

root@ka1 ~]# yum install haproxy -y

[root@ka1 ~]# vim /etc/sysctl.conf

# sysctl settings are defined through files in
# /usr/lib/sysctl.d/, /run/sysctl.d/, and /etc/sysctl.d/.
#
# Vendors settings live in /usr/lib/sysctl.d/.
# To override a whole file, create a new file with the same in
# /etc/sysctl.d/ and put new settings there. To override
# only specific settings, add a file with a lexically later
# name in /etc/sysctl.d/ and put new settings there.

#For more information, see sysctl.conf(5) and sysctl.d(5).
net.ipv4.ip_nonlocal_bind=1

[root@ka2 ~]# sysctl -p

net.ipv4.ip_nonlocal_bind = 1

ka1

[root@ka1 ~]# vim /etc/haproxy/haproxy.cfg

#---------------------------------------------------------------------
# round robin balancing between the various backends
#---------------------------------------------------------------------
backend app
    balance     roundrobin
    server  app1 127.0.0.1:5001 check
    server  app2 127.0.0.1:5002 check
    server  app3 127.0.0.1:5003 check
    server  app4 127.0.0.1:5004 check
listen webcluster
    bind 172.25.254.100:80
    balance roundrobin
    server web1 172.25.254.110:80 check inter 3 fall 2 rise 5
    server web2 172.25.254.120:80 check inter 3 fall 2 rise 5

[root@ka1 ~]# systemctl enable --now haproxy.service

在这里插入图片描述

keepalived的日志在哪里、配置keepalived日志路径 阅读详情

相关推荐

修改Keepalived配置文件位置以及重定向Keepalived日志的输出路径

修改Keepalived配置文件位置以及重定向Keepalived日志的输出路径

qq_44952664的博客 5410

docker-部署Keepalived实现Nginx高可用

Keepalived是一款基于VRRP协议的高可用集群软件,通过虚拟IP(VIP)对外提供服务,能够实时监控集群中服务器的运行状态并自动进行故障隔离,这些服务器都启动着相同的服务,当主服务器发生故障时,会自动将虚拟IP漂移到备份服务器,从而实现业务高可用。

孟孟的博客 7166

keepalived的部署

节点部署 IP hostname 192.168.47.126 master 192.168.47.127 server 需求 任务需求: 1.部署keepalived 2.配置keepalived日志 3.配置自定义监测http服务脚本 操作 1.安装keepalived和httpd服务 主节点 [root@master ~]# yum -y install keepal...

qq_46464118的博客 1453

【keepalived】keepalived简介及配置文件详解

一、是什么     keepalived是集群管理中保证集群高可用的一个服务软件,它的作用是检测web服务器的状态,如果有一台web服务器死机,或工作出现故障,Keepalived将检测到,并将有故障的web服务器从系统中剔除,当web服务器工作正常后,自动将web服务器加入到服务器集群中。解决了静态路由的单点故障问题。二、工作原理     keepalived是以VRRP协议为实现基础的,VRR...

柠檬树 1万+

LVS+keepalived搭建高可用架构

我在确认我所部署的lvs节点跟后端的real server不在同一二级网络,且中间还要经过一道防火墙后,想到了另外一个办法,在中间增加一层nginx,分别在两台lvs安装部署nginx,通过将请求转发到nginx,再由nginx转发请求,这样就能在不增加机器的情况下完成请求转发,实现后端服务的高可用。脚本执行成功后一样通过ip addr查看是否绑定成功,绑定成功则可以在客户端访问VIP了,看是否正常响应,到此MASTER就部署完成可,接下来可以按照以上的步骤完成另外一个lvs节点部署。

wukuncsdn的博客 1034

Matlab子图排版终极指南:从tight_subplot到tiledlayout的实战对比

本文深入对比Matlab中两大子图排版工具:社区经典函数tight_subplot与官方现代布局管理器tiledlayout。针对默认subplot产生的子图间距与边缘距离问题,详细解析两者的设计哲学、参数控制与实战应用,帮助用户根据版本与需求选择最佳方案,实现高效、精确且美观的多子图排版。

weixin_29048309的博客 360

ubuntu安装keepalived

ubuntu版本 查看版本命令: lsb_release -a 安装前环境准备( 全敲一遍 ) sudo apt-get install libssl-dev sudo apt-get install libpopt-dev sudo apt-get install daemon sudo apt-get install build-essential sudo apt-get install libssl-dev sudo apt-get install openssl sudo a.

weixin_59613707的博客 2734

(超详细)Qt入门和配置Visual Studio的Qt环境

内容写了Qt入门,创建并编写第一个Qt程序,以及配置VS编写Qt程序的环境。(超级详细)

LY549826LY549264的博客 7679

Keepalived 原理及配置(高可用)

本文详细讲解了keepalived的工作原理,日常的配置,每个模式的详细配置及验证。还结合lvs和haproxy实现高可用集群的搭建,每个实验都有详细的流程及结果测试。

a_2373179473的博客 4718

手把手拆解固态电池成本:2030年真能比液态电池便宜30%吗?

本文深度解析固态电池成本结构,探讨2030年实现比液态电池便宜30%的可行性路径。通过拆解正极材料、负极材料和固态电解质的成本演变,分析关键技术对降本的影响,并预测产业链协同效应下的成本优化趋势。文章指出,在材料创新、设备国产化和政策支持等多重因素推动下,固态电池有望在2030年实现显著降本目标。

kite3的博客 403

AOI检测总误判?五大常见问题与实战解决方案

通过对图像质量、检测程序、外界干扰、算法优化以及设备维护和校准的全面把控,企业可以有效降低误判率,提升AOI检测的准确性和可靠性,为工业生产提供更有力的质量保障。表现描述:在AOI检测时,元器件字符因印刷颜色深浅、模糊或受到灰尘干扰等差异,再加上元件库参数未根据实际生产优化,会使系统误将合格元件判定为不合格,严重影响生产效益和产品质量。优化元件库:着重检测关键差异字符,如型号编码等关键信息,剔除不必要字符的检测项,减少干扰,专注于关键识别的准确性。检测时,根据物料信息动态更新检测参数,使系统适应物料变化。

ALeader_AOI的博客 3495

keepalived服务介绍

Keepalived 是一个用于实现高可用性(HA)和负载均衡的开源工具,用 C 编写的路由软件,特别适用于 Linux 服务器。VRRP 是一种网络协议,用于在多个路由器之间实现冗余,以确保当主路由器出现故障时,备用路由器可以迅速接管。这种模式下,有一个主节点(Active)和一个或多个备节点(Passive)。只有主节点处理流量,当主节点出现故障时,备节点接管。但是这种情况下服务会中断一点时间,因为master节点恢复后备用节点将会把IP给主节点,而不是备用节点一直接管,用户会感到卡顿一下。

m0_56363537的博客 1204

公开 学生课堂行为数据集 SCB-Dataset: A Dataset for Detecting Student and Teacher Classroom Behavior

公开 学生课堂行为数据集 SCB-Dataset Student Classroom Behavior dataset

CSPhD-winston的博客 1万+

keepalived集群搭建

文章目录一. 搭建过程二. 验证keepalived集群三. keepalived集群中的每台机器都出现了vip的解决办法(组播VS单播) keepalived是通过vrrp协议保证系统高可用的解决方案,一般作为一个高可用系统的入口,提供虚拟ip(vip)供用户访问系统,keepavlived集群的下一个中间件往往为haproxy或者nginx。 一. 搭建过程 主机名 ip 网卡名 ubuntu01 192.168.56.104 enp0s8 ubuntu02 192.168.56

没事学点AI小知识 1567

独创改进 | RT-DETR 引入 Asymptotic Hybrid Encoder | 渐进混合特征解码结构

独创改进🚀! | RT-DETR 引入 Asymptotic Hybrid Encoder | 渐进混合特征解码结构

Coding... 2211

实战!用Python爬取海关总署进出口贸易数据 —— 从反爬突破到数据可视化全流程指南

{"period": "2026-05", "country": "美国", "import_val": 123.4, "export_val": 567.8, ...}研究员可构建领先指标模型;fig = px.bar(top, x="country", y="total_usd", title="贸易总额TOP10")html.H1("海关进出口数据看板", style={"textAlign": "center"}),"""发起带签名的POST请求(实际为GET + query param)"""

2201_76125261的博客 589

Keepalived权威指南中文(Keepalived:The Definitive Guide)

Keepalived 权威指南 The Definitive Guide第一章 VRRP1.1 VRRP协议简介VRRP路由器VRRP虚拟路由器MASTER和BACKUP1.2 工作机制第二章 KEEPALIVED2.1 Keepalived的设计和实现2.1.1 多进程模式2.1.2 控制面板2.1.3 WatchDo2.1.4 IPVS封装2. 2 KeepAlived的安装2.3 KeepAlived配置详解2.3.1 全局配置全局定义静态地址和路由2.3.2 VRRPD配置VRRP Sync Gro

u012324798的博客 5714

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Keepalived日志配置,将Keepalived从系统日志文件中分离出来成为独立的Keepalived日志文件

前言 在Linux服务器上,完成《 Nginx+Keepalived搭建高可用Web服务器详细教程 》搭建高可用Web服务器后,如果没有额外的配置,在查看日志时,可能会发现Keepalived的日志和Linux下的其它程序的日志打印在一起的,查看起来费时费力。在 Linux 下 messages 日志文件是用来记录 Linux 内核消息及各种应用程序的公共日志信息文件,其中包括了启动、IO...

Spring Boot-Common On With You 2910

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

docker部署keepalived

dokcer部署keepalived

zhenyu333的博客 4352

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

【Keepalived】keepalived部署

如下有部分是操作系统自带的,并不是所有的都需要。亦可通过window本地下载并上传。

qq_41466440的博客 1324

LVS-keepalived

LVS-keepalived群集必须会!!!

m0_73695023的博客 988

keepalived安装文档

7、将keepalived文件拷贝到etc下,加入网卡配置。6、将init.d文件拷贝到etc下,加入开机启动项。9、将keepalived配置文件拷贝到etc下。8、创建keepalived文件夹。10、添加可执行权限。

棉花糖老丫 1384

linux keepalived 日志,如何重定向Keepalived日志的输出路径

Keepalived默认所有的日志都是写入到/var/log/message下的,由于message的日志太多了,而Keepalived的日志又很难分离出来,所以本文提供了一个调整Keepalived日志输出路径的方法。具体操作步骤如下:一、修改 /etc/sysconfig/keepalived把KEEPALIVED_OPTIONS="-D" 修改为KEEPALIVED_OPTIONS="-D ...

weixin_39935571的博客 763

Keepalived配置日志文件

最近安装keepalived,再centos上面一帆风顺啊,没有遇到任何阻拦,但是再ubuntu上装,差点没让我砸了电脑,各种坑,各种报错,ubuntu上安装可以看下我这边博客:ubuntu 下安装keepalived 所以,能够查看日志是一件很幸福的事情啊,根据日志来定位错误会事半功倍 好了,正片上映: 配置日志文件 修改配置文件 keepalived vi /etc/sysconfig/ke...

波风水门 3137
上一篇: haproxy
下一篇: nginx
Dream_of_falling
博客等级 码龄5年 82粉丝 43原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值