2024.9.11(k8s环境搭建)

一、k8s环境搭建 

编号主机名称ip配置
1k8s-master192.168.8.177
2k8s-node1192.168.8.178
3k8s-node2192.168.8.168
1、免密登录

[root@k8s-master ~]# ssh-keygen
[root@k8s-master ~]# ssh-copy-id root@192.168.8.178
[root@k8s-master ~]# ssh-copy-id root@192.168.8.168

2、3台机器yum源配置
1. docker
2. k8s

[root@k8s-master ~]# cd /etc/yum.repos.d/
[root@k8s-master yum.repos.d]# ls

3. 清空以及创建缓存

[root@k8s-master ~]# yum clean all && yum makecache

4. 四个镜像源aliyun,epel,kubernetes,docker-ce
4、3台主机映射

[root@k8s-master ~]# vim /etc/hosts

5、3台主机安装必备工具

[root@k8s-master ~]# yum install wget jq psmisc vim net-tools telnet yum-utils device-mapper-persistent-data lvm2 git tree -y

6、3台主机关闭防火墙 selinux swap虚拟分区

[root@k8s-master ~]# systemctl disable --now firewalld
[root@k8s-master ~]# setenforce 0

  setenforce: SELinux is disabled

[root@k8s-master ~]# vim /etc/selinux/config

[root@k8s-master ~]# vim /etc/fstab 

[root@k8s-master ~]# swapoff -a && sysctl -w vm.swappiness=0
vm.swappiness = 0
[root@k8s-master ~]# sed -ri '/^[^#]*swap/s@^@#@' /etc/fstab

7、三个节点同步时间(3台)

[root@k8s-master ~]# yum -y install ntpdate

[root@k8s-master ~]# ntpdate time2.aliyun.com

[root@k8s-master ~]# crontab -e

 */5 * * * * /usr/sbin/ntpdate time2.aliyun.com

[root@k8s-master ~]# crontab -l   //查看

8、3台主机配置limit 

[root@k8s-master ~]# ulimit -SHn 65535

[root@k8s-node2 ~]# vim /etc/security/limits.conf 

* soft nofile 65536
* hard nofile 131072
* soft nproc 65535
* hard nproc 655350
* soft memlock unlimited
* hard memlock unlimited
9、下载yaml文件 从gitee上下载 配置pod的yaml文件和docker-compose.yaml文件相似,k8s架构搭建起来在添加功能性pod时使用

[root@k8s-master ~]# cd /root/ ; git clone https://gitee.com/dukuan/k8s-ha-install.git

10、3台主机配置ipvs模块

yum install ipvsadm ipset sysstat conntrack libseccomp -y

modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack

[root@k8s-master ~]# vim /etc/modules-load.d/ipvs.conf 

 在系统启动时加载下列 IPVS 和相关功能所需的模块
ip_vs                                   # 负载均衡模块
ip_vs_lc                        # 用于实现基于连接数量的负载均衡算法
ip_vs_wlc                       # 用于实现带权重的最少连接算法的模块
ip_vs_rr                        # 负载均衡rr算法模块
ip_vs_wrr                       # 负载均衡wrr算法模块
ip_vs_lblc              # 负载均衡算法,它结合了最少连接(LC)算法和基于偏置的轮询(Round Robin with Bias)算法
ip_vs_lblcr             # 用于实现基于链路层拥塞状况的最少连接负载调度算法的模块
ip_vs_dh                        # 用于实现基于散列(Hashing)的负载均衡算法的模块
ip_vs_sh                        # 用于源端负载均衡的模块
ip_vs_fo                        # 用于实现基于本地服务的负载均衡算法的模块
ip_vs_nq                        # 用于实现NQ算法的模块
ip_vs_sed                       # 用于实现随机早期检测(Random Early Detection)算法的模块
ip_vs_ftp                       # 用于实现FTP服务的负载均>衡模块
ip_vs_sh
nf_conntrack    # 用于跟踪网络连接的状态的模块
ip_tables                       # 用于管理防护墙的机制
ip_set                          # 用于创建和管理IP集合的模
块
xt_set                          # 用于处理IP数据包集合的模块,提供了与iptables等网络工具的接口
ipt_set                         # 用于处理iptables规则集合的模块
ipt_rpfilter    # 用于实现路由反向路径过滤的模块
ipt_REJECT              # iptables模块之一,用于将不符合规则的数据包拒绝,并返回特定的错误码
ipip                                    # 用于实现IP隧道功能的模块,使得数据可以在两个网络之间进行传输

