一、优点

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. 05_Linux目录文件操作命令2_我的Linux之路

    这一节我们继续来学习Linux中对文件和目录的操作命令 mkdir 创建目录 mkdir (选项)(参数) 在Linux端可以使用mkdir来创建目录,如果你没有加其他的路径名,那么默认是在当前目录下 ...

  2. 【52ABP实战教程】0.3-- 从github推送代码回vsts实现双向同步

    需求 在之前的文章中"[DevOps]如何用VSTS持续集成到Github仓库" 我们有讲述如何将vsts中的代码编译推送到github中,这一篇我们来完善,如果有人给你开源项目推 ...

  3. maven的使用之一简单的安装

    首先,我们知道,在传统的项目中,我们会导入一堆的jar包,那样的话,我们会发现我们的jar包的大小已经占了整个项目大小的90%以上,甚至更多,而且,我们的jar包只能自己使用,如果 其他人想用的话,还 ...

  4. SQL Server数据库优化的10多种方法

    巧妙优化sql server数据库的几种方法,在实际操作中导致查询速度慢的原因有很多,其中最为常见有以下的几种:没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷). I/O吞吐量小, ...

  5. (第一章)对程序员来说CPU是什么

    这几天,看到一本书,<程序是怎么跑起来的>,觉得之前都没有完整的看完一本书,现在要从这本书开始,慢慢的培养自己写读书笔记的习惯,不能度过去就忘了. 学习是一个螺旋上升的过程,不要指望一下子 ...

  6. FreeMarker的用法

    freemark就是一个对静态页面上的标签进行动态解析.填充数据的一个框架. 语法(转:http://zhuyuehua.iteye.com/blog/1975251):  1. freemarker ...

  7. 05、NetCore2.0依赖注入(DI)之Web应用启动流程管理

    05.NetCore2.0依赖注入(DI)之Web应用启动流程管理 在一个Asp.net core 2.0 Web应用程序中,启动过程都做了些什么?NetCore2.0的依赖注入(DI)框架是如何管理 ...

  8. CentOS 7下Flannel安装与配置

    1. 安装前的准备 etcd 3.2.9 Docker 17.12.0-ce 三台机器10.100.97.236, 10.100.97.92, 10.100.97.81 etcd不同版本之间的差别还是 ...

  9. 用ECMAScript4 ( ActionScript3) 实现Unity的热更新 -- Demo分析

    如何创建工程 下载最新的Unity发布插件包. 打开Unity,新建一个项目 将插件包导入 在菜单中点击ASRuntime/Create ActionScript3 FlashDevelop HotF ...

  10. Redis实现分布式锁的正确姿势

    分布式锁一般有三种实现方式:1. 数据库乐观锁:2. 基于Redis的分布式锁:3. 基于ZooKeeper的分布式锁.本篇博客将介绍第二种方式,基于Redis实现分布式锁.虽然网上已经有各种介绍Re ...