首页 > 其他分享 >keepalived绑定单播地址、非抢占模式及LVS的TCP模式的高可用【转】

keepalived绑定单播地址、非抢占模式及LVS的TCP模式的高可用【转】

时间:2024-07-20 11:41:59浏览次数:14  
标签:LVS keepalived 模式 echo vrrp 192.168 conf root

背景:keepalived默认是组播地址进行播放,且默认地址是224.0.0.18,如果配置多个keepalived主机,会导致虚拟IP地址存在冲突问题,这种问题怎么解决呢?

解决办法:就是将keepalived主机的多播地址修改为单播地址,绑定固定IP地址,避免在多播模式下,通过VRRP进行广播地址,造成IP地址地址冲突。

vrrp_strict   #严格遵守VRRP协议,不允许状况,在配置单播IP地址时,此行需要删除或者注释掉即可。

1、没有VIP地址

2、单播邻居

3、在VRRP版本2中有IPv6地址

实验一:实现keepalived单播地址配置

1、在主节点配置keepalived文件

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 [root@centos_17~]#vim /etc/keepalived/keepalived.conf global_defs {    notification_email {      [email protected]    }    notification_email_from [email protected]    smtp_server 127.0.0.1    smtp_connect_timeout 30    router_id ka1    vrrp_skip_check_adv_addr    vrrp_iptables    vrrp_garp_interval 0    vrrp_gna_interval 0 }   vrrp_instance VI_1 {     state MASTER     interface ens33     virtual_router_id 50     priority 100     unicast_src_ip 192.168.37.17  配置源地址的IP地址     unicast_peer {        192.168.37.7  配置从节点的目标IP地址     }     advert_int 2     authentication {         auth_type pass         auth_pass 123456     }     virtual_ipaddress {         192.168.37.100 dev ens33 label ens33:1     } }

 配置完成之后重启keepalived:

1 [root@centos_17~]#systemctl restart keepalived

2、在从节点配置keepalived文件  

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 [root@centos7~]#vim /etc/keepalived/keepalived.conf global_defs {    notification_email {      [email protected]    }    notification_email_from [email protected]    smtp_server 127.0.0.1    smtp_connect_timeout 30    router_id ka2    vrrp_skip_check_adv_addr    vrrp_iptables    vrrp_strict    vrrp_garp_interval 0    vrrp_gna_interval 0 }   vrrp_instance VI_1 {     state BACKUP     interface ens33     virtual_router_id 50     priority 80     unicast_src_ip 192.168.37.7     unicast_peer {        192.168.37.17         }     advert_int 2     authentication {         auth_type pass         auth_pass 123456     }     virtual_ipaddress {         192.168.37.100 dev ens33 label ens33:1     } }

 配置完成之后重启keepalived: 

1 [root@centos_17~]#systemctl restart keepalived

 3、验证锁单播IP地址效果。

此时由于绑定了双方keepalived主机的IP地址,就只会对双方进行广播,避免多个keepalived的虚拟IP地址进行冲突。

 

 实验二:实现非抢占模式漂移VIP

 原理:关闭VIP抢占模式,需要VIP state都为BACKUP,此时哪个keepalived的优先级大,优先占用哪个keepalived服务器,当此占用的服务器宕机后,另一个BACKUP主机才会进行占用,就算优先级高的恢复了,也不能进行抢占,除非优先级低的服务器宕机后,才会继续占用到高优先级的keepalived服务器上。