[root@k8s-master ~]# lsmod | grep -e ip_vs -e nf_conntrack  //查看

11、三台主机配置k8s内核

[root@k8s-master ~]# vim /etc/sysctl.d/ k8s.conf

# 写入k8s所需内核模块
# net.bridge.bridge-nf-call-iptables = 1                # 控制网
络桥接与iptables之间的网络转发行为
# net.bridge.bridge-nf-call-ip6tables = 1               # 用于控
制网络桥接(bridge)的IP6tables过滤规则。当该参数设置为1时,表示
启用对网络桥接的IP6tables过滤规则
# fs.may_detach_mounts = 1              # 用于控制文件系统是否允
许分离挂载,1表示允许
# net.ipv4.conf.all.route_localnet = 1          # 允许本地网络上
的路由。设置为1表示允许,设置为0表示禁止。
# vm.overcommit_memory=1                # 控制内存分配策略。设置
为1表示允许内存过量分配,设置为0表示不允许。
# vm.panic_on_oom=0             # 决定当系统遇到内存不足(OOM)>时是否产生panic。设置为0表示不产生panic,设置为1表示产生panic。
# fs.inotify.max_user_watches=89100             # inotify可以监>视的文件和目录的最大数量。
# fs.file-max=52706963          # 系统级别的文件描述符的最大数量
。
# fs.nr_open=52706963                   # 单个进程可以打开的文件
描述符的最大数量。
# net.netfilter.nf_conntrack_max=2310720                # 网络连
接跟踪表的最大大小。
# net.ipv4.tcp_keepalive_time = 600             # TCP保活机制发>送探测包的间隔时间(秒)。
# net.ipv4.tcp_keepalive_probes = 3             # TCP保活机制发>送探测包的最大次数。
# net.ipv4.tcp_keepalive_intvl =15              # TCP保活机制在>发送下一个探测包之前等待响应的时间(秒)。
# net.ipv4.tcp_max_tw_buckets = 36000   # TCP TIME_WAIT状态的bucket数量。
# net.ipv4.tcp_tw_reuse = 1             # 允许重用TIME_WAIT套接>字。设置为1表示允许,设置为0表示不允许。
# net.ipv4.tcp_max_orphans = 327680             # 系统中最大的孤
套接字数量。
# net.ipv4.tcp_orphan_retries = 3                       # 系统尝
试重新分配孤套接字的次数。
# net.ipv4.tcp_syncookies = 1           # 用于防止SYN洪水攻击。>设置为1表示启用SYN cookies,设置为0表示禁用。
# net.ipv4.tcp_max_syn_backlog = 16384          # SYN连接请求队>列的最大长度。
# net.ipv4.ip_conntrack_max = 65536             # IP连接跟踪表的
最大大小。
# net.ipv4.tcp_max_syn_backlog = 16384          # 系统中最大的监
听队列的长度。
# net.ipv4.tcp_timestamps = 0           # 用于关闭TCP时间戳选项>。
# net.core.somaxconn = 16384            # 用于设置系统中最大的监
听队列的长度

reboot

12、三台主机卸载podman安装docker-cd docker-ce-cli containerd

[root@k8s-master ~]# yum remove -y podman runc containerd

yum install docker-ce docker-ce-cli containerd.io -y

13、三台主机配置containerd需要的核心模块 overlay br_netfilter

[root@k8s-master ~]# cat <<EOF | sudo tee /etc/modules-load.d/containerd.conf
> overlay
> br_netfilter
> EOF
overlay
br_netfilter

[root@k8s-master ~]# modprobe overlay
[root@k8s-master ~]# modprobe br_netfilter

[root@k8s-master ~]# cat <<EOF | sudo tee /etc/sysctl.d/99-kubernetes-cri.conf
> net.bridge.bridge-nf-call-iptables  = 1
> net.ipv4.ip_forward                 = 1
> net.bridge.bridge-nf-call-ip6tables = 1
> EOF
net.bridge.bridge-nf-call-iptables  = 1
net.ipv4.ip_forward                 = 1
net.bridge.bridge-nf-call-ip6tables = 1
sysctl --system

14、三台主机 配置containerd配置文件

mkdir -p /etc/containerd   //验证
containerd config default | tee /etc/containerd/config.toml

