首页 文章 精选 留言 我的

精选列表

搜索[高并发],共10000篇文章
优秀的个人博客,低调大师

net core 程序docker打包镜像并发布到官方store

学习一个技术的第一步,总是要先打印或显示一个hello world的。当然,学习docker也不例外。上一篇文章已经简单的介绍了环境的安装和配置。接下来就要打印我们的hello world了。 首先我们来跑一跑官方的hello world程序 #运行官方的hello-world镜像,顺带可以检查一下安装配置是否有问题。 docker run hello-world 出来这个就基本差不多了。 centos: windows: 在接下来跑一个我们自己的。net core 版本的hello world vs2017 preview装起来先,然后创建一个控制台项目.项目右键 add ,选择docker support。添加项目对docker的支持 完事之后大约就这样子 为了发布方便,我们吧项目改一下名字,czd890 是我在docker 注册的账号。所以我所有发布的项目都发布到自己的命名空间下。 然后,我们在main方法里面写上我们的hello world static void Main(string[] args) { Console.WriteLine("Hello World!"); Console.WriteLine("in docker -- private registry"); } 在然后,选择release模式,rebuild我们的项目 就出来 我们来跑一跑我们自己的 hello world。 --rm参数表示run完了之后自动参数容器。这样子,我们docker ps -a 显示所有容器的时候,就不会看到一个超长列表了...... 在在然后,我们吧我们的镜像发布到官方 首先,我们需要登录我们的账号: 在接着,发布:  最后,在我们的centos中来跑一下我们刚才发布的czd890/hello-world镜像

优秀的个人博客,低调大师

教你在 Kubernetes 上部署 Redis 可用集群

