GVKun编程网logo

SQL Server 2016 Alwayson新增功能图文详解(sql server 2016 always on)

17

在本文中,我们将带你了解SQLServer2016Alwayson新增功能图文详解在这篇文章中,我们将为您详细介绍SQLServer2016Alwayson新增功能图文详解的方方面面,并解答sqlse

在本文中,我们将带你了解SQL Server 2016 Alwayson新增功能图文详解在这篇文章中,我们将为您详细介绍SQL Server 2016 Alwayson新增功能图文详解的方方面面,并解答sql server 2016 always on常见的疑惑,同时我们还将给您一些技巧,以帮助您实现更有效的AlwaysOn 进阶 Level 1:What is "SQL Server AlwaysOn"?、Alwayson(1)——SQLServer2014的安装要求、Docker部署SQL Server 2019 Always On集群的实现、MS SQL SERVER2016 AlwayOn 安装说明

本文目录一览:

SQL Server 2016 Alwayson新增功能图文详解(sql server 2016 always on)

SQL Server 2016 Alwayson新增功能图文详解(sql server 2016 always on)

概述

sqlServer2016发布版本到现在已有一年多的时间了,目前最新的稳定版本是SP1版本。接下来就开看看2016在Alwyson上做了哪些改进,记得之前我在写2014Alwayson的时候提到过几个需要改进的问题在2016上已经做了改进。

一、自动故障转移副本数量

在2016之前的版本自动故障转移副本最多只能配置2个副本,在2016上变成了3个。

说明:自动故障转移增加到三个副本影响并不是很大不是非常的重要,多增加一个故障转移副本也意味着你的作业也需要多维护一个副本。重要程度(一般)。

二、数据同步首选项

在2016之前在添加辅助副本数据库时只有三个同步首选项可以选择分别是:1.完整数据库和日志备份,2仅连接,3跳过初始数据同步;2016增加了“自动种子设定”,发现自动种子设定也是同步类似备份还原的方式进行同步

说明:选择自动种子设定就不需要指定一个共享的文件夹路径用于存储备份还原数据。重要程度(一般)。

三、Alwayson运行状态监测

在2016之前只能针对整个副本进行状态监测,如果有多个数据库进行同步其中一个数据库存在问题无法访问不会触发副本故障转移。2016增加了针对数据库级别的运行状态监测,如果数据库存在问题无法访问时会自动故障转移。

说明:针对数据库级别的检查非常的有必要。重要程度(非常重要)

四、同时支持多个只读副本提供读操作

在2016之前通过监听器同时只能存在一个只读副本提供只读操作,只有首选只读副本故障了才会路由到下一个只读副本。而2016可以同时配置多个首选只读副本来分担只读操作,做到了真正的读写分离和负载均衡。2016的只读路由配置如下:

rush:sql;"> ALTER AVAILABILITY GROUP [Alwayson21] MODIFY REPLICA ON N'HD21DB01' WITH (PRIMARY_ROLE (READ_ONLY_ROUTING_LIST=(('HD21DB02','HD21DB03','HD21DB04'),'HD21DB01'))); ALTER AVAILABILITY GROUP [Alwayson21] MODIFY REPLICA ON N'HD21DB02' WITH (PRIMARY_ROLE (READ_ONLY_ROUTING_LIST=(('HD21DB01','HD21DB02')));

说明:可以发现首先只读副本平均分摊了只读的压力。重要程度(非常重要)

具体配置可以参考我之前写过的读写分离配置文章:

后面的两个新增功能非常的实用,这也是2016之前版本的alwayson急需改善的两个很重要的功能,所以建议有条件可以升级的建议升级到2016。

总结

以上所述是小编给大家介绍的sql Server 2016 Alwayson新增功能图文详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对小编网站的支持!

AlwaysOn 进阶 Level 1:What is

AlwaysOn 进阶 Level 1:What is "SQL Server AlwaysOn"?

By Perry Whittle,2016/02/24(首次发布:2014/09/24)

关于系列

本文属于进阶系列:Stairway to AlwaysOn

AlwaysOn是一套复杂的技术,往往被误解。在这个阶梯中,您将学习AlwaysOn技术,它们如何适应高可用性堆栈,以及如何充分利用它们。

欢迎来到“SQL Server AlwaysOn的阶梯”系列的第一个级别。在这篇1级文章中,我们将发现“AlwaysOn”,“故障转移群集实例”(FCI)和“Windows Server故障转移群集”技术。我们将详细介绍每个细节并总结它们所在的高可用性堆栈的位置。这将为我们提供一个良好的基础,这对上升的楼梯水平是必不可少的。较高级别的楼梯将研究AlwaysOn可用性组和FCI使用的所需基础架构和不同的存储要求和选项。