1、在优先级高的keepalived主机进行配置

 vim   /etc/keepalived/keepalived.conf

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 global_defs {    notification_email {      [email protected]    }    notification_email_from [email protected]    smtp_server 127.0.0.1    smtp_connect_timeout 30    router_id ka1    vrrp_skip_check_adv_addr    vrrp_iptables    vrrp_garp_interval 0    vrrp_gna_interval 0 }   vrrp_instance VIP_1 {     state BACKUP  角色必须是BACKUP     interface ens33     virtual_router_id 50     priority 100     unicast_src_ip 192.168.37.17     unicast_peer {        192.168.37.7     }     advert_int 2     nopreempt  设置为非抢占模式     authentication {         auth_type PASS         auth_pass 123456     }     virtual_ipaddress {         192.168.37.100 dev ens33 label ens33:1     } }

 

 2、在优先级低的keepalived主机配置

 vim   /etc/keepalived/keepalived.conf

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 global_defs {    notification_email {      [email protected]    }    notification_email_from [email protected]    smtp_server 127.0.0.1    smtp_connect_timeout 30    router_id ka2    vrrp_skip_check_adv_addr    vrrp_iptables    vrrp_garp_interval 0    vrrp_gna_interval 0 }   vrrp_instance VIP_1 {     state BACKUP   角色必须是BACKUP     interface ens33     virtual_router_id 60     priority 80     unicast_src_ip 192.168.37.7     unicast_peer {        192.168.37.17     }     advert_int 2     authentication {         auth_type PASS         auth_pass 123456     }     virtual_ipaddress {         192.168.37.100 dev ens33 label ens33:1     } }

 测试效果:

 此时手动将keepalived主机优先级高的进行宕机,VIP就会漂移到优先级低的主机上。

1 [root@centos_17~]#systemctl stop keepalived

 此时查看优先级低的主机IP地址情况:

 

 此时就算高优先级的主机恢复,也无法抢占VIP地址,此时需要宕机优先级低的主机才会占用VIP地址。

  启动优先级高的主机:systemctl start keepalived

  停掉优先级低的主机:systemctl stop keepalived

 

 实战三:实现两个以上的Keepalived主机

 背景:当公司需求量较大时,两个keepalived已经不能满足公司需求,此时需要配置两台以上的keepalived,应该怎么配置?

 实现方法如下:

1、在A主机配置keepalived

  vim   /etc/keepalived/keepalived.conf

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 global_defs {    notification_email {      [email protected]    }    notification_email_from [email protected]    smtp_server 127.0.0.1    smtp_connect_timeout 30    router_id ka1    vrrp_skip_check_adv_addr    vrrp_iptables    vrrp_garp_interval 0    vrrp_gna_interval 0 }   vrrp_instance VIP_1 {     state MASTER  主节点服务器     interface ens33     virtual_router_id 60     priority 100   优先级为100     unicast_src_ip 192.168.37.7  绑定单播地址,防止IP地址与其他keepalived地址冲突     unicast_peer {        192.168.37.17   目标keepalived主机IP地址        192.168.37.27   目标keepalived主机IP地址                                                                                                                              }     advert_int 2     authentication {         auth_type PASS         auth_pass 123456     }     virtual_ipaddress {         192.168.37.100 dev ens33 label ens33:1  添加VIP地址,也可以多添加几个地址     } }

 2、在B主机配置keepalived  

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 global_defs {    notification_email {      [email protected]    }    notification_email_from [email protected]    smtp_server 127.0.0.1    smtp_connect_timeout 30    router_id ka1    vrrp_skip_check_adv_addr    vrrp_iptables    vrrp_garp_interval 0    vrrp_gna_interval 0 }   vrrp_instance VIP_1 {     state BACKUP  从节点服务器     interface ens33     virtual_router_id 50     priority 80 优先级为80     unicast_src_ip 192.168.37.17   绑定单播地址,源keepalived的IP地址     unicast_peer {        192.168.37.7   两个目标的keepalived的IP地址        192.168.37.27     }     advert_int 2     authentication {         auth_type PASS         auth_pass 123456     }     virtual_ipaddress {         192.168.37.100 dev ens33 label ens33:1     } }

