1.Keepalived 简介

Keepalived是Linux下的一个免费的、轻量级的高可用解决方案。是一个由C语言编写的路由软件,主要目标是为Linux系统和基于Linux的基础架构提供简单而强大的负载平衡和高可用性设。Keepalived实现了一组检查器,以根据其健康状况动态地和自适应地维护和管理负载平衡的服务器池。另一方面,VRRP实现了高可用性协议。VRRP是路由器故障转移的基础。此外,Keepalived为VRRP有限状态机实现了一组挂钩,提供低级和高速协议交互。为了提供最快的网络故障检测,Keepalived实现了BFD协议。VRRP状态转换可以考虑BFD提示来驱动快速状态转换。

Keepalived框架可以单独使用,也可以与其他软件一起使用。 Keepalived最开始是为LVS设计的,主要用来监控集群中各个服务节点的运行状态。 当服务节点出现故障被检测到,则会被Keepalived从集群中剔除,待恢复后再重新加入集群,期间的工作自动完成,不需要人工干预,需要人工完成的部分仅限于修复出现故障的服务节点。 VRRP协议,全称:Virtual Router Redundancy Protocol(虚拟路由器冗余协议)。它是一种选择协议、路由备份协议,是Keepalived最重要的一个功能。可以将多个路由器组成一个虚拟路由器(一主多备),在网络发生故障时,可以实现透明切换。 通过VRRP协议组成的虚拟路由器,通过一个或多个虚拟IP对外提供服务,在内部则是多个物理路由器协同工作,同一时间只有一台物理路由器对外提供服务,被称为主路由器。其工作过程大致如下:

1.启用VRRP功能后,根据优先级确定自己的在虚拟路由器中的角色,优先级高的为主路由器,其他的为备用路由器。主路由器定期向其他备用路由器发送VRRP报文,通告自己的工作状态正常,备用路由器则会定时接收。

2.VRRP根据不同的抢占方式,确定是否替换主备状态: ● 抢占方式:备用路由器收到报文后,会对比优先级,若大于通告报文中的优先级,则切换为主路由器,否则报持状态不变; ● 非抢占方式:主路由器在没有出现故障的情交下,主路由器与备用路由器将一直保持原有的状态。

3.若备用路由器在一定时间内没有收到主路由器发送的VRRP报文,则认为主路由器无法正常工作,此时备用路由器将会选举出优先级高的作为主路由器并发送VRRP报文,替代原有主路由器持续工作。 了解了VRRP如何工作,下面将介绍Keepalived是如何工作的。但在介绍之前,还需要了解一下它的设计架构及健康检查机制。Keepalived大致分两层结构:用户空间和内核空间。其大多数核心功能均在用户空间,而内核空间中的两个模块,IPVS主要实现负载均衡,NETLINK则主要提供高级路由及其他相关的网络功能。图9-27是官方给出的Keepalived体系结构拓扑图。

Keepalived提供了三个守护进程,分别负责不同的功能: ● 父进程:负责fork子进程并对其进行监控。 ● VRRP子进程:负责VRRP框架。 ● 键康检查子进程:负责健康检查。 Keepalived依赖于VRRP协议实现高可用,同时还实现基于TCP/IP协议栈的多层(3层、4层、5/7层)的健康检查机制,能够提供服务节点检查及故障隔离的功能。其运行机制大致如下: ● 网络层:主要通过ICMP协议,向服务节点发送ICMP数据包(类似ping命令的方式),若无响应,则判定为故障节点并将其从集群中移除。 ● 传输层:主要通过TCP协议,向后端发起一个TCP连接请求,若无响应,则判定为故障节点并将其从集群中移除。 ● 应用层:主要根据用户的一些设定来判断节点是否正常,若不正常,则判定为故障节点并将其从集群中移除。常用的方式即使用脚本进行检测。