vim /etc/containerd/config.toml

 63     sandbox_image = "registry.cn-hangzhou.aliyuncs.com/googl    e_containers/pause:3.9"
127             SystemdCgroup = true

[root@k8s-node2 ~]# systemctl enable --now containerd.service 

[root@k8s-node2 ~]# systemctl status containerd.service 

15、三台主机配置crictl客户端连接的运行位置 

[root@k8s-master ~]# cat > /etc/crictl.yaml <<EOF
> runtime-endpoint: unix:///run/containerd/containerd.sock
> image-endpoint: unix:///run/containerd/containerd.sock
> timeout: 10
> debug: false
> EOF

16、三台主机安装kubernetes组件 kubeadm kubelet kubectl 

yum -y install kubeadm-1.28* kubectl-1.28* kubelet-1.28*

yum -y install kubelet-1.28*

systemctl daemon-reload

[root@k8s-node1 ~]# ls /var/lib/

systemctl enable --now kubelet

[root@k8s-master ~]# kubectl get po -A

异常处理:

如果kubelet无法正常启动,检查swap是否已经取消虚拟分区,查看/var/log/message如果没有/var/lib/kubelet/config.yaml文件,可能需要重装

yum -y remove kubelet-1.28*

yum -y install kubelet-1.28*

systemctl daemon-reload

systemctl enable --now kubelet

yum -y install kubeadm-1.28* 

# kubelet 端口是10248 10250 10255三个端口

17、master主机kubernet集群初始化 
1. 拉取镜像

[root@k8s-master ~]# vim kubeadm-config.yaml 

[root@k8s-master ~]# vim kubeadm-config.yaml		# 修改kubeadm配置文件
apiVersion: kubeadm.k8s.io/v1beta3		# 指定Kubernetes配置文件的版本,使用的是kubeadm API的v1beta3版本
bootstrapTokens:		# 定义bootstrap tokens的信息。这些tokens用于在Kubernetes集群初始化过程中进行身份验证
- groups:		# 定义了与此token关联的组- system:bootstrappers:kubeadm:default-node-token token: 7t2weq.bjbawausm0jaxury		# bootstrap token的值ttl: 24h0m0s		# token的生存时间,这里设置为24小时usages:			# 定义token的用途- signing		# 数字签名- authentication		# 身份验证
kind: InitConfiguration		# 指定配置对象的类型,InitConfiguration:表示这是一个初始化配置
localAPIEndpoint:		# 定义本地API端点的地址和端口advertiseAddress: 192.168.8.177bindPort: 6443
nodeRegistration:		# 定义节点注册时的配置criSocket: unix:///var/run/containerd/containerd.sock		# 容器运行时(CRI)的套接字路径name: k8s-master		# 节点的名称taints:		# 标记- effect: NoSchedule		# 免调度节点key: node-role.kubernetes.io/control-plane		# 该节点为控制节点
---
apiServer:		# 定义了API服务器的配置certSANs:		# 为API服务器指定了附加的证书主体名称(SAN),指定IP即可- 192.168.8.177timeoutForControlPlane: 4m0s		# 控制平面的超时时间,这里设置为4分钟
apiVersion: kubeadm.k8s.io/v1beta3		# 指定API Server版本
certificatesDir: /etc/kubernetes/pki	# 指定了证书的存储目录
clusterName: kubernetes		# 定义了集群的名称为"kubernetes"
controlPlaneEndpoint: 192.168.8.177:6443		# 定义了控制节点的地址和端口
controllerManager: {}		# 控制器管理器的配置,为空表示使用默认配置
etcd:		# 定义了etcd的配置local:		# 本地etcd实例dataDir: /var/lib/etcd		# 数据目录
imageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers		# 指定了Kubernetes使用的镜像仓库的地址,阿里云的镜像仓库。
kind: ClusterConfiguration		# 指定了配置对象的类型,ClusterConfiguration:表示这是一个集群配置
kubernetesVersion: v1.28.2		# 指定了kubernetes的版本
networking:		# 定义了kubernetes集群网络设置dnsDomain: cluster.local		# 定义了集群的DNS域为:cluster.localpodSubnet: 172.16.0.0/16		# 定义了Pod的子网serviceSubnet: 10.96.0.0/16	# 定义了服务的子网
scheduler: {}		# 使用默认的调度器行为
[root@k8s-master ~]# kubeadm config migrate --old-config kubeadm-config.yaml --new-config new.yaml
# 将旧的kubeadm配置文件转换为新的格式

