Date: 1月 9, 2019
循序渐进:SQL Server v.Next Linux高可用性 – 公共预览#azure #sql #sanless
今年早些时候,微软宣布他们将发布一个适用于Linux的SQL Server版本。 今天,我很高兴得知微软最终公布了他们目前称之为SQL Server v.Next的公开预览,并且它可用于Linux和Windows操作系统。 可以在此处找到更多信息以及下载链接和文档:
https://www.microsoft.com/en-us/sql-server/sql-server-vnext-including-Linux
SQL Server for Linux
在本文中,我将向您展示如何在运行SQL Server的Azure中部署Linux VM,以及如何配置双节点故障转移群集以使其高度可用!并且没有使用共享存储(也称为“无圣”或“无共享”集群)。最终结果将是Microsoft Azure IaaS(基础架构即服务)中的2节点SQL Server for Linux集群(以及见证服务器)。 该指南包括适当的屏幕截图,shell命令和代码片段。 我假设您对Microsoft Azure有点熟悉,并且已经拥有一个具有关联订阅的Azure帐户。 如果没有,您今天就可以注册一个免费帐户。 我还将假设您具有基本的Linux系统管理技能,并了解基本的故障转移群集概念,如虚拟IP等。免责声明:Azure是一个快速发展的目标。 在这里,我正在使用SQL Server for Linux的公共预览版。 因此,在SQL v.Next正式发布之前,功能/屏幕/按钮必然会发生变化,因此您的体验可能会与您在下面看到的略有不同。 虽然本指南将向您展示如何使SQL Server for Linux数据库高度可用,但您当然可以调整此信息和过程以保护其他应用程序或数据库,就像我之前所写的那样(MySQL示例)。以下是在Microsoft Azure IaaS中创建高可用性MySQL数据库的高级步骤:
- 创建资源组
- 创建一个虚拟网络
- 创建存储帐户
- 在可用性集中创建虚拟机
- 设置虚拟机静态IP地址
- 将数据磁盘添加到群集节点
- 创建入站安全规则以允许VNC访问
- Linux OS配置
- 安装和配置SQL Server
- 安装和配置群集
- 创建内部负载均衡器
- 测试群集连接
概观
本文将介绍如何在单个Azure区域中创建集群。 由于新的Azure资源管理器(ARM),群集节点(sql-linux1,sql-linux2和见证服务器)将驻留在可用性集(3个不同的故障域和更新域)中。我们将使用新的Azure资源管理器创建所有资源。配置如下所示:将使用以下IP地址:
- sql-linux1:10.0.0.7
- sql-linux2:10.0.0.8
- sql-witness:10.0.0.9
- 虚拟/“浮动”IP:10.0.0.199
- SQL Server端口:1433
创建资源组
首先,创建一个资源组。 您的资源组最终将包含与我们的集群部署相关的所有各种对象:虚拟机,存储帐户等。 在这里,我们将调用我们新创建的资源组“sql-cluster”。 选择您所在地区时请注意。 您的所有资源都需要位于同一区域内。 在这里,我们将把所有内容部署到“美国西部”地区:
创建虚拟网络(VNet)
接下来,如果您还没有,请创建一个虚拟网络。 虚拟网络是Azure云中专用于您的隔离网络。 您可以完全控制IP地址块和子网,路由,安全策略(即防火墙),DNS设置等内容。 您将在您的虚拟网络中启动Azure Iaas虚拟机(VM)。我的Azure帐户已经有一个名为“cluster-network”的现有VNet(10.0.0.0/16),我将在本指南中使用它。 创建一个VNet非常简单,如果你需要复习,我已经介绍过在这里创建一个。
创建存储帐户
在配置任何虚拟机之前,您需要一个存储帐户来存储它们。 接下来,为您的新存储帐户命名。 存储帐户名称在* ALL * Azure中必须是唯一的。 (存储在Azure存储中的每个对象都具有唯一的URL地址。存储帐户名称构成该地址的子域。)在此示例中,我将存储帐户称为“sqllinuxcluster”,但您需要在设置自己的存储帐户时选择不同的存储帐户。根据您的要求和预算选择存储类型。 为了本指南的目的,我选择了“Standard-LRS”(即 本地冗余)以最小化成本。确保您的新存储帐户已添加到您在相同位置(本示例中为“West US”)的步骤1(“sql-cluster”)中创建的资源组中:
在可用性集中创建虚拟机
我们将在本指南中配置3台虚拟机。 前两个虚拟机(我称之为“sql-linux1”和“sql-linux2”)将作为集群节点运行,能够将SQL Server数据库及其相关资源联机。 第三个VM将充当群集的见证服务器,以增强对裂脑的保护。为确保最大可用性,所有3个VM都将添加到同一可用性集中,以确保它们最终位于不同的故障域和更新域中。Azure Marketplace有一个名为“Red Hat Enterprise Linux 7.2上的SQL Server vNext”的VM模板,它预安装有一个公共预览评估版SQL Server v.Next for Linux,这将为您节省几个步骤。 如果您宁愿从一个空VM开始并自己安装SQL,可以在此处找到安装说明。
创建“sql-linux1”VM
创建您的第一个VM(“sql-linux1”)并选择上面提到的市场图像。 为VM提供主机名(“sql-linux1”)和用户名/密码,稍后将用于SSH进入系统。 确保将此VM添加到资源组(“sql-cluster”),并且它与所有其他资源位于同一区域:接下来,选择实例大小。 有关可用的各种实例大小的更多信息,请单击此处。出于本指南的目的,我选择了最小/最便宜的尺寸,在本例中为“DS1_V2标准”,以最大限度地降低成本,因为这不会运行生产工作负载。 根据您要测试的内容选择最有意义的实例大小:重要信息:默认情况下,您的VM不会添加到可用性集中。 在确保创建新可用性集期间的“设置”屏幕上,我们将调用“sql-availability-set”。 Azure资源管理器(ARM)允许您创建具有3个故障域的可用性集。 此处的默认值很好:在下一个屏幕上,查看VM属性,然后单击“确定”以创建第一个VM。
创建“sql-linux2”和“sql-witness”VM
重复上述步骤两次以创建另外两个VM。这里唯一的区别是你将把这些虚拟机添加到我们刚刚创建的可用性集(“sql-availability-set”)中。您的3个虚拟机可能需要一段时间才能配置。 完成后,您将在Azure门户的“虚拟机”屏幕上看到您的VM(sql-linux1,sql-linux2和sql-witness)。
设置虚拟机静态IP地址
将使用以下IP地址设置VM:
- sql-linux1:10.0.0.7
- sql-linux2:10.0.0.8
- sql-witness:10.0.0.9
对每个VM重复此步骤。 选择VM并编辑网络接口选择与VM关联的网络接口,然后编辑IP配置。 选择“静态”并指定所需的IP地址:
将数据磁盘添加到群集节点
接下来,我们需要为我们的集群节点添加额外的磁盘(“sql-linux1”和“sql-linux2”)。 该磁盘将存储我们的SQL数据库,稍后将在节点之间进行复制。注意:您不需要向“sql-witness”节点添加额外的磁盘。 只有“sql-linux1”和“sql-linux2”。编辑VM,选择“磁盘”,然后附加新磁盘。 根据您的工作负载选择磁盘类型(标准或高级SSD)和大小。 在这里,我在两个群集节点上创建了一个10GB标准磁盘。 就主机缓存而言,“无”或“只读”缓存很好。 我不建议使用“读/写”,因为可能会丢失数据:
创建入站安全规则以允许VNC访问
如果您的VM是网络安全组(NSG)的一部分,默认情况下,除非您在创建VM期间禁用它,否则“Azure防火墙”中打开的唯一端口是SSH(端口22)。 在本指南的后面,我将使用VNC访问“sql-linux1”的桌面并使用GUI配置集群。 创建入站安全规则以打开VNC访问。 在该指南中使用端口5902。 根据您的VNC配置进行调整。虚拟机 – >(选择sql-linux1) – >网络接口 – >(选择网卡) – >网络安全组 – >(选择NSG) – >入站安全规则 – >添加
Linux OS配置
这里我们将离开Azure门户一段时间,并在命令行上弄脏我们,作为Linux管理员,您现在应该习惯这样做。 您没有获得Azure中Linux VM的root密码,因此一旦您以创建VM期间指定的用户身份登录,请使用“sudo”命令获取root权限:
$ sudo su -
编辑/ etc / hosts
除非您已经设置了DNS服务器,否则您需要在所有3台服务器上创建主机文件条目,以便它们可以通过名称正确地相互解析。将以下行添加到/ etc / hosts文件的末尾:
10.0.0.7 sql-linux1 10.0.0.8 sql-linux2 10.0.0.9 sql-witness 10.0.0.199 sql-vip
禁用SELinux
编辑/ etc / sysconfig / linux并设置“SELINUX = disabled”:
#vi / etc / sysconfig / selinux #此文件控制系统上SELinux的状态。 #SELINUX =可以采用以下三个值中的一个: #enforcing - 强制执行SELinux安全策略。 #permissive - SELinux打印警告而不是强制执行。 #disabled - 未加载SELinux策略。 SELINUX =禁用 #SELINUXTYPE =可以采用以下两个值之一: #targeted - 目标进程受到保护, #mls - 多级安全保护。 SELINUXTYPE =针对性
配置iptables,以便集群虚拟IP可以正常工作
为了实现与群集虚拟IP的连接以及IP资源的监控,需要设置一些iptables规则。 注意:10.0.0.199是我们将在群集中使用的虚拟IP,1433是我的SQL Server使用的默认端口。注意:RHEL7将默认防火墙更改为FirewallD,而不是iptables。 还没有花太多时间在firewalld,所以现在这个指南将禁用firewalld并使用iptables代替。 您还需要安装“iptables-services”软件包,以便下面的service和chkconfig命令可以正常工作。
#systemctl stop firewalld #systemctl禁用firewalld
在sql-linux1(10.0.0.7)上,运行以下命令:
#yum install iptables-services #iptables --flush #iptables -t nat -A PREROUTING -p tcp --dport 1433 -j DNAT --to-destination 10.0.0.199:1433 #iptables -t nat -A PREROUTING -p tcp --dport 1434 -j DNAT --to-destination 10.0.0.199:1434 #iptables -t nat -A POSTROUTING -p icmp -s 10.0.0.199 -j SNAT --to-source 10.0.0.7 #service iptables save #chkconfig iptables on
在sql-linux2(10.0.0.8)上,运行以下命令:
#yum install iptables-services #iptables --flush #iptables -t nat -A PREROUTING -p tcp --dport 1433 -j DNAT --to-destination 10.0.0.199:1433 #iptables -t nat -A PREROUTING -p tcp --dport 1434 -j DNAT --to-destination 10.0.0.199:1434 #iptables -t nat -A POSTROUTING -p icmp -s 10.0.0.199 -j SNAT --to-source 10.0.0.8 #service iptables save #chkconfig iptables on
安装和配置VNC(及相关软件包)
为了访问我们的linux服务器的GUI,以及稍后安装和配置我们的集群,安装VNC服务器,以及一些其他必需的软件包(集群软件需要redhat-lsb和patch rpms)。
#yum install tigervnc-server xterm wget unzip patch redhat-lsb
#vncpasswd
以下URL是在RHEL 7 / CentOS 7上运行VNC服务器的一个很好的指南:https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-vnc-remote-access-for -the-gnome-desktop-on-centos-7注意:此示例配置在显示器2(:2,也称为端口5902)和root(不安全)上运行VNC。 相应调整!
#cp /lib/systemd/system/vncserver@.service /etc/systemd/system/vncserver@:2.service #vi /etc/systemd/system/vncserver@:2.service [服务] 类型=分叉 #清除/tmp/.X11-unix环境中的所有现有文件 ExecStartPre = / bin / sh -c'/ usr / bin / vncserver -kill%i> / dev / null 2>&1 || :” ExecStart = / sbin / runuser -l root -c“/ usr / bin / vncserver%i -geometry 1024x768” PIDFILE = /根/ .vnc /%H%i.pid ExecStop = / bin / sh -c'/ usr / bin / vncserver -kill%i> / dev / null 2>&1 || :” #systemctl daemon-reload #systemctl enable vncserver @:2.service #vncserver:2 -geometry 1024x768
重新启动群集节点
重新启动群集节点,以便禁用SELinux,并检测先前添加的第二个磁盘。
分区和格式化“数据”磁盘
在本指南的第6步(“将数据磁盘添加到群集节点”中),我们只是… …为每个群集节点添加了一个额外的磁盘,以存储我们将要保护的应用程序数据。 在这种情况下,它恰好是MySQL数据库。在Azure IaaS中,Linux虚拟机对磁盘使用以下安排:
- / dev / sda – 操作系统磁盘
- / dev / sdb – 临时磁盘
- / dev / sdc – 第一个数据磁盘
- / dev / sdd – 第二个数据磁盘
- …
- / dev / sdj – 第8个数据磁盘
我们在本指南的第6步中添加的磁盘应显示为/ dev / sdc。 您可以运行“fdisk -l”命令进行验证。 您将看到/ dev / sda(OS)和/ dev / sdb(临时)已经有磁盘分区并正在使用。
#fdisk -l 磁盘/ dev / sda:31.5 GB,31457280000字节,61440000个扇区 单位= 1 * 512 = 512字节的扇区 扇区大小(逻辑/物理):512字节/ 4096字节 I / O大小(最小/最佳):4096字节/ 4096字节 磁盘标签类型:dos 磁盘标识符:0x000c46d3 设备启动开始结束块ID系统 / dev / sda1 * 2048 1026047 512000 83 Linux / dev / sda2 1026048 61439999 30206976 83 Linux 磁盘/ dev / sdb:7516 MB,7516192768字节,14680064个扇区 单位= 1 * 512 = 512字节的扇区 扇区大小(逻辑/物理):512字节/ 4096字节 I / O大小(最小/最佳):4096字节/ 4096字节 磁盘标签类型:dos 磁盘标识符:0x7cd70e11 设备启动开始结束块ID系统 / dev / sdb1 128 14678015 7338944 83 Linux 磁盘/ dev / sdc:10.7 GB,10737418240字节,20971520扇区 单位= 1 * 512 = 512字节的扇区 扇区大小(逻辑/物理):512字节/ 4096字节 I / O大小(最小/最佳):4096字节/ 4096字节
在这里,我将创建一个分区(/ dev / sdc1),对其进行格式化,并将其挂载到SQL的默认位置,即/ var / opt / mssql。 在“sql-linux1”和“sql-linux2”上执行以下步骤:
#fdisk / dev / sdc 命令(m求助):n 命令行动 扩展 p主分区(1-4) p 分区号(1-4):1 第一个柱面(1-1305,默认值1):<enter> 使用默认值1 最后一个气缸,气缸或尺寸{K,M,G}(1-1305,默认1305):<enter> 使用默认值1305 命令(m求助):w 分区表已被更改! 调用ioctl()重新读取分区表。 同步磁盘。 [root @sql-linux1~]#
#mkfs.ext4 / dev / sdc1 #mkdir / var / opt / mssql #chmod 770 / var / opt / mssql
挂载文件系统:
#mount / dev / sdc1 / var / opt / mssql
安装和配置SQL Server
如果您从一个全新的Linux系统开始,可以在此处找到完整的安装说明。如果您使用“Red Hat Enterprise Linux 7.2上的SQL Server vNext”Azure模板创建了VM,就像我在本指南中所做的那样,那么已经安装了SQL Server。 您现在需要做的就是运行安装脚本:
#/ opt / mssql / bin / sqlservr-setup Microsoft(R)SQL Server(R)安装程序 您可以通过按Ctrl-C随时中止设置。启动这个程序 使用--help选项获取有关在无人参与的情况下运行它的信息 模式。 可以从中下载此产品的许可条款 http://go.microsoft.com/fwlink/?LinkId=746388找到了 在/usr/share/doc/mssql-server/LICENSE.TXT中。 你接受许可条款吗?如果是,请输入“是”:是 请输入系统管理员(SA)帐户的密码:<输入所需的密码> 请确认系统管理员(SA)帐户的密码:<输入所需的密码> 设置系统管理员(SA)帐户密码... 您是否希望立即启动SQL Server服务?[y / n]:y 您是否希望启用SQL Server启动?[y / n]:n 您可以使用sqlservr-setup --enable-service启用SQL Server 在开机。 安装成功完成。
验证服务是否正在运行:
#systemctl status mssql-server
在两个节点上停止SQL Server。 集群软件稍后将负责启动它:
#systemctl stop mssql-server #systemctl stop mssql-server-telemetry
安装和配置群集
此时,我们已准备好安装和配置我们的集群。 SIOS Protection Suite for Linux(又名SPS-Linux)将在本指南中用作群集技术。 它在单个集成解决方案中提供高可用性故障转移群集功能(LifeKeeper)以及实时,块级数据复制(DataKeeper)。 SPS-Linux使您能够部署“SANLess”群集,即“无共享”群集,这意味着群集节点没有任何共享存储,就像Azure VM一样。
安装适用于Linux的SIOS Protection Suite
在所有3个虚拟机上执行以下步骤(sql-linux1,sql-linux2,sql-witness):下载SPS-Linux安装映像文件(sps.img),并获取试用许可证或购买永久许可证。 有关更多信息,请联系SIOS。您将环回安装它并以root身份运行“setup”脚本(或者首先“sudo su – ”以获取root shell,如果您还没有)例如:
#mkdir / tmp / install #mount -o loop sps.img / tmp / install #cd / tmp / install # 。/建立
在安装脚本期间,系统会提示您回答一些问题。 您将在几乎每个屏幕上按Enter键以接受默认值。 请注意以下例外情况:
- 在标题为“High Availability NFS”的屏幕上,您可以选择“n”,因为我们不会创建高可用性NFS服务器
- 在安装脚本结束时,您可以选择立即或稍后安装试用许可证密钥。我们稍后会安装许可证密钥,因此您可以安全地选择“n”
- 在“设置”的最后一个屏幕中,从屏幕上显示的列表中选择要安装的ARK(应用程序恢复工具包,即“群集代理”)。
- 仅在“sql-linux1”和“sql-linux2”上需要ARK。 你不需要在“sql-witness”上安装
- 使用向上/向下箭头导航列表,然后按空格键选择以下内容:
- lkDR – 适用于Linux的DataKeeper
- 这将导致在“sql-linux1”和“sql-linux2”上安装以下附加RPM:
- SteelEye公司 – LKDR-9.0.2-6513.noarch.rpm
安装Witness / Quorum包
LifeKeeper(steeleye-lkQWK)的Quorum / Witness服务器支持包与LifeKeeper核心的现有故障转移过程相结合,可以在总体网络故障常见的情况下以更大的可信度进行系统故障转移。这实际上意味着可以在大大降低“裂脑”情况的风险的同时进行故障转移。在所有3个节点上安装Witness / Quorum rpm(sql-linux1,sql-linux2,sql-witness):
#cd / tmp / install / quorum #rpm -Uvh steeleye-lkQWK-9.0.2-6513.noarch.rpm
在所有3个节点(sql-linux1,sql-linux2,sql-witness)上,编辑/ etc / default / LifeKeeper,设置NOBCASTPING = 1仅打开Witness服务器(“sql-witness”),编辑/ etc / default / LifeKeeper ,设置WITNESS_MODE = off / none
安装许可证密钥
在所有3个节点上,使用“lkkeyins”命令安装从SIOS获取的许可证文件:
#/ opt / LifeKeeper / bin / lkkeyins <path_to_file> / <filename> .lic
启动LifeKeeper
在所有3个节点上,使用“lkstart”命令启动集群软件:
#/ opt / LifeKeeper / bin / lkstart
设置LifeKeeper GUI的用户权限
在所有3个节点上,编辑/ etc / group并将“tony”用户(或在VM创建期间指定的任何用户名)添加到“lkadmin”组以授予对LifeKeeper GUI的访问权限。 默认情况下,只有“root”是该组的成员,并且我们没有root密码:
#vi / etc / group lkadmin:X:1001:根,贝
打开LifeKeeper GUI
建立与sql-linux1的公共IP地址的VNC连接。 根据上面的VNC和入站安全规则配置,您将使用之前指定的VNC密码连接到<Public_IP>:2。 登录后,打开终端窗口并使用以下命令运行LifeKeeper GUI:
#/ opt / LifeKeeper / bin / lkGUIapp&
系统将提示您连接到第一个群集节点(“sql-linux1”)。 输入在VM创建期间指定的linux用户标识和密码:接下来,通过单击以下屏幕截图中突出显示的“连接到服务器”按钮连接到“sql-linux2”和“sql-witness”:您现在应该看到所有3个服务器GUI,带有绿色复选标记图标,表示他们在线且健康:
创建沟通路径
右键单击“sql-linux1”并选择Create Comm Path选择“sql-linux2”和“sql-witness”,然后按照向导进行操作。 这将创建以下之间的通信路径:
- sql-linux1和sql-linux2
- sql-linux1&sql-witness
仍然需要在sql-linux2和sql-witness之间创建一个comm路径。 右键单击“sql-linux2”并选择Create Comm Path。 按照向导并选择“sql-witness”作为远程服务器:此时已创建以下通信路径:
- sql-linux1 < – > sql-linux2
- sql-linux1 < – > sql-witness
- sql-linux2 < – > sql-witness
服务器前面的图标已从绿色“复选标记”更改为黄色“危险标记”。 这是因为我们在节点之间只有一条通信路径。如果VM具有多个NIC(可以在此处找到有关创建具有多个NIC的Azure VM的信息,但本文不会介绍这些信息),则可以在每个服务器之间创建冗余通信路径。 要删除警告图标,请转到“查看”菜单,然后取消选择“Comm Path Redundancy Warning”:结果:
验证通信路径
使用“lcdstatus”命令查看群集资源的状态。 运行以下命令以验证您是否已在每个节点上正确创建了其他两个服务器的通信路径:#/ opt / LifeKeeper / bin / lcdstatus -q -d sql-linux1 MACHINE NETWORK ADDRESSES / DEVICE STIO PRIO sql-linux2 TCP 10.0.0.7/10.0.0.8 ALIVE 1 sql-witness TCP 10.0.0.7/10.0.0.9 ALIVE 1#/ opt / LifeKeeper / bin / lcdstatus -q -d sql-linux2 MACHINE NETWORK ADDRESSES / DEVICE STIO PRIO sql-linux1 TCP 10.0 .0.8 / 10.0.0.7 ALIVE 1 sql-witness TCP 10.0.0.8/10.0.0.9 ALIVE 1#/ opt / LifeKeeper / bin / lcdstatus -q -d sql-witness MACHINE NETWORK ADDRESSES / DEVICE STATE PRIO sql-linux1 TCP 10.0。0.9 / 10.0.0.7 ALIVE 1 sql-linux2 TCP 10.0.0.9/10.0.0.8 ALIVE 1
创建数据复制群集资源(即 镜子)
在继续执行此步骤之前,请确保/ var / opt / mssql在sql-linux1上已安装,但在sql-linux2上未安装。 如果需要,在sql-linux2上运行“umount / var / opt / mssql”。接下来,创建数据复制资源以将/ var / opt / mssql分区从sql-linux1(源)复制到sql-linux2(目标)。