摘要:
keepalived相对corosync+pacemaker这种高可用集群,它要轻量很多;它的工作原理就是vrrp的实现;vrrp(Virtual Router Redundancy Protocol,虚拟路由冗余协议 ),设计之初它主要用于对LVS集群的高可用,同时它也能够对LVS后端real server做健康状态检测;它主要功能有基于vrrp协议完成地址流动,从而实现服务的故障转移;为VIP地址所在的节点生成ipvs规则;为ipvs集群的各RS做健康状态检测;基于脚本调用接口通过执行脚本完成脚本中定义的功能,进而影响集群事务; 阅读全文
摘要:
前文我们介绍了高可用集群corosync+pacemaker的集群管理工具crmsh的常用命令的使用,回顾请参考https://www.cnblogs.com/qiuhom-1874/tag/crmsh/;今天我们来简单介绍另一款集群管理工具pcs; 阅读全文
摘要:
其实执行migrate/move操作它都会在配置文件中生成一条位置约束的配置;并且会配置对迁往的节点的倾向性为正无穷;如果资源在同一个组中,组中资源对同一节点的倾向性规则是:负无穷大于正无穷,正无穷大于特定的分数;计算一个组对节点的倾向性,就是组中各资源对节点倾向性之和;所以上面没有迁移成功的原因是webserver对node02的倾向性为负无穷; 阅读全文
摘要:
上一篇博客我们聊了下高可用集群corosync+pacemaker的相关概念以及corosync的配置,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/13585921.html;今天我们来说一下corosync+pacemaker高可用集群的配置工具crmsh安装和使用;在centos7上默认base仓库没有crmsh这个工具,红帽默认在base仓库中只留了pcs这个配置工具,所以我们要想在centos7上使用crmsh这个工具来管理corosync+pacemaker高可用集群,需要去找对应的包进行安装;好在opensuse给centos7提供了一个仓库,我们可以使用opensuse的仓库去安装这个工具; 阅读全文
摘要:
所谓ha集群就是高可用集群,这类集群的主要作用是对集群中的单点做高可用,所谓高可用就是在发生故障时,能够及时的将故障转移,从而使故障修复时间最小;这类集群的特点是在多台节点上,各空闲节点会一直盯着工作节点,工作节点也会基于多播或广播的方式把自己的心跳信息发送给其他空闲节点,一旦工作节点的心跳信息在一定时间内空闲节点没有收到,那么此时就会触发资源抢占,先抢到资源的成为新的工作节点,而其他节点又会一直盯着新的工作节点,直到它挂掉,然后再次触发资源抢占;这类集群的特点就是一个节点工作,其他节点看着它工作,一旦工作节点挂了,立刻会有其他节点上来顶替它的工作; 阅读全文
摘要:
rabbitmq集群它的主要作用就是各节点互相同步消息,从而实现了数据的冗余;除了rabbitmq的数据冗余,我们还需要考虑,一旦后端有多台rabbitmq我们就需要通过对后端多台rabbitmq-server做负载均衡,使得每个节点能够分担一部分流量,同时对客户端访问提供一个统一的访问接口;客户端就可以基于负载均衡的地址来请求rabbitmq,通过负载均衡调度,把客户端的请求分摊到后端多个rabbitmq上;如果某一台rabbitmq宕机了,根据负载均衡的健康状态监测,自动将请求不调度到宕机的rabbitmq-server上,从而也实现了对rabbitmq高可用; 阅读全文
摘要:
对于消息型中间件最核心的组件有3个,分别是exchange(交换器)、binding(绑定器)、queue(队列);其中交换器的作用是把消息发出一方(简称生产者)发出的消息,通过交换器把消息发送给绑定器,绑定器根据匹配路由规则把消息路由给后端队列,然后订阅者再到对应的队列上取出消息进行消费,通常一个订阅者(消息消费者,或者叫用户也行)对应一个或多个队列;而订阅者与队列之间的信道(传递消息的通道)我们称之为channel(频道);也就说订阅者可以订阅一个或多个频道,一旦对应频道有消息产生,对应订阅者都会收到; 阅读全文
摘要:
在前面的博客中,我们介绍了kvm的各种工具,有基于图形管理的virt-manager、有基于命令行管理的virt-install 、qemu-kvm、virsh等等;今天我们来介绍一款基于web界面的管理工具kimchi;kimchi是一款基于HTML5的kvm管理工具,它被设计成尽可能容易使用kvm并创建虚拟机web工具,它通过libvirt管理kvm虚拟机。它的运行时基于wok的一个插件方式运行,所以我们要用kimchi这个工具首先要安装wok;官方项目地址:https://github.com/kimchi-project/kimchi; 阅读全文
摘要:
virt-sysprep这个工具来自libguest-tools这个工具包,它能够把kvm虚拟机对应的磁盘文件做成一个模板,后续我们启动虚拟机就可以基于这个镜像模板启动;什么是镜像模板呢?所谓模板就是去除了一个虚拟机自身的私有信息的一个镜像磁盘文件;我们知道把一个镜像文件启动为虚拟机以后,它会生成许多私有信息,比如网卡的mac地址,ip地址,磁盘的uuid,ssh密钥等等;对于模板我们是不需要把这些私有信息的,而virt-sysprep这个工具就能很好的帮助我们去制作一个模板文件,它能够让我们在模板中打入自己想要新装的软件包,想要加入到模板里的文件等等操作; 阅读全文
摘要:
在前边的博客中我们介绍了如何创建kvm虚拟机,以及一些常用的工具的介绍和使用,今天我们来了解下kvm原始工具qemu-kvm;为什么说qemu-kvm是一个原始的工具呢,如果你用kvm虚拟机,心细的你一定会发现我们不管用什么工具创建kvm虚拟机,在宿主机上表现的都是一个以/usr/libexec/qemu-kvm的进程;这意味着我们之前用的工具它们都调用了qemu-kvm这个工具来创建虚拟机,从而我们在宿主机上看到的都是qemu-kvm进程; 阅读全文
摘要:
在linux系统上文件的后缀只是起给人看的作用,方便人区分它,系统它不以后缀来确定它的格式;从上面的帮助信息可以看到create子命令的选项有size,该选项用于指定创建磁盘文件的大小;compat选项用于指定兼容性;backing_file用于指定备份文件名称;backing_fmt用于指定备份文件的格式;encryption用于指定是否加密,true表示加密false表示不加密,默认不指定是false;cluster_size指定磁盘的簇大小;preallocation用于指定磁盘预分配策略,其中off表示不预分配,metadata表示只预分配元数据大小,falloc表示随文件的增加而分配,full表示立即分配所有磁盘空间;默认是指不预分配磁盘空间大小; 阅读全文
摘要:
virtio 是一种 I/O 半虚拟化解决方案,是一套通用 I/O 设备虚拟化的程序,是对半虚拟化 Hypervisor 中的一组通用I/O 设备的抽象。提供了一套上层应用与各 Hypervisor 虚拟化设备(KVM,Xen,VMware等)之间的通信框架和编程接口,减少跨平台所带来的兼容性问题,大大提高驱动程序开发效率,windows 系统需要单独安装virtio驱动,linux系统自带virtio驱动。 阅读全文
摘要:
从上面的演示我们可以看到,当我们修改了网络配置文件中的网络名称,ip地址,网桥名称,mac,dhcp地址池然后保存,它就会在对应目录下生成一个我们之前修改后的网络配置文件,并把我们的配置立刻应用到系统(define操作,不需要我们手动去define,它自动会define一个非活跃的持久网络);这里提示下define出来的网络默认是持久的,create出来的网络不是持久的,所谓持久就是是否在/etc/libvirt/qemu/network/目录下生成配置文件,有配置文件的网络我们称它为持久网络,没有配置文件的网络我们称它为临时网络; 阅读全文
摘要:
在上一篇博客中,我们了解了KVM基础架构和部署以及图形管理工具virt-manager安装虚拟机的过程,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/13499801.html;今天我们来聊一下kvm的命令行工具virsh;virsh工具功能非常丰富,它可以全生命周期的管理kvm;比如创建虚拟机,查看虚拟机,动态热插拔硬盘,给虚拟机做快照,迁移、启动、停止、挂起、暂停、删除虚拟机等等操作; 阅读全文
摘要:
kvm是Linux内核中的一个模块,而对于用户要操作Linux内核中的模块所提供的功能,必须在用户空间装上一个用户空间软件,通过系统调用的方式去操作;QEMU就是kvm在用户空间的管理功能,有点类似iptalbes是netfilter的管理工具;上面架构图上kvm的主要作用是提供 CPU 和内存的虚级化,以及客户机的 I/O拦截,Guest的部分I/O被KVM拦截后,交给QEMU处理;QEMU通过修改过的被KVM虚机使用的QEMU代码,运行在用户空间,提供硬件I/O虚拟化,通过IOCTL/dev/kvm设备和KVM交互,但是,KVM本身不执行任何硬件模拟,需要用户空间程序通过 /dev/kvm 接口设置一个客户机虚拟服务器的地址空间,向它提供模拟I/O,并将它的视频显示映射回宿主的显示屏 阅读全文
摘要:
默认官方memcached是不支持主从同步的,为了解决memcached的高可用,我们是在客户端实现双写和调度,把一份session 多次写入后端的session服务器上,这样使得多台memcached服务器之间的数据有了冗余备份,即便集群中某一台memcached宕机以后,也不会丢失session;在用户访问上,我们在客户端上实现把调度自动切换到没有宕机的memcached上,这样又保证了线上业务的正常使用;memcached 它没有redis那种持久化的特点,它的数据上保存到内存中,一旦服务器掉电,或者重启服务都会导致数据丢失; 阅读全文
摘要:
导入数据时,提示我们没有认证;这里需要注意一点,导入数据之前需要关闭各 redis 服务器的密码,包括集群中的各 node 和源 Redis server,避免认证带来的环境不一致从而无法导入,可以加参数--cluster-replace 强制替换 Redis cluster 已有的 key。 阅读全文
摘要:
使用reshard 指定集群中任意节点的地址和端口即可启动对集群重新分片操作;重新分配槽位需要指定移动好多个槽位,接收指定数量槽位的节点id,从那些节点上移动指定数量的槽位,all表示集群中已有槽位的节点上;如果是手动指定,那么需要指定对应节点的ID,最后如果指定完成,需要使用done表示以上source node指定完成;接下来它会打印一个方案槽位移动方案,让我们确定。 阅读全文
摘要:
redis cluster 把所有的 redis node 映射到 0-16383 个槽位(slot)上,读写需要到指定的 redis node 上进行操作,因此有多少个 reids node 相当于 redis 并发扩展了多少倍。Redis cluster 预先分配 16384 个(slot)槽位,当需要在 redis 集群中写入一个 key -value 的时候,会使用 CRC16(key) mod 16384 之后的值,决定将 key 写入值哪一个槽位从而决定写入哪一个 Redis 节点上,从而有效解决redis单机读写瓶颈。 阅读全文
摘要:
Sentinel是一个分布式系统,我们可以在一个架构中运行多个sentinel,这些sentinel进程使用流言协议(gossipprotocols)来接收关于 Master是否下线的信息,并使用投票协议(Agreement Protocols)来决定是否执行自动故障迁移,以及选择哪个 Slave 作为新的 Master。每个sentinel进程会向其他sentinel进程、master、slave定时发送消息,以确保对方是否”活”着,如果发现对方在指定配置时间(可配置的)内未得到回应,则暂时认为对方已掉线,也就是所谓的”主观认为宕机” ,英文名称:Subjective Down,简称 SDOWN。 阅读全文