Keepalived一般会同时运行在两台或更多服务器上,同时提供服务且存在主从之分。实际提供服务的只有主服务节点。其工作原理与VRRP类似。Keepalived会根据配置文件中定义的优先级或节点的主从标记,确定哪一台服务器中运行的服务可以成为主节点并使用VIP(虚拟IP)对外提供服务,其他的则成为从节点。若Keepalived的主节点出现故障停止提供服务或所在的服务器宕机时,会将主节点移除并在从节点中选举出优先级较高的节点作为新的主节点并接管VIP继续提供服务,保证服务的不间断。待故障节点恢复后,再重新加入并重新确定是否需要切换主从关系。

2.Keepalived 安装及基础配置

1.Keepalived安装比较简单,安装的方式主要分为两种: ● 可以使用YUM源直接进行安装。如下所示。

[root@keepalive-master ~]# yum install -y keepalived

如果出现图中这种重复的语句就使用rm  -F  /var/run/yum.pid命令强制关闭yum再重新安装,下图所示。

2. 如果需要使用最新版本, 也可以在官网:http://www.keepalived.org/下载最新的版本编译安装。 安装(此处使用YUM源进行安装)过程,Keepalived的配置(/etc/keepalived/keepalived.conf)主要分为以下七个部分,也可以在/usr/share/doc/keepalived-<版本号>/samples目录下查看官方提供的配置文件示例或使用命令“man keepalived.conf”查看相关参数及说明。由于参数较多且限于篇幅,下面将简单介绍其主要功能及常用的配置参数:

3.101 global_defs

定义全局设置,包括如发送消息的邮件地址、SMTP服务器的IP、SMTP服务器的超时时间、 主机识别字符串、VRRP多播地址等。 ● notification_email:故障时接收邮件的地址,可以多个,每行一个; ● notification_email_from:邮件发送地址; ● smtp_server:SMTP服务器地址; ● smtp_connect_timeout:SMTP连接超时时间; ● router_id:主机识别标志。出现故障需要发送邮件时,通知邮件会使用到它。 ● vrrp_skip_check_adv_addr:跳过报文检查。当收到的报文与上一个报文来自同一个路由器时有效; ● vrrp_strict:vrrp协议严格模式,严格遵守vrrp协议; ● vrrp_garp_interval:网卡上APR消息之间的延迟; ● vrrp_gna_interval:网卡上发送的未经请求的NA消息之间的延迟。

3.2static_ipaddress 和static_routes

定义静态IP地址和路由。如果服务器上已经定义且这些服务器具有网络连接,则不需要此部分。

3.3vrrp_sync_group

定义一起故障转移的VRRP备份VRRP同步组。 ● group:vrrp_instance实例名,可以多个,每行一个; ● notify_master:状态转为MASTER时,执行的脚本; ● notify_backup:状态转为BACKUP时,执行的脚本; ● notify_fault:状态转为FAULT时,执行的脚本; ● notify:当出现状态转换时,即会执行的脚本。在 notify_* 脚本之后执行。 ● smtp_alert:状态发生转换时,触发邮件发送。相关的信息在 global_defs 中定义; ● global_tracking:所有VRRP共享相同的跟踪配置。

3.4vrrp_instance

为VRRP同步组的内部或外部网络接口的成员定义可移动的虚拟IP地址,在状态切换时会漂移到其他节点上继续提供服务。每个VRRP实例必须具有唯一的“virtual_router_id”值,标志着哪些主/备服务器可以使用同一个虚拟IP地址提供服务。即同一“vrrp_instance”中,此值在MASTER或BACKUP节点上必须一致。还可以指定状态在切换为MASTER、BACKUP和 FAULT时,是否触发SMTP警报。 ● state:节点的状态。可为:MASTER、BACKUP。单节点时,默认为MASTER,当有多个节点时,选举出优先级最高的成为MASTER。 ● interface:发送vrrp报文的网卡。 ● virtual_router_id:虚拟路由器标识。全局唯一且范围在0-255之间的整数数字。同一个实例中,主从节点中的此值必须一致。 ● priority:优先级数值。值越大,优先级越高。若为MASTER,建议值设置比其他节点高出至少50。 ● advert_int:VRRP广告时间间隔(以秒为单位)(例如0.92)(默认使用)。 ● authentication:设置认证信息。 ● virtual_ipaddress:虚拟IP地址,可以多个,每行一个。当状态在MASTER和BACKUP之间切换时,添加或删除的IP地址。

