从0开始搭建SQL Server AlwaysOn 第一篇(配置域控)

第一篇
http://www.cnblogs.com/lyhabc/p/4678330.html
第二篇
http://www.cnblogs.com/lyhabc/p/4682028.html
第三篇
http://www.cnblogs.com/lyhabc/p/4682986.html
第四篇
http://www.cnblogs.com/lyhabc/p/6136227.html
搭建非域AlwaysOn win2016+SQL2016
http://www.cnblogs.com/lyhabc/p/6498712.html
SQL Server AG集群启动不起来的临时自救大招
http://www.cnblogs.com/lyhabc/p/6953255.html

安装完之后别忘了还需要安装SSMS,这是坑爹的地方之二,干嘛不集成到SQL Server安装包里还要用户自己单独下载

下载地址:https://msdn.microsoft.com/en-us/library/mt238290.aspx?f=255&MSPPError=-2147217396

AlwaysOn是SQL Server2012推出的最新的高可用技术,用以取代原有的SQL Serve镜像

网上的 AlwaysOn可以说是非常的多,也可以说是非常的千篇一律,而且很多都是搭建非常顺利的,没有坑的,难道搭建 AlwaysOn真的可以这麽顺利吗??????

由于公司使用的是最新的Windows Server 2012 R2,网上用的都是Windows Server 2008 R2 ,2012 R2和2008 R2在故障转移集群界面菜单和AD 服务管理工具

已经有较大变化,有一些步骤跟Windows Server 2008 R2可能会不一样。

本文希望能够详细的在Windows Server 2012 R2 搭建 AlwaysOn的过程写出来,减少大家踩坑的机会 。

实验环境:

准备工作

软件准备

(1) SQL Server 2012

(2) Windows Server 2012 R2 DataCenter   64位

(3) VMware-workstation 10.0

操作系统:都是Windows Server 2012 R2   DataCenter  64位(win2012/win2012R2 只有DataCenter 版本才能使用故障转移集群)

当然,生产环境服务器最好每台服务器都配置两个网卡,一个网卡用作业务,一个网卡用作心跳,当然一个网卡也没有什么问题

至于各个计算机的计算机名我这里不做修改,在真实生产环境计算机名是需要修改的

计算机名

域控:win-felbg10uu7f

node1:win-7107jjj2bcc

node2:win-5pmsdhui0kq

故障转移集群VIP跟AlwaysOn 的VIP的作用是不一样的

故障转移集群VIP(192.168.66.170)是让你连接故障转移集群管理器的集群用的,而不是让你连接AlwaysOn

AlwaysOn 的VIP(192.168.66.171)是让你连接AlwaysOn 的

所以故障转移集群VIP跟AlwaysOn 的VIP不能一样!


步骤

下面使用step by step guide的方式来展示怎麽安装域控

注意:先把各台机器的防火墙关掉。

域控端

1、配置域控ip,ipv6去掉,因为DNS服务器就安装在域控上,所以首选DNS服务器填写:127.0.0.1 回环地址

2、安装AD域服务

安装AD域服务的同时,操作系统会同时安装好DNS服务器

3、点击服务器管理器右上角的小旗帜,弹出对话框,点击“将此服务器提升为域控制器”以提升为域控

4、进入AD域服务配置向导,设置域名 abc.com

5、设置DSRM密码为123456

默认林中的第一棵域树的根域的域控制器必须担当全局编录服务器和必须安装DNS服务,不能是只读域控制器

创建DNS委派,直接跳过,不设置

NetBIOS名称不需要设置,至于什么是NetBIOS名称,可以在本文最后的两本书中进行了解

AD DS数据库文件路径保持默认就可以了,当然将日志文件和数据库文件放在不同的磁盘有助提升性能,更多信息可以在本文最后的两本书中进行了解

6、安装完AD DS之后会自动重启服务器,重启服务器之后打开DNS管理器

