如何通过openstack 管理vmware命令行管理VMs

如何通过OpenStack命令行管理VMs_百度知道
如何通过OpenStack命令行管理VMs
以看一下这个网页
为您推荐:
openstack的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁#云#的文章&·&·&·&·&·&·&
发表于 日 21:14
在使用redhat6.5服务器时,默认情况下,使用yum安装软件会提示您的版本未注册,而无法直接通过yum安装软件。通过网上搜索,可以直接使用国内的Centos6.5的yum源。但是配置Cento…
在使用redhat6.5服务器时,默认情况下,使用yum安装软件会提示您的版本未注册,而无法直接通过yum安装软件。通过网上搜索,可以直接使用国内的Centos6.5的yum源。但是配置Centos6.5的yum源时,经常会出现如下错误:
这个错误表示你配置的源不正确。通过浏览器直接访问/centos/6.5/,可以发现里面有个readme文件,打开readme文件,可以看到:
也就是说,Centos6.X的文件全部放到了Centos6下面,所以只需要将yum源配置文件中的$releasever替换成6就ok。
最后更新yum源,并安装软件进行测试。
发表于 日 12:03
&·&可播放:DOCX
本文讲述了OpenStack框架中的认证组件—Identify。其中包括Identify的架构、相关概念和流程,并讲述了Identify的部署与管理。
本文讲述了OpenStack框架中的认证组件—Identify。其中包括Identify的架构、相关概念和流程,并讲述了Identify的部署与管理。
1 架构 --------------------1
2 概念 --------------------1
3 流程 --------------------3
4 部署 --------------------4
4.1 创建数据库 --------4
4.2 安装和配置组件 --5
4.3 启动服务 -----------6
5 管理 --------------------6
5.1 前提 -----------------6
5.2 用户管理 -----------6
5.3 服务管理 -----------7
6 总结 --------------------8
本文文档下载链接:
发表于 日 11:08
在vmware workstation中,复制虚拟机后,出现的网络问题。
在使用vmware workstation时,我们经常需要将虚拟机从一个地方复制到另一个地方。但有时会遇到这样的情况,复制前虚拟机的网络配置是正常的,但是复制之后,打开虚拟机发现虚拟机的网络信息如下图所示:
没有显示ip&v4的地址信息,查看/etc/sysconfig/network-scripts/ifcfg-ens33:
正常情况下是没有问题的,但是因为是复制的虚拟机,所以硬件地址已经更改了,所以导致ip v4无法显示,
解决方案:
1.删除HWADDR信息;
2.重新启动虚拟机。
发表于 日 17:25
&·&可播放:PDF
在OpenStack云平台上部署开源PaaS平台——VMWare CloudFoundry V3 (225)
文章正文在附件中,请查阅附件!
发表于 日 09:36
Pivotal发布PCF最新版1.6,基于Diego,支持Docker
Pivotal近期发布了最新的Pivotal Cloud Foundry 1.6,基于OSS CF Release 222, Diego 0.1437, Garden 0.308和MySQL 23。
PCF整合了CF和Diego,其中Diego是对CF一次重大的重构,从2014年CF Summit时Onsi的演讲介绍Diego带来阵阵惊呼开始,经历一年多的期盼,Diego正式发布了。
Diego是对CF的重新架构,用Go语言重写,包括用Cell代替DEA,用Brain代替HM(因为是重新架构,和原来的部件不是完全对应关系)了,这是一个浩大工程,所以耗时一年多。
在Diego中,可以看到众多新技术的影子:
1、Diego兼容Docker镜像,Docker镜像可以直接Push到PCF上运行,并且拥有自动弹性伸缩、故障自动恢复、集中日志采集等功能。
2、Diego支持.Net应用,可以直接把.Net应用Push部署到PCF上。
3、Diego的任务调度采用竞选算法,和Mesos有类似有不同,Diego适合应用调度,Mesos适合大数据调度。。
4、PCF的内部数据库可以选择内置的mySQL,此mySQL支持HA,实现了数据库的高可用性,避免了之前CF的Postgresql的单点故障。
5、支持SSH进入应用容器(需要权限)
6、支持更强的安全性,SSL到Router
7、增强Router功能,支持上下文和通配符
PCF通过此次重大升级,进一步托宽企业级应用场景,为Docker容器提供企业级PaaS功能,如内置的APM、自动弹性伸缩、故障自动恢复、日志综合采集、通过Router自动实现应用路由切换、应用Session集中管理、SSO、并提供微服务框架等。为企业提供完整的PaaS云解决方案。
发表于 日 10:03
RebornDB是一个基于代理的分布式Redis集群解决方案,有点像twemproxy。它有一个杀手锏:动态的切分数据集,即透明的重新切分数据而不影响目前正在运行的服务。
目前有许多的Key-Value数据库,它们都被广泛应用于很多系统。比如,我们能够用Memcached数据库存储一个MySQL查询结果集给后续相同的查询使用,用MongoDB存储文档以得到更好的查询性能等等。
针对不同的场景,我们应该选不同的Key-Value数据库,没有一个Key-Value数据库适用于所有解决方案,但是如果你仅仅想要一个简单、易于使用、快速、支持多种强大数据结构的Key-Value数据库,Redis可能是你作为开始的一个很好的选择。
Redis是一个先进的Key-Value缓存和数据库,它基于BSD许可证。它的速度很快,支持许多数据类型(String、Hash、List、Set、Sorted Set……),使用RDB或AOF持久化和复制来保证数据的安全性,并且支持多种语言的客户端库。
最重要的是市场选择了Redis,有许多公司正在使用Redis并且它证明了自身的价值。
虽然redis是相当不错的,它仍然有一些缺点,最大的缺点就是内存限制,Redis将所有数据驻留内存,这就限制了整个数据集的大小,让我们不可能保存更多的数据。
官方的Redis集群通过将数据分发到多个Redis服务器来解决这个问题,但是这个方法并没有在许多实际环境中被证明。同时,它需要我们改变自己的客户端库来支持“MOVED”重定向和其它特殊命令,而这在正在运行的生产环境同样是不可接受的。所以,Redis集群现在看来并不是一个好的解决方案。
我们喜欢Redis,并且希望超越它的局限,因此我们创建了一个服务叫做QDB,它兼容Redis,将数据保存在磁盘来越过内存大小的限制并且将热点数据保存在内存中以提高性能。
是一个类似Redis的快速Key-Value数据库,它有以下优点:
兼容Redis:如果你对&Redis很熟悉,你就能轻松使用QDB,它支持大多数的Redis命令和数据结构(String、Hash、List、Set、Sorted Set等);
将数据保存在磁盘:(超越内存大小限制)可以将热点数据在内存中保存,利用了后端存储;
支持多种后端存储:你可以选择&RocksDB、LevelDB&或者&GoLevelDB(稍后,我们将用RocksDBs作为例子讲解);
和Redis双向同步:我们可以作为一个从节点从&Redis同步数据,也可以作为一个主节点复制数据到Redis。
QDB使用LevelDB、RocksDB、GoLevelDB作为后端存储。这些存储都是基于有着很好的快速读写性能的(LSM树),同时他们都使用布隆过滤器和LRU缓存(LRU:最少使用页面置换算法)来提高读的性能。
LevelDB是由Google开发的最早的版本,RocksDB是由Facebook维护的一个优化版本,GoLevelDB是一个纯粹用GO语言实现的LevelDB。如果你仅仅想要一个快速试验并且不想构建和安装RocksDB或者LevelDB,你可以直接使用GoLevelDB,但是我们不推荐你将其使用在生产环境中,因为它的性能比较差。
LevelDB和RocksDB对于你的生产环境来说都是非常不错的,但是鉴于RocksDB绝佳的性能,我们更喜欢RocksDB,之后我们将只支持RocksDB和GoLevelDB,一个用于生产环境,另一个用于试验和测试环境中。
QDB是很棒的,我们能够在一个机器上存储巨大的数据,并且获得较好的读写性能,但是随着数据集的增长,我们仍然会面临这样的问题,即:我们不能将所有数据都保存在一个机器上。同时,QDB服务器将变成一个瓶颈并且面临单点失败的风险。
现在我们必须要考虑集群解决方案了。
是一个基于代理的分布式Redis集群解决方案。它有点像,一个几乎是最早的、最著名的基于代理的Redis集群解决方案。
但是twemproxy有它自己的问题,它仅仅支持静态的集群拓扑,因此我们不能动态的添加或者删除redis节点来重新切分数据。如果我们运行着许多的twemproxy并且希望添加一个Redis后端节点,另一个问题是如何让所有的twemproxy安全的更新配置,而这将增加IT操作的复杂性。同时,Twitter(正在开发twemproxy的公司)目前已经放弃并不再将其应用于生产环境。
不同于twemproxy,RebornDB有一个杀手锏:动态的切分数据集,这将非常有用,特别是在你的数据集增长很快,你不得不增加更多的存储节点来扩展集群的情况下。总之,RebornDB将会透明的重新切分数据而不影响目前正在运行的服务。
我们可以将RebornDB想象成一个黑盒,像一个单节点的Redis服务器一样用任何现有的Redis客户端去和它通信。下面的图片展示了RebornDB的架构。
RebornDB有以下组件:&reborn-proxy, backend store, coordinator, reborn-config, and reborn-agent.
Reborn-proxy
reborn-proxy为客户端提供单一的外部服务。任何redis客户端都能连接到任一reborn-proxy并运行命令。
reborn-proxy用RESP解析来自客户端的命令,将其分发至对应的后端存储,接收到后端存储的答复并返回客户端。
Reborn-proxy&是无状态的,意思是说你可以很容易的水平扩展redis-proxy来处理更多的服务请求。&
&我们可以有许多的Reborn-proxy,在分布式系统设计的时候怎么让客户端发现它们是另一个主题,但是我们不会在这里深入探讨这个问题,一些实用的方法是使用DNS,LVS,HAProxy等等。
后端存储器(Backend store&)
后端存储器是reborn-server(一个修改的redis版本)或者QDB。我们引入一个概念叫做组(group)来管理一个或者多个后端存储。一个组(group)必须有一个主节点和零个、一个或者多个从节点形成复制拓扑结构。
我们将整个数据集分成1024个slots(我们用hash(key)24来决定这个key属于哪个slot),并且将不同的slot保存到不同的组。如果你想重新切分数据,你可以增加一个新的组并让RebornDB&从另一个&移一个slot的所有数据到新的组。
我们也可以让不同的组采用不同的后端存储器。例如:我们希望group1来保存热点数据,group2来保存大量的冷数据,那么我们就能使用reborn-server构成group1,QDB构成group2.Reborn-server比QDB快很多,因此我们能够保证热点数据的读写性能。
协调器(Coordinator&)
我们使用zookeeper或者etcd作为协调服务器,当我们需要做一些写操作的时候,例如重新切分,故障转移等,它们会协调所有的服务。
所有RebornDB的信息都被保存在协调器中,例如关键路由规则,reborn-proxy可以根据它将命令正确的分发至后端存储器。
Reborn-config
Reborn-config是一个管理工具,我们可以使用它增加或删除组,例如增加或删除组中的存储,从一个组迁移数据至另一个组等等。
如果我们想要改变RebornDB集群的信息,就必须使用Reborn-config。例如:我们不能直接使用“SLAVE NO ONE”命令将后端存储器提升为主节点,而必须使用“reborn-config server promote groupid server”我们必须不仅仅改变组内的复制拓扑结构,而且要更新协调器中的信息,而这些只有Reborn-config能够做到。
Reborn-config也提供了一个网站服务,因此你可以很容易的管理RebornDB,如果需要更多的控制,你可以使用它的HTTP RESTFUL API。
Reborn-agent
Reborn-agent是一个高可用组件。你可以用它启动和停止应用(reborn-config, qdb-server, reborn-server, reborn-proxy)。我们将在接下来的高可用部分详细讨论。
重新切分(Resharding)
RebornDB支持动态的重新切分数据。我们是怎么做到的呢?
正如我们上面说的,我们将整个数据集分成1024个slots,并且将不同的slot保存到不同的组。当我们新增加一个组的时候,我们会将一些slots从旧的组迁移到新组中。在重新切分过程中我们将它叫做迁移。在RebornDB中最小的迁移单元是slot。
让我们从下面的一个简单的例子开始:
我们有两个组,group1有两个slot 1和2,group2有三个slot 3、4、5.现在group2的工作量比较大,我们将会增加group3并将slot5迁移进去。
我们可以使用下面的命令来将slot5从group2迁移至group3。
reborn-config slot migrate 5 2 3
(译者注:原文为&reborn-config slot migrate 5 5 3有误)
这个命令看起来很简单,但是我们需要在内部做很多工作来保证迁移的安全性。我们必须使用两阶段提交协议(2PC)来告诉reborn-proxy我们将把slot5从group2迁移至group3。待所有reborn-proxy确认并且答复之后,我们将开始迁移操作。
迁移的流程比较简单:从slot5中得到一个key,从group2迁移它的数据至group3,然后删除group2中的key,如此循环。最后group2中就没有slot5的数据而所有slot5的数据都在group3中。
key的迁移是原子性的,因此无论这个key之前是否在group2或者group3中,我们能够确定的是在执行迁移命令之后它是在group3中的。
如果在group2中没有数据是属于slot5的,我们将停止迁移,拓扑结构看起来是下面这个样子:
高可用性(High Availability)
RebornDB使用reborn-agent来提供HA解决方案。
reborn-agent每时每刻都在检查它启动的应用是否是活动的,如果reborn-agent发现一个应用挂掉了,它会重新启动这个应用。
Reborn-agent有点像一个管理员,但是它有更多的特点。
Reborn-agent提供HTTP Restful API方便我们添加或删除需要被动态监控的应用程序。例如:我们能够使用HTTP “/api/start_redis” API来启动一个新的reborn-server,或者“/api/start_proxy” API来启动一个新的reborn-proxy,我们也能够用“/api/stop”来停止一个正在运行的应用并且从目前的监控列表中删除它。
Reborn-agent不仅仅应用于本地应用的监控,同样适用于后台存储的HA。多个Reborn-agent将首先通过协调器选择一个主reborn-agent,它会不断检查后端存储器是否是活动的,如果发现后端存储器宕机了,它就会进行故障转移。如果宕机的后端存储器是一个从节点,reborn-agent将只会在协调器中将它设置为离线,但是如果它是主节点,reborn-agent将会从现有的从节点中选择一个作为主节点并进行故障转移操作。
即将要做的......&
尽管RebornDB有许多很棒的特性,我们仍然需要更多的工作去进一步提升它,我们后续可能做这些事情:
更好的用户体验:现在运行RebornDB并不是那么容易,我们将要做一系列工作诸如初始化slots、添加服务到group中、分配slots给一个组等等,在未来的工作中,如何降低用户的使用门槛是我们必须要考虑的问题;
复制迁移:现在我们迁移是逐个key迁移slot,如果一个slot包含许多数据的话速度就不是很快,使用复制迁移可能会好很多。在上面的例子中,group2首先产生一个快照,group3&能够在那个时间点取得所有slot5的数据,之后group3将从group2增量同步变化的数据。当我们发现group3取得了group2中slot5所有变化的数据之后,我们将进行切换,并从group2中删除slot5;
精美的仪表板:为了提供更好的用户体验,我们希望通过仪表板控制和监控一切事务。基于&P2P的集群:现在RebornDB是一个基于代理的集群解决方案,我们可能重新设计整个架构,之后将使用P2P,就像官方redis集群一样
构建一个分布式Key-value数据库不是一件容易的事情,前方的路还很长,我们现在只是迈出了一小步。
如果你想要用一个像redis的、存储更多数据、支持在分布式系统中动态切分数据的Key-value数据库,RebornDB将是一个不错的选择。
发表于 日 17:47
Redis Sentinel(哨兵):集群解决方案
官方文档(英文)&&。
Redis 的 Sentinel 系统用于管理多个 Redis 服务器(instance), 该系统执行以下三个任务:
监控(Monitoring): Sentinel 会不断地检查你的主服务器和从服务器是否运作正常。
提醒(Notification): 当被监控的某个 Redis 服务器出现问题时, Sentinel 可以通过 API 向管理员或者其他应用程序发送通知。
自动故障迁移(Automatic failover): 当一个主服务器不能正常工作时, Sentinel 会开始一次自动故障迁移操作, 它会将失效主服务器的其中一个从服务器升级为新的主服务器, 并让失效主服务器的其他从服务器改为复制新的主服务器; 当客户端试图连接失效的主服务器时, 集群也会向客户端返回新主服务器的地址, 使得集群可以使用新主服务器代替失效服务器。
Redis Sentinel 是一个分布式系统, 你可以在一个架构中运行多个 Sentinel 进程(progress), 这些进程使用流言协议(gossip protocols)来接收关于主服务器是否下线的信息, 并使用投票协议(agreement protocols)来决定是否执行自动故障迁移, 以及选择哪个从服务器作为新的主服务器。
虽然 Redis Sentinel 释出为一个单独的可执行文件&redis-sentinel&, 但实际上它只是一个运行在特殊模式下的 Redis 服务器, 你可以在启动一个普通 Redis 服务器时通过给定&--sentinel&选项来启动 Redis Sentinel 。
Redis Sentinel 目前仍在开发中, 这个文档的内容可能随着 Sentinel 实现的修改而变更。
Redis Sentinel 兼容 Redis 2.4.16 或以上版本, 推荐使用 Redis 2.8.0 或以上的版本。
获取 Sentinel
目前 Sentinel 系统是 Redis 的&unstable&分支的一部分, 你必须到&&克隆一份&unstable&分值, 然后通过编译来获得 Sentinel 系统。
Sentinel 程序可以在编译后的&src&文档中发现, 它是一个命名为&redis-sentinel&的程序。
你也可以通过下一节介绍的方法, 让&redis-server&程序运行在 Sentinel 模式之下。
另外, 一个新版本的 Sentinel 已经包含在了 Redis 2.8.0 版本的释出文件中。
启动 Sentinel
对于&redis-sentinel&程序, 你可以用以下命令来启动 Sentinel 系统:
redis-sentinel /path/to/sentinel.conf
对于&redis-server&程序, 你可以用以下命令来启动一个运行在 Sentinel 模式下的 Redis 服务器:
redis-server /path/to/sentinel.conf --sentinel
两种方法都可以启动一个 Sentinel 实例。
启动 Sentinel 实例必须指定相应的配置文件, 系统会使用配置文件来保存 Sentinel 的当前状态, 并在 Sentinel 重启时通过载入配置文件来进行状态还原。
如果启动 Sentinel 时没有指定相应的配置文件, 或者指定的配置文件不可写(not writable), 那么 Sentinel 会拒绝启动。
配置 Sentinel
Redis 源码中包含了一个名为&sentinel.conf&的文件, 这个文件是一个带有详细注释的 Sentinel 配置文件示例。
运行一个 Sentinel 所需的最少配置如下所示:
sentinel monitor mymaster 127.0.0.1 6379 2
sentinel down-after-milliseconds mymaster 60000
sentinel failover-timeout mymaster 180000
sentinel parallel-syncs mymaster 1
sentinel monitor resque 192.168.1.3 6380 4
sentinel down-after-milliseconds resque 10000
sentinel failover-timeout resque 180000
sentinel parallel-syncs resque 5
第一行配置指示 Sentinel 去监视一个名为&mymaster&的主服务器, 这个主服务器的 IP 地址为&127.0.0.1&, 端口号为&6379&, 而将这个主服务器判断为失效至少需要&2&个 Sentinel 同意 (只要同意 Sentinel 的数量不达标,自动故障迁移就不会执行)。
不过要注意, 无论你设置要多少个 Sentinel 同意才能判断一个服务器失效,&一个 Sentinel 都需要获得系统中多数(majority) Sentinel 的支持, 才能发起一次自动故障迁移,&并预留一个给定的配置纪元 (configuration Epoch ,一个配置纪元就是一个新主服务器配置的版本号)。
换句话说,&在只有少数(minority) Sentinel 进程正常运作的情况下, Sentinel 是不能执行自动故障迁移的。
其他选项的基本格式如下:
sentinel &选项的名字& &主服务器的名字& &选项的值&
各个选项的功能如下:
down-after-milliseconds&选项指定了 Sentinel 认为服务器已经断线所需的毫秒数。
如果服务器在给定的毫秒数之内, 没有返回 Sentinel 发送的&&命令的回复, 或者返回一个错误, 那么 Sentinel 将这个服务器标记为主观下线(subjectively down,简称&SDOWN&)。
不过只有一个 Sentinel 将服务器标记为主观下线并不一定会引起服务器的自动故障迁移: 只有在足够数量的 Sentinel 都将一个服务器标记为主观下线之后, 服务器才会被标记为客观下线(objectively down, 简称&ODOWN&), 这时自动故障迁移才会执行。
将服务器标记为客观下线所需的 Sentinel 数量由对主服务器的配置决定。
parallel-syncs&选项指定了在执行故障转移时, 最多可以有多少个从服务器同时对新的主服务器进行同步, 这个数字越小, 完成故障转移所需的时间就越长。
如果从服务器被设置为允许使用过期数据集(参见对&redis.conf&文件中对&slave-serve-stale-data&选项的说明), 那么你可能不希望所有从服务器都在同一时间向新的主服务器发送同步请求, 因为尽管复制过程的绝大部分步骤都不会阻塞从服务器, 但从服务器在载入主服务器发来的 RDB 文件时, 仍然会造成从服务器在一段时间内不能处理命令请求: 如果全部从服务器一起对新的主服务器进行同步, 那么就可能会造成所有从服务器在短时间内全部不可用的情况出现。
你可以通过将这个值设为&1&来保证每次只有一个从服务器处于不能处理命令请求的状态。
本文档剩余的内容将对 Sentinel 系统的其他选项进行介绍, 示例配置文件&sentinel.conf&也对相关的选项进行了完整的注释。
主观下线和客观下线
前面说过, Redis 的 Sentinel 中关于下线(down)有两个不同的概念:
主观下线(Subjectively Down, 简称 SDOWN)指的是单个 Sentinel 实例对服务器做出的下线判断。
客观下线(Objectively Down, 简称 ODOWN)指的是多个 Sentinel 实例在对同一个服务器做出 SDOWN 判断, 并且通过SENTINEL&is-master-down-by-addr&命令互相交流之后, 得出的服务器下线判断。 (一个 Sentinel 可以通过向另一个 Sentinel 发送&SENTINEL&is-master-down-by-addr&命令来询问对方是否认为给定的服务器已下线。)
如果一个服务器没有在&master-down-after-milliseconds&选项所指定的时间内, 对向它发送&&命令的 Sentinel 返回一个有效回复(valid reply), 那么 Sentinel 就会将这个服务器标记为主观下线。
服务器对&&命令的有效回复可以是以下三种回复的其中一种:
返回&+PONG&。
返回&-LOADING&错误。
返回&-MASTERDOWN&错误。
如果服务器返回除以上三种回复之外的其他回复, 又或者在指定时间内没有回复&&命令, 那么 Sentinel 认为服务器返回的回复无效(non-valid)。
注意, 一个服务器必须在&master-down-after-milliseconds&毫秒内, 一直返回无效回复才会被 Sentinel 标记为主观下线。
举个例子, 如果&master-down-after-milliseconds&选项的值为&30000&毫秒(30&秒), 那么只要服务器能在每&29&秒之内返回至少一次有效回复, 这个服务器就仍然会被认为是处于正常状态的。
从主观下线状态切换到客观下线状态并没有使用严格的法定人数算法(strong quorum algorithm), 而是使用了流言协议: 如果 Sentinel 在给定的时间范围内, 从其他 Sentinel 那里接收到了足够数量的主服务器下线报告, 那么 Sentinel 就会将主服务器的状态从主观下线改变为客观下线。 如果之后其他 Sentinel 不再报告主服务器已下线, 那么客观下线状态就会被移除。
客观下线条件只适用于主服务器: 对于任何其他类型的 Redis 实例, Sentinel 在将它们判断为下线前不需要进行协商, 所以从服务器或者其他 Sentinel 永远不会达到客观下线条件。
只要一个 Sentinel 发现某个主服务器进入了客观下线状态, 这个 Sentinel 就可能会被其他 Sentinel 推选出, 并对失效的主服务器执行自动故障迁移操作。
每个 Sentinel 都需要定期执行的任务
每个 Sentinel 以每秒钟一次的频率向它所知的主服务器、从服务器以及其他 Sentinel 实例发送一个&&命令。
如果一个实例(instance)距离最后一次有效回复&&命令的时间超过&down-after-milliseconds&选项所指定的值, 那么这个实例会被 Sentinel 标记为主观下线。 一个有效回复可以是:&+PONG&、&-LOADING&或者&-MASTERDOWN&。
如果一个主服务器被标记为主观下线, 那么正在监视这个主服务器的所有 Sentinel 要以每秒一次的频率确认主服务器的确进入了主观下线状态。
如果一个主服务器被标记为主观下线, 并且有足够数量的 Sentinel (至少要达到配置文件指定的数量)在指定的时间范围内同意这一判断, 那么这个主服务器被标记为客观下线。
在一般情况下, 每个 Sentinel 会以每 10 秒一次的频率向它已知的所有主服务器和从服务器发送&&命令。 当一个主服务器被 Sentinel 标记为客观下线时, Sentinel 向下线主服务器的所有从服务器发送&&命令的频率会从 10 秒一次改为每秒一次。
当没有足够数量的 Sentinel 同意主服务器已经下线, 主服务器的客观下线状态就会被移除。 当主服务器重新向 Sentinel 的&命令返回有效回复时, 主服务器的主管下线状态就会被移除。
自动发现 Sentinel 和从服务器
一个 Sentinel 可以与其他多个 Sentinel 进行连接, 各个 Sentinel 之间可以互相检查对方的可用性, 并进行信息交换。
你无须为运行的每个 Sentinel 分别设置其他 Sentinel 的地址, 因为 Sentinel 可以通过发布与订阅功能来自动发现正在监视相同主服务器的其他 Sentinel , 这一功能是通过向频道&__sentinel__:hello&发送信息来实现的。
与此类似, 你也不必手动列出主服务器属下的所有从服务器, 因为 Sentinel 可以通过询问主服务器来获得所有从服务器的信息。
每个 Sentinel 会以每两秒一次的频率, 通过发布与订阅功能, 向被它监视的所有主服务器和从服务器的&__sentinel__:hello&频道发送一条信息, 信息中包含了 Sentinel 的 IP 地址、端口号和运行 ID (runid)。
每个 Sentinel 都订阅了被它监视的所有主服务器和从服务器的&__sentinel__:hello&频道, 查找之前未出现过的 sentinel (looking for unknown sentinels)。 当一个 Sentinel 发现一个新的 Sentinel 时, 它会将新的 Sentinel 添加到一个列表中, 这个列表保存了 Sentinel 已知的, 监视同一个主服务器的所有其他 Sentinel 。
Sentinel 发送的信息中还包括完整的主服务器当前配置(configuration)。 如果一个 Sentinel 包含的主服务器配置比另一个 Sentinel 发送的配置要旧, 那么这个 Sentinel 会立即升级到新配置上。
在将一个新 Sentinel 添加到监视主服务器的列表上面之前, Sentinel 会先检查列表中是否已经包含了和要添加的 Sentinel 拥有相同运行 ID 或者相同地址(包括 IP 地址和端口号)的 Sentinel , 如果是的话, Sentinel 会先移除列表中已有的那些拥有相同运行 ID 或者相同地址的 Sentinel , 然后再添加新 Sentinel 。
Sentinel API
在默认情况下, Sentinel 使用 TCP 端口&26379&(普通 Redis 服务器使用的是&6379&)。
Sentinel 接受 Redis 协议格式的命令请求, 所以你可以使用&redis-cli&或者任何其他 Redis 客户端来与 Sentinel 进行通讯。
有两种方式可以和 Sentinel 进行通讯:
第一种方法是通过直接发送命令来查询被监视 Redis 服务器的当前状态, 以及 Sentinel 所知道的关于其他 Sentinel 的信息, 诸如此类。
另一种方法是使用发布与订阅功能, 通过接收 Sentinel 发送的通知: 当执行故障转移操作, 或者某个被监视的服务器被判断为主观下线或者客观下线时, Sentinel 就会发送相应的信息。
Sentinel 命令
以下列出的是 Sentinel 接受的命令:
&:返回&PONG&。
SENTINEL&masters&:列出所有被监视的主服务器,以及这些主服务器的当前状态。
SENTINEL&slaves&&master&name&&:列出给定主服务器的所有从服务器,以及这些从服务器的当前状态。
SENTINEL&get-master-addr-by-name&&master&name&&: 返回给定名字的主服务器的 IP 地址和端口号。 如果这个主服务器正在执行故障转移操作, 或者针对这个主服务器的故障转移操作已经完成, 那么这个命令返回新的主服务器的 IP 地址和端口号。
SENTINEL&reset&&pattern&&: 重置所有名字和给定模式&pattern&相匹配的主服务器。&pattern&参数是一个 Glob 风格的模式。 重置操作清除主服务器目前的所有状态, 包括正在执行中的故障转移, 并移除目前已经发现和关联的, 主服务器的所有从服务器和 Sentinel 。
SENTINEL&failover&&master&name&&: 当主服务器失效时, 在不询问其他 Sentinel 意见的情况下, 强制开始一次自动故障迁移 (不过发起故障转移的 Sentinel 会向其他 Sentinel 发送一个新的配置,其他 Sentinel 会根据这个配置进行相应的更新)。
发布与订阅信息
客户端可以将 Sentinel 看作是一个只提供了订阅功能的 Redis 服务器: 你不可以使用&&命令向这个服务器发送信息, 但你可以用&&命令或者&&命令, 通过订阅给定的频道来获取相应的事件提醒。
一个频道能够接收和这个频道的名字相同的事件。 比如说, 名为&+sdown&的频道就可以接收所有实例进入主观下线(SDOWN)状态的事件。
通过执行&PSUBSCRIBE&*&命令可以接收所有事件信息。
以下列出的是客户端可以通过订阅来获得的频道和信息的格式: 第一个英文单词是频道/事件的名字, 其余的是数据的格式。
注意, 当格式中包含&instance&details&字样时, 表示频道所返回的信息中包含了以下用于识别目标实例的内容:
&instance-type& &name& &ip& &port& @ &master-name& &master-ip& &master-port&
@&字符之后的内容用于指定主服务器, 这些内容是可选的, 它们仅在&@&字符之前的内容指定的实例不是主服务器时使用。
+reset-master&&instance&details&&:主服务器已被重置。
+slave&&instance&details&&:一个新的从服务器已经被 Sentinel 识别并关联。
+failover-state-reconf-slaves&&instance&details&&:故障转移状态切换到了&reconf-slaves&状态。
+failover-detected&&instance&details&&:另一个 Sentinel 开始了一次故障转移操作,或者一个从服务器转换成了主服务器。
+slave-reconf-sent&&instance&details&&:领头(leader)的 Sentinel 向实例发送了&&命令,为实例设置新的主服务器。
+slave-reconf-inprog&&instance&details&&:实例正在将自己设置为指定主服务器的从服务器,但相应的同步过程仍未完成。
+slave-reconf-done&&instance&details&&:从服务器已经成功完成对新主服务器的同步。
-dup-sentinel&&instance&details&&:对给定主服务器进行监视的一个或多个 Sentinel 已经因为重复出现而被移除 —— 当 Sentinel 实例重启的时候,就会出现这种情况。
+sentinel&&instance&details&&:一个监视给定主服务器的新 Sentinel 已经被识别并添加。
+sdown&&instance&details&&:给定的实例现在处于主观下线状态。
-sdown&&instance&details&&:给定的实例已经不再处于主观下线状态。
+odown&&instance&details&&:给定的实例现在处于客观下线状态。
-odown&&instance&details&&:给定的实例已经不再处于客观下线状态。
+new-epoch&&instance&details&&:当前的纪元(epoch)已经被更新。
+try-failover&&instance&details&&:一个新的故障迁移操作正在执行中,等待被大多数 Sentinel 选中(waiting to be elected by the majority)。
+elected-leader&&instance&details&&:赢得指定纪元的选举,可以进行故障迁移操作了。
+failover-state-select-slave&&instance&details&&:故障转移操作现在处于&select-slave&状态 —— Sentinel 正在寻找可以升级为主服务器的从服务器。
no-good-slave&&instance&details&&:Sentinel 操作未能找到适合进行升级的从服务器。Sentinel 会在一段时间之后再次尝试寻找合适的从服务器来进行升级,又或者直接放弃执行故障转移操作。
selected-slave&&instance&details&&:Sentinel 顺利找到适合进行升级的从服务器。
failover-state-send-slaveof-noone&&instance&details&&:Sentinel 正在将指定的从服务器升级为主服务器,等待升级功能完成。
failover-end-for-timeout&&instance&details&&:故障转移因为超时而中止,不过最终所有从服务器都会开始复制新的主服务器(slaves will eventually be configured to replicate with the new master anyway)。
failover-end&&instance&details&&:故障转移操作顺利完成。所有从服务器都开始复制新的主服务器了。
+switch-master&&master&name&&&oldip&&&oldport&&&newip&&&newport&&:配置变更,主服务器的 IP 和地址已经改变。&这是绝大多数外部用户都关心的信息。
+tilt&:进入 tilt 模式。
-tilt&:退出 tilt 模式。
一次故障转移操作由以下步骤组成:
发现主服务器已经进入客观下线状态。
对我们的当前纪元进行自增(详情请参考&&), 并尝试在这个纪元中当选。
如果当选失败, 那么在设定的故障迁移超时时间的两倍之后, 重新尝试当选。 如果当选成功, 那么执行以下步骤。
选出一个从服务器,并将它升级为主服务器。
向被选中的从服务器发送&SLAVEOF&NO&ONE&命令,让它转变为主服务器。
通过发布与订阅功能, 将更新后的配置传播给所有其他 Sentinel , 其他 Sentinel 对它们自己的配置进行更新。
向已下线主服务器的从服务器发送&&命令, 让它们去复制新的主服务器。
当所有从服务器都已经开始复制新的主服务器时, 领头 Sentinel 终止这次故障迁移操作。
每当一个 Redis 实例被重新配置(reconfigured) —— 无论是被设置成主服务器、从服务器、又或者被设置成其他主服务器的从服务器 —— Sentinel 都会向被重新配置的实例发送一个&CONFIG&REWRITE&命令, 从而确保这些配置会持久化在硬盘里。
Sentinel 使用以下规则来选择新的主服务器:
在失效主服务器属下的从服务器当中, 那些被标记为主观下线、已断线、或者最后一次回复&&命令的时间大于五秒钟的从服务器都会被淘汰。
在失效主服务器属下的从服务器当中, 那些与失效主服务器连接断开的时长超过&down-after&选项指定的时长十倍的从服务器都会被淘汰。
在经历了以上两轮淘汰之后剩下来的从服务器中, 我们选出复制偏移量(replication offset)最大的那个从服务器作为新的主服务器; 如果复制偏移量不可用, 或者从服务器的复制偏移量相同, 那么带有最小运行 ID 的那个从服务器成为新的主服务器。
Sentinel 自动故障迁移的一致性特质
Sentinel 自动故障迁移使用 Raft 算法来选举领头(leader) Sentinel , 从而确保在一个给定的纪元(epoch)里, 只有一个领头产生。
这表示在同一个纪元中, 不会有两个 Sentinel 同时被选中为领头, 并且各个 Sentinel 在同一个纪元中只会对一个领头进行投票。
更高的配置纪元总是优于较低的纪元, 因此每个 Sentinel 都会主动使用更新的纪元来代替自己的配置。
简单来说, 我们可以将 Sentinel 配置看作是一个带有版本号的状态。 一个状态会以最后写入者胜出(last-write-wins)的方式(也即是,最新的配置总是胜出)传播至所有其他 Sentinel 。
举个例子, 当出现网络分割()时, 一个 Sentinel 可能会包含了较旧的配置, 而当这个 Sentinel 接到其他 Sentinel 发来的版本更新的配置时, Sentinel 就会对自己的配置进行更新。
如果要在网络分割出现的情况下仍然保持一致性, 那么应该使用&min-slaves-to-write&选项, 让主服务器在连接的从实例少于给定数量时停止执行写操作, 与此同时, 应该在每个运行 Redis 主服务器或从服务器的机器上运行 Redis Sentinel 进程。
Sentinel 状态的持久化
Sentinel 的状态会被持久化在 Sentinel 配置文件里面。
每当 Sentinel 接收到一个新的配置, 或者当领头 Sentinel 为主服务器创建一个新的配置时, 这个配置会与配置纪元一起被保存到磁盘里面。
这意味着停止和重启 Sentinel 进程都是安全的。
Sentinel 在非故障迁移的情况下对实例进行重新配置
即使没有自动故障迁移操作在进行, Sentinel 总会尝试将当前的配置设置到被监视的实例上面。 特别是:
根据当前的配置, 如果一个从服务器被宣告为主服务器, 那么它会代替原有的主服务器, 成为新的主服务器, 并且成为原有主服务器的所有从服务器的复制对象。
那些连接了错误主服务器的从服务器会被重新配置, 使得这些从服务器会去复制正确的主服务器。
不过, 在以上这些条件满足之后, Sentinel 在对实例进行重新配置之前仍然会等待一段足够长的时间, 确保可以接收到其他 Sentinel 发来的配置更新, 从而避免自身因为保存了过期的配置而对实例进行了不必要的重新配置。
Redis Sentinel 严重依赖计算机的时间功能: 比如说, 为了判断一个实例是否可用, Sentinel 会记录这个实例最后一次相应&命令的时间, 并将这个时间和当前时间进行对比, 从而知道这个实例有多长时间没有和 Sentinel 进行任何成功通讯。
不过, 一旦计算机的时间功能出现故障, 或者计算机非常忙碌, 又或者进程因为某些原因而被阻塞时, Sentinel 可能也会跟着出现故障。
TILT 模式是一种特殊的保护模式: 当 Sentinel 发现系统有些不对劲时, Sentinel 就会进入 TILT 模式。
因为 Sentinel 的时间中断器默认每秒执行 10 次, 所以我们预期时间中断器的两次执行之间的间隔为 100 毫秒左右。 Sentinel 的做法是, 记录上一次时间中断器执行时的时间, 并将它和这一次时间中断器执行的时间进行对比:
如果两次调用时间之间的差距为负值, 或者非常大(超过 2 秒钟), 那么 Sentinel 进入 TILT 模式。
如果 Sentinel 已经进入 TILT 模式, 那么 Sentinel 延迟退出 TILT 模式的时间。
当 Sentinel 进入 TILT 模式时, 它仍然会继续监视所有目标, 但是:
它不再执行任何操作,比如故障转移。
当有实例向这个 Sentinel 发送&SENTINEL&is-master-down-by-addr&命令时, Sentinel 返回负值: 因为这个 Sentinel 所进行的下线判断已经不再准确。
如果 TILT 可以正常维持 30 秒钟, 那么 Sentinel 退出 TILT 模式。
处理&-BUSY&状态
该功能尚未实现
当 Lua 脚本的运行时间超过指定时限时, Redis 就会返回&-BUSY&错误。
当出现这种情况时, Sentinel 在尝试执行故障转移操作之前, 会先向服务器发送一个&&命令, 如果服务器正在执行的是一个只读脚本的话, 那么这个脚本就会被杀死, 服务器就会回到正常状态。
Sentinel 的客户端实现
关于 Sentinel 客户端的实现信息可以参考&&。
发表于 日 11:08
Redhat Enterprise Edition 配置本地yum仓库
Redhat Enterprise Edition 是收费版本,未注册的操作系统不允许使用yum来安装软件,对常见的类库,其官方OS镜像中携带了,可以配置本地yum仓库来使用yum。配置方式,先把Redhat OS 镜像文件挂载到操作系统下某个目录下,参考下面命令:
mkdir /image/redhat
mount -o loop /redhat.iso(镜像文件) image/redhat(挂载位置)
修改redhat本地本地yum仓库配置
vi /etc/yum.repos.d/local.repo
添加如下内容
name=Local
baseurl=file:///image/redhat
gpgcheck=0
测试,yum search gcc-c++
发表于 日 23:18
docker入门学习之安装, 若文档格式不正确,可以查看World原文档!
查看原文:
TOC \o "1-3" \u 第1章 Docker入门学习之安装............................................................................................
PAGEREF _Toc
1.1 什么是Docker...........................................................................................................
PAGEREF _Toc
1.2 安装Docker环境.......................................................................................................
PAGEREF _Toc
1.2.1 安装环境.........................................................................................................
PAGEREF _Toc
1.2.2 安装步骤.........................................................................................................
PAGEREF _Toc
1.2.3 简单测试.........................................................................................................
PAGEREF _Toc
第1章& Docker入门学习之安装
1.1& 什么是Docker
Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的、可移植的、自给自足的容器。开发者在笔记本上编译测试通过的容器可以批量地在生产环境中部署,包括VMs(虚拟机)、bare metal、OpenStack 集群和其他的基础应用平台。
简单的说Docker是一个构建在LXC之上的,基于进程容器(Processcontainer)的轻量级VM解决方案。拿现实世界中货物的运输作类比, 为了解决各种型号规格尺寸的货物在各种运输工具上进行运输的问题,我们发明了集装箱。Docker的初衷也就是将各种应用程序和他们所依赖的运行环境打包成标准的container/image,进而发布到不同的平台上运行。从理论上说这一概念并不新鲜, 各种虚拟机Image也起着类似的作用。Docker container和普通的虚拟机Image相比, 最大的区别是它并不包含操作系统内核.。
普通虚拟机将整个操作系统运行在虚拟的硬件平台上, 进而提供完整的运行环境供应用程序运行, 而Docker则直接在宿主平台上加载运行应用程序. 本质上他在底层使用LXC启动一个Linux Container,通过cgroup等机制对不同的container内运行的应用程序进行隔离,权限管理和quota分配等。每个container拥有自己独立的各种命名空间(亦即资源)包括: PID 进程, MNT 文件系统, NET 网络, IPC , UTS 主机名等。
基本上你可以认为目前的Docker是LXC的一个高级封装,提供了各种辅助工具和标准接口方便你使用LXC,你可以依靠LXC和各种脚本实现与docker类似的功能,就像你不使用APT/yum等工具也可以自己搞定软件包安装一样,你使用他们的关键原因是方便易用。实际使用中,你一般不用关心底层LXC的细节,同时也不排将来docker实现基于非LXC方案的可能性。在LXC的基础上, Docker额外提供的Feature包括:标准统一的打包部署运行方案, 历史版本控制, Image的重用,Image共享发布等等。
除了LXC,Docker的核心思想就体现在它的运行容器构建方案上。
为了最大化重用Image,加快运行速度,减少内存和磁盘footprint, Docker container运行时所构造的运行环境,实际上是由具有依赖关系的多个Layer组成的。例如一个apache的运行环境可能是在基础的rootfs image的基础上,叠加了包含例如Emacs等各种工具的image,再叠加包含apache及其相关依赖library的image,这些image由AUFS文件系统加载合并到统一路径中,以只读的方式存在,最后再叠加加载一层可写的空白的Layer用作记录对当前运行环境所作的修改。有了层级化的Image做基础,理想中,不同的APP就可以既可能的共用底层文件系统,相关依赖工具等,同一个APP的不同实例也可以实现共用绝大多数数据,进而以copy
on write的形式维护自己的那一份修改过的数据等。
Docker通常用于这几种场景:web应用的自动化打包和发布;自动化测试和持续集成、发布;在服务型环境中部署和调整数据库或其他的后台应用;从头编译或者扩展现有的OpenShift或Cloud Foundry平台来搭建自己的PAAS环境。
1.2& 安装Docker环境
1.2.1& 安装环境
Docker虽然是号称build once, runeverywhere。但是实际上还是受其引擎依赖关系的限制的,目前的版本具体来说对系统要求:
Linux Kernel 3.8+
LXC support
因此,我们选用ubuntu-server-14.04
(LTS) (64-bit)作为OS环境,OS镜像可以从官方网站下载。在本地安装一个ubuntu server虚拟机,为了方便操作可以启用ubuntu
server 的最高权限账户 root。在ubuntu-server上安装可以使用apt-get命令进行安装,这种方式安装需要ubuntu-server连接互联网。先安装
Linux常用的系统类库和软件,gcc、zip、unzip、tar等。
1.2.2& 安装步骤
ubuntu-server默认安装后没有图像化,我们可以通过终端工具使用账户登陆ubuntu-server,如下图所示:
说明:在后面执行安装的过程,如果当前不是root用户执行,前面需要加上sudo。后面命令中的 “$” 符号是不用输入的。
先执行 apt-get update 更新仓库:(需要联网,如果网络情况不佳,可能会很慢)
$ sudo apt-get
更新之后,就可以执行安装了,输入apt-get
install docker.io命令:
$ sudo apt-get
install docker.io
安装完成后,可以退出终端重新登录,这样docker命令的Tab提示才能正常使用,或者执行下面命令:
/etc/bash_completion.d/docker.io
检查ubuntu-server中 APT 系统是否能处理https,
查看 “/usr/lib/apt/methods/https”
可执行文件是否存在。如果不存在,需要安装软件包“apt-transport-https”:
apt-get install
apt-transport-https
添加Docker仓库KEY到本地,执行下面命令:
$ sudo apt-key
adv --keyserver hkp://:80 --recv-keys
36A1D0F966E92DD21E9
添加Docker仓库到ubuntu-server “apt sources list“,执行下面命令:(也可以vi命令打开文件进行编辑添加)
$ sudo sh -c
"echo deb /ubuntu docker main\
/etc/apt/sources.list.d/docker.list"
安装“lxc-docker”,执行下面命令:
$ sudo apt-get
$ sudo apt-get
install lxc-docker
输入 “docker version,
如果现实正确版本信息,标明安装成功,如下图所示:
至此,已经完成了docker的安装。安装过程如果网络环境不佳可能会出现超时等安装失败的错误。目前官方没有提供离线安装包,可以尝试找一找国内的Docker仓库地址。
1.2.3& 简单测试
从网上下载一个镜像,导入到docker的镜像库,使用
“docker images”查看镜像列表,如下图所示:
启动一个ubuntu容器,并启动BASH命令,执行下面命令:
docker run -i -t
/docker/ubuntu:14.04 /bin/bash
如下图所示:
从上图中显示的域名已经发生改变了,查看文件系统可以发现已经不是原ubuntu-server的文件系统结构了。输入exit退出容器,退出不等于销毁,容器还在。
查看创建的容器实例,输入下面命令:
docker ps -a
如下图所示:
删除容器实例命令:
${containerId}
删除镜像命令:
docker rmi
${imageId}
更多命令,请参考官方文档,也可以使用 “docker help” 命令获取更多信息, 如下图所示:
&从这里下载该文章Word版本:
发表于 日 20:24
为了满足当下对Web及云应用需求,甲骨文宣布推出MySQL Fabric。MySQL Fabric是一款可简化管理MySQL数据库群的整合式系统。该产品通过故障检测和故障转移功能提供了高可用性,同…
与MySQL复制功能共同使用实现高可用性时,MySQLFabric能够提供自动故障检测和故障转移功能。具体包括:
监控主数据库,如果服务器出现故障,MySQL Fabric将选出一个从数据库,并将其升级为新的主数据库。
提供事务处理的自动路径选择以连接到当前主数据库,及从数据库间的查询负载均衡。拓扑及服务器状态对应用透明。
自动数据分片和再分片功能简化了开发运营团队的流程管理工作。这帮助用户能够:
对表分片,实现读写的横向扩展;
选择对哪些表分片,并指定分片键的字段,包括使用基于哈希映射还是基于区间映射;
将现有数据片转移到新的服务器上,或者将这些数据片进一步分成更小的数据片。
对PHP、Python和Java连接器的扩展支持使得事务处理和查询能够直接发送到合适的MySQL服务器上。因为无需代理,不会产生额外延迟。
甲骨文公司MySQL开发副总裁Tomas Ulin表示:“全球很多大型网站和云应用都借助MySQL复制和分片功能来提升高可用性和可扩展性。MySQL Fabric通过自动故障检测和故障转移实现了高可用性以及自动数据分片,并对所有人开放。凭借MySQL Fabric这款整合的开源框架,无论MySQL应用是在内部部署还是云中,甲骨文都能使其轻松并安全地实现横向扩展。”
OK !!! 来动手测试一下吧 !!!
一、实验环境
本例的实验环境是在一台CentOS主机中做的,机器上有3个MySQL实例,分别是和3692,我们要做的就是用这3个实例达成HA效果
Fabric目前是被打包到了MySQL Utilities中,所以大家下载MySQL Utilities就可以了,下载地址是:/downloads/utilities/,目前版本是:1.4.4,在本例中我们下载的是 mysql-utilities-1.4.4-1.el6.noarch.rpm。
三、安装MySQL Utilities
rpm包的安装还是挺简单的,具体如下:
rpm -ivh mysql-utilities-1.4.4-1.el6.noarch.rpm
Preparing...
########################################### [100%]
1:mysql-utilities
########################################### [100%]
[root@&span style="font-size: 12"&
装完后执行
mysqlfabric
如果有回显说明安装完毕。
四、建立Backing Store帐号
Backing Store用于存储整个HA集群的服务器等相关配置,它需要一个MySQL实例来存储这些信息,这个实例的版本需要跟其它在HA中的MySQL实例版本保持一致,而且必须是5.6.10及更高的版本,我们在本例中选择3306实例来使用。
首先,你需要一个帐号来连接Backing Store的MySQL实例,这个帐号需要有对fabric数据库的管理员级权限,我们在3306端口的实例上建帐号,具体如下:
CREATE USER 'fabric'@'10.165.17.175' IDENTIFIED BY 'secret';
GRANT ALL ON fabric.* TO 'fabric'@'10.165.17.175';
五、Fabric配置文件
Fabric配置文件默认位置是:/etc/mysql/fabric.cfg
修改其中的[storage]部分,具体如下:
auth_plugin = mysql_native_password
database = fabric
user = fabric
address = 10.165.17.175:3306
connection_delay = 1
connection_timeout = 6
password = secret
connection_attempts = 6
其中address = 10.165.17.175:3306是Backing Store的MySQL实例,password = secret是上一步中建立连接fabric数据库的用户密码。
修改其中的[servers]部分,具体如下:
password = secret
user = fabric
其中是password = secret 是HA环境中各实例的连接密码。
六、填充Backing Store信息
我们通过Fabric来填充3306端口实例中的fabric数据库,具体如下:
mysqlfabric manage setup
[INFO] .486792 - MainThread - Initializing persister: user (fabric), server (10.165.17.175:3306), database (fabric).
Finishing initial setup
=======================
Password for admin user is not yet set.
Password for admin/xmlrpc:
Repeat Password:
Password set.
操作期间会提示Fabric的管理员帐户admin没有设置密码,咱们按提示将密码设置成admin就可以了。
我们再查看3306端口的实例里面发生了什么变化,具体如下:
+--------------------+
| Database
+--------------------+
| information_schema |
| 51linux.net
| performance_schema |
+--------------------+
5 rows in set (0.00 sec)
可以看到多了一个fabric数据库,它里面存储的就是Fabric的一些配置信息。
七、配置HA中主从MySQL节点帐号
本例中实例是需要做成HA的,它们也要建个管理员权限的帐号,注意,帐号名也要跟3306实例保持一致,也需要是fabric,具体如下:
CREATE USER 'fabric'@'10.165.17.175' IDENTIFIED BY 'secret';
GRANT ALL ON *.* TO 'fabric'@'10.165.17.175';
同时,由于fabric是基于GTID主从复制,所以这些实例中必须要启用GTID,它们的配置文件要有这些参数:
gtid-mode=ON
enforce-gtid-consistency
log_slave_updates
八、启动fabric
我们用下面的命令来启动fabric:
mysqlfabric manage start
[INFO] .229260 - MainThread - Initializing persister: user (fabric), server (10.165.17.175:3306), database (fabric).
[INFO] .233982 - MainThread - Loading Services.
[INFO] .253620 - MainThread - Fabric node starting.
[INFO] .261853 - MainThread - Starting Executor.
[INFO] .262001 - MainThread - Setting 5 executor(s).
[INFO] .262691 - Executor-0 - Started.
[INFO] .264825 - Executor-1 - Started.
[INFO] .266648 - Executor-2 - Started.
[INFO] .268395 - Executor-3 - Started.
[INFO] .269961 - MainThread - Executor started.
[INFO] .273374 - MainThread - Starting failure detector.
[INFO] .274144 - Executor-4 - Started.
[INFO] .275816 - XML-RPC-Server - XML-RPC protocol server ('127.0.0.1', 32274) started.
[INFO] .276112 - XML-RPC-Server - Setting 5 XML-RPC session(s).
[INFO] .276654 - XML-RPC-Session-0 - Started XML-RPC-Session.
[INFO] .278426 - XML-RPC-Session-1 - Started XML-RPC-Session.
[INFO] .280368 - XML-RPC-Session-2 - Started XML-RPC-Session.
[INFO] .281599 - XML-RPC-Session-3 - Started XML-RPC-Session.
[INFO] .282699 - XML-RPC-Session-4 - Started XML-RPC-Session.
九、建立HA服务器组
这个HA服务器组,用于把参与HA的所有MySQL实例都填加进来:
mysqlfabric group create my_group
Password for admin:
Procedure :
= 292621fd-cddc-4cbb-8c0d-d8a,
activities
这样我们就创建了一个组名为my_group的HA服务器组。
十、填加HA组的成员
我们首先填加3691,具体如下:
mysqlfabric group add my_group 10.165.17.175:3691
Password for admin:
Procedure :
= 8d1c11f8-adc4-96caeb07c1,
activities
接下来填3692,具体如下:
mysqlfabric group add my_group 10.165.17.175:3692
Password for admin:
Procedure :
= b1fa3cb9-b86f-4b1a-88cb-e84babb2ab02,
activities
如果屏幕回显示无error,那么说明成功填加了成员。我们也可以查看一下my_group里面的成员信息,具体如下:
mysqlfabric group lookup_servers my_group
Password for admin:
= [{'status': 'SECONDARY', 'server_uuid': '0-11e4-af48-', 'mode': 'READ_ONLY', 'weight': 1.0, 'address': '10.165.17.175:3691'}, {'status': 'SECONDARY', 'server_uuid': 'a8a-11e4-af09-', 'mode': 'READ_ONLY', 'weight': 1.0, 'address': '10.165.17.175:3692'}]
activities
大家可以看到,这2个实例都不是PRIMARY,说明刚刚搭建完的环境,系统是不会选举出PRIMARY的。
十一、选举一个主库
选举的方法也非常简单,具体如下:
mysqlfabric group promote my_group
Password for admin:
Procedure :
= -10ef-409f-a1a9-a3,
activities
可见执行成功了,并没有返回error。
接下来我们再次验证一下HA集群中各服务器情况。
mysqlfabric group lookup_servers my_group
Password for admin:
= [{'status': 'SECONDARY', 'server_uuid': '0-11e4-af48-', 'mode': 'READ_ONLY', 'weight': 1.0, 'address': '10.165.17.175:3691, {'status': 'PRIMARY', 'server_uuid': 'a8a-11e4-af09-', 'mode': 'READ_WRITE', 'weight': 1.0, 'address': '10.165.17.175:3692}]
activities
可见Fabric已经随机选举了一个Master角色。
十二、激活故障自动切换
即使Fabric选出了Master角色,但当这个Master宕机时,Fabric并不会自动将Secondary角色切换成Master角色,所以我们需要将HA配置成可以自动切换角色的样子,具体如下:
mysqlfabric group activate my_group
Password for admin:
Procedure :
= 518b7dad-06a4-45a8-bfd5-,
activities
当然,我们也可以依据具体需求取消Fabric故障自动切换。
十三、测试HA
在这个实验中,我们将3691实例停止,再看看Fabric的状态:
mysqlfabric group lookup_servers my_group
Password for admin:
= [{'status': 'PRIMARY', 'server_uuid': '0-11e4-af48-', 'mode': 'READ_WRITE', 'weight': 1.0, 'address': '10.165.17.175:3691}, {'status': 'FAULTY', 'server_uuid': 'a8a-11e4-af09-', 'mode': 'READ_WRITE', 'weight': 1.0, 'address': '10.165.17.175:3692}]
activities
其中3692实例的状态已经变成了“FAULTY”,可以看出Fabric自动检测到了这个故障,并且选举了slave重新当了primary角色。我不得不说就是这个功能,是它吸引我的原因之一。
十四、后续学习
关于后续的学习,大家要看看官网的用户手册,里面还有很多HA维护的方法,如增减节点等问题,同时目前Fabric也提供了phtyon和Java的API,可以供软件开发人员直接使用,以后的软件开发人员,不是再直接连接到MySQL实例,而是连接到Fabric,由Fabric来统一分发请求,这有些象MySQL Proxy,但它的应用前景要比MySQL Proxy更宽更广。
回答数&4&·&文章数&19
回答数&0&·&文章数&4
回答数&0&·&文章数&0
回答数&3&·&文章数&0
回答数&0&·&文章数&1
<?php require_once 'cs.php';echo '';?>}

我要回帖

更多关于 虚拟机管理软件vms 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信