原标题:去哪儿系统高可用之法:搭建故障演练平台

Windows 2012 系统搭建高可用故障转移集群

一、单个实例

当系统中只有一台redis运行时,一旦该redis挂了,会导致整个系统无法运行。

单个实例

作者介绍

一、故障转移集群介绍 2

二、备份

由于单台redis出现单点故障,就会导致整个系统不可用,所以想到的办法自然就是备份(一般工业界认为比较安全的备份数应该是3份)。当一台redis出现问题了,另一台redis可以继续提供服务。

备份

王鹏,2017年加入去哪儿机票事业部,主要从事后端研发工作,目前在机票事业部负责行程单和故障演练平台以及公共服务ES、数据同步中间件等相关的研发工作。

1.1 系统介绍 2

三、自动故障转移

虽然上面redis做了备份,看上去很完美。但由于redis目前只支持主从复制备份(不支持主主复制),当主redis挂了,从redis只能提供读服务,无法提供写服务。所以,还得想办法,当主redis挂了,让从redis升级成为主redis。

这就需要自动故障转移,redis
sentinel带有这个功能,当一个主redis不能提供服务时,redis
sentinel可以将一个从redis升级为主redis,并对其他从redis进行配置,让它们使用新的主redis进行复制备份。

自动故障转移

去哪儿网2005年成立至今,随着系统规模的逐步扩大,已经有成百上千个应用系统,这些系统之间的耦合度和链路的复杂度不断加强,对于我们构建分布式高可用的系统架构具有极大挑战。我们需要一个平台在运行期自动注入故障,检验故障预案是否起效——故障演练平台。

1.2 工作原理 2

四、动手实践

1.环境

这里使用三台服务器,每台服务器上开启一个redis-server和redis-sentinel服务,redis-server端口为8000,redis-sentinel的端口为6800,修改默认端口是安全的第一步_

redis-server说明

  • 192.168.56.101:8000 主
  • 192.168.56.102:8000 从
  • 192.168.56.103:8000 从

redis-sentinel说明

  • 192.168.56.101:6800
  • 192.168.56.102:6800
  • 192.168.56.103:6800

2.搭建redis系统

首先下载安装redis

wget http://download.redis.io/releases/redis-3.2.8.tar.gz
tar zxvf redis-3.2.8.tar.gz
cd redis-3.2.8
make

cd src
#复制redis相关命令到/usr/sbin目录下,这样就可以直接执行这些命令,不用写全路径
sudo cp redis-cli  redis-server  redis-sentinel   /usr/sbin/

在redis目录下有redis.conf和sentinel.conf配置文件示例,使用sudo cp redis.conf sentinel.conf /etc/命令将两个配置文件复制到/etc目录下(当然也可以在/etc/目录新建配置文件),然后修改配置文件。

修改主redis-server配置文件内容如下:

port  8000           #修改端口是安全的第一步
daemonize  yes
bind  0.0.0.0
pidfile   /var/run/redis-8000.pid
logfile   /var/log/redis/redis-8000.log

修改从redis-server配置文件内容如下:

port  8000           #修改端口是安全的第一步
daemonize  yes
bind  0.0.0.0
pidfile   /var/run/redis-8000.pid
logfile   /var/log/redis/redis-8000.log
slaveof  192.168.56.101  8000    #从redis比主redis多这一行

启动redis-server。

sudo redis-server /etc/redis.conf

三个redis服务启动完毕后,进入命令行,执行info
replication查看当前主从配置。

主节点上查看主从信息

发现并没有从节点信息。

3.主从间无法通信

这里的原因是防火墙屏蔽了8000端口,需要修改防火墙设置,开放8000端口(同理redis-sentinel的6800端口)。

# 打开防火墙配置文件,增加8000端口
sudo vim /etc/sysconfig/iptables

#修改完后,需要重启防火墙
sudo service iptables restart

增加8000端口和6800端口

然后重新进入主节点,查看主从信息,可以发现两个从节点信息,表明redis-server主从已经配置完毕。

主节点上查看主从信息

4.搭建redis-sentinel系统

redis-sentinel程序上面已经安装过了,这里只需要修改配置文件就可以了。修改/etc/sentinel.conf,如果没有创建即可。

修改sentinel.conf配置文件内容如下:

daemonize yes
port  6800
logfile  /var/log/redis/sentinel.log
pidfile  /var/run/sentinel.pid
sentinel monitor master8000 192.168.56.101 8000 2
#5秒内master6800没有响应,就认为SDOWN
sentinel down-after-milliseconds master8000 5000  
sentinel failover-timeout  master8000 15000

启动redis-sentinel。

redis-sentinel  /etc/sentinel.conf

三个redis-sentinel服务启动完毕后,连接任意sentinel服务可以获知当前主redis服务信息。

sentinel监控状态

一、背景

二、实验目的 2

五、测试

1.把住redis停掉

redis-cli -h 192.168.56.101 -p 8000 shutdown

2.查看redis-sentinel的监控状态

sentinel监控状态

发现102这台redis-server提升为主库。

至此,redis的高可用方案已经搭建完成。

这是某事业部的系统拓扑图:

2.1 验证故障转移功能 2

六、客户端程序

客户端程序(如PHP程序)连接redis时需要ip和port,但redis-server进行故障转移时,主redis是变化的,所以ip地址也是变化的。客户端程序如何感知当前主redis的ip地址和端口呢?redis-sentinel提供了接口,请求任何一个sentinel,发送SENTINEL get-master-addr-by-name <master name>就能得到当前主redis的ip和port。

获取当前主redis的ip和port

客户端每次连接redis前,先向sentinel发送请求,获得主redis的ip和port,然后用返回的ip和port连接redis。

这种方法的缺点是显而易见的,每次操作redis至少需要发送两次连接请求,第一次请求sentinel,第二次请求redis。

php请求sentinel程序代码可参见:https://github.com/huyanping/redis-sentinel

更好的办法是使用VIP,当然这对配置的环境有一定的要求,比如redis搭建在阿里云服务器上,可能不支持VIP。

VIP方案是,redis系统对外始终是同一ip地址,当redis进行故障转移时,需要做的是将VIP从之前的redis服务器漂移到现在新的主redis服务器上。

比如:当前redis系统中主redis的ip地址是192.168.56.101,那么VIP(192.168.56.250)指向192.168.56.101,客户端程序用VIP(192.168.56.250)地址连接redis,实际上连接的就是当前主redis,这样就避免了向sentinel发送请求。

当主redis宕机,进行故障转移时,192.168.56.102这台服务器上的redis提升为主,这时VIP(192.168.56.250)指向192.168.56.102,这样客户端程序不需要修改任何代码,连接的是192.168.56.102这台主redis。

VIP指向192.168.56.101

故障转移后,VIP漂移指向192.168.56.102

mg娱乐游戏 1

mg线上娱乐,2.2 验证高可用集群的可用性,以及支持的服务类型 2

七、漂移VIP

那么现在的问题是,如何在进行redis故障转移时,将VIP漂移到新的主redis服务器上。

这里可以使用redis
sentinel的一个参数client-reconfig-script,这个参数配置执行脚本,sentinel在做failover的时候会执行这个脚本,并且传递6个参数<master-name>、
<role>、 <state>、 <from-ip>、 <from-port>、
<to-ip>
、<to-port>,其中<to-ip>是新主redis的IP地址,可以在这个脚本里做VIP漂移操作。

sentinel client-reconfig-script master8000   /opt/notify_master6800.sh

修改三个服务器的redis-sentinel配置文件/etc/sentinel.conf,增加上面一行。然后在/opt/目录下创建notify_master6800.sh脚本文件,这个脚本做VIP漂移操作,内容如下:

#notify_master6800.sh脚本内容
#!/bin/bash
MASTER_IP=$6  #第六个参数是新主redis的ip地址
LOCAL_IP='192.168.56.101'  #其他两个服务器上为192.168.56.102,192.168.56.103
VIP='192.168.56.250'
NETMASK='24'
INTERFACE='eth1'
if [ ${MASTER_IP} = ${LOCAL_IP} ];then   
    /sbin/ip  addr  add ${VIP}/${NETMASK}  dev ${INTERFACE}  #将VIP绑定到该服务器上
    /sbin/arping -q -c 3 -A ${VIP} -I ${INTERFACE}
    exit 0
else 
   /sbin/ip  addr del  ${VIP}/${NETMASK}  dev ${INTERFACE}   #将VIP从该服务器上删除
   exit 0
