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

对DBA而言,不需要域就可以搭建SQL Server AlwaysOn是Windows Server 2016中最令人兴奋的功能了,它不仅可以降低搭建的成本,而且还减少了部署和运维的工作量。

     上篇博客已给大家分享过:要在没有域的环境中搭建AlwaysOn需要两个步骤,

      1).搭建基于windows server 2016 工作组环境的故障转移集群;

      2).搭建AlwaysOn;

      步骤1已在上篇博客中介绍了,因此本文将分享AlwaysOn的搭建方法:

 

 

1.安装SQL Server 2016

    在所有节点上安装SQL Server 2016。

2.启用AlwaysOn功能

    在所有节点上启用AlwaysOn功能,方法:

    打开SQL Server配置管理器,在对应的SQL Server实例属性中,勾选【启用AlwaysOn可用性组】,如下图:

 

3.在每个节点上创建alwaysOn的通讯端点(镜像端点)

     在windows server 2016之前,配置端点的加密的方式有两种:域用户授权和证书加密,升级到windows server 2016后,如果不使用域搭建AlwaysOn,那么就只能选择证书加密的方式了。

     3.1创建一个共享目录,允许AlwaysOn的所有节点均可以读写该目录;

           共享目录用来存放端点通讯的证书,在后续的步骤中将会用到。示例为:\\WIN-JBRHIAJPMG2\file

     3.2创建端点

          为了方便,我把创建证书和安装证书的过程用两个存储来实现。(这个两个存储过程来自网上,不是我写的)

          3.2.1将如下两个存储过程在每个节点的SQL Server实例中执行一遍:

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 endpointSET @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

说明:

         CreateEndpointCert 接受2个参数,分别为共享路径和证书密码,其作用:创建证书,创建基于证书加密通讯的端点,备份证书到共享路径;

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

说明:

       InstallEndpointCert  接受3个参数,分别为主机名、共享路径(必须跟CreateEndpointCert的共享路径相同)和密码。其作用:在SQL Server中为每个节点(除自身外)创建一个对应的登录用户和数据库用户(为了便于管理),然后利用共享路径中证书来授予该数据库用户可以访问对应节点的端点;

 

3.2.2 创建端点

        首先依次在每个节点上执行CreateEndpointCert,创建证书,

        然后在每个节点上执行InstallEndpointCert,InstallEndpointCert的第一个参数就是主机名,也就是说,除了自身外,需要将其他所有节点的主机名作为参数都执行一次InstallEndpointCert。

 

说明:

  CreateEndpointCert 接受2个参数,分别为共享路径和证书密码,其作用:创建证书,创建基于证书加密通讯的端点,备份证书到共享路径;

  InstallEndpointCert  接受3个参数,分别为主机名、共享路径(必须跟CreateEndpointCert的共享路径相同)和密码(数据库用户的密码)。

 

4.新建可用组

     打开SSMS,登录到SQL Server,展开【AlwaysOn搞可用性】,根据向导创建AlwaysOn。

    4.1指定可用组名称

 

4.2选择数据库

      说明:在走AlwaysOn之前,数据库必须在完整模式下,且已经做过完整备份。

 

4.3指定副本,单击【添加副本】把所有的成员节点添加进来;

       4.3.1 添加副本

自动故障转移:运行在哪些节点间建立高可用(SQL Server 2016已经支持在3个节点了) 。

同步提交:AlwaysOn同步的模式,对应的还有异步模式,当选择了自动故障转移时,必须勾选同步提交;如想详细了解同步和异步模式的区别,可参考这个链接:http://www.cnblogs.com/i6first/p/4139670.html 。

可读辅助副本:当该节点为辅助副本时,能否接受只读请求以及以哪种方式接受只读请求(只读意向)。

 4.3.2配置端点

步骤3中创建的端点在这里可以查看到:

 4.3.3配置侦听器

4.4 选择数据同步的方式

       我选择的是完整,指定了一个共享目录,在后面安装环节中,主副本会把数据库备份到这个位置,然后辅助副本从此位置拿到备份文件后还原,已实现数据同步。

4.5后面的【验证】、【摘要】直接选择Next(下一步)即可。

      正常情况完成步骤4.5以后AlwaysOn就搭建完了,但我在两次实际验证过程中发现还需要继续后面的步骤,可能是我的环境的问题,请读者根据需要参考。

4.6将可用副本联机

     在下图所示的位置,右击脱机的节点(红色向下的标记),选择联接到可用性组;

时间: 2024-10-28 02:59:24

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

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

对DBA而言,不需要域就可以搭建SQL Server AlwaysOn是Windows Server 2016中最令人兴奋的功能了,它不仅可以降低搭建的成本,而且还减少了部署和运维的工作量.       该特性可以使用户不必额外准备一台或者两台(为了避免单点故障)AD域服务器,从而降低了部署的成本:对DBA而言,可以把更多的精力放在数据库上,而不需要去了解AD域的知识,特别是对MySQL和Oracle转型过来的DBA而言,这绝对是一个非常贴心的特性,要知道windows AD 域的复杂度足够用几

