一、Msdtc 的描述及使用方法
Msdtc 在就是windows中的一个服务,称为分布式事务处理服务。它帮助我们实现分布式数据库服务器之间集合事务处理,即远程异地事务处理功能,例如:有多个SQL SERVER 服务器,我们要让它互相执行更新操作,但又要保证事务的完整性,就要可以开启msdtc功能进行实现:
SqL server 分布式事务脚本举例:
{
Set XACT_ABORT on
Being tran
Insert into [远程机器ip].databaseName.dbo.tableName(id,name )
Select ‘1’,’远程’
Insert into tablename(id,name)
Select ‘1’,’本地’
COMMIT
}
这个语句,启动了分布式事务, 保证远程数据库服务器和本地数据库都要插入一条数据,要么都插入,要么谁都不插入,保证数据的一致性。
二、Msdtc的配置:
网上写的很详细,我这里就不一一累述了
参考链接:
http://www.cnblogs.com/ryanding/archive/2010/07/17/1779668.html
三、RDS不支持的原因:
1、 msdtc 服务启动,是依赖于RPC服务的,该服务需要开启135端口,而我们现在链路层在转发vip时,没有考虑135端口包的转发。另外135端口是一个不建议开启的端口,在黑客有链接用户名、密码时可以远程直接通过该端口控制dbnode节点的,在没有用户名密码的情况也可以通过135端口,获取服务器的目录结构、用户名、共享目录等信息,这些信息如果被黑客获取,将是对RDS是致命的。这个原因跟安全专家林淼进行确认过的。
2、 msdtc 设置时需要客户端与服务器端都要配置,通过NT Authority\Network Service进行远程访问,而且不做验证。Network Service 帐户是一个内置帐户,比 Users 组的成员拥有更多的对资源和对象的访问权限。相当于服务器的操作系统级别权限,开放给了一个客户端(或者是用户)
四、 建议解决方案:
1、 暂时的处理该需求的方法,建议用户在应用端实现。
2、 后期可以考虑让用户购买两个RDS,来做分布式。这样是两个RDS主机之间相互暴露,而对用户(客户端)没有直接访问dbnode节点权限的问题。但需要现有的RDS考虑两件事情,一是考虑支持别名访问或者真实ip暴露给用户的问题 ,二是配置所有节点的msdtc服务。