在每个楼梯层次之后,您将进一步了解AlwaysOn结构如何构建。尽管作为DBA,您可能没有与AlwaysOn和FCI下面的核心基础设施项目进行任何直接交互,但是有助于全面了解所有技术如何集成。最后的楼梯将导致一个功能AlwaysOn配置。

我们首先要看基础知识,其中包括对已经提到的3种技术的简要描述。

AlwaysOn描述中使用了许多首字母缩写词和缩写词。本文结尾处包含了一个常用术语表。

不用多说,让我们深入了解每种技术。

Windows服务器故障转移群集

Windows Server故障转移群集(WSFC)是位于所有Microsoft高可用性应用程序下的核心高可用性(HA)产品。 WSFC是Windows Server操作系统软件套件的一部分。在创建SQL Server的故障转移群集实例,AlwaysOn高可用性组或甚至Microsoft Exchange邮件服务器群集之前,您需要部署和配置WSFC。

Windows Server故障转移群集提供了将多个计算机节点(物理和/或虚拟)组合起来为一组应用程序提供高可用性的能力。应用程序是服务器软件,如SQL Server或Exchange,我们希望能够在任何节点上运行。通过向客户端呈现包括唯一IP地址和唯一计算机名称或“虚拟网络名称”的虚拟接入点来使应用高度可用。此地址和虚拟名称成为应用程序组中的资源,并在参与节点(如令牌)之间传递。活动计算机节点的严重硬件故障将导致在该节点上运行的组服务的丢失。群集服务将根据故障类型(硬件或软件)自动尝试重新启动当前节点或伙伴节点上的组。

在较高级别上,客户端访问点详细信息与任何磁盘和服务资源一起传输到故障转移伙伴节点。群集实例的故障转移会导致客户端连接断开;一旦服务在另一个节点上可用,则客户端可以重新连接。常见的故障通常是其中之一,但是应用程序的任何故障都可能导致服务移动到另一个节点:

  • 公用NIC或网络故障
  • 电源故障
  • 主板故障
  • CPU故障

使用WSFC时,群集应用程序被安装到单独的组或“应用程序”中,其中包含一组资源,如磁盘,服务,IP地址等。组及其资源在任何时候都由单个节点拥有,而除非有计划的交换机或故障转移到该节点,否则不能从任何其他伙伴节点访问资源。

下面显示了Windows Server故障转移群集的典型视图。群集节点全部通过网络连接,域控制器和DNS服务与WSFC一起工作,以允许客户端连接到虚拟IP或虚拟网络名称,无论服务在哪个节点上运行。


为了部署FCI,计算机节点必须使用共享存储,这些存储通常从SAN出现给每个节点。为了部署一个典型的AlwaysOn组,节点利用自己的本地存储,而不是与其他集群伙伴共享。

尽管群集节点可能具有不同的硬件,但通常最好将节点间的硬件保持一致,以避免功能较弱的节点无法处理超出其功能的负载。但是,节点必须使用相同的操作系统补丁级别和网络配置;在部署Windows Server故障转移群集之前验证您的配置时,这将变得清晰。 Windows Server版本(Windows 2003中的8个节点,Windows 2008中的16个节点和Windows 2012中的64个节点)的最大群集节点数量不同。

部署强大的Windows Server故障转移群集需要仔细的设计,支持的硬件和相应版本的Windows Server操作系统。地理分散的集群(跨多个WAN的集群)进一步增加了所需的设计和规划的数量,并显着增加了成本。

知道WSFC仅提供故障转移伙伴功能很重要。应用程序在节点之间没有负载平衡或扩展。每个服务都运行在一个且只有一个节点上。

通常,在大型多节点群集中,您可以在Windows Server故障转移群集节点的子集上安装群集应用程序。在所有节点上安装应用程序的错误都可能导致一些不希望的故障转移,我们将在后面看到,也违反了AlwaysOn组限制策略,这可以确保所有AlwaysOn实例驻留在集群中的不同节点上。

WSFC需要某种形式的中介来控制群集资源所有权。此仲裁以Cluster Quorum的形式提供。自Windows 2003 SP1以来,此Quorum采用节点投票系统的形式,维持Quorum所需的多数选票。您还可以使用磁盘形式的其他仲裁资源进行本地化群集,也可以使用多站点群集的远程文件共享。从Windows Server 2012开始,法定人数使用动态节点权重配置在计划中断期间动态平衡群集投票,以防止不必要的故障转移。我们将在未来的层面更详细地讨论法定人数。

故障转移群集实例