3.5vrrp_script

定义跟踪脚本。主要用于健康检查。当需要根据业务进程的运行状态决定是否需要进行主备切换时,可以通过编写脚本对业务进程进行检测监控。主要用于 vrrp_instance 和 vrrp_sync_group 部分。 ● script:执行脚本的路径; ● interval:每两次调用执行脚本的时间间隔; ● timeout:脚本执行的超时时间; ● weight:权重值。按此权重调整优先级,默认为0。

3.6virtual_server_group

定义虚拟服务器组,允许真实服务器成为多个虚拟服务器组的成员,每行一个。成员格式为:IP地址或范围和端口号,以空格分隔。

3.7 virtual_server

定义用于负载平衡的虚拟服务器,该服务器由多个真实服务器组成。后接虚拟IP地址和端口号,以空格分隔。 ● delay_loop:轮询的延迟时间; ● lb_algo:LVS负载均衡调度算法。官方给出的可选项为:rr、wrr、lc、wlc、lblc、sh、dh; ● lb_kind:LVS转发模式。官方给出的可选项为:NAT、DR、TUN; ● persistence_timeout:LVS会话超时时间,默认6分钟; ● protocol:第四层网络协议,默认为TCP。官方给出的可选项为:TCP、UDP、SCTP; ● real_server:定义LVS真实服务器节点。有多少个真实服务器节点,则需要多少段; ● weight:real_server中使用。权重值,默认为1; ● inhibit_on_failure:real_server中使用。当键康检查失败时,权重值会被重置为0; ● notify_up:real_server中使用。当健康检查认为服务为UP状态时,执行的脚本; ● notify_down:real_server中使用。当健康检查认为服务为DOWN状态时,执行的脚本; ● HTTP_GET:real_server中使用。健康检查定义,官方给出的可选项为: HTTP_GET、SSL_GET、TCP_CHECK、SMTP_CHECK、DNS_CHECK、MISC_CHECK

3.3Keepalived 基于非抢占模式配置实例

将演示如何配置Keepalived的非抢占模式,同时会涉及到LVS的相关内容。演示中使用了四台服务器,两台作为Keepalived及ipvsadm节点,两台做为后端的真实服务器。ipvsadm在演示中主要用于查看LVS集群的相关信息,而具体的配置则是通过Keepalived配置文件直接进行配置管理的。即实际的演示内容是Keepalived+LVS的集群,关于LVS后端真实服务器的配置,由于在前面的章节中已经有过详细步骤,因此本小节将不再进行演示。同时所有服务器已完成了一些常用的初始化内容,如设置主机名、关闭SELinux、测试域名解析等,后续不再进行说明。 Keepalived在运行过程中,可以配置抢占和非抢占模式。两者的区别如下: ● 抢占模式:即在一个Keepalived集群中同时存在MASTER和BACKUP节点,且MASTER节点的优先级比BACKUP节点高, 当MASTER节点故障时,在BACKUP节点中选举出优先级最高的节点作为新的MASTER继续提供服务并抢占VIP, 但是当原来的MASTER恢复后,会将VIP抢回。