[root@k8s-master ~]# kubeadm config migrate --old-config kubeadm-config.yaml --new-config new.yaml
[root@k8s-master ~]# ls

[root@k8s-master ~]# kubeadm config images pull --config new.yaml 

2. 初始化 

[root@k8s-master ~]# kubeadm init --config /root/new.yaml  --upload-certs

异常处理:

[root@k8s-master ~]# echo 1 > /proc/sys/net/ipv4/ip_forward

[root@k8s-master ~]# vim token   //保存token

kubeadm join 192.168.8.177:6443 --token 7t2weq.bjbawausm0jaxury \--discovery-token-ca-cert-hash sha256:b646802cdd8fabb2389918d2092e6c3fffe132c9cfaf9142e740b2ea24e621da 
3. 不成功

主机配置2核2G40G

kubelet 无法启动 swap 虚拟分区没关

vim /var/log/message

18、将 node节点加入集群nde1 node2

[root@k8s-node2 ~]# systemctl stop kubelet

[root@k8s-node2 ~]#  kubeadm join 192.168.8.177:6443 --token 7t2weq.bjbawausm0jaxury --discovery-token-ca-cert-hash sha256:b646802cdd8fabb2389918d2092e6c3fffe132c9cfaf9142e740b2ea24e621da

修改环境变量

[root@k8s-master ~]# export KUBECONFIG=/etc/kubernetes/admin.conf

[root@k8s-master ~]# kubectl get nodes  //查看节点 查看在集群中的主机状态

[root@k8s-master ~]# vim .bashrc

export KUBECONFIG=/etc/kubernetes/admin.conf

 [root@k8s-master ~]# kubectl get po -A  //查看所有pod的状态

NAMESPACE     NAME                                 READY   STATUS    RESTARTS   AGE
kube-system   coredns-6554b8b87f-4xzkp             0/1     Pending   0          43m
kube-system   coredns-6554b8b87f-ws7pj             0/1     Pending   0          43m
kube-system   etcd-k8s-master                      1/1     Running   0          43m
kube-system   kube-apiserver-k8s-master            1/1     Running   0          43m
kube-system   kube-controller-manager-k8s-master   1/1     Running   0          43m
kube-system   kube-proxy-hgn9q                     1/1     Running   0          4m36s
kube-system   kube-proxy-tshb8                     1/1     Running   0          8m49s
kube-system   kube-proxy-ww7k4                     1/1     Running   0          43m
kube-system   kube-scheduler-k8s-master            1/1     Running   0          43m

[root@k8s-master ~]# kubectl get po -Aowide   //查看pod完整信息

NAMESPACE     NAME                                 READY   STATUS    RESTARTS   AGE     IP              NODE         NOMINATED NODE   READINESS GATES
kube-system   coredns-6554b8b87f-4xzkp             0/1     Pending   0          46m     <none>          <none>       <none>           <none>
kube-system   coredns-6554b8b87f-ws7pj             0/1     Pending   0          46m     <none>          <none>       <none>           <none>
kube-system   etcd-k8s-master                      1/1     Running   0          46m     192.168.8.177   k8s-master   <none>           <none>
kube-system   kube-apiserver-k8s-master            1/1     Running   0          46m     192.168.8.177   k8s-master   <none>           <none>
kube-system   kube-controller-manager-k8s-master   1/1     Running   0          46m     192.168.8.177   k8s-master   <none>           <none>
kube-system   kube-proxy-hgn9q                     1/1     Running   0          7m42s   192.168.8.168   k8s-node2    <none>           <none>
kube-system   kube-proxy-tshb8                     1/1     Running   0          11m     192.168.8.178   k8s-node1    <none>           <none>
kube-system   kube-proxy-ww7k4                     1/1     Running   0          46m     192.168.8.177   k8s-master   <none>           <none>
kube-system   kube-scheduler-k8s-master            1/1     Running   0          46m     192.168.8.177   k8s-master   <none>           <none>

status:

状态名称中文说明
Pending挂起当前pod没有工作
Running运行中当前pod正在工作
ContainerCreating正在创建中正在创建容器
19、部署calico的pod
1. 找到配置的calico.yaml文件