SQL Server的故障转移群集实例一直是SQL Server产品中流行的高可用性技术。 SQL Server高度可用的实例是集群化的,以减轻任何节点硬件故障和任何潜在的软件故障。 这里唯一的薄弱环节是存储; 存储子系统成为单点故障。

故障转移群集实例是默认或命名的SQL Server实例,已作为群集应用程序安装到WSFC上。 群集应用程序通常具有以下资源:

  • IP地址
  • 网络名字
  • 共享磁盘
  • SQL Server服务
  • SQL Server代理服务

独立实例共享相同的基本要求,不同之处在于,使用独立实例时,IP地址和网络名称将从计算机节点本身获取,而磁盘存储由计算机的本地磁盘资源提供。

参考上面的图,我们看到了具有单个FCI的2节点集群的典型视图。 SQL Server的群集实例将使用已呈现给WSFC节点的任何共享存储。通常这种存储将采取从SAN提供的LUN的形式。 SQL Server的FCI部署在一个两步的过程中,这个过程将在稍后的阶梯中介绍。现在,下面是部署SQL Server的故障转移群集实例的两步过程的基本概述:

  1. 在将参与FCI的第一个计算机节点上启动“新建SQL Server故障转移群集安装”向导。一旦完成并成功完成,您就可以进入第二阶段了。
  2. 在希望加入新的SQL Server FCI的WSFC中的任何计算机节点上启动“将节点添加到SQL Server故障转移群集”向导。

注意:尽管标准版将FCI限制为2个节点,但并不指定有多少节点具有Windows群集的成员资格(您可能有任何数字,直到操作系统的最大值)。该限制是在SQL Server安装程序级别执行的。

FCI有点像一个跑道接力队的传球过程;计算机节点拥有群集的SQL Server应用程序及其资源,然后为客户端提供对SQL Server服务(持有接力棒)的访问权限。当活动的计算机节点失败(下落接力棒)时,合作伙伴节点进入并获得集群应用程序及其资源的所有权(接上接力棒)。

AlwaysOn可用性组

多年来,故障转移群集一直是为SQL Server提供高可用性的主要方法。当一个节点失败时,另一个节点接管向客户端提供SQL Server服务。 AlwaysOn与Windows Server故障转移群集技术集成,提供更具弹性的高可用性平台。

尽管群集在实例级别上工作,但AlwaysOn在数据库级别配置。 AlwaysOn可用性组是SQL Server 2012中引入的新技术,用于将预定义的数据库组复制到AlwaysOn中已知的一组只读伙伴实例或副本。多个节点各自托管一个AlwaysOn数据库的同步副本,并且最好通过监听器的配置来提供访问(稍后会详细介绍)。

AlwaysOn可用性组需要一个或多个辅助副本来托管高可用性数据库的副本。这些辅助数据库可能是可读或不可读的。它们也可以以异步或同步的方式进行更新。异步副本仅支持手动强制故障转移,而同步副本支持自动或手动故障转移。

次要只读副本可以配置为响应只读查询,您也可以将目标的次要目标作为备份/维护操作以减轻主数据库的压力。这种主从关系也是可逆的,以确保真正的高可用性。任何经过适当配置的只读伙伴在系统发生故障时都可能承担主角色。

AlwaysOn依靠WSFC核心功能实现AO提供的高可用性,但不需要与FCI相关的以下任何共享资源。

  • 共享磁盘
  • 共享的IP地址
  • 共享网络名称
  • 共享的SQL Server和SQL Server代理资源

这个共享资源规则有一个例外。创建AlwaysOn组侦听器时,将创建将由AO组副本共享的IP地址和网络名称资源。

正如我们所发现的,故障转移群集实例链中的薄弱环节是共享存储。这里有很多方法可以实现冗余,但是通常成本很高,而且安装和维护通常很困难。当然,如前所述,故障转移群集实例只能缓解服务器硬件。它不提供单个或甚至多个辅助数据库。我们在SQL Server 2012之前的SQL Server版本中有数据库镜像,但这些仅为单个不可读的辅助数据库提供了范围。

AlwaysOn仍然使用熟悉的SQL Server端点作为实例通信。端点在使用可用性组部署向导时自动配置。向导驱动的部署提供了最简单的部署路径,而手动部署需要大量的手动交互。尽管如此,一个基本的AlwaysOn组配置仍然非常容易部署和配置,并提供以前不可用的HA级别,而无需采用复杂的功能集成级别。

您也可以创建一个高可用的侦听器服务,您将使用该服务来接受到可用性组的传入连接。监听器由一个唯一的IP地址和一个唯一的虚拟网络名称组成。这是使组内数据库高度可用的最重大变化之一。