非抢占模式:即在一个Keepalived集群中只存在BACKUP节点,选举出优先级最高的成为MASTER提供服务,当作为MASTER节点故的服务器障时,在其他BACKUP节点中选举出优先级最高的节点作为新的MASTER继续提供服务并抢占VIP,但是在原来作为MASTER节点的服务器恢复后,不会抢回VIP,而是作为一个BACKUP节点加入到集群中。可以通过两种方式设置非抢占模式,第一种即在优先级高的节点的配置文件中添加参数:nopreempt;第二种则是将所有BACKUP节点的优先级设置为相同的值。 了解了抢占与非抢占模式的区别,在Keepalived的运行中,还有一种被称为“脑裂”的问题,它是由于配置不当或MASTER/BACKUP节点之间的检测出现异常,导致VIP同时在MASTER节点与BACKUP节点出现引起的,会导致出现资源争抢、同时读写、数据损坏等问题。 Keepalived+LVS的集群主要分为两部分:后端的真实服务器(Real Server)和前端的负载调度节点(Load Balancer)。演示所需的服务器信息,如表9-5所示。

HOSTNAME

IP ADDRESS

ROLES

keepalived-backup1

VIP: 192.168.122.200, DIP: 192.168.122.128

Keepalived,ipvsadm

keepalived-backup2

VIP: 192.168.122.200, RIP: 192.168.122.204

Keepalived,ipvsadm

keepalived-nginx1

VIP: 192.168.122.200, RIP: 192.168.122.205

Nginx

keepalived-nginx2

VIP: 192.168.122.200, RIP: 192.168.122.217

Nginx

以上服务器对应的架构图,如图9-28所示。

1.配置后端真实服务器 对Nginx1服务器配置如下: 1)登录keepalived-nginx1,安装Nginx服务并进行简单配置(使用默认站点即可),方便演示过程中查看具体的效果。需要执行的命令如下。

[root@keepalived-nginx1 ~]# yum install -y nginx
[root@keepalived-nginx1 ~]# systemctl enable nginx.service
[root@keepalived-nginx1 ~]# systemctl start nginx.service
[root@keepalived-nginx1 ~]# firewall-cmd --add-port=80/tcp
[root@keepalived-nginx1 ~]# echo "keepalived-nginx1  192.168.122.205" > /usr/share/nginx/html/index.html

安装并配置完成后,在浏览器中访问,若出现如图9-29所示的内容,则说明Nginx服务已安装成功并能正常提供服务。

2)登录keepalived-nginx1,由于涉及到LVS,因此还需要配置虚拟IP地址及路由规则、抑制ARP设置等,命令如下所示(具体的演示步骤,可以参考前面相关小节)。

[root@keepalived-nginx1 ~]# ifconfig lo:0 192.168.122.200 broadcast 192.168.122.200 netmask 255.255.255.255 up
[root@keepalived-nginx1 ~]# route add -host 192.168.122.200 dev lo:0
[root@keepalived-nginx1 ~]# echo "1" > /proc/sys/net/ip.>v4/conf/lo/arp_ignore
[root@keepalived-nginx1 ~]# echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
[root@keepalived-nginx1 ~]# echo "1"  > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@keepalived-nginx1 ~]# echo "2"  > /proc/sys/net/ipv4/conf/all/arp_announce

3)配置永久生效的防火墙规则,允许Nginx服务持续对外提供服务。命令如下所示。

[root@keepalived-nginx1 ~]# firewall-cmd --permanent --add-port=80/tcp
[root@keepalived-nginx1 ~]# firewall-cmd --reload

若能通过“firewall-cmd --list-all”查看到如图9-30所示的内容,则说明防火墙规则已生效。

4)登录keepalived-nginx2,安装Nginx服务并做简单配置(使用默认站点即可),方便演示过程中查看具体的效果。需要执行的命令如下。

[root@keepalived-nginx2 ~]# yum install -y nginx
[root@keepalived-nginx2 ~]# systemctl enable nginx.service
[root@keepalived-nginx2 ~]# systemctl start nginx.service
[root@keepalived-nginx2 ~]# firewall-cmd --add-port=80/tcp
[root@keepalived-nginx2 ~]# echo "keepalived-nginx2  192.168.122.217" > /usr/share/nginx/html/index.html

