Azure上搭建AD RMS环境系列二 -- RMS群集安装及内网测试

Azure上搭建AD RMS环境系列二

--RMS群集安装及内网测试

现有的环境中,计划起两台RMS虚机做群集,因此需要再起一台SQL服务器作为两台RMS服务器的数据库,而无法使用windows内置的数据库。这边由于架构相对简单,因此使用单台SQL服务器作为数据支撑。由于RMS服务器添加的数据库都需要基于虚机的主机地址或别名,因此无法使用AzurePaaS层的SQL数据库服务。

除去需要准备SQL数据库准备群集,还需要在DC上建立一个用户作为RMS角色的服务账号。接下来给出基本的SQL服务器的安装步骤及部分截图:
   
首先,需要将当前登录的域用户添加到本地管理员:

  之后需要起NET3.5的框架服务,因为是独立安装该项服务,需要给出安装地址:

   安装SQL Server2012 enterprise版本,点击new SQL Server stand-aloneinstallation or add feature to an existing installation,之后根据提示一步步点击下一步,并在feature selection部分勾选以下这些特性:

之后继续一系列下一步,在DatabaseEngine Configuration稍作停留,点击加入当前用户作为SQL服务器的管理员账户:

继续一路下一步直到安装完成:

接下里我们在RMS1RMSFULL的虚机中起第一台RMS服务器,首先将证书添加到虚机中,这边我使用的是通配符证书,以此为例,首先双击证书,选择Local Machine

之后将证书添加到Personal的文件夹中;点击OK,完成证书添加,之后可以到IIS或者控制台中验证证书是否添加成功:

紧接着开始添加RMS角色,在建立角色的过程中,需要注意的是,在Role Service部分,不要勾选联合身份验证(IdentityFederation Support,虽然我们之后需要起ADFS角色,但本质上,由于国内AAD服务的功能限制,我们不推荐在启用ADFS服务,将本地AD同步到云端后,再在云端添加用户的操作,这样无法达到公司内部人员和设备统一管理的目的。因此我们只是将本地用户同步到云端来使用Office 365,并不涉及两个不同AD域用户间的受信及通讯保护的功能。

接下来我们对RMS进行配置,在选择数据库时,添加之前起的SQL01服务器,并且选择默认的数据库实例:

接着将之前添加的服务账号添加到此处作为服务账号:

之后的加密模式,推荐使用加密模式2,如果公司存在XP系统,则应该加密模式1,如果存在Win7客户端,也推荐使用加密模式1,不然需要安装补丁Windows6.1-KB2627273



添加群集地址时,选择添加SSL加密形式,并设置群集名称:


    之前添加过的二级域名证书或者通配符证书会在此处显示:
     之后一路点下去,进行安装:

第一台RMS服务器安装完成。

现在将第二台RMS服务器加入到群集中,按照第一台RMS服务器方式添加RMS的角色,并进入配置界面,这边选择加入已有AD RMS群集:

 接着配置数据库:

接着把服务器加入群集,并输入群集的群集密码(cluster key),这里需要点击specify重新输入服务账号:

一路点击下去后进行安装:

安装完毕后,先注销两台服务器,重新登录后,才能在服务器上管理AD RMS


之后在域控的DNS里添加对应的两条A记录指向该项服务,通过DNS轮询来实现最简单的高可用,完成配置:

紧接着我们在内网对RMS服务进行验证,首先我们到AD RMS的管理界面中,将改网站尝试在域控服务器中进行访问:

如果跳出以下界面,显示需要输入用户名和密码,则说明服务可行:

之后我们通过word来做服务可用性的验证,由于目前还未给域内用户分配Office Pro Plus套件的许可证,这里用office 2010 pro plus版本来进行验证。同样我们在域控服务器上安装此版本来做验证:

在信息中,选择保护文档中的限制访问,会弹出以上的对话框,这里分别对两位域内成员进行读取权限及更改权限的设置:

这里以测试账户"qunl"为例,这里给他设置了更改的权限,单机页面上端的查看权限,就可以看到该文档当前用户的权限:

接下来,我们将会在此基础上添加AzureAD Connector以及ADFS服务器来给AD用户分配许可证并将对于文件的保护在外网的非域客户端进行验证。

 

文末彩蛋:

如果在配置完两台AD RMS服务器后,即使重新登录了账号,发现AD RMS的管理界面跳出如下报错:

不用慌,出现这个的原因应该是IIS服务的问题,建议重启IIS服务(就是重启这台AD RMS服务器),之后就能打开管理界面并看到群集中有两台AD RMS服务器,接着就可以双击界面中的URL来初步验证服务是否可用:



jcreator测试rms不通过

04-20

在api中看到这样一个例子,想看下结果,所以把它拿到jcreator中运行,在options中添加了cldc1.0.jar和midp1.0之类包路径,可是运行通不过.是不是环境不行.rn import javax.microedition.rms.*;rnimport java.io.DataOutputStream;rnimport java.io.ByteArrayOutputStream;rnimport java.io.IOException;rnimport java.io.ByteArrayInputStream;rnimport java.io.DataInputStream;rnimport java.io.EOFException;rnrn/**rn * A class used for storing and showing game scores.rn */rnpublic class RMSGameScoresrn implements RecordFilter, RecordComparatorrnrn /*rn * The RecordStore used for storing the game scores.rn */rn private RecordStore recordStore = null;rnrn /*rn * The player name to use when filtering.rn */rn public static String playerNameFilter = null;rnrn /*rn * Part of the RecordFilter interface.rn */rn public boolean matches(byte[] candidate)rn throws IllegalArgumentExceptionrn rn // If no filter set, nothing can match it.rn if (this.playerNameFilter == null) rn return false;rn rnrn ByteArrayInputStream bais = new ByteArrayInputStream(candidate);rn DataInputStream inputStream = new DataInputStream(bais);rn String name = null;rn rn try rn int score = inputStream.readInt();rn name = inputStream.readUTF();rn rn catch (EOFException eofe) rn System.out.println(eofe);rn eofe.printStackTrace();rn rn catch (IOException eofe) rn System.out.println(eofe);rn eofe.printStackTrace();rn rn return (this.playerNameFilter.equals(name));rn rnrn /*rn * Part of the RecordComparator interface.rn */rn public int compare(byte[] rec1, byte[] rec2)rn rn // Construct DataInputStreams for extracting the scores fromrn // the records.rn ByteArrayInputStream bais1 = new ByteArrayInputStream(rec1);rn DataInputStream inputStream1 = new DataInputStream(bais1);rn ByteArrayInputStream bais2 = new ByteArrayInputStream(rec2);rn DataInputStream inputStream2 = new DataInputStream(bais2);rn int score1 = 0;rn int score2 = 0;rn try rn // Extract the scores.rn score1 = inputStream1.readInt();rn score2 = inputStream2.readInt();rn rn catch (EOFException eofe) rn System.out.println(eofe);rn eofe.printStackTrace();rn rn catch (IOException eofe) rn System.out.println(eofe);rn eofe.printStackTrace();rn rnrn // Sort by scorern if (score1 < score2) rn return RecordComparator.PRECEDES;rn rn else if (score1 > score2) rn return RecordComparator.FOLLOWS;rn rn else rn return RecordComparator.EQUIVALENT;rn rn rnrn /**rn * The constructor opens the underlying record store,rn * creating it if necessary.rn */rn public RMSGameScores()rn rn //rn // Create a new record store for this examplern //rn try rn recordStore = RecordStore.openRecordStore("scores", true);rn rn catch (RecordStoreException rse) rn System.out.println(rse);rn rse.printStackTrace();rn rn rnrn /**rn * Add a new score to the storage.rn *rn * @param score the score to store.rn * @param playerName the name of the play achieving this score.rn */rn public void addScore(int score, String playerName)rn rn //rn // Each score is stored in a separate record, formatted withrn // the score, followed by the player name.rn //rn int recId; // returned by addRecord but not usedrn ByteArrayOutputStream baos = new ByteArrayOutputStream();rn DataOutputStream outputStream = new DataOutputStream(baos);rn try rn // Push the score into a byte array.rn outputStream.writeInt(score);rn // Then push the player name.rn outputStream.writeUTF(playerName);rn rn catch (IOException ioe) rn System.out.println(ioe);rn ioe.printStackTrace();rn rnrn // Extract the byte arrayrn byte[] b = baos.toByteArray();rn // Add it to the record storern try rn recId = recordStore.addRecord(b, 0, b.length);rn rn catch (RecordStoreException rse) rn System.out.println(rse);rn rse.printStackTrace();rn rn rnrn /**rn * A helper method for the printScores methods.rn */rn private void printScoresHelper(RecordEnumeration re)rn rn try rn while(re.hasNextElement()) rn int id = re.nextRecordId();rn ByteArrayInputStream bais = new ByteArrayInputStream(recordStore.getRecord(id));rn DataInputStream inputStream = new DataInputStream(bais);rn try rn int score = inputStream.readInt();rn String playerName = inputStream.readUTF();rn System.out.println(playerName + " = " + score);rn rn catch (EOFException eofe) rn System.out.println(eofe);rn eofe.printStackTrace();rn rn rn rn catch (RecordStoreException rse) rn System.out.println(rse);rn rse.printStackTrace();rn rn catch (IOException ioe) rn System.out.println(ioe);rn ioe.printStackTrace();rn rn rnrn /**rn * This method prints all of the scores sorted by game score.rn */rn public void printScores()rn rn try rn // Enumerate the records using the comparator implementedrn // above to sort by game score.rn RecordEnumeration re = recordStore.enumerateRecords(null, this, rn true);rn printScoresHelper(re);rn rn catch (RecordStoreException rse) rn System.out.println(rse);rn rse.printStackTrace();rn rn rnrn /**rn * This method prints all of the scores for a given player,rn * sorted by game score.rn */rn public void printScores(String playerName)rn rn try rn // Enumerate the records using the comparator and filterrn // implemented above to sort by game score.rn RecordEnumeration re = recordStore.enumerateRecords(this, this, rn true);rn printScoresHelper(re);rn rn catch (RecordStoreException rse) rn System.out.println(rse);rn rse.printStackTrace();rn rn rnrn public static void main(String[] args)rn rn RMSGameScores rmsgs = new RMSGameScores();rn rmsgs.addScore(100, "Alice");rn rmsgs.addScore(120, "Bill");rn rmsgs.addScore(80, "Candice");rn rmsgs.addScore(40, "Dean");rn rmsgs.addScore(200, "Ethel");rn rmsgs.addScore(110, "Farnsworth");rn rmsgs.addScore(220, "Farnsworth");rn System.out.println("All scores");rn rmsgs.printScores();rn System.out.println("Farnsworth's scores");rn RMSGameScores.playerNameFilter = "Farnsworth";rn rmsgs.printScores("Farnsworth");rn rnrn

没有更多推荐了,返回首页

私密
私密原因:
请选择设置私密原因
  • 广告
  • 抄袭
  • 版权
  • 政治
  • 色情
  • 无意义
  • 其他
其他原因:
120
出错啦
系统繁忙,请稍后再试