在创建AlwaysOn可用性组期间,将在Windows Server故障转移群集内创建一个群集角色,并包含一个资源。此资源在AlwaysOn组故障转移期间在伙伴节点之间进行故障转移,并标识AlwaysOn组的主副本。

AlwaysOn听众

监听程序在配置时将作为资源创建,并驻留在AlwaysOn可用性组的故障转移群集应用程序角色中。资源是:

  • 虚拟IP地址
  • 虚拟网络名称

侦听器使用TCP端口来接受传入的连接,并默认连接到主副本。当只读路由已配置时,指向只读意向连接的监听程序的连接将被路由到辅助伙伴而不是主要副本。这是我们可以减轻主副本负载的另一种方式。

在AlwaysOn组的故障转移期间,群集中的节点之间的群集应用程序及其资源将发生故障转移。群集应用程序的节点位置跟​​踪主副本及其底层节点,并根据需要在群集中移动。在主副本是SQL Server的群集实例的情况下,侦听器由该FCI 副本的主动节点拥有。

结论

这就是阶梯1的结尾,它提供了3个核心技术的快速介绍,用来使我们的SQL Server实例及其对象高度可用。 在我们的高可用性堆栈中,我们将WSFC作为基本级别,这是安装FCI或AlwaysOn可用性组的主要要求。 接下来,我们有了位于WSFC顶部的FCI,它依靠群集来服务和保护SQL Server实例。 最后,我们有AlwaysOn组,坐在SQL Server的独立实例和SQL Server的“故障转移群集实例”之上。

在2级中,我们将查看SQL Server High Availability中可用的存储类型及其典型用法。 这将帮助您了解系列中未来的阶梯级别。

词汇表

AO AlwaysOn可用性组
FCI SQL Server的故障转移群集实例
TCPIP 传输控制协议/互联网协议。 Microsoft客户端网络使用的网络协议
OS / NOS 网络操作系统
WSFC Windows Server故障转移群集
LAN 局域网
WAN 广域网
DNS 域名系统
DHCP 动态主机配置协议,自动为网络计算机分配IP地址
IP Address 32位(IPV4),分配给计算机对象的唯一地址
AD Active Directory,目录服务。 用于Windows域中的对象管理的Microsoft技术
DR 灾难恢复
SPF 单点故障
SCSI 小型计算机系统接口
iSCSI Internet小型计算机系统接口
FC 光纤通道
Replica SQL Server AlwaysOn可用性组中使用的术语引用作为特定AlwaysOn组的一部分的SQL Server实例

Alwayson(1)——SQLServer2014的安装要求

Alwayson(1)——SQLServer2014的安装要求

sqlServer2014的安装, 谈不上难, 但如果你不把握好, 可能还是安装不上的。

首先是软硬件环境。最好看一下: 安装 SQL Server 2014 的硬件和软件要求

因为要搭建 Alwayson 集群,而不是在自己本机玩玩新特性, 所以需要服务器版本的OS才行。 

win2003就不要奢望了,最好是2008或者2012。我这里就采用 Windows Server 2008 R2 Enterprise 。

在安装 sqlServer2014 之前, 做好两个非常重要的准备工作。 

1. 安装 .net framework 3.5.1 , 这个可以直接在“服务器管理器”中完成, 如下图,比较简单不再赘述。


2. 安装 windows server 2008 的 sp1 补丁。 下载地址: windows server 2008 sp1


这两点搞好了, 安装sqlServer2014就顺风顺水了, 安装过程也比较简单, 不再赘述。


上面只是sqlServer2014的安装要求, 但要想使用 Alwayson 的功能, 必须还安装两个玩意:

1. 域控制器。  请参考: 点击打开链接

2. Windows故障转移群集。 请参考: 点击打开链接

官方要求链接:点击打开链接


所以, 想用上Alwayson, 至少得准备 3 台机:

一台 域控制器所在的服务器,两台DB服务器

注意:域控服务器不能用来做DB服务器: https://msdn.microsoft.com/zh-cn/subscriptions/downloads/ff878487.aspx

如果完善一点, 应该要3台DB服务器, 因为Windows故障转移群集正常来说需要3台。

呵呵, 用虚拟机的话, 你的内存有点不够使了吧。


试验过程可以关防火墙, 但服务器生产环境上 应该开3个端口

TCP/IP: 数据库端口(默认1433),5022 udp:    1434

Docker部署SQL Server 2019 Always On集群的实现

Docker部署SQL Server 2019 Always On集群的实现

Docker部署Always on集群