安装并配置完成后,在浏览器中访问,若出现如图9-31所示的内容,则说明Nginx服务已安装成功并能正常提供服务。

5)登录keepalived-nginx2,由于涉及到LVS,因此还需要配置虚拟IP地址及路由规则、抑制ARP设置等,命令如下所示(具体的演示步骤,可以参考前面相关小节)。

[root@keepalived-nginx2 ~]# ifconfig lo:0 192.168.122.200 broadcast 192.168.122.200 netmask 255.255.255.255 up
[root@keepalived-nginx2 ~]# route add -host 192.168.122.200 dev lo:0
[root@keepalived-nginx2 ~]# echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
[root@keepalived-nginx2 ~]# echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
[root@keepalived-nginx2 ~]# echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@keepalived-nginx2 ~]# echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce

若能通过“firewall-cmd --list-all”查看到如图9-32所示的内容,则说明防火墙规则已生效。

6)配置永久生效的防火墙规则,允许Nginx服务持续对外提供服务。命令如下所示。

[root@keepalived-nginx2 ~]# firewall-cmd --permanent --add-port=80/tcp
[root@keepalived-nginx2 ~]# firewall-cmd --reload

若能通过“firewall-cmd --list-all”查看到如图9-32所示的内容,则说明防火墙规则已生效。

2. 配置 Load Balanc

1)登录keepalived-backup1,分别安装keepalived和ipvsadm。命令如下。

[root@keepalived-backup1 ~]# yum install -y keepalived ipvsadm
[root@keepalived-backup1 ~]# systemctl enable keepalived.service
[root@keepalived-backup1 ~]# systemctl start keepalived.service

若通过“keepalived -v”与“ipvsadm -L -n”命令可查看到如图9-33所示的内容,则说明安装成功(此时由于未修改keepalived的配置文件,ipvsadm显示的信息为默认配置的信息)

2)登录keepalived-backup1,先ifconfig查看网卡名称:

修改配置文件:/etc/keepalived/keepalived.conf,将其中的内容修改为如下所示的内容(建议根据实际情况进行修改)。

! Configuration File for keepalivedglobal_defs {notification_email {notification_emal@tang.com}notification_email_from Alexandre.Cassen@firewall.locsmtp_server 127.0.0.1smtp_connect_timeout 30router_id LVS_DEVELvrrp_skip_check_adv_addrvrrp_strictvrrp_garp_interval 0vrrp_gna_interval 0
}vrrp_instance VI_1 {state BACKUPinterface eth0virtual_router_id 51priority 100nopreemp
advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.122.200}
}
virtual_server 192.168.122.200 80 {delay_loop 1lb_algo rrlb_kind DRpersistence_timeout 0protocol TCPreal_server 192.168.122.205 80 {weight 1HTTP_GET {url {path /}connect_timeout 3nb_get_retry 3delay_before_retry 3}}
real_server 192.168.122.217 80 {weight 1HTTP_GET {url {path /}connect_timeout 3nb_get_retry 3delay_before_retry 3}}
}

3)登录keepalived-backup1,配置永久生效的防火墙规则,允许各节点间通过VRRP协议通信,以实现Keepalived各节点之间通信及允许其他主机可以通过该服务器的80端口访问后端Nginx服务,命令如下所示。

[root@keepalived-backup1 ~]# firewall-cmd --permanent --direct --add-rule ipv4 filter INPUT 0 --in-interface eth0 --destination 224.0.0.18 --protocol vrrp -j ACCEPT
[root@keepalived-backup1 ~]# firewall-cmd --permanent --direct --add-rule ipv4 filter OUTPUT 0 --in-interface eth0 --destination 224.0.0.18 --protocol vrrp -j ACCEPT
[root@keepalived-backup1 ~]# firewall-cmd --permanent --add-port=80/tcp
[root@keepalived-backup1 ~]# firewall-cmd --reload