[root@k8s-master ~]# cd k8s-ha-install/
[root@k8s-master k8s-ha-install]# git checkout manual-installation-v1.28.x && cd calico/
[root@k8s-master calico]# ls
calico.yaml
[root@k8s-master calico]# vim /etc/kubernetes/manifests/kube-controller-manager.yaml    //19行

2. 修改配置文件,将文件中的POD_CIDR替换成172.16.0.0/16

[root@k8s-master calico]# vim calico.yaml 

4801   value: "172.16.0.0/16"
3. 创建pod 

[root@k8s-master calico]#  kubectl apply -f calico.yaml

[root@k8s-master calico]# kubectl logs calico-node-4dfpr -n kube-system   //查看日志

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/421648.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

西安近期学术会议,诚邀学者参会投稿!

第十二届信息系统与计算技术国际会议&#xff08;ISCTech 2024&#xff09;由长沙理工大学主办&#xff0c;联合同济大学、西北工业大学、江西农业大学协办&#xff0c;并由IEEE西安分会提供技术支持&#xff0c;会议将于11月8日至11日在中国西安隆重举行。ISCTech系列会议自创…

Golang | Leetcode Golang题解之第392题判断子序列

题目&#xff1a; 题解&#xff1a; func isSubsequence(s string, t string) bool {n, m : len(s), len(t)f : make([][26]int, m 1)for i : 0; i < 26; i {f[m][i] m}for i : m - 1; i > 0; i-- {for j : 0; j < 26; j {if t[i] byte(j a) {f[i][j] i} else {…

java设计模式(行为型模式:状态模式、观察者模式、中介者模式、迭代器模式、访问者模式、备忘录模式、解释器模式)

6&#xff0c;行为型模式 6.5 状态模式 6.5.1 概述 【例】通过按钮来控制一个电梯的状态&#xff0c;一个电梯有开门状态&#xff0c;关门状态&#xff0c;停止状态&#xff0c;运行状态。每一种状态改变&#xff0c;都有可能要根据其他状态来更新处理。例如&#xff0c;如果…

突破性进展!只需单张参考图,完美仿写各种手写内容!华南理工等开源One-DM

文章链接&#xff1a;https://arxiv.org/pdf/2409.04004 git链接&#xff1a;https://github.com/dailenson/One-DM 亮点直击 提出一种创新的扩散模型&#xff0c;用于生成风格化的手写文本。这一模型的显著特点是只需一个参考样本作为风格输入&#xff0c;便能模仿该样本的书写…

索引:数据库查询性能提升的利器

在数据库的世界里&#xff0c;索引就像是一把神奇的钥匙&#xff0c;能够极大地提高查询性能。那么&#xff0c;什么是索引呢&#xff1f;它又是如何发挥作用的呢&#xff1f;让我们一起来揭开索引的神秘面纱。 一、什么是索引&#xff1f; 索引&#xff0c;简单来说&#xf…

【机器学习-监督学习】集成学习与梯度提升决策树

【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈Python机器学习 ⌋ ⌋ ⌋ 机器学习是一门人工智能的分支学科&#xff0c;通过算法和模型让计算机从数据中学习&#xff0c;进行模型训练和优化&#xff0c;做出预测、分类和决策支持。Python成为机器学习的首选语言&#xff0c;…

chapter14-集合——(List-HashSet)——day18

目录 519-HashSet全面说明 520-数组链表模拟 521-HashSet扩容机制 重要 522-HashSet源码解读1 526-HashSet最佳实践 527-hashSet思考题 519-HashSet全面说明 题一、 两个tom都可以添加成功是因为这是两个对象 看源码做分析&#xff1a;不是直接指向常量池的吗&#xff1f;…

2024/9/9 408“回头看”:b树

B树是什么&#xff1f;有什么作用&#xff1f;B树的插入和删除具体细节是什么&#xff1f;除了B树还有一个是B&#xff0b;树、还是B-树&#xff0c;他们有什么区别&#xff0c;又有什么相同点&#xff1f; b树在王道考研查找这一章&#xff0c;所以他的主要作用就是查找。 在…

【python】OpenCV—Age and Gender Classification

文章目录 1、任务描述2、网络结构2.1 人脸检测2.2 性别分类2.3 年龄分类 3、代码实现4、结果展示5、参考 1、任务描述 性别分类和年龄分类预测 2、网络结构 2.1 人脸检测 输出最高的 200 个 RoI&#xff0c;每个 RoI 7 个值&#xff0c;&#xff08;xx&#xff0c;xx&#x…