SQL Server在2016年开始支持Linux。随着2017和2019版本的发布,它开始支持Linux和容器平台上的HA/DR、Kubernetes和大数据集群解决方案。

在本文中,我们将在3个节点的Docker容器上安装SQL Server 2019,并创建AlwaysOn可用性组。

我们的目标是使用单个配置文件快速准备好环境。因此,开发人员或测试团队可以快速执行诸如兼容性、连通性、代码功能等测试。

在本节中,我们将首先准备一个基于Ubuntu的映像,以便能够在容器上安装可用性组。然后我们将执行必要的安装。

重要提示:不建议在生产环境中执行操作。安装是在Ubuntu 18.04上执行的。

安装Docker

安装Docker就不介绍了,自行安装即可.

架构

主机名 IP 端口 角色
sqlNode1 宿主机IP 1501:1433
sqlNode2 宿主机IP 1502:1433 副本
sqlNode3 宿主机IP 1503:1433 副本

端口表示:外网端口:内网端口

准备相关容器镜像

拉取操作系统和数据库的Docker镜像,如下

操作系统

docker pull ubuntu:18.04

SQL Server 2019

docker pull mcr.microsoft.com/mssql/server:2019-latest

可通过docker images来查看已下载的镜像信息。

镜像地址:https://hub.docker.com/_/microsoft-mssql-server

开始配置-容器

环境准备完毕后,开始正式的配置安装。

步骤1:创建Dockerfile

创建目录用于存放dockerfile、docker-compose.yml等文件。

mkdir /sql2019ha
cd /sql2019ha
touch dockerfile
vi dockerfile

dockerfile内容如下

FROM ubuntu:18.04
 
RUN apt-get update
 
RUN apt install sudo wget curl gnupg gnupg1 gnupg2 -y
RUN apt install software-properties-common systemd vim -y
RUN wget -qO- https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add -
 
RUN add-apt-repository "$(wget -qO- https://packages.microsoft.com/config/ubuntu/18.04/mssql-server-2019.list)"
RUN apt-get update
RUN apt-get install -y mssql-server
 
RUN /opt/mssql/bin/mssql-conf set hadr.hadrenabled  1
RUN /opt/mssql/bin/mssql-conf set sqlagent.enabled true
 
EXPOSE 1433
 
ENTRYPOINT /opt/mssql/bin/sqlservr

说明

  • FROM:表示基于什么镜像进行安装的
  • RUN:在镜像中进行的操作
  • EXPOSE:指定服务端口
  • ENTRYPOINT:运行命令

步骤2:编译镜像

通过dockerfile来编译镜像,用于后面的安装,命令:docker build -t sqlag2019:ha .

其中sqlag2019为镜像名称,ha是镜像标签,.表示在当前目录下编译,因为dockerfile就在当前目录下。

以下输出是精简的,实际上输出非常多…也需要一定时间(安装一些包、数据库等),由网速决定

$ docker build -t sqlag2019:ha .
Sending build context to Docker daemon   2.56kB
Step 1/12 : FROM ubuntu:18.04
 ---> c3c304cb4f22
Step 2/12 : RUN apt-get update
 ---> Running in 950e50f80f00
Get:1 http://archive.ubuntu.com/ubuntu bionic InRelease [242 kB]
Get:2 http://security.ubuntu.com/ubuntu bionic-security InRelease [88.7 kB]
Get:3 http://security.ubuntu.com/ubuntu bionic-security/main amd64 Packages [932 kB]
Get:4 http://archive.ubuntu.com/ubuntu bionic-updates InRelease [88.7 kB]...
Step 3/12 : RUN apt install sudo wget curl gnupg gnupg1 gnupg2 -y
 ---> Running in edc9d15b2383
..
..
Step 8/12 : RUN sudo apt-get install -y mssql-server
 ---> Running in 43d82a503f8a
Reading package lists...
Building dependency tree...
Reading state information...
The following additional packages will be installed:
Step 9/12 : RUN sudo /opt/mssql/bin/mssql-conf set hadr.hadrenabled  1
 ---> Running in 166c6596d2dd
SQL Server needs to be restarted in order to apply this setting. Please run
''systemctl restart mssql-server.service''.
Removing intermediate container 166c6596d2dd
 ---> bcdb057fed43
Step 10/12 : RUN sudo /opt/mssql/bin/mssql-conf set sqlagent.enabled true
 ---> Running in 22dd6a93d1ef
SQL Server needs to be restarted in order to apply this setting. Please run
''systemctl restart mssql-server.service''.
Removing intermediate container 22dd6a93d1ef
 ---> 6b90afbaf94e
Step 11/12 : EXPOSE 1433
 ---> Running in bcc14f3b0bad