可以看到域控制器win-felbg10uu7f.abc.com已经将主机名(win-felbg10uu7f)和IP地址(192.168.66.155)注册到DNS服务器内

可以看到动态更新已开启

在_tcp文件夹内,_ldap记录和_gc记录说明这台服务器已经正确注册为域控制器和担当全局编录服务器

注意:如果在_tcp文件夹内没有_ldap记录和_gc记录相关的记录,那么请重启Netlogon服务来重新注册

7、检查AD域服务和Netlogon服务是否正常启动

8、在AD用户和计算机里添加域用户DCADMIN,请务必记住DCADMIN的密码,因为后面第二篇和第三篇都需要用到DCADMIN这个域用户

注意:如果域控机器上默认的Administrator本地计算机账户没有被禁用的话,在安装完域控之后,Administrator本地账户会从本地的SAM本地账户移动到域账户(这时候本地账户已经不存在Administrator这个账户,除非将域控进行降级)

这时候其他非域控机器都可以利用Administrator域账户进行登录,但是我们一般不使用Administrator域账户,而是新建一个域用户来做,这里就是另外新建一个DCADMIN账户

详细可以查看《Windows Server2012系统配置指南》书

域用户DCADMIN创建完毕

9、将这个域用户加入到域计算机组和域管理员组

9、将系统自动更新关闭掉

win2016

客户端

1、设置客户端ip,ipv6去掉,注意要设置网关,禁用TCP/IP上的NetBIOS

2、加域,填写域名abc.com,并输入刚刚在 AD域用户(DCADMIN)和密码

加域之前最好在客户端先ping一下DNS(abc.com)和域控的IP,看能否ping通,如果ping不通,加域肯定不成功了,需要进一步排查为什麽ping不通

需要先检查一下防火墙,一般都是防火墙的问题

在客户端的网络和共享中心可以看到机器当前已经加入abc.com这个域网络

加域之后,在域控的DNS管理器里能看到新添加的机器的主机和IP地址

在AD用户和计算机里的Computers容器里也能看到新添加的机器

3、加域后客户端计算机会自动重启,重启后使用本地Administrator用户登录计算机,先不要用DCADMIN这个域用户来登录计算机

4、打开计算机管理-》本地用户和组,选择组,选中Administrators组,右键-》添加到组

点击添加

输入域用户(DCADMIN)和密码

这样DCADMIN域用户就有了这台客户端计算机的Administrator权限

5、将系统自动更新关闭掉

另一台客户端计算机的配置这里就不再叙述了,步骤都是一样的

最后在域控里查看DNS和AD Computers容器,两个节点都已经添加成功


总结

通过上面的步骤演示,在搭建AD DS服务的时候有一些地方是需要注意的,希望大家能够看清楚截图,一步一步进行配置,基本上就没有问题了

现在AlwaysOn可用性组已经完全支持 Windows Azure ,可以把辅助副本部署到 Windows Azure 上

希望通过这篇文章让大家体会到新一代高可用技术AlwaysOn的强大,下一篇是安装并设置故障转移集群

参考文章

AlwaysON – HADRON Learning Series: – How does AlwaysON Process a Synchronous Commit Request
https://blogs.msdn.microsoft.com/psssql/2011/04/01/alwayson-hadron-learning-series-how-does-alwayson-process-a-synchronous-commit-request/


2016-9-10补充

在开始本文的操作之前,大家需要留意主副本机器和各个辅助副本机器的扇区是否一致,如果扇区不一致,或者环境不一样有可能导致同步慢或IP冲突问题

AlwaysOn就会出现问题

在服务器上运行下面命令,D盘为SQL Server数据文件,日志文件所在盘符

fsutil fsinfo ntfsInfo  D:

NTFS对于大于2GB的分区,默认簇大小为8个扇区(4KB),分配单元默认是4096字节是因为内存页是4kb
簇==分配单元: windows7默认的分配单元是4096字节,那么一个6000字节的文件就需要两个分配单元,分配单元是windows读写文件的基本单位
逻辑扇区:512字节,操作系统将分配单元的读写请求划分为多个512字节大小,为了适应逻辑扇区的大小,然后写入到磁盘,其实就是操作系统做了一层转换为了适应逻辑扇区大小
物理扇区:512字节 ,物理磁盘读写的基本单位,旧磁盘是512字节,新磁盘(固态硬盘,固态硬盘的物理扇区和逻辑扇区都是模拟出来的,固态硬盘实际用的是块/页)是4kb

高级格式化:操作系统对文件系统盘符进行格式化,规划每分配单元/簇大小
低级格式化:存储厂家对物理存储硬件做的低级格式化,例如机械硬盘,规划每扇区大小,通常512字节

注意:逻辑扇区和物理扇区都是硬盘里的概念,不是操作系统的概念,而且物理扇区和逻辑扇区大小都是一样的

HDD的扇区是512字节,最小读写单位
SSD的块是4K,最小读写单位
扇区是HDD的概念,块是SSD的概念

这可能会让不少人误解,首先SSD的确是没有物理扇区的概念的,但是为了与HDD完全在接口层面兼容,所以SSD一样向操作系统提供了扇区参数,其次SSD都是以4K作为最低物理层面读写的最小单位,就算它向操作系统汇报512字节,实际上内部还是按照4K来读写,所以不对齐的情况下会导致跨物理存储区的读写而导致性能下降甚至于影响寿命。SSD到底向操作系统汇报是512还是4k纯粹是SSD的固件决定的,比如intel官方就提供了相关工具可以随便切换扇区数据 
整个来说,不管SSD的固件显示是512还是4k,分区的时候都应该按照4k对齐来分

为什么存在磁盘块/簇
读取方便:由于扇区的数量比较小,数目众多在寻址时比较困难,所以操作系统就将相邻的扇区组合在一起,形成一个块,再对块进行整体的操作。
分离对底层的依赖:操作系统忽略对底层物理存储结构的设计。通过虚拟出来磁盘块的概念,在系统中认为块是最小的单位。

簇和块的区别
通俗的来讲,在Windows下如NTFS等文件系统中叫做簇或分配单元;在Linux下如Ext4等文件系统中叫做块(block)。每个簇或者块可以包括2、4、8、16、32、64…2的n次方个硬盘的逻辑扇区
文件系统就是操作系统的一部分,所以文件系统操作文件的最小单位是块/簇。

块与页的关系
操作系统经常与内存和硬盘这两种存储设备进行通信,类似于“块”的概念,都需要一种虚拟的基本单位。所以,与内存操作,是虚拟一个页的概念来作为最小单位。与硬盘打交道,就是以块为最小单位
x86系统所有的内存以64K边界粒度, 4K页面大小分配,包括Linux默认4KB,Windows默认4KB

参考文章:
https://support.microsoft.com/en-us/kb/2510009
http://stackoverflow.com/questions/9465451/how-can-i-determine-the-sector-size-in-windows
https://blogs.msdn.microsoft.com/psssql/2011/01/13/sql-server-new-drives-use-4k-sector-size/
https://msdn.microsoft.com/en-us/library/windows/desktop/hh848035%28v=vs.85%29.aspx?f=255&MSPPError=-2147217396
http://ask.zol.com.cn/q/16407.html
http://www.cnblogs.com/diabloxl/p/4422120.html
https://www.chiphell.com/thread-1870391-1-1.html
https://www.cnblogs.com/valor-xh/p/6669897.html
http://www.dostor.com/article/111637957.html,这一篇最详细,其他文章可以不用看
https://www.cnblogs.com/findumars/p/5789460.html
https://post.smzdm.com/p/ag89zv97/
https://blog.csdn.net/qq_34228570/article/details/80209748

各个Windows版本对新旧磁盘物理扇区/块的支持情况,可以看到只有Windows2012或以上版本的操作系统才支持4K native(4K对齐),所以一定要用高版本的操作系统

3种硬盘扇区格式类型
512n——物理格式化和向主机呈现的逻辑扇区字节数均为512byte,早期的硬盘都是这样,原生512,512B native,逻辑扇区512,物理扇区4096;
512e——物理扇区大小为4096字节,逻辑上仿真为(8个)512字节扇区,为了兼容性的一种过渡,硬盘层面上的“欺骗”,逻辑扇区512,物理扇区4096;
4Kn——即原生4KB,物理和逻辑扇区字节数都是4KB,逻辑扇区4096,物理扇区4096。

京东IO卡为第一代产品,与目前最新采购的第三代产品,物理机器
第一代产品为512字节(兼容性512e),第三代产品为4KB
Node_A:第一代产品
Node_B:第三代产品

存储极客 | 4KB扇区硬盘来了,RAID、VMware兼容不?
这篇文章得出的结论
1、要真正支持4Kn对齐,那么,硬盘/存储设备必须要使用4Kn,然后操作系统的文件系统要感知得到4Kn,不能使用虚拟机,公有云厂商的云服务器因为大部分用的kvm,所以大部分都是512e
例子:最新的固态硬盘,默认都是4KB块/页,然后操作系统使用rhel6或以上,Windows2012R2或以上,然后要用物理机,不能用虚拟化
2、要真正支持512n对齐,那么,硬盘/存储设备必须要使用512byte,然后现在的文件系统都支持512byte,然后硬盘不能用固态硬盘,用机械硬盘或虚拟化
3、真正的原子写,符合对齐就是真正的原子写,比如 符合512n或4Kn,  更改Windows分配单元/簇或Linux的block与物理扇区对齐并不科学,如果硬盘使用的是512e,一个特殊例外是,IO卡不经过文件系统直接读写存储设备/硬盘的,也是原子写

https://blogs.msdn.microsoft.com/psssql/2013/05/15/sql-serverstorage-spacesvhdx-and-4k-sector-size/
Is this safe for SQL Server?

The answer is yes.  An I/O subsystem can return a larger sector size than actual, physical sector size as long as all reported values can be evenly divided by 512 bytes.
4096的块只要能被512整除就无问题
As the diagram below shows, SQL Server maintains parity on 512 byte boundaries, for the log, regardless of the reported sector size.   This allows SQL Server to detect a partial write (torn behavior.)   For example, if the system reported a sector size of 4K but the physical sector size was 512 bytes, the I/O subsystem is only guaranteed to flush to a 512 byte mark.   If the first 4, physical sectors are flushed (2K of the 4K aligned block) and a power outage occurs, SQL Server will be able to detect the entire 4K was not properly flushed.

Microsoft SQL Server IO Internals ppt下载地址

http://files.cnblogs.com/files/lyhabc/MicrosoftSQLServerIOInternals.pptx


关于Windows Server的SID

Secure ID即SID 安全标识符,是区分系统的重要标识,SID不仅代表机器本身的标识,还代表其他安全主体,

包括域计算机帐号,用户和安全组,具有同一个SID的服务器将会被视为一台机器,具有相同SID的计算机不能同时加入到一个域里。

SID会在安装好系统后在配置过程中生成,使用模板部署的云主机、虚拟机很容易发生SID重复问题,因此作为模板的虚拟机要想办法清除SID

在早期Windows Server里可以使用NewSID小工具清除系统已有的SID。但从Windows 2008开始这个工具不能使用,取而代之的是系统自带sysprep.exe

使用sysprep工具在关机选项里要选择关机,而不能选择重新启动,因为系统准备工具在清除完SID后,如果重新启动会给虚拟机生成新的SID,这样

起不到清除SID的效果

摘录自《软件定义数据中心 Windows Server SDDC 技术与实践》