3、在C主机配置keepalived  

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 global_defs {    notification_email {      [email protected]    }    notification_email_from [email protected]    smtp_server 127.0.0.1    smtp_connect_timeout 30    router_id ka1    vrrp_skip_check_adv_addr    vrrp_iptables    vrrp_garp_interval 0    vrrp_gna_interval 0 }   vrrp_instance VIP_1 {     state BACKUP   从节点服务器     interface ens33     virtual_router_id 50     priority 60  优先级为60,要比前两个的主机优先级都要低     unicast_src_ip 192.168.37.27  绑定单播地址,源地址     unicast_peer {        192.168.37.7  两个keepalived的目标地址        192.168.37.17     }       advert_int 2     authentication {                                                                                                                                     auth_type PASS         auth_pass 123456     }     virtual_ipaddress {         192.168.37.100 dev ens33 label ens33:1     } }

 测试效果:  

将A主机的keepalived宕机,可以观察此时的B主机成为MASTER主机,VIP地址就会漂移到B主机上。  

 

 当B主机的keepalived也宕机之后,此时的VIP就会漂移到C主机从节点的keepalived服务器上

 

  同理:当优先级高的keepalived服务器恢复后,VIP地址就又会漂移回去。

实战四:实现TCP模式keepalived及LVS-DR模式高可用(此用法多于HTTP用法)

 参数含义:

1 2 3 4 5 6 7 8 9 10 11 12 13 delay_loop<INT>:检查后端服务器的时间间隔 lb_algorr|wrr|lc|wlc|lblc|sh|dh:定义调度方法 lb_kindNAT|DR|TUN:集群的类型 persistence_timeout<INT>:持久连接时长 protocol TCP|UDP|SCTP:指定服务协议 sorry_server<IPADDR> <PORT>:所有RS故障时,备用服务器地址 real_server<IPADDR> <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_CHEC K { ... }:定义当前主机的健康状态检测方法 }

 HTTP监测含义

1 2 3 4 5 6 7 8 9 10 11 12 13 14 HTTP_GET|SSL_GET:应用层检测 HTTP_GET|SSL_GET { url{ path <URL_PATH>:定义要监控的URL status_code<INT>:判断上述检测机制为健康状态的响应码 } connect_timeout<INTEGER>:连接请求的超时时长 nb_get_retry<INT>:重试次数 delay_before_retry<INT>:重试之前的延迟时长 connect_ip<IP ADDRESS>:向当前RS哪个IP地址发起健康状态检测请求 connect_port<PORT>:向当前RS的哪个PORT发起健康状态检测请求 bindto<IP ADDRESS>:发出健康状态检测请求时使用的源地址 bind_port<PORT>:发出健康状态检测请求时使用的源端口 }

TCP监测

 传输层检测TCP_CHECK

1 2 3 4 5 6 7 TCP_CHECK { connect_ip<IP ADDRESS>:向当前RS的哪个IP地址发起健康状态检测请求 connect_port<PORT>:向当前RS的哪个PORT发起健康状态检测请求 bindto<IP ADDRESS>:发出健康状态检测请求时使用的源地址 bind_port<PORT>:发出健康状态检测请求时使用的源端口 connect_timeout<INTEGER>:连接请求的超时时长 }

1、在A主机修改keepalived配置文件