fi
exit 1  #如果返回1,sentinel会一直执行这个脚本

现在当前主redis是192.168.56.102,需要手动绑定VIP到该服务器上。

/sbin/ip  addr add 192.168.56.250/24 dev eth1
/sbin/arping -q   -c 3 -A 192.168.56.250 -I eth1 

然后,去另一个服务器上通过VIP地址连接redis-server和redis-sentinel。

通过VIP连接redis

从上面也可以看出当前主redis是192.168.56.102。

下面关闭这台redis服务,看看VIP是否漂移到另一台服务器上。

redis-cli -h 192.168.56.102 -p 8000 shutdown

通过查询sentinel发现192.168.56.103提升为主。

通过访问VIP连接redis,发现VIP确实指向了192.168.56.103。

系统之间的依赖非常复杂、调用链路很深、服务之间没有分层。在这种复杂的依赖下,系统发生了几起故障:

三、实验原理 3

八、总结

通过上面的操作,使用redis主从 + 哨兵(sentinel)+
漂移VIP
的方案搭建了一个redis高可用系统,但这个系统保证的是单个redis实例的高可用,所以适合业务比较小的应用。如果业务比较大,并发量比较高,建议搭建redis集群,比如官方redis
cluster,还有开源的codings集群。

另外,漂移VIP可以使用keepalived软件来实现,这里就不多介绍了。

  • 弱依赖挂掉,主流程挂掉,修改报销凭证的支付状态,下单主流程失败;
  • bbin手机客户端登录,核心服务调用量陡增,某服务超时引起相关联的所有服务“雪崩”;
  • 机房网络或者某些机器挂掉,不能提供核心服务。

3.1 实验拓扑 3

三个故障原因:

3.2 实验环境设备 3

  • 系统强弱依赖混乱、弱依赖无降级;
  • 系统流量陡增,系统容量不足,没有限流熔断机制;
  • 硬件资源网络出现问题影响系统运行,没有高可用的网络架构。

四、配置步骤 4

各种各样的问题,在这种复杂的依赖结构下被放大,一个依赖30个SOA服务的系统,每个服务99.99%可用。99.99%的30次方≈99.7%。0.3%意味着一亿次请求会有3,000,00次失败,换算成时间大约每月有2个小时服务不稳定。随着服务依赖数量的变多,服务不稳定的概率会呈指数性提高,这些问题最后都会转化为故障表现出来。

4.1 配置域服务器 4

二、系统高可用的方法论

4.2  iSCSI 虚拟存储配置 18

如何构建一个高可用的系统呢?首先要分析一下不可用的因素都有哪些:

4.3 配置故障转移集群服务 45

mg娱乐游戏 2

4.4  验证集群 63

高可用系统典型实践

五、实验结果验证 68

理论上来说,当图中所有的事情都做完,我们就可以认为系统是一个真正的高可用系统。但真是这样吗?

5.1  验证故障转移 68

那么故障演练平台就隆重登场了。当上述的高可用实践都做完,利用故障演练平台做一次真正的故障演练,在系统运行期动态地注入一些故障,从而来验证下系统是否按照故障预案去执行相应的降级或者熔断策略。

5.2 高可用集群的验证 69

三、故障演练平台

 

故障演练平台:mg娱乐游戏,检验故障预案是否真正的起作用的平台。

 

故障类型:主要包括运行期异常、超时等等。通过对系统某些服务动态地注入运行期异常来达到模拟故障的目的,系统按照预案执行相应的策略验证系统是否是真正的高可用。

 

1、故障演练平台的整体架构

一、故障转移集群介绍

故障演练平台架构主要分为四部分:

1.1 系统介绍