Redis 介绍 Redis 代表REmote DIctionary Server是一种开源的内存中数据存储,通常用作数据库,缓存或消息代理。它可以存储和操作高级数据类型,例如列表,地图,集合和排序集合。由于Redis接受多种格式的密钥,因此可以在服务器上执行操作,从而减少了客户端的工作量。它仅将磁盘用于持久性,而将数据库完全保存在内存中。Redis是一种流行的数据存储解决方案,并被GitHub,Pinterest,Snapchat,Twitter,StackOverflow,Flickr等技术巨头所使用。 为什么使用 Redis 它的速度非常快。它是用 ANSI C 编写的,并且可以在 POSIX 系统上运行,例如 Linux,Mac OS X 和 Solaris。 Redis 通常被排名为最流行的键/值数据库和最流行的与容器一起使用的 NoSQL 数据库。 其缓存解决方案减少了对云数据库后端的调用次数。 应用程序可以通过其客户端 API 库对其进行访问。 所有流行的编程语言都支持 Redis。 它是开源且稳定的。 什么是 Redis 集群 Redis Cluster 是一组 Redis 实例,旨在通过对数据库进行分区来扩展数据库,从而使其更具弹性。群集中的每个成员(无论是主副本还是辅助副本)都管理哈希槽的子集。如果主机无法访问,则其从机将升级为主机。在由三个主节点组成的最小 Redis 群集中,每个主节点都有一个从节点(以实现最小的故障转移),每个主节点都分配有一个介于 0 到 16,383 之间的哈希槽范围。节点 A 包含从 0 到 5000 的哈希槽,节点 B 从 5001 到 10000,节点 C 从 10001 到 16383。群集内部的通信是通过内部总线进行的,使用协议传播有关群集的信息或发现新节点。 在 Kubernetes 中部署 Redis 集群 在Kubernetes中部署Redis集群面临挑战,因为每个 Redis 实例都依赖于一个配置文件,该文件可以跟踪其他集群实例及其角色。为此,我们需要结合使用Kubernetes StatefulSets和PersistentVolumes。 克隆部署文件 gitclonehttps://github.com/llmgo/redis-sts.git 创建 statefulset 类型资源 [root@node01redis-sts]#catredis-sts.yml --- apiVersion:v1 kind:ConfigMap metadata: name:redis-cluster data: update-node.sh:| #!/bin/sh REDIS_NODES="/data/nodes.conf" sed-i-e"/myself/s/[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}/${POD_IP}/"${REDIS_NODES} exec"$@" redis.conf:|+ cluster-enabledyes cluster-require-full-coverageno cluster-node-timeout15000 cluster-config-file/data/nodes.conf cluster-migration-barrier1 appendonlyyes protected-modeno --- apiVersion:apps/v1 kind:StatefulSet metadata: name:redis-cluster spec: serviceName:redis-cluster replicas:6 selector: matchLabels: app:redis-cluster template: metadata: labels: app:redis-cluster spec: containers: -name:redis image:redis:5.0.5-alpine ports: -containerPort:6379 name:client -containerPort:16379 name:gossip command:["/conf/update-node.sh","redis-server","/conf/redis.conf"] env: -name:POD_IP valueFrom: fieldRef: fieldPath:status.podIP volumeMounts: -name:conf mountPath:/conf readOnly:false -name:data mountPath:/data readOnly:false volumes: -name:conf configMap: name:redis-cluster defaultMode:0755 volumeClaimTemplates: -metadata: name:data spec: accessModes:["ReadWriteOnce"] resources: requests: storage:5Gi storageClassName:standard $kubectlapply-fredis-sts.yml configmap/redis-clustercreated statefulset.apps/redis-clustercreated $kubectlgetpods-lapp=redis-cluster NAMEREADYSTATUSRESTARTSAGE redis-cluster-01/1Running053s redis-cluster-11/1Running049s redis-cluster-21/1Running046s redis-cluster-31/1Running042s redis-cluster-41/1Running038s redis-cluster-51/1Running034s 创建 service [root@node01redis-sts]#catredis-svc.yml --- apiVersion:v1 kind:Service metadata: name:redis-cluster spec: type:ClusterIP clusterIP:10.96.0.100 ports: -port:6379 targetPort:6379 name:client -port:16379 targetPort:16379 name:gossip selector: app:redis-cluster $kubectlapply-fredis-svc.yml service/redis-clustercreated $kubectlgetsvcredis-cluster NAMETYPECLUSTER-IPEXTERNAL-IPPORT(S)AGE redis-clusterClusterIP10.96.0.100 初始化 redis cluster “ 下一步是形成Redis集群。为此,我们运行以下命令并键入yes以接受配置。前三个节点成为主节点,后三个节点成为从节点。 $kubectlexec-itredis-cluster-0--redis-cli--clustercreate--cluster-replicas1$(kubectlgetpods-lapp=redis-cluster-ojsonpath='{range.items[*]}{.status.podIP}:6379') >>>Performinghashslotsallocationon6nodes... Master[0]->Slots0-5460 Master[1]->Slots5461-10922 Master[2]->Slots10923-16383 Addingreplica10.244.2.11:6379to10.244.9.19:6379 Addingreplica10.244.9.20:6379to10.244.6.10:6379 Addingreplica10.244.8.15:6379to10.244.7.8:6379 M:00721c43db194c8f2cacbafd01fd2be6a2fede2810.244.9.19:6379 slots:[0-5460](5461slots)master M:9c36053912dec8cb20a599bda202a654f241484f10.244.6.10:6379 slots:[5461-10922](5462slots)master M:2850f24ea6367de58fb50e632fc56fe4ba5ef01610.244.7.8:6379 slots:[10923-16383](5461slots)master S:554a58762e3dce23ca5a75886d0ccebd2d58250210.244.8.15:6379 replicates2850f24ea6367de58fb50e632fc56fe4ba5ef016 S:20028fd0b79045489824eda71fac9898f17af89610.244.2.11:6379 replicates00721c43db194c8f2cacbafd01fd2be6a2fede28 S:87e8987e314e4e5d4736e5818651abc1ed6ddcd910.244.9.20:6379 replicates9c36053912dec8cb20a599bda202a654f241484f CanIsettheaboveconfiguration?(type'yes'toaccept):yes >>>Nodesconfigurationupdated >>>Assignadifferentconfigepochtoeachnode >>>SendingCLUSTERMEETmessagestojointhecluster Waitingfortheclustertojoin ... >>>PerformingClusterCheck(usingnode10.244.9.19:6379) M:00721c43db194c8f2cacbafd01fd2be6a2fede2810.244.9.19:6379 slots:[0-5460](5461slots)master 1additionalreplica(s) M:9c36053912dec8cb20a599bda202a654f241484f10.244.6.10:6379 slots:[5461-10922](5462slots)master 1additionalreplica(s) S:87e8987e314e4e5d4736e5818651abc1ed6ddcd910.244.9.20:6379 slots:(0slots)slave replicates9c36053912dec8cb20a599bda202a654f241484f S:554a58762e3dce23ca5a75886d0ccebd2d58250210.244.8.15:6379 slots:(0slots)slave replicates2850f24ea6367de58fb50e632fc56fe4ba5ef016 S:20028fd0b79045489824eda71fac9898f17af89610.244.2.11:6379 slots:(0slots)slave replicates00721c43db194c8f2cacbafd01fd2be6a2fede28 M:2850f24ea6367de58fb50e632fc56fe4ba5ef01610.244.7.8:6379 slots:[10923-16383](5461slots)master 1additionalreplica(s) [OK]Allnodesagreeaboutslotsconfiguration. >>>Checkforopenslots... >>>Checkslotscoverage... [OK]All16384slotscovered. 验证集群 [root@node01redis-sts]#kubectlexec-itredis-cluster-0--redis-cliclusterinfo cluster_state:ok cluster_slots_assigned:16384 cluster_slots_ok:16384 cluster_slots_pfail:0 cluster_slots_fail:0 cluster_known_nodes:6 cluster_size:3 cluster_current_epoch:6 cluster_my_epoch:1 cluster_stats_messages_ping_sent:16 cluster_stats_messages_pong_sent:22 cluster_stats_messages_sent:38 cluster_stats_messages_ping_received:17 cluster_stats_messages_pong_received:16 cluster_stats_messages_meet_received:5 cluster_stats_messages_received:38 [root@node01redis-sts]#forxin$(seq05);doecho"redis-cluster-$x";kubectlexecredis-cluster-$x--redis-clirole;echo;done redis-cluster-0 master 14 10.244.2.11 6379 14 redis-cluster-1 master 28 10.244.9.20 6379 28 redis-cluster-2 master 28 10.244.8.15 6379 28 redis-cluster-3 slave 10.244.7.8 6379 connected 28 redis-cluster-4 slave 10.244.9.19 6379 connected 14 redis-cluster-5 slave 10.244.6.10 6379 connected 28 测试集群 我们想使用集群,然后模拟节点的故障。对于前一项任务,我们将部署一个简单的 Python 应用程序,而对于后者,我们将删除一个节点并观察集群行为。 部署点击计数器应用 我们将一个简单的应用程序部署到集群中,并在其前面放置一个负载平衡器。此应用程序的目的是在将计数器值作为 HTTP 响应返回之前,增加计数器并将其存储在 Redis 集群中。 $kubectlapply-fapp-deployment-service.yml service/hit-counter-lbcreated deployment.apps/hit-counter-appcreated 在此过程中,如果我们继续加载页面,计数器将继续增加,并且在删除Pod之后,我们看到没有数据丢失。 $curl`kubectlgetsvchit-counter-lb-ojson|jq-r.spec.clusterIP` Ihavebeenhit20timessincedeployment. $curl`kubectlgetsvchit-counter-lb-ojson|jq-r.spec.clusterIP` Ihavebeenhit21timessincedeployment. $curl`kubectlgetsvchit-counter-lb-ojson|jq-r.spec.clusterIP` Ihavebeenhit22timessincedeployment. $kubectldeletepodsredis-cluster-0 pod"redis-cluster-0"deleted $kubectldeletepodsredis-cluster-1 pod"redis-cluster-1"deleted $curl`kubectlgetsvchit-counter-lb-ojson|jq-r.spec.clusterIP` Ihavebeenhit23timessincedeployment. 参考文档 [redis-cluster集群配置1] http://llmgo.cn/post/redis-003/ [redis-cluster集群配置2] http://www.yunweipai.com/36338.html [Redis集群 cluster-slot操作指令] https://blog.csdn.net/shuyun123456789/article/details/60868718 原文链接:http://tinyurl.com/vpihglin文章转自:奇妙的Linux世界 关注「开源Linux」加星标,提升IT技能

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册