Removing intermediate container bcc14f3b0bad
 ---> 4aae1563aa74
Step 12/12 : ENTRYPOINT /opt/mssql/bin/sqlservr
 ---> Running in 68b6ed45ff6a
Removing intermediate container 68b6ed45ff6a
 ---> b7467618c371
Successfully built b7467618c371
Successfully tagged sqlag2019:ha

最后出现Successfully表示编译成功,否则根据错误信息进行解决。

步骤3:创建容器

现在镜像编译好了,下面再通过docker-compose文件来创建、配置3个容器,具体内容如下:

$ touch docker-compose.yml
$ vi docker-compose.yml
version: ''3''
 
services:
  db1:
    container_name: sqlNode1
    image: sqlag2019:ha
    hostname: sqlNode1
    domainname: lab.local
    environment:
      SA_PASSWORD: "MyPassWord123"
      ACCEPT_EULA: "Y"
    ports:
    - "1501:1433"
    extra_hosts:
      sqlNode2.labl.local: "172.16.238.22"
      sqlNode3.labl.local: "172.16.238.23"
    networks:
        internal:
                ipv4_address: 172.16.238.21
 
  db2:
    container_name: sqlNode2
    image: sqlag2019:ha
    hostname: sqlNode2
    domainname: lab.local
    environment:
      SA_PASSWORD: "MyPassWord123"
      ACCEPT_EULA: "Y"
    ports:
    - "1502:1433"
    extra_hosts:
      sqlNode1.lab.local: "172.16.238.21"
      sqlNode3.lab.local: "172.16.238.23"
    networks:
        internal:
                ipv4_address: 172.16.238.22
 
  db3:
    container_name: sqlNode3
    image: sqlag2019:ha
    hostname: sqlNode3
    domainname: lab.local
    environment:
      SA_PASSWORD: "MyPassWord123"
      ACCEPT_EULA: "Y"
    ports:
    - "1503:1433"
    extra_hosts:
      sqlNode1.lab.local: "172.16.238.21"
      sqlNode2.lab.local: "172.16.238.22"
    networks:
        internal:
                ipv4_address: 172.16.238.23
 
networks:
    internal:
      ipam:
            driver: default
            config:
                - subnet: 172.16.238.0/24

步骤4:启动容器

然后通过docker-compose up -d命令启动三个容器,其中-d表示在后台运行。

$ docker-compose up -d
Creating network "sql2019hademo_internal" with the default driver
Creating sqlNode2 ...
Creating sqlNode1 ...
Creating sqlNode2
Creating sqlNode3 ...
Creating sqlNode1
Creating sqlNode2 ... done

注意:docker-compose是需要单独安装的,就是一个可执行文件。可通过apt、yum来安装。

查看容器状态

$ docker-compose ps
Name                Command               State           Ports
--------------------------------------------------------------------------
sqlNode1   /bin/sh -c /opt/mssql/bin/ ...   Up      0.0.0.0:1501->1433/tcp
sqlNode2   /bin/sh -c /opt/mssql/bin/ ...   Up      0.0.0.0:1502->1433/tcp
sqlNode3   /bin/sh -c /opt/mssql/bin/ ...   Up      0.0.0.0:1503->1433/tcp

至此容器已经启动完成,下面通过SSMS连接数据库进行相关检查和配置ALWAYSON。

步骤5:SSMS连接MSSQL

通过宿主机的外网IP+端口连接相应的数据库,如下:

在这里插入图片描述

注意:IP和端口之间是逗号

在这里插入图片描述

可以看到数据库的图标也是Linux的图标。

配置-数据库

这部分就是在数据库中进行相关配置,如:创建KEY加密文件,管理用户、可用组等。

步骤1:连接主库-sqlNode1

主库也就是节点1,端口是1501,连接方法如上图。

我们将证书和私钥提取到/tmp/dbm_certificate.cer/tmp/dbm_certificate.pvk文件中。

我们将这些文件复制到其他节点,并根据以下文件创建主密钥和证书:执行以下脚本

USE master
GO
 
CREATE LOGIN dbm_login WITH PASSWORD = ''MyStr0ngPa$w0rd'';
CREATE USER dbm_user FOR LOGIN dbm_login;
GO
 
CREATE MASTER KEY ENCRYPTION BY PASSWORD = ''MyStr0ngPa$w0rd'';
go
CREATE CERTIFICATE dbm_certificate WITH SUBJECT = ''dbm'';
BACKUP CERTIFICATE dbm_certificate
TO FILE = ''/tmp/dbm_certificate.cer''
WITH PRIVATE KEY (
        FILE = ''/tmp/dbm_certificate.pvk'',
        ENCRYPTION BY PASSWORD = ''MyStr0ngPa$w0rd''
    );