mg娱乐游戏 3

    故障转移群集是针对具有长期运行的内存中状态或具有大型的、频繁更新的数据状态的应用程序而设计。这些应用程序称为状态应用程序,并且它们包括数据库应用程序和消息应用程序。故障转移群集的典型使用包括文件服务器、打印服务器、数据库服务器和消息服务器。

  • 前台展示系统(WEB):展示系统之间的拓扑关系以及每个AppCode对应的集群和方法,可以选择具体的方法进行故障的注入和解除;
  • 发布系统(Deploy):这个系统主要用于将故障演练平台的Agent和Binder包发布到目标APP的机器上并且启动执行。前台展示系统会传递给发布平台要进行故障注入的AppCode以及目标APP的IP地址,通过这两个参数发布系统可以找到相应的机器进行Jar包的下载和启动;
  • 服务和命令分发系统(Server):这个系统主要是用于命令的分发、注入故障的状态记录、故障注入和解除操作的逻辑、权限校验以及相关的Agent的返回信息接收功能。前台页面已经接入QSSO会对当前人可以操作的IP列表做故障注入,防范风险。后端命令分发的模块会和部署在目标APP上的Agent进行通信,将命令推送到Agent上执行字节码编织,Agent执行命令后返回的内容通过Server和Agent的长连接传回Server端;
  • Agent和Binder程序:Agent负责对目标APP做代理并且做字节码增强,具体代理的方法可以通过传输的命令来控制,代理方法后对方法做动态的字节码增强,这种字节码增强具有无侵入、实时生效、动态可插拔的特点。Binder程序主要是通过发布系统传递过来的AppCode和启动端口(ServerPort)找到目标APP的JVM进程,之后执行动态绑定,完成运行期代码增强的功能。

1.2 工作原理

2、 Agent整体架构

    故障转移群集是基于域的管理模式部署, 以 “心跳机制” 来监视各个节点的健康状况;如果在群集中的一台服务器发生了故障,则群集中的其它服务器会立刻接手并继续运行。而这些服务器是通过心跳网络来进行相互检测的,当服务器发生故障时,其他的服务器就会检测不到故障服务器的心跳信号,此时就会认为此服务器发生故障,并立刻接手并继续运行。

目前AOP的实现有两种方式:

二、实验目的

  • 静态编织:静态编织发生在字节码生成时根据一定框架的规则提前将AOP字节码插入到目标类和方法中;
  • 动态编织:在JVM运行期对指定的方法完成AOP字节码增强。常见的方法大多数采用重命名原有方法,再新建一个同名方法做代理的工作模式来完成。

2.1 验证故障转移功能

静态编织的问题是如果想改变字节码必须重启,这给开发和测试过程造成了很大的不便。动态的方式虽然可以在运行期注入字节码实现动态增强,但没有统一的API很容易操作错误。基于此,我们采用动态编织的方式、规范的API来规范字节码的生成——Agent组件。

    学习搭建Windows故障转移集群,测试Windows高可用集群与高可用集群进行对比。

Agent组件:通过JDK所提供的Instrumentation-API实现了利用HotSwap技术在不重启JVM的情况下实现对任意方法的增强,无论我们是做故障演练、调用链追踪(QTrace)、流量录制平台(Ares)以及动态增加日志输出BTrace,都需要一个具有无侵入、实时生效、动态可插拔的字节码增强组件。

2.2 验证高可用集群的可用性,以及支持的服务类型

Agent的事件模型

    在故障转移集群的基础上搭建常用基础服务器(DTC、SQL、文件共享集群、Hyper-v),来测试架构的可行性。

如图所示,事件模型主要可分为三类事件:

三、实验原理

mg娱乐游戏 4

3.1 实验拓扑

BEFORE在方法执行前事件、THROWS抛出异常事件、RETURN返回事件。这三类事件可以在方法执行前、返回和抛出异常这三种情况做字节码编织。

mg娱乐游戏 5

如下代码:

 

// BEFORE

3.2 实验环境设备

try {

序号

设备名称

IP规划

用途

1

iSCSI存储服务器

172.16.200.73

共享存储虚拟磁盘

2

域服务器

172.16.200.70

wangzx-noc.com域服务器

3

MSHV-1服务器

172.16.200.71

节点服务器1:  MSHV-1

4

MSHV-2服务器

172.16.200.71

节点服务器2:  MSHV-2

5

集群

172.16.200.75

集群虚IP

/*

3.3 实验检测方式

* do something…

搭建分布式事务协调器,和hyper-v验证高可用服务的可用性。

*/

验证方式:

foo();

1. 服务器宕机测试

// RETURN

2. 物理网卡中断

return;

3. 故障转移集群服务停止

} catch (Throwable e) {

 

// THROWS

 

}

 

事件模型可以完成三个功能:

四、配置步骤

  • 在方法体执行之前直接返回自定义结果对象,原有方法代码将不会被执行;
  • 在方法体返回之前重新构造新的结果对象,甚至可以改变为抛出异常;
  • 在方法体抛出异常之后重新抛出新的异常,甚至可以改变为正常返回。

4.1 配置域服务器

Agent如何防止“类污染”

1、打开服务器管理器,点击添加角色

在开发Agent的时候,第一个应用是故障演练平台,那么这个时候其实我们并不需要Agent执行的过程中有自定义结果对象的返回,所以第一个版本的Agent采用硬编码的方式进行动态织入:

mg娱乐游戏 6

mg娱乐游戏 7

 

故障类加载模型

 

首先介绍下几个类加载器:

mg娱乐游戏 8

  • BootstrapClassLoader引导类加载器加载的是JVM自身需要的类,这个类加载使用C++语言实现的,是虚拟机自身的一部分;
  • ExtClassLoader它负责加载<JAVA_HOME>/lib/ext目录下或者由系统变量-Djava.ext.dir指定位路径中的类库;
  • AppClassLoader它负责加载系统类路径java-classpath或-D
    java.class.path指定路径下的类库,也就是我们经常用到的classpath路径;
  • CommonClassLoader以及下边的都是Tomcat定义的ClassLoader。

 

mg电子游艺平台,Agent和相关的lib会放到AppClassLoader这一层去加载,利用Javasist做字节码的织入,所以Javasist的加载器就是AppClassLoader。

 

但是想改变的是Tomcat
WebClassLoader所加载的com.xxx.InvocationHandler这个类的Invoke方法,不同的ClassLoader之间的类是不能相互访问的,做字节码的变换并不需要这个类的实例,也不需要返回结果,所以可以通过Instrument
API拿到这个类加载器,并且可以根据类名称获取到这个类的字节码进行字节码变换。故障类Drill.class和变形后的com.xxx.InvocationHandler.class重新load到JVM中,完成了插桩操作。

mg娱乐游戏 9

以Dubbo为例说明下如何注入故障和解除故障:

 

mg娱乐游戏 10

 

Dubbo调用的注入过程

mg娱乐游戏 11

  • 服务A调用服务B在Client端的Proxy层做AOP;
  • 启动Agent并且生成一个Drill类invoke方法,抛出一个运行期异常;
  • 字节码变形:在代码第一行之前增加Drill.invoke();
  • 如果想变换异常类型,改变Drill类即可,换成Sleep 3s
    ClassRedifine之后会重新load到JVM完成故障类型的转化或者清除。

ag线上开户, 

遇到的问题

 

上边的方式貌似很完美的解决了问题,但是随着平台的使用业务线要对很多接口和方法同时进行故障演练,那么我们生成的Drill类里面就会有各种:

mg娱乐游戏 12

if method==业务线定义方法

 

do xxx

 

而且很容易拼接出错并且难以调试,只能把生成的类输出为文件,查看自己写的字节码编译成class文件是否正确,简直太痛苦了!

mg娱乐游戏 13

怎么解决?

 

新的架构需要解决三个问题:

 

  • 类隔离的问题:不要污染原生APP;
  • 事件的实现是可编译的;
  • 支持返回自定义的结果。

mg娱乐游戏 14

下一版本的Agent实现就产生了,把所有Agent的类和实现的功能抽象出来,放到一个自定义的AgentClassLoader里面,字节码注入到目标APP后可以通过反射的方式来调用具体的事件实现。

 

mg娱乐游戏 15

 

类加载模型

2、进行域服务器配置,点击运行Active Directory 域服务安装向导

  • 在BootstrapClassLoader里面注入Drill类作为通信类;
  • Agent会接受命令,根据事件类型对InvocationHandler做字节码变形,注入到目标APP;
  • 在目标APP调用的时候,调用Drill.invoke(targetJavaClass,targetJavaMethod,
    targetThis,
    args)传递过来几个参数(目标类、方法、实例、本身参数等);
  • Drill类通过反射的方式调用AppClassLoader里面的具体事件实现,比如BEFORE事件的执行代码,来完成注入后的逻辑执行。

mg娱乐游戏 16

Agent的整体架构

 

Agent的整体架构如图所示:

安装过程基本上是默认

