一、优点

aways on的优点,a. 构建主从数据库,分摊单点数据库压力。b.可以减少数据同步时间,提升用户体验。c.可以实现高可用,自动平滑切换。

二、缺点

及时同步最多只能提交3台,及时同步会导致各服务器性能下降。数据写入只能主库写入。基于服务器故障转移群集服务,需要服务器相互之间信任,非域下,数据服务本身需要互相信任。

三、具体实现步骤(基于阿里云服务器 Windows Server 2016 数据中心GUI版本)

  1. 数据库服务器镜像设置。(建议与生产环境的配置一致(主要是内存))

为了方便多台服务器的配置,减少配置时间,一些公共的配置放在此处。

  1. 购买临时服务器,建议系统盘在60GB大小,减少允许过程中系统存储空间不足的情况。
  2. 安装集群和IIS。
  3. 修改计算机名后缀ankec.net。
  4. 安装SQL Server 2016数据库服务。
  5. 安装SSMS客户端。
  6. 创建系统管理员账号 admincluster,并设置为administrators组成员(也可以直接使用administrator账号来操作),设置sql服务的启动账户为该账户。
  7. 设置数据库服务的cpu和内存等配置。
  8. 创建数据库证书导入导出存储过程。(参看附件1)
  9. 创建数据库备份存储过程。(参看附件2)
  10. 参照十万并发设置设置服务器,并设置服务器连接超时时间。
  11. 设置群集管理、IIS、数据库客户端、数据库服务端配置等快捷方式到桌面或者任务栏。
  12. 重启服务器(防止服务器本身系统问题占用过多内存)。
  13. 打镜像服务。
  14. 释放临时服务器。
  15. 通过数据库服务器镜像购买主数据库服务器。根据需要额外挂载数据磁盘。建议是数据库文件大小的10倍以上。
    1. 建议密码保持不变。
    2. 建立共享文件夹,设置everyone读写权限。
    3. 在数据库层级测试共享权限。(可以备份一个简单库到共享文件路径的方式进行测试)
    4. 设置数据库服务器名。(只能在此处设置,具体代码参看附件3,设置后重启数据库服务)
  16. 通过数据库服务器镜像购买从数据库服务器。根据需要额外挂载数据磁盘。建议是数据库文件大小的10倍以上。(多台可以同时购买)
    1. 建议密码与主数据库服务器保持不变。
    2. 在数据库层级测试共享权限。(可以备份一个简单库到共享文件路径的方式进行测试)
    3. 设置数据库服务器名。(只能在此处设置,具体代码参看附件3,设置后重启数据库服务)
  17. 故障转移群集搭建
    1. 配置服务器hosts名映射。将各台服务器名称和局域网IP的映射关系添加到所有服务器hosts文件中去。例如: 计算机名fuwuqiming(ip:172.18.13.2)需要添加两条记录到各服务器hosts中 172.18.13.2 fuwuqiming  和 172.18.13.2 fuwuqiming.ankec.net。(具体添加cmd代码可以自己构建,也可以手动添加,具体代码可以参看附件4)
    2. 各台服务器之间相互ping一下对方的名称,确保可以正常ping通。
    3. 主数据库建立群集 servercluster,将各服务器添加到此集群中,添加时采用服务器名+后缀的方式进行添加。(只有添加到群集中后才能进行下一步)
    4. 在各台数据库配置中,设置服务的属性中的aways on的√,重启数据库服务。
    5. 设置各服务器数据库的默认存放路径。(重要,特别是从库必须要设置,否则后面没有机会处理)
    6. 导出各数据库服务器的数据库证书到主数据库服务器的共享文件夹。(各数据库上调用导出存储过程)
    7. 导入除了本数据库服务器的证书外,其它的数据库服务器的证书。
  18. 搭建数据库的aways on
    1. 主数据库上建立数据库(还原数据库也可以)。设置数据库的模式为 完整备份模式。
    2. 备份数据库。
    3. 在aways on 上右键创建aways on,并根据向导进行操作,加入从数据库,在最后列中选择是。并根据向导引导一直点击下一步一直到关闭完成。
    4. 设置主数据的代理任务和自动备份任务。