GO

将文件拷贝到其他两个节点:

$ docker cp sqlNode1:/tmp/dbm_certificate.cer .
$ docker cp sqlNode1:/tmp/dbm_certificate.pvk .
$ docker cp dbm_certificate.cer sqlNode2:/tmp/
$ docker cp dbm_certificate.pvk sqlNode2:/tmp/
$ docker cp dbm_certificate.cer sqlNode3:/tmp/
$ docker cp dbm_certificate.pvk sqlNode3:/tmp/

步骤2:连接从库-sqlNode2和sqlNode3

两个从库的端口分别是:1502和1503.然后重复主库执行的操作,如下:

CREATE LOGIN dbm_login WITH PASSWORD = ''MyStr0ngPa$w0rd'';
CREATE USER dbm_user FOR LOGIN dbm_login;
GO
 
CREATE MASTER KEY ENCRYPTION BY PASSWORD = ''MyStr0ngPa$w0rd'';
GO
CREATE CERTIFICATE dbm_certificate   
    AUTHORIZATION dbm_user
    FROM FILE = ''/tmp/dbm_certificate.cer''
    WITH PRIVATE KEY (
    FILE = ''/tmp/dbm_certificate.pvk'',
    DECRYPTION BY PASSWORD = ''MyStr0ngPa$w0rd''
);
GO

步骤3:所有节点

在所有节点上执行以下命令

CREATE ENDPOINT [Hadr_endpoint]
    AS TCP (LISTENER_IP = (0.0.0.0), LISTENER_PORT = 5022)
    FOR DATA_MIRRORING (
        ROLE = ALL,
        AUTHENTICATION = CERTIFICATE dbm_certificate,
        ENCRYPTION = REQUIRED ALGORITHM AES
        );
ALTER ENDPOINT [Hadr_endpoint] STATE = STARTED;
GRANT CONNECT ON ENDPOINT::[Hadr_endpoint] TO [dbm_login];

启用开机自启动ALWAYON,在所有节点执行以下命令

ALTER EVENT SESSION  AlwaysOn_health ON SERVER WITH (STARTUP_STATE=ON);
GO

步骤4:创建高可用组

可以用SSMS工具和T-SQL两种方式,下面以T-SQL为例:

运行以下脚本在主节点中创建一个可用性组。 请注意,选择CLUSTER_TYPE = NONE选项是因为它是在没有诸如Pacemaker或Windows Server故障转移群集之类的群集管理平台的情况下安装的。

如果要在Linux上安装AlwaysOn AG,则应为Pacemaker选择CLUSTER_TYPE = EXTERNAL:

CREATE AVAILABILITY GROUP [AG1]
        WITH (CLUSTER_TYPE = NONE)
        FOR REPLICA ON
        N''sqlNode1''
            WITH (
            ENDPOINT_URL = N''tcp://sqlNode1:5022'',
            AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT,
                SEEDING_MODE = AUTOMATIC,
                FAILOVER_MODE = MANUAL,
            SECONDARY_ROLE (ALLOW_CONNECTIONS = ALL)
                ),
        N''sqlNode2''
            WITH (
            ENDPOINT_URL = N''tcp://sqlNode2:5022'',
            AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT,
                SEEDING_MODE = AUTOMATIC,
                FAILOVER_MODE = MANUAL,
            SECONDARY_ROLE (ALLOW_CONNECTIONS = ALL)
                ),
        N''sqlNode3''
            WITH (
            ENDPOINT_URL = N''tcp://sqlNode3:5022'',
            AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT,
                SEEDING_MODE = AUTOMATIC,
                FAILOVER_MODE = MANUAL,
            SECONDARY_ROLE (ALLOW_CONNECTIONS = ALL)
                );
GO

在从库中执行以下命令,将从库加入到AG组中

ALTER AVAILABILITY GROUP [ag1] JOIN WITH (CLUSTER_TYPE = NONE);
ALTER AVAILABILITY GROUP [ag1] GRANT CREATE ANY DATABASE;
GO

至此在Docker容器中安装SQL Server Alwayson集群已经完成了!

注意:当指定CLUSTER_TYPE = NONE创建可用组时,在执行故障转移时需执行以下命令

ALTER AVAILABILITY GROUP [ag1] FORCE_FAILOVER_ALLOW_DATA_LOSS

测试

在主库上创建一个数据库,并加入到可用组AG中。