mg娱乐游戏 17

mg娱乐游戏 18

  • 支持不同的模块的加入,比如Mock、流量录制、故障演练等;
  • 支持QSSO的权限验证;
  • 支持测试和仿真环境的无成本接入;
  • 支持自动部署不需要人工介入;
  • 支持各种故障命令的发布和执行、 超时 、异常以及数据的返回;
  • 支持方法级别的编织以及代码执行流程的编织;
  • 支持在任意的Web容器执行Agent代理。

 

四、如何使用

 

使用的好处是很明显的:

mg娱乐游戏 19

  • 零成本接入,无需申请任何资源;
  • 故障注入解除,无需重启服务;
  • 可以提供所有集群的拓扑结构。

 

但是如何才能正确使用呢?如下图所示:

 

mg娱乐游戏 20

此处建议选择新建域

使用方法

mg娱乐游戏 21

步骤一、输入AppCode;

 

步骤二、选择故障方法;

根级域需要自定义,这里我定义为wangzx-noc.com

步骤三、指定机器;

mg娱乐游戏 22

步骤四、注入故障。

 

五、总结

 

故障演练平台最核心的就是Agent组件——字节码编织框架,这个框架是纯Java的基于Instrumentation-API的AOP解决方案。它可以方便研发人员对于字节码插桩拆桩操作,可以很容易的实现故障演练、流量录制以及其他的应用模块。

mg娱乐游戏 23

作者:王鹏

 

来源:Qunar技术沙龙订阅号(ID:QunarTL)

 

dbaplus社群欢迎广大技术人员投稿,投稿邮箱:editor@dbaplus.cn返回搜狐,查看更多

mg娱乐游戏 24

责任编辑:

 

 

mg娱乐游戏 25

 

 

mg娱乐游戏 26

 

 

安装文件的路径默认即可

mg娱乐游戏 27

 

 

mg娱乐游戏 28

 

 

 

mg娱乐游戏 29

 

 

mg娱乐游戏 30

 

勾选以上选项后,在安装完成后服务器将会自动重启,重启完成后使用域管理员账户登录。

3、将所有节点服务器以及存储服务器均加入此域环境。(此处已一台节点服务器为例)

右击这台电脑—>点击属性。

mg娱乐游戏 31

 

mg娱乐游戏 32

 

mg娱乐游戏 33

 

mg娱乐游戏 34

 

修改完成后需要重启生效。重启服务器后使用域管理员账户登录。

    注:添加域的节点服务器的DNS设置必须设置为域服务器的管理IP(172.16.200.70)。所以在域服务器在安装角色时记得安装DNS角色服务。

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

4.2  iSCSI 虚拟存储配置

1、打开服务器管理器,点击添加角色和功能。

mg娱乐游戏 35

 

 

 

mg娱乐游戏 36

 

 

 

 

 

mg娱乐游戏 37

 

 

 

 

mg娱乐游戏 38

 

 

 

下面需要勾选需要安装的角色。

mg娱乐游戏 39

 

 

功能如无其他需求,直接点击下一步。

mg娱乐游戏 40

 

 

 

下面的安装过程均默认。

mg娱乐游戏 41

 

 

mg娱乐游戏 42

 

mg娱乐游戏 43

 

至此iSCS角色添加完成。

 

 

2、新建虚拟磁盘。

   点击任务找到新建iSCSI虚拟磁盘,需要创建两块虚拟磁盘,一块磁盘做为仲裁磁盘,另外一块磁盘作为共享存储磁盘。由于仲裁磁盘主要用于群集节点的仲裁,无需太大空间。共享磁盘根据需求自行设置。

mg娱乐游戏 44

 

    

 

    新建虚拟磁盘并选择存储位置。

mg娱乐游戏 45

 

    输入虚机磁盘名称,我这里的名称为Q

mg娱乐游戏 46

 

 

    分配虚拟磁盘大小,根据需求进行分配。

mg娱乐游戏 47

 

    新建iSCSI目标,也可以选择现有的iSCSI目标,我这里选择新建。

mg娱乐游戏 48

 

 

 

    目标名称和访问

mg娱乐游戏 49

 

    添加访问服务器

mg娱乐游戏 50

 

 

 

    添加发起程序ID,选择IP方式进行客户端访问限制。