基于SpringBoot+Vue+MySQL的校园生活服务平台

系统展示 用户前台界面 管理员后台界面 系统背景 二十一世纪互联网的出现&#xff0c;改变了几千年以来人们的生活&#xff0c;不仅仅是生活物资的丰富&#xff0c;还有精神层次的丰富。在互联网诞生之前&#xff0c;地域位置往往是人们思想上不可跨域的鸿沟&#xff0c;信息的…

C++当中的多态(一)

&#xff08;一&#xff09;什么是多态 1.现实中的多态&#xff1a; 所谓的多态在我们的生活当中其实很常见。举一个简单的例子&#xff1a;当我们需要买票的时候有很多种不同的票可以供我们购买&#xff0c;如果你是学生就可以享受半价票的优惠&#xff0c;如果你是VIP用户就可…

Leetcode 只出现一次的元素

题目要求我们找到数组中只出现了一次的元素&#xff0c;而其他元素都出现了两次。 解题思路&#xff1a; 我们可以使用位运算中的异或操作&#xff08;XOR&#xff09;。异或操作有以下两个特性&#xff1a; 相同的两个数字异或结果为0&#xff0c;例如&#xff1a;a ^ a 0…

Android12——Launcher3文件夹布局修改调整

文章声明&#xff1a;本文是笔者参考良心大佬作品后结合实际需求进行相应的定制&#xff0c;本篇主要是笔者记录一次解析bug笔记&#xff0c;文中可能会引用大佬文章中的部分图片在此声明&#xff0c;并非盈利目的&#xff0c;如涉嫌侵权请私信&#xff0c;谢谢&#xff01; 大…

基于亲和性的 GPU 容器绑核策略 Copy

1.引言 在高性能计算和大规模并行任务处理中&#xff0c;GPU已经成为不可或缺的加速器。为了充分发挥GPU的计算能力&#xff0c;通过合理分配CPU核与GPU的绑定来优化CPU和GPU的关系至关重要。我们将探讨socket和NUMA&#xff08;非统一内存访问&#xff09;的概念&#xff0c;并…

力扣 — — 2555. 两个线段获得的最多奖品

力扣 — — 2555. 两个线段获得的最多奖品 一、题目描述 题目大意&#xff1a;给定一个数组prizePositions&#xff0c;数组中的值表示的是奖品的位置&#xff0c;每一个位置可以有多个奖品&#xff0c;并且设定一个线段的长度 K K K&#xff0c;要求从所有奖品位置中选择两个…

springboot 整合quartz定时任务

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、pom的配置1.加注解二、使用方法1.工程图2.创建工具类三、controller 实现前言 提示:这里可以添加本文要记录的大概内容: 提示:以下是本篇文章正文内容,下面案例可供参考 一、pom的配…

【RabbitMQ】工作模式

工作模式概述 简单模式 简单模式中只存在一个生产者&#xff0c;只存在一个消费者。生产者生产消息&#xff0c;消费者消费消息。消息只能被消费一次&#xff0c;也称为点对点模式。 简单模式适合在消息只能被单个消费者处理的场景下存在。 工作队列模式&#xff08;Work Qu…

Redisson分布式锁实现及原理详解

随着技术快速发展&#xff0c;数据规模增大&#xff0c;分布式系统越来越普及&#xff0c;一个应用往往会部署在多台机器上&#xff08;多节点&#xff09;&#xff0c;在有些场景中&#xff0c;为了保证数据不重复&#xff0c;要求在同一时刻&#xff0c;同一任务只在一个节点…

浏览器中的JavaScript核心BOM(浏览器对象模型)重点掌握对象之History对象的属性与方法

History对象是用来把网页浏览历史用类似栈的方式进行表示。 这定义听起来非常的抽象&#xff0c;其实History对象的作用就跟浏览器的前进和后退很像&#xff0c;我们来用几幅图来理解一下。首先我们先回顾一下浏览器的返回上一个页面 和 跳转到下一个页面 这两个功能。 就类似…

JDBC使用

7.2 创建JDBC应用 7.2.1 创建JDBC应用程序的步骤 使用JDBC操作数据库中的数据包括6个基本操作步骤&#xff1a; &#xff08;1&#xff09;载入JDBC驱动程序&#xff1a; 首先要在应用程序中加载驱动程序driver&#xff0c;使用Class.forName()方法加载特定的驱动程序&#xf…