此时,若通过“firewall-cmd --list-all”命令,只能是看到关于80端口的信息,若需要查看通过“--direct”参数添加的规则,则需要使用“firewall-cmd --direct --get-all-rules”命令。如图9-34所示。

4)登录keepalived-backup1,重启keepalived服务即可。

[root@keepalived-backup1 ~]# systemctl restart keepalived.service

重启成后,再次使用“ipvsadm -L -n”命令,可以查看到其中的信息已经发生了变更,如图9-35所示。

5)登录keepalived-backup2,分别安装keepalived和ipvsadm。命令如下。

[root@keepalived-backup2 ~]# yum install -y keepalived ipvsadm
[root@keepalived-backup2 ~]# systemctl enable keepalived.service
[root@keepalived-backup2 ~]# systemctl start keepalived.service

若通过“keepalived -v”与“ipvsadm -L -n”命令,若可以查看到如图9-33所示同样的内容,则说明安装成功(此时由于未修改keepalived的配置文件,ipvsadm显示的信息为默认配置的信息)。

6)登录keepalived-backup2,修改配置文件:/etc/keepalived/keepalived.conf。文件内容与keepalived-backup1节点的配置文件一致即可(建议根据实际情况进行修改),此处不再赘述,详细内容可参考第2步骤。 7)登录keepalived-backup2,配置永久生效的防火墙规则,允许各节点间通过VRRP协议通信,以实现Keepalived各节点之间通信及允许其他主机可以通过该服务器的80端口访问后端Nginx服务。命令如下所示。

[root@keepalived-backup2 ~]# firewall-cmd --permanent --direct --add-rule ipv4 filter INPUT 0 --in-interface eth0 --destination 224.0.0.18 --protocol vrrp -j ACCEPT
[root@keepalived-backup2 ~]# firewall-cmd --permanent --direct --add-rule ipv4 filter OUTPUT 0 --in-interface eth0 --destination 224.0.0.18 --protocol vrrp -j ACCEPT
[root@keepalived-backup2 ~]# firewall-cmd --permanent --add-port=80/tcp
[root@keepalived-backup2 ~]# firewall-cmd --reload

此时,若通过“firewall-cmd --list-all”命令,只能是看到关于80端口的信息,若需要查看通过“--direct”参数添加的规则,则需要使用“firewall-cmd --direct --get-all-rules”命令。同样的可以查看到如图9-34所示的内容。

8)登录keepalived-backup2,重启keepalived服务即可。

[root@keepalived-backup2 ~]# systemctl restart keepalived.service

重启成后,再次使用“ipvsadm -L -n”命令,可以查看到其中的信息已经发生了变更,同样的可以查看到如图9-35所示的内容。 至此,Keepalived+LVS的集群就配置完成了。通过浏览器访问虚拟IP地址,若刷新页面(必要时请使用强制刷新,消除缓存影响)能查看到如图9-36所示的内容,则说明配置已经生效。

也可以使用“curl”命令在命令行进行访问,若出现如图9-37所示的内容,则同样表示配置已经生效。