mg娱乐游戏 51

 

    添加172.16.200.71、72两个IP地址作为iSCSI发起程序客户端IP地址。

mg娱乐游戏 52

 

 

    不启用验证服务

mg娱乐游戏 53

 

    创建信息确认

mg娱乐游戏 54

 

mg娱乐游戏 55

 

至此iSCSI 虚拟共享磁盘创建完成,根据以上操作再创建仲裁磁盘。

    创建完之后,在iSCSI列表中会出现对应iSCSI虚拟磁盘信息,如下:

mg娱乐游戏 56

 

 

 

 

 

3、客户端连接iSCSI虚拟磁盘设置

   点击工具—>点击iSCIS发起程序

mg娱乐游戏 57

 

 

    快速连接iSCSI目标,在此处输入172.16.200.73 目标IP(服务端管理IP)

mg娱乐游戏 58

 

 

 

    

     

     

    点击快速连接后会出现iSCSI服务器已共享的虚拟磁盘,点击连接即可。

mg娱乐游戏 59

     

 

mg娱乐游戏 60

 

 

 

 

 

 

 

 

 

 

 

 

 

    点击发现–>发现门户,根据需求添加门户IP,我这里没有设置。

mg娱乐游戏 61

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

mg娱乐游戏 62

 

 

 

 

 

 

 

 

 

 

     点击确定后发现在磁盘中多出的共享磁盘

mg娱乐游戏 63

 

     打开MPIO程序

mg娱乐游戏 64

 

 

 

 

 

 

 

 

 

    发现多路径,添加对iSCSI设备支持

mg娱乐游戏 65

 

 

 

 

 

 

 

 

 

 

 

 

    添加完成后需要重启iSCSI客户端服务器

mg娱乐游戏 66

 

点击“是”立即重启设备

 

 

 

 

 

 

 

 

 

 

     客户端加载磁盘后需要初始化

mg娱乐游戏 67

 

mg娱乐游戏 68

 

 

 

 

 

 

 

 

 

 

 

mg娱乐游戏 69

 

 

mg娱乐游戏 70

 

 

 

 

mg娱乐游戏 71

 

 

mg娱乐游戏 72

 

 

mg娱乐游戏 73

 

 

mg娱乐游戏 74

 

 

 

 

mg娱乐游戏 75

 

 

mg娱乐游戏 76

 

 

 

 

mg娱乐游戏 77

 

 

mg娱乐游戏 78

 

 

 

 

mg娱乐游戏 79

 

 

mg娱乐游戏 80

 

 

 

 

mg娱乐游戏 81

 

格式化完成后对磁盘进行读、写测试,这是的共享磁盘能进行读写。

 

 

3、对其MSHV-2节点进行虚拟磁盘挂载时,为了避免破坏集群磁盘,需要将MSHV-1节点关机后操作。

    对MSHV-2开机后查看磁盘管理,发现iSCSI虚拟磁盘未为脱机状态,这是只需要点击联机即可,并将磁盘盘符与MSHV-1节点分配一致,这是打开磁盘能看到,我们在MSHV-1测试读、写的文件,并能再次进行读、写测试。

     

     

     

     

     

     

     

     

     

     

     

     

     

     

 

4.3 配置故障转移集群服务

1、添加故障转移集群功能

    以MSHV-1节点为例,添加故障转移集群功能,该功能主备节点均需要做此操作。

打开:“服务器管理器”窗口,点击“添加角色和功能” ;

安装实例截图如下:

mg娱乐游戏 82

 

 

mg娱乐游戏 83

 

 

 

 

mg娱乐游戏 84

 

 

mg娱乐游戏 85

 

 

     

    功能选项中勾选“多路径I/O” 和“故障转移集群”

     

mg娱乐游戏 86

 

 

 

mg娱乐游戏 87

 

 

 

 

mg娱乐游戏 88

 

 

 

mg娱乐游戏 89

 

至此故障转移功能添加完成。

2、故障转移集群配置

   该配置只需要在两个节点中的一个进行配置即可。

   点击“工具”–>“故障转移集群管理器”

   实例配置截图如下:

mg娱乐游戏 90

 

 

mg娱乐游戏 91

 

 

 

   

    创建集群

mg娱乐游戏 92

 

 

 