vim  /etc/keepalived/keepalived.conf

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 global_defs {    notification_email {      [email protected]    }    notification_email_from [email protected]    smtp_server 127.0.0.1    smtp_connect_timeout 30    router_id ka2    vrrp_skip_check_adv_addr    vrrp_iptables    vrrp_garp_interval 0    vrrp_gna_interval 0 }   vrrp_instance VIP_1 {     state MASTER     interface ens33     virtual_router_id 50     priority 100     unicast_src_ip 192.168.37.7     unicast_peer {        192.168.37.17     }     advert_int 2     authentication {         auth_type PASS         auth_pass 123456     }     virtual_ipaddress {         192.168.37.100 dev ens33 label ens33:1     } }   include  /etc/keepalived/conf/*.conf   定义一个单独管理的目录,定义keepalived配置文件

 在A主机定义LVS-DR模式配置文件

如果后期keepalived的配置文件修改过大,我们可以调用include,新建一个目录,并在此目录下进行存放配置文件。

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 [root@centos7keepalived]#mkdir conf [root@centos7keepalived]#vim conf/tcp.conf virtual_server 192.168.37.100 80 {     VIP地址                                                                                                                  delay_loop 6         lb_algo wrr  权重轮询         lb_kind DR   DR模式         protocol TCP         sorry_server 192.168.37.47  80  配置后端sorry服务器,当两个keepalived主机都宕机之后,就在此主机进行显示信息。      real_server 192.168.37.27 80 {  后端RS1服务器IP地址         weight 1         TCP_CHECK {         connect_timeout 5         nb_get_retry 3         delay_before_retry 3         connect_port 80         }    }      real_server 192.168.37.37 80 {  后端RS2服务器         weight 1         TCP_CHECK {         connect_timeout 5         nb_get_retry 3         delay_before_retry 3         connect_port 80         }     } }

2、在B主机修改keepalived配置文件 

 vim  /etc/keepalived/keepalived.conf

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 global_defs {    notification_email {      [email protected]    }    notification_email_from [email protected]    smtp_server 127.0.0.1    smtp_connect_timeout 30    router_id ka1    vrrp_skip_check_adv_addr    vrrp_iptables    vrrp_garp_interval 0    vrrp_gna_interval 0 }   vrrp_instance VIP_1 {     state BACKUP     interface ens33     virtual_router_id 50     priority 80     unicast_src_ip 192.168.37.17     unicast_peer {        192.168.37.7     }     advert_int 2     authentication {         auth_type PASS         auth_pass 123456     }     virtual_ipaddress {         192.168.37.100 dev ens33 label ens33:1     } }   include  /etc/keepalived/conf/*.conf

 在B主机定义LVS-DR模式的配置文件 

 新建conf目录,并在此目录下新建一个配置文件

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 [root@centos_17keepalived]#mkdir conf [root@centos_17keepalived]#vim conf/tcp.conf virtual_server 192.168.37.100 80 {         delay_loop 6         lb_algo wrr         lb_kind DR         protocol TCP         sorry_server 192.168.37.47  80  定义sorry server的后端主机,当两个keepalived主机宕机后,就会提示此信息。      real_server 192.168.37.27 80 {         weight 1         TCP_CHECK {         connect_timeout 5         nb_get_retry 3         delay_before_retry 3         connect_port 80         }    }      real_server 192.168.37.37 80 {         weight 1         TCP_CHECK {         connect_timeout 5         nb_get_retry 3         delay_before_retry 3         connect_port 80         }     } }

 3、后端服务器RS1上修改配置  

  在RS1绑定VIP地址及lo回环网卡

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 [root@centos27~]#vim lvs_dr_rs.sh #!/bin/bash #Author:wangxiaochun #Date:2017-08-13                                                                                                                                 vip=192.168.37.100   绑定VIP地址 mask='255.255.255.255' dev=lo:1  绑定在lo回环网卡上 rpm -q httpd &> /dev/null || yum -y install httpd &>/dev/null service httpd start &> /dev/null && echo "The httpd Server is Ready!" echo "<h1>`hostname`</h1>" /var/www/html/index.html   case $1 in start)     echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore     echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore     echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce     echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce     ifconfig $dev $vip netmask $mask #broadcast $vip up     #route add -host $vip dev $dev     echo "The RS Server is Ready!"     ;; stop)     ifconfig $dev down     echo 0 > /proc/sys/net/ipv4/conf/all/arp_ignore     echo 0 > /proc/sys/net/ipv4/conf/lo/arp_ignore     echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce     echo 0 > /proc/sys/net/ipv4/conf/lo/arp_announce     echo "The RS Server is Canceled!"     ;; *)     echo "Usage: $(basename $0) start|stop"     exit 1     ;; esac

执行脚本:

1 [root@centos27~]#bash lvs_dr_rs.sh  start

 4、在RS2后端服务器上修改配置  

 修改RS2的配置脚本,绑定VIP地址及lo回环网卡

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 #!/bin/bash #Author:wangxiaochun #Date:2017-08-13 vip=192.168.37.100                                                                                                                               mask='255.255.255.255' dev=lo:1 rpm -q httpd &> /dev/null || yum -y install httpd &>/dev/null service httpd start &> /dev/null && echo "The httpd Server is Ready!" echo "<h1>`hostname`</h1>" /var/www/html/index.html   case $1 in start)     echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore     echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore     echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce     echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce     ifconfig $dev $vip netmask $mask #broadcast $vip up     #route add -host $vip dev $dev     echo "The RS Server is Ready!"     ;; stop)     ifconfig $dev down     echo 0 > /proc/sys/net/ipv4/conf/all/arp_ignore     echo 0 > /proc/sys/net/ipv4/conf/lo/arp_ignore     echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce     echo 0 > /proc/sys/net/ipv4/conf/lo/arp_announce     echo "The RS Server is Canceled!"     ;; *)     echo "Usage: $(basename $0) start|stop"     exit 1     ;; esac

 执行以上脚本

1 [root@centos37~]#bash lvs_dr_rs.sh  start

 4、在sorry后端服务器上修改配置  

 修改sorry后端服务器配置脚本,绑定VIP地址及lo回环网卡

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 #!/bin/bash #Author:wangxiaochun #Date:2017-08-13 vip=192.168.37.100                                                                                                                               mask='255.255.255.255' dev=lo:1 rpm -q httpd &> /dev/null || yum -y install httpd &>/dev/null service httpd start &> /dev/null && echo "The httpd Server is Ready!" echo "<h1>`hostname`</h1>" /var/www/html/index.html   case $1 in start)     echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore     echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore     echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce     echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce     ifconfig $dev $vip netmask $mask #broadcast $vip up     #route add -host $vip dev $dev     echo "The RS Server is Ready!"     ;; stop)     ifconfig $dev down     echo 0 > /proc/sys/net/ipv4/conf/all/arp_ignore     echo 0 > /proc/sys/net/ipv4/conf/lo/arp_ignore     echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce     echo 0 > /proc/sys/net/ipv4/conf/lo/arp_announce     echo "The RS Server is Canceled!"     ;; *)     echo "Usage: $(basename $0) start|stop"     exit 1     ;; esac

 执行以上脚本

1 [root@centos47~]#bash lvs_dr_rs.sh  start

5、测试效果: 

将RS1和RS2及sorry后端服务器添加测试页面,并启动httpd服务:systemctl  start httpd

1 2 3 4 5 6 7 8 [root@cenots277~]#yum install httpd [root@cenots27~]#cd /var/www/html [root@cenots27html]#cat index.html <h1>cenots27</h1> [root@cenots37html]#cat index.html <h1>cenots37</h1> [root@cenots37html]#cat index.html sorry server !!

 客户端访问LVS的VIP地址,此时LVS将调度到后端服务器,进行轮询访问。

 

 当后端RS1和RS2后端服务器宕机后,此时就会显示sorry server信息。

 

 

 

 

 

 

  

 

 

转自

keepalived绑定单播地址、非抢占模式及LVS的TCP模式的高可用 - 一叶知秋~~ - 博客园
https://www.cnblogs.com/struggle-1216/p/12098241.html

  

 

标签:LVS,keepalived,模式,echo,vrrp,192.168,conf,root
From: https://www.cnblogs.com/paul8339/p/18312905

相关文章

  • 安全模式介绍-1OO2、1OO1
    传感器评估传感器评估方式(Sensorevaluation)包含3种传感器评估类型,1oo1评估(loo1evaluation),loo2评估-对等(1oo2evaluation,equivalent)和loo2评估-非对等(loo2evaluation,non-equivalent),具体在“通道参数”中选择,如下所示。图1传感器评估方式选择 1oo1评估:使用一个输入通道,......
  • css技巧混合模式
    看上面这个神奇的效果,文字在黑色背景里面显示为白色,而在白色的背景里面显示为黑色,这就是文字智能适配背景。看到这样的需求,大多数人第一时间想到的是,文字元素有两个,是完全重叠的两层,一层是黑色,一层是白色,然后通过遮罩实现,这里使用了CSS3新增了一个属性-- mix-blend-mode ......
  • 设计模式之行为型模式
    行为型模式关注流程控制。行为型模式用于描述程序在运行时复杂的流程控制,即描述多个类或对象之间怎样相互协作共同完成单个对象无法完成的任务,涉及算法与对象间职责的分配。类行为模式:采用继承机制来在类间分派行为对象行为模式:采用组合或聚合在对象间分配行为行......
  • lvs的nat和dr模式混合用
     lvs:10.0.0.200 vip 10.0.0.19外网IP,172.168.1.19内网IP drrs:10.0.0.200vip 10.0.0.18rip  natrs:172.168.1.17rip 客户端:10.0.0.14cip lvs机器: ipaddradd10.0.0.200/24devens33:0 IP:[root@mcw09~]#ipa1:lo:<LOOPBACK,UP,......
  • 攻防世界Web_python_template_injection(新手模式)
    二、Web_python_template_injection1.基本知识点模版引擎模版引擎可以让(网站)程序实现界面与数据分离,业务代码与逻辑代码的分离,这大大提升了开发效率,良好的设计也使得代码重用变得更加容易,但是模板引擎也拓宽了我们的攻击面,注入到模板中的代码可能会引发RCE或者XSS。在Jinja2......
  • 第4章.消费者领域中的模式实现
            我们在前几章中学习了重要的建筑模式;本章介绍了与消费者领域相关的这些模式的用例。尽管消费者领域存在许多用例(电子健康、老年护理、宠物追踪、能源管理、安全保障、机器人吸尘器等),但本章仅详细介绍两个用例——家庭自动化和智能煮蛋器——以透视实施消费者物......
  • 攻防世界web2(新手模式)
    一、web21.基本知识点strrev():反转字符串str_rot13():用于字符串加密和解密的函数,它实现了ROT13算法。ROT13(rotateby13places)是一种简单的字母替换加密算法,它将字母表中的每个字母替换为其后第13个字母。由于字母表有26个字母,所以再次应用ROT13会恢复原始字符串,因此它......
  • C# 使用模式匹配的好处,因为好用所以推荐~
    C#使用模式匹配的好处,因为好用所以推荐~ 类型检查和转换:当你需要检查对象是否为特定类型,并且希望在同一时间内将其转换为那个类型时,模式匹配提供了一种更简洁的方式来完成这一任务,避免了使用传统的as和is操作符后还需要进行额外的null检查。复杂条件逻辑:在处理复杂的条......
  • 单例设计模式
    单例设计模式:设计模式:​一个问题通常有n种解法,其中肯定有一种解法是最优的,这个最优的解法被人总结出来了,称之为设计模式。​设计模式有23种,对应23种软件开发中会遇到的经典问题。单例设计模式:确保一个类只有一个对象。  饿汉式单例:饿汉式单例:拿对象时,对象......
  • 模板方法设计模式
    模板方法设计模式:模板方法设计模式:解决方法中存在重复代码的问题。  模板方法设计模式的写法:1、定义一个抽象类2、在里面定义2个方法​一个是模板方法:把相同代码放里面去​一个是抽象方法:具体实现交给子类完成建议使用final关键字修饰模板方法:​模板方......