在Ubuntu环境中搭建nginx+php系统

在http://www.aliyun.com/zixun/aggregation/13835.html">Ubuntu环境中搭建nginx+php系统 1,安装nginx,执行以下命令,很快完成,不过目前apg-get方式安装默认是0.5.33的版本 sudo apt-get install nginx 配置文件默认安装位置: [quote]conf: /etc/nginx/nginx.conf bin:/usr/sbin/nginx vhost: /etc/nginx/sites-ena

在域信任环境中使用 Team Foundation Server (TFS 2013)

原文:在域信任环境中使用 Team Foundation Server (TFS 2013)   1. 用户情景和方案: XX公司的大部分软件产品通过软件外包的方式由开发商完成.为加强对软件开发的进度和质量管理,XX公司部署了一套基于微软TFS 2013的研发平台,并将这个平台与活动目录域test.local集成在一起,在 test.local中为所有软件外包人员创建了登陆账户. 但是XX公司内部已经部署了一套用于企业管理的活动目录域test2.local.为了避免在研发环境的域(test.lo

Ubuntu中搭建Nginx、PHP环境最简单的方法

 这篇文章主要介绍了Ubuntu中搭建Nginx.PHP环境最简单的方法,本文讲解的是使用apt-get工具安装Nginx.PHP环境,并讲解了基本配置,需要的朋友可以参考下     前言:百度出来的结果好坑爹,而且某些文章说别人坑爹,可他自己也坑爹.求业界良心啊.还是谷歌靠谱. 系统环境:Ubuntu 13 和 Linux Mint 15都通过. 默认安装的是nginx 1.2.5,php5.4.9 先安装: 代码如下: sudo apt-get install nginx php5-fpm

Win8.1系统处于域环境中如何设置自动开机

  在域环境中,Win8.1系统由于域组策略限制或是本地Windows安全策略设置错误,导致无法设置系统自动登录,具体症状为打开用户账户后无法查看到"要使用本计算机,用户必须输入用户名和密码"从而无法设置自动开机.下面小编就为大家介绍一下具体解决办法. 1.对于域组策略限制请联系网络管理员解决; 2.由于本地Windows 安全策略设置错误,我们可以通过重置该本地策略解决. 请依次打开控制面板用户帐户和家庭安全用户帐户,查看左侧是否有重置本地Windows 策略,如果有可以直接点击重置

如何在 Windows 10 中搭建 Node.js 环境?

[编者按]本文作者为 Szabolcs Kurdi,主要通过生动的实例介绍如何在 Windows 10 中搭建 Node.js 环境.文章系国内 ITOM 管理平台 OneAPM 编译呈现. 在本文中,笔者将展示如何在 Windows 10 中搭建 Node.js 环境.并且,作为检验,笔者会在新搭建的环境中运行自己正在努力的一个项目(该项目依赖于 koa, pg, amqplib 等模块). 请注意:本文的首要目的是为 Node.js 项目搭建开发者环境,而非运行某个项目.笔者随后会介绍如何部

opengl-OSG数字地球嵌入到QT5中,OSG的环境如何搭建?

问题描述 OSG数字地球嵌入到QT5中,OSG的环境如何搭建? 关于具体实现的代码可以参考kestiny的,他写了很多,很详细. 但是这里还没到那一步,我们得从下载osg和osgearth开始搭建环境. 我下了一个OSG包,里面有很多东西 里面有个帮助的txt,我点开看是教设置环境变量的,照着做好了. 在src文件夹下找到了帮助提到的两个编译包,解压 看名字应该一个是osg一个是osgearth 好了,现在有三个包了,一个是最大的OSG,另外两个是里面的osg和osgearth,我该用哪个进行O

Samba 系列(九):将 CentOS 7 桌面系统加入到 Samba4 AD 域环境中

这篇文章讲述了如何使用 Authconfig-gtk 工具将 CentOS 7 桌面系统加入到 Samba4 AD 域环境中,并使用域帐号登录到 CentOS 系统. 要求 1.在 Ubuntu 系统中使用 Samba4 创建活动目录架构 2.CentOS 7.3 安装指南 第一步:在 CentOS 系统中配置 Samba4 AD DC 1.在将 CentOS 7 加入到 Samba4 域环境之前,你得先配置 CentOS 系统的网络环境,确保在 CentOS 系统中通过 DNS 可以解析到域名

robotium-Android Studio中搭建Robotium环境

问题描述 Android Studio中搭建Robotium环境 新建工程,配好环境,运行时候报错: Test failed to run to completion. Reason: 'Instrumentation run failed due to 'org.xmlpull.v1.XmlPullParserException''. Check device logcat for details 是XML需要添加什么权限吗?刚学android菜鸟路过 新手上路,多谢指教. 解决方案 1:ma