mg娱乐游戏 93

 

 

 

 

    选择需要配置添加集群的服务器,这里可以手动输入服务器的FQDN,也可以通过浏览查看域中可用的服务器;

mg娱乐游戏 94

 

 

 

mg娱乐游戏 95

 

 

 

mg娱乐游戏 96

 

mg娱乐游戏 97

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

mg娱乐游戏 98

 

 

 

    点击下一步后出现“验证告警”可以选择是否进行配置验证测试,验证当前配置是否满足集群的要求,也可以选择不验证,不过为了安全,我们还是验证一下。该处等待时间较长,需要耐心等待。

mg娱乐游戏 99

 

 

 

 

mg娱乐游戏 100

 

 

 

mg娱乐游戏 101

 

 

 

 

 

 

mg娱乐游戏 102

 

 

 

 

mg娱乐游戏 103

 

 

 

 

 

mg娱乐游戏 104

 

 

 

 

mg娱乐游戏 105

 

    验证完后后查看结果,不过有的时候会出现个别错误,这时可以查看报告,检查是哪里出现问题,如果不是严重错误,也是可以继续进行群集配置的。

     

     

    验证完成后返回,这是选择不验证,继续下一步

mg娱乐游戏 106

 

 

    输入集群名称(自定义),定义集群IP

mg娱乐游戏 107

 

 

 

 

 

mg娱乐游戏 108

 

 

 

mg娱乐游戏 109

 

mg娱乐游戏 110

 

     OK,集群创建完成。

 

 

    集群创建完成后查看状态信息

    集群信息入下:

mg娱乐游戏 111

 

 

 

 

 

 

    磁盘信息如下:

mg娱乐游戏 112

 

 

 

mg娱乐游戏 113

 

 

 

4.4  验证集群

    配置完成后在对集群进行一次验证,避免配置过程中出现故障。

mg娱乐游戏 114

 

 

mg娱乐游戏 115

 

 

 

 

 

mg娱乐游戏 116

 

 

 

mg娱乐游戏 117

 

 

 

 

 

 

mg娱乐游戏 118

 

 

 

mg娱乐游戏 119

 

 

 

 

mg娱乐游戏 120

 

 

 

mg娱乐游戏 121

 

    查看验证结果无异常后,我们在配置高可用集群服务器。

 

 

 

 

 

    查看集群状态,当前的主服务器为MSHV-2

mg娱乐游戏 122

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

五、实验结果验证

5.1  验证故障转移

    目前主服务为MSHV-2,我先在存储节点测试虚IP以及两个节点的联通性,后将主服务关机,查看虚IP的联通性。测试结果入下:

    主服务器关机前测试结果:

mg娱乐游戏 123

 

    主服务器关机后测试结果:

mg娱乐游戏 124

 

    查看结果显示,可以看到节点 MSHV-2 服务器已经关机,网络不通,但是故障转移集群虚拟 IP 丢了一个包后依然可以联通。说明故障转移集群已经起到了作用。此时主服务主机已变为MSHV-1

mg娱乐游戏 125

 

5.2 高可用集群的验证

    配置一个分布式事务协调器为例,验证服务的高可用性。

    登陆到新建的集群,“角色”——>“配置角色”进行分布式事务协调器的配置;

mg娱乐游戏 126

 

 

 

mg娱乐游戏 127

 

 

 

 

 

 

mg娱乐游戏 128

 

 

 

mg娱乐游戏 129

 

 

 

 

 

 

 

mg娱乐游戏 130

 

 

 

mg娱乐游戏 131

 

 

 

 

 

mg娱乐游戏 132

 

 

 

mg娱乐游戏 133

 

至此分布式事务协调器配置完成,查看服务所云行的主节点为MSHV-2。

 

 

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    对新建的服务右击–>点击移动–>选择节点,将该服务移动到MSHV-1节点运行查看是否正常。对集群服务的高可用性进行验证。

mg娱乐游戏 134

 

mg娱乐游戏 135

 

mg娱乐游戏 136

 

 

    将服务正在运行的节点关机测试是否会自动迁移。

mg娱乐游戏 137

 

结果反馈当服务运行的主节点宕机后,服务会自动切换到另一台主机运行。

OK,大功告成!!!

该程序也客户安装其他服务。(例如Hyper-V、SQL-server)