[Linux基础与服务管理——常用集群高可用软件 Keepalived]相关推荐

  1. 【Linux基础与服务管理——常用集群高性能负载均衡器 HAProxy】

    1.1HAProxy 简介 HAProxy是一个可靠的.高性能的负载均衡软件,也是一种免费.快速且可靠的解决方案,可为基于TCP(第四层)和HTTP(第七层)的应用程序提供高可用.负载均衡的代理,特别 ...

  2. mysql-mmm 集群高可用软件介绍

    mysql-mmm 集群高可用软件介绍 MMM即Master-Master Replication Manager for MySQL(mysql主主复制管理器)    关于mysql主主复制配置的监 ...

  3. .Net Core微服务入门——Ocelot和Consul集群高可用

    .Net Core微服务入门--Ocelot和Consul集群高可用 上一章 我们ocelot网关顺利的接入了consul集群,并且访问成功. 但是,我们也遇到了问题,把 192.168.8.25 上 ...

  4. PostgreSQL HA集群高可用方案介绍 pgpool-II+PostgreSQL HA方案部署

    PostgreSQL HA集群高可用方案介绍 & pgpool-II+PostgreSQL HA方案部署 一.PostgreSQL HA集群高可用方案介绍 二.pgpool-II+Postgr ...

  5. Rabbitmq集群高可用测试

    Rabbitmq集群高可用 RabbitMQ是用erlang开发的,集群非常方便,因为erlang天生就是一门分布式语言,但其本身并不支持负载均衡. Rabbit模式大概分为以下三种:单一模式.普通模 ...

  6. MySQL集群高可用架构

    MySQL集群高可用架构 前言 高可用架构对于互联网服务基本是标配,无论是应用服务还是数据库服务都需要做到高可用.对于一个系统而言,可能包含很多模块,比如前端应用,缓存,数据库,搜索,消息队列等,每个 ...

  7. golang检查tcp是否可用_宕机处理:Kubernetes集群高可用实战总结

    导语 | 在企业生产环境,Kubernetes高可用是一个必不可少的特性,其中最通用的场景就是如何在Kubernetes集群宕机一个节点的情况下保障服务依旧可用.本文对在该场景下实现集群和应用高可用过 ...

  8. Hadoop集群高可用及zookeeper+kafka组件搭建

    目录 一.Hadoop集群高可用 1.Zookeeper概述 1)Zookeeper基本概述 3)Zab协议 3)observer 4)zookeeper集群图例 2.zookeeper集群搭建 3. ...

  9. 让数据库无惧灾难,华为云GaussDB同城双集群高可用方案正式发布!

    摘要:在华为全联接2021期间,华为云GaussDB(for openGauss)正式推出重大内核新特性--同城双集群高可用方案,提供金融级高可用服务,支持RPO=0 .RTO<60s的同城双集 ...

最新文章

  1. php中location.reload,js刷新页面location.reload()用法详解
  2. 想在VR中体验暴雪爸爸的游戏,还得再等等
  3. 综合-某假期欢乐赛 (Apri, 2018)
  4. 线性跟驰模型 matlab,Bierley非线性跟驰模型特性仿真分析
  5. 第11课 尼克与强盗 《小学生C++趣味编程》
  6. webpack 编译完成执行代码
  7. 中考禁用计算机,今年中考数学科禁用计算器,消息来得太突然,懵圈了吧?
  8. OPC 学习交流感想
  9. 【TSP】基于matlab GUI蚁群算法求解旅行商问题【含Matlab源码 929期】
  10. 《安富莱嵌入式周报》第259期:2022.03.28--2022.04.03
  11. phpQuery使用经验,抓取网页快捷,拒绝正则表达式
  12. Java EE开发系列教程 - 使用EJB组件与JPA层交互
  13. 一个人靠不靠谱,就看这三点: 凡事有交代,件件有着落,事事有回音
  14. 浙大 | PTA 习题9-5 通讯录排序 (20分)
  15. BootStrap Table的JS封装
  16. 如何修改win7上的mac地址
  17. 中文语音克隆|MockingBird(拟声鸟)github项目运行流程(一次跑通)
  18. 如果一直都没钱,还要不要感谢贫穷?
  19. Veins/OMNeT/SUMO:TraCI的getRoadId()方法不能判断junction
  20. public,private,protected,default详解

热门文章

  1. 关于html中的像素设置问题
  2. verilog2001 generate endgenerate
  3. Go工具之generate
  4. chromeF12 谷歌开发者工具详解
  5. 前端笔记之Canvas
  6. 数据库编程(一)JDBC篇
  7. lda php,LDA主题分析代码实现
  8. Java微信网页授权开发
  9. 【python】Python 常见文件格式 .py .pyc .pyw .pyo .pyd简介
  10. 英文翻译阿拉伯语-批量英文翻译阿拉伯语工具免费