一、优点

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. python爬虫requests 下载图片

    import requests # 这是一个图片的url url = 'http://yun.itheima.com/Upload/Images/20170614/594106ee6ace5.jpg' ...

  2. jenkins创建multibranch pipeline

    参考以下文章进行实践: https://jenkins.io/doc/pipeline/tour/hello-world/#what-is-a-jenkins-pipeline (看见一个介绍的还不错 ...

  3. VCS使用学习笔记(1)——Verilog相关的仿真知识

    本文主要学习Verilog的仿真特性,以及仿真器对Verilog的处理,算是对Verilog知识的增量学习.本文内容与我的另一篇博文(http://www.cnblogs.com/IClearner/ ...

  4. python网络编程基础(一)

    一.C/S架构 客户端/服务端架构 二.OSI七层架构 七层模型,亦称OSI(Open System Interconnection)参考模型,是参考模型是国际标准化组织(ISO)制定的一个用于计算机 ...

  5. 给定了经纬度的一张my_latlng表,和一个my_grid表,怎么实现my_latlng表回mygrid中的id?

    场景: 假设我们拥有一个拥有了一系列经纬度的表my_latlng(lat string,lng string)表,还有一张给定的栅格表my_grid(gridid bigint,centerlng d ...

  6. 在CentOS 7+ 安装Kubernetes入门

    TL;DR; 科学上网,科学上网,科学上网,重要的事情说三次.如果不会科学上网,这篇文章就没有看下去的意义.作为一个技术人员如果不愿意折腾,很难有所作为.作为一个单纯的技术人员,最好把心思放在技术上, ...

  7. 如何在Shell读取文件并赋值

    sys_info=$(cat /usr/local/sysconfig.txt)var=`echo   $sys_info   |   awk   -F ', '   '{print   $0} '  ...

  8. 10_Python函数方法加深_Python编程之路

    上节课已经简单的跟大家讲了如何定义一个方法,但是并没有深入去讲,这一节我们继续来学习定义方法中需要注意的几点 默认参数 前面我们讲到定义一个方法时是可以传递参数的,除了这个功能,实际上python在定 ...

  9. 从三个开源项目认识OpenFlow交换机 - OVS

    在SDN/NFV的网络革新技术浪潮的引领下,催生了诸多数据面开源方案的诞生.业界知名度较高的有OVS(Open vSwitch).FD.io (Fast Data I/O).ODP(Open Data ...

  10. [Codeforces 863D]Yet Another Array Queries Problem

    Description You are given an array a of size n, and q queries to it. There are queries of two types: ...