至此,aways on 的配置结束。整个配置过程必须按照顺序一步一步进行,不能随意调整顺序,如果调整可能会造成无法预知的错误。如果出错后不能解决,可以考虑还原系统的方式来初始化。

注意事项:

1. 数据库权限问题,可以使用administrator来解决。

2. 数据库证书导出前,必须保证可以访问共享文件夹,否则不可继续,一旦继续,则会出现无法解决的错误。

附录1:

导出证书

       
CREATE PROCEDURE CreateEndpointCert

 @ShareName SYSNAME ,

 @StrongPassword SYSNAME

AS BEGIN

--This must be executed in the context of Master

 IF (DB_NAME() <> 'master')

 BEGIN

  PRINT N'This SP must be executed in master.  USE master and then retry.'

  RETURN (-1)

 END

    DECLARE @DynamicSQL varchar(1000);

    DECLARE @CompName varchar(250);

 DECLARE @HasMasterKey INT;

    SELECT @CompName = CONVERT(SysName, SERVERPROPERTY('MachineName'));

-- Only create a master key if it doesn't already exist

 SELECT @HasMasterKey = is_master_key_encrypted_by_server from sys.databases where name = 'master'

 IF (@HasMasterKey = 0)

 BEGIN

 --Create a MASTER KEY to encrypt the certificate.

  SET @DynamicSQL = CONCAT('CREATE MASTER KEY ENCRYPTION BY PASSWORD = ' ,  QUOTENAME(@StrongPassword, ''''));

  EXEC (@DynamicSQL)

 END

--Create the certificate to authenticate the endpoint
SET @DynamicSQL = CONCAT('CREATE CERTIFICATE ', QUOTENAME(@CompName + '-Certificate'), ' WITH SUBJECT = ', QUOTENAME(@CompName, ''''),',EXPIRY_DATE=',QUOTENAME(20991231 ,'''') ) EXEC (@DynamicSQL); --Create the database mirroring endpoint authenticated by the certificate. SET @DynamicSQL = CONCAT('CREATE ENDPOINT Endpoint_Mirroring STATE = STARTED AS TCP (LISTENER_PORT = 5022, LISTENER_IP = ALL) FOR DATABASE_MIRRORING (AUTHENTICATION = CERTIFICATE ',QUOTENAME(@CompName + '-Cert'), ' , ENCRYPTION = REQUIRED ALGORITHM AES, ROLE = ALL)'); EXEC (@DynamicSQL); --Back up the certificate to a common network share for import into other nodes in the cluster SET @DynamicSQL = CONCAT('BACKUP CERTIFICATE ',QUOTENAME(@CompName + '-Cert'),' To FILE = ', QUOTENAME( @ShareName + '\SQL-' + @CompName + '.cer', '''')); EXEC (@DynamicSQL); END GO

导入证书

CREATE PROCEDURE InstallEndpointCert

    @CompName SYSNAME,

 @ShareName SYSNAME,

 @StrongPassword SYSNAME

AS BEGIN

    DECLARE @DynamicSQL varchar(1000);

    DECLARE @MyCompName varchar(250);

    SELECT @MyCompName = CONVERT(SysName, SERVERPROPERTY('MachineName'));

   --Don't need to create LOGINs for the local system

    IF (@MyCompName <> @CompName)

    BEGIN

        SET @DynamicSQL = CONCAT('CREATE LOGIN ', QUOTENAME (@CompName + '-Login'), ' WITH PASSWORD= ', QUOTENAME( @StrongPassword, ''''));

        EXEC (@DynamicSQL);

        SET @DynamicSQL = CONCAT('CREATE USER ', QUOTENAME( @CompName + '-User'), ' FOR LOGIN ', QUOTENAME(@CompName + '-Login'));

        EXEC (@DynamicSQL);

        SET @DynamicSQL = CONCAT('CREATE CERTIFICATE ', QUOTENAME(@CompName +'-Cert'), ' AUTHORIZATION ', QUOTENAME(@CompName +'-User'), ' FROM FILE = ', QUOTENAME(@ShareName + '\SQL-' + @CompName + '.cer' , ''''));

        EXEC (@DynamicSQL);

        SET @DynamicSQL = CONCAT('GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO ', QUOTENAME(@CompName +'-Login'));

        EXEC (@DynamicSQL);

 END

END

GO

附录2:

附录3:

修改数据库名称,修改后要重启服务

if serverproperty('servername')   <>   @@servername   

begin   

    declare   @server   sysname   

    set   @server   =   @@servername    

    exec   sp_dropserver   @server   =   @server 

    set   @server   =   cast(serverproperty('servername')   as   sysname)   

    exec   sp_addserver   @server   =   @server   ,   @local   =   'LOCAL'   

END 

查询名称是否一致

use master 

go 

select @@servername 

select serverproperty('servername')

附录4:

写入hosts命令:

echo 172.18.12.153 iZiig0d4mlg0ksZ >> C:\Windows\System32\drivers\etc\hosts

附录5:

十万服务器并发设置

服务器设置:C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\machine.config

<processModel enable="true" maxWorkerThreads="100" maxIoThreads="100" minWorkerThreads="50" minIoThreads="50" requestQueueLimit="100000"/>

在%systemroot%\System32\inetsrv\config\applicationHost.config中可以查看到该设置:

<serverRuntime appConcurrentRequestLimit="100000" />

服务器设置set.bat 内容:

echo "开始设置"

reg add HKLM\System\CurrentControlSet\Services\HTTP\Parameters /v MaxConnections /t REG_DWORD /d 

reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\HTTP\Parameters /v MaxFieldLength /t REG_DWORD /d 

reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\HTTP\Parameters /v MaxRequestBytes /t REG_DWORD /d 

reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters /v MaxUserPort /t REG_DWORD /d 

reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters /v TcpTimedWaitDelay /t REG_DWORD /d 

net stop http  & net start http & iisreset

echo "设置结束"

参看链接:

如何在没有域的环境中搭建AlwaysOn(一)

http://www.cnblogs.com/i6first/p/6040363.html

如何在没有域的环境中搭建AlwaysOn(二)

http://www.cnblogs.com/i6first/p/6047538.html

ClassLink迁移示例(链接vpc和经典网络)

https://help.aliyun.com/document_detail/57949.html?spm=5176.doc58095.6.604.5QiNT1

https://help.aliyun.com/document_detail/55051.html

SQL Server 2016 简体中文企业版(数据库服务安装程序)

http://tieba.baidu.com/p/4675269271

下载 SQL Server Management Studio 17.2(数据库客户端)

https://docs.microsoft.com/zh-cn/sql/ssms/download-sql-server-management-studio-ssms

十万连接配置

http://www.cnblogs.com/dudu/archive/2013/06/08/iis_webserver_settings.html

http://www.cnblogs.com/dudu/archive/2009/11/10/1600062.html

http://www.jb51.net/article/36073.htm

SQL Server 2016 非域Aways On环境搭建的更多相关文章

  1. 第三篇——第二部分——第四文 配置SQL Server镜像——非域环境

    原文:第三篇--第二部分--第四文 配置SQL Server镜像--非域环境 本文为非域环境搭建镜像演示,对于域环境搭建,可参照上文:http://blog.csdn.net/dba_huangzj/ ...

  2. 配置SQL Server 2016无域AlwaysOn(转)

    Windows Server 2016 以及 SQL Server 2016出来已有一段时间了,因为Windows Server 2016可以配置无域的Windows群集,因此也能够以此来配置无域的S ...

  3. (转)在SQL Server 2016,Visual Studio 2017环境下,连接数据库屡屡失败,在connectionString上出的问题

    适用情景: 1,ServerVersion出了问题,“SqlCnt.ServerVersion”引发了类型“System.InvalidOperationException”的异常 2,在String ...

  4. SQL Server 2016 + AlwaysOn 无域集群

    目录 AlwaysOn 搭建 WSFC 配置计算机的 DNS 后缀 安装故障转移集群 验证集群 创建集群 创建文件共享见证 配置 AlwaysOn 新建可用性组 创建侦听器 可读副本的负载均衡 主角色 ...

  5. Sql server 2016 Always On 搭建Windows集群配置

    .安装WSFC群集组件 1)打开服务器管理器,选择“功能”,在右边窗口中点击“添加功能”. 2)在添加功能向导中,勾选“故障转移群集”,点击“下一步”. 3)在“确认安装选择”页面中,点击“安装”,进 ...

  6. windows server2012 安装SQL SERVER 2016环境监测出错

    Windows Server 2012 R2 安装SQL Server 2016 顺序为:KB2919442 ——> KB2919355 ——> SQL Server 2016 并且还要安 ...

  7. sql server 2016 AlwaysOn实现无域高可用全教程

    一.简介环境:小编使用的服务器是windows server 2016(系统服务器) + sql server 2016(数据库服务器)(windows server 2016 + sql serve ...

  8. 数据库技术丛书:SQL Server 2016 从入门到实战(视频教学版) PDF

    1:书籍下载方式: SQL Server2016从入门到实战 PDF 下载  链接:https://pan.baidu.com/s/1sWZjdud4RosPyg8sUBaqsQ 密码:8z7w 学习 ...

  9. 超详细SQL SERVER 2016跨网段和局域网发布订阅配置图解和常见问题

    原文:超详细SQL SERVER 2016跨网段和局域网发布订阅配置图解和常见问题 转载标明出处:http://blog.csdn.net/u012861467 前方高能,要有点耐心,图片较多,注意在 ...

随机推荐

  1. leetcode算法:Island Perimeter

    You are given a map in form of a two-dimensional integer grid where 1 represents land and 0 represen ...

  2. python 报障系统(完)

    python 报障系统(完) 一.报障系统原理: 原理: 1. 简单管理 2. 角色多管理(权限) a. 登录 session放置用户信息(检测是否已经登录) session放置权限信息(检测是否有权 ...

  3. python——函数

    python--函数 1.介绍: 在过去的十年间,大家广为熟知的编程方法无非两种:面向对象和面向过程,其实,无论哪种,都是一种编程的规范或者是如何编程的方法论.而如今,一种更为古老的编程方式:函数式编 ...

  4. spark算子:partitionBy对数据进行分区

    def partitionBy(partitioner: Partitioner): RDD[(K, V)] 该函数根据partitioner函数生成新的ShuffleRDD,将原RDD重新分区. s ...

  5. linux添加超级用户

    创建super账号 useradd testuser 创建用户testuser passwd testuser 给已创建的用户testuser设置密码 如果需要让此用户有root权限,执行命令: ro ...

  6. Java高级篇(三)——JDBC数据库编程

    JDBC是连接数据库和Java程序的桥梁,通过JDBC API可以方便地实现对各种主流数据库的操作.本篇将介绍一下如何使用JDBC操作数据库(以MySQL为例). 一.JDBC JDBC制定了统一访问 ...

  7. further occurrences of HTTP header parsing errors will be logged at DEBUG level.错误

    今天进行项目测试的时候出现了further occurrences of HTTP header parsing errors will be logged at DEBUG level.错误,查了半 ...

  8. [C#]设计模式-抽象工厂-创建型模式

    介绍了简单工厂与工厂方法之后,现在我们来看一下工厂三兄弟的最后一个 -- 抽象工厂. 那什么是抽象工厂呢? 抽象工厂模式(Abstract Factory Pattern):提供一个创建一系列相关或相 ...

  9. 使用Remix编译和部署以太坊智能合约

      Remix 是一個开源的 Solidity 智能合约开发环境,提供基本的编译.部署至本地或测试网络.执行合约等功能.Solidity 是 以太坊Ethereum 官方设计和支持的开发语言,专门用于 ...

  10. JS基本数据类型(typeof的返回结果)

    number(Infinity/NaN) string boolean function object(null.各种值装箱对象.内置对象.自定义对象) undefined 判断对象是否为某个[类/构 ...