CREATE DATABASE agtestdb;
GO
ALTER DATABASE agtestdb SET RECOVERY FULL;
GO
BACKUP DATABASE agtestdb TO DISK = ''/var/opt/mssql/data/agtestdb.bak'';
GO
ALTER AVAILABILITY GROUP [ag1] ADD DATABASE [agtestdb];
GO

通过SSMS查看同步状态是否正常.

参考连接

https://docs.microsoft.com/en-us/sql/linux/quickstart-install-connect-docker?view=sql-server-ver15
https://docs.microsoft.com/en-us/sql/linux/quickstart-install-connect-ubuntu?view=sql-server-ver15
https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-create-availability-group?view=sql-server-ver15
https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-configure-mssql-conf?view=sql-server-ver15
https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-configure-environment-variables?view=sql-server-ver15
https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-availability-group-cluster-ubuntu?view=sql-server-linux-ver15
https://docs.docker.com/engine/install/ubuntu/
https://docs.docker.com/compose/

到此这篇关于Docker部署SQL Server 2019 Always On集群的实现的文章就介绍到这了,更多相关Docker部署SQLServer集群内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!

您可能感兴趣的文章:
  • Linux系统通过Docker安装SQL Server数据库
  • Docker部署Microsoft Sql Server详细步骤
  • Docker部署Mysql,.Net6,Sqlserver等容器
  • 使用Docker运行SQL Server的实现
  • 使用Docker运行Microsoft SQL Server 2017的方法
  • 在Docker容器中部署MSSQL

MS SQL SERVER2016 AlwayOn 安装说明

MS SQL SERVER2016 AlwayOn 安装说明

虚拟机部分

安装虚拟机时的注意事项:

    1 根据喜欢的习惯选择相关信息:

2 选择操作系统版本:

一定要选数据中心版的,第 3 个和第 4 个的区别是,第 3 个命令行操作,第 4 个是可视化系统

3 向虚拟机发送 CTRL+ALT+DEL 指令

 

为了使物理机不受影响,请按 CTRL+ALT+INSERT

4 安装 tools

 

或者

 打开此电脑,

双击 DVD 驱动盘,运行

安装完毕重启,安装此工具的目的在于虚拟机与物理机之间复制文件、鼠标无缝的在物理机和各虚拟机之间切换。

5 点击编辑,虚拟网络编辑器

本示例采用 VMNET8 网段,所有节点,包括以下列表的 2 个虚拟 IP 都必须在同一网段,关闭所有节点的防火墙,节点的物理 IP 要能互相 ping 通。

IP 地址列表

IP 地址

节点

说明

192.168.17.21

A 节点

 

192.168.17.22

B 节点

 

192.168.17.23

C 节点

 

192.168.17.31

wincluster

用于集群故障转移的虚拟 IP

192.168.17.32

listener

用于 AlwaysOn 的可用性组的监听器的 IP

开始安装

1 各机器分别安装 windows server2016 datacenter 操作系统和 sql2016 数据库

注:需要用 administrator 账号运行系统,且各节点账号密码一致

  1. 为方便操作,最好修改各节点的计算机名,(非强制性,为后续方便操作,建议修改,本示例节点的计算名分别为 NodeA、NodeB、NodeC)

    各节点的 DNS 后缀务必保持一致。

    1. 由于 SQL2016 是跨平台的数据库系统,在安装之前,需要先安装 JDK7,本示例使用的 JDK8
    2. 安装过程中,各节点的混合模式的密码必须一致。
    3. 由于自 MSSQL2014 开始,安装包不再集成可视化的操作界面,本示例在各节点安装完 SQL2016 后,安装了 SSMS17.6 的版本。(自行从官网下载此插件的请注意,必须 IE 浏览器下载,否则可能会引起签名认证一类的问题,导致安装包无法运行)务必不要怕麻烦,各节点请单独安装,不要采用群集故障转移的方式安装 MSSQL, 否则会有莫名其妙的问题,原因未知。
    4. 为方便后续操作,在 cmd 窗口运行.rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,0

      在弹出的窗口里选择所需要显示的桌面图标。

    5. 2 所有节点安装故障转移群集

             a 打开服务器管理器仪表板

    6. 3 所有节点添加一个用户,且用户名密码必须一致,隶属于 administrators 组(本示例 DCAdmin)

      设置该用户隶属于 administrators 用户组。

       



关于SQL Server 2016 Alwayson新增功能图文详解sql server 2016 always on的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于AlwaysOn 进阶 Level 1:What is "SQL Server AlwaysOn"?、Alwayson(1)——SQLServer2014的安装要求、Docker部署SQL Server 2019 Always On集群的实现、MS SQL SERVER2016 AlwayOn 安装说明等相关内容,可以在本站寻找。

本文标签: