SIOS SANless clusters

SIOS SANless clusters High-availability Machine Learning monitoring

  • Home
  • 产品
    • SIOS DataKeeper for Windows
    • SIOS Protection Suite for Linux
  • 新闻与活动
  • 服务器集群简单化
  • 成功案例
  • 联系我们
  • English
  • 中文 (中国)
  • 中文 (台灣)
  • 한국어
  • Bahasa Indonesia
  • ไทย

SQL Server for Linux的分步指南

1月 9, 2019 by Jason Aw Leave a Comment

SQL Server for Linux - 现在提供公共预览

循序渐进: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数据库的高级步骤:

  1. 创建资源组
  2. 创建一个虚拟网络
  3. 创建存储帐户
  4. 在可用性集中创建虚拟机
  5. 设置虚拟机静态IP地址
  6. 将数据磁盘添加到群集节点
  7. 创建入站安全规则以允许VNC访问
  8. Linux OS配置
  9. 安装和配置SQL Server
  10. 安装和配置群集
  11. 创建内部负载均衡器
  12. 测试群集连接

概观

本文将介绍如何在单个Azure区域中创建集群。 由于新的Azure资源管理器(ARM),群集节点(sql-linux1,sql-linux2和见证服务器)将驻留在可用性集(3个不同的故障域和更新域)中。我们将使用新的Azure资源管理器创建所有资源。配置如下所示:将蔚Linux的SQLSERVER使用以下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”。SQL-资源组1 选择您所在地区时请注意。 您的所有资源都需要位于同一区域内。 在这里,我们将把所有内容部署到“美国西部”地区: SQL-资源组2

创建虚拟网络(VNet)

接下来,如果您还没有,请创建一个虚拟网络。 虚拟网络是Azure云中专用于您的隔离网络。 您可以完全控制IP地址块和子网,路由,安全策略(即防火墙),DNS设置等内容。 您将在您的虚拟网络中启动Azure Iaas虚拟机(VM)。我的Azure帐户已经有一个名为“cluster-network”的现有VNet(10.0.0.0/16),我将在本指南中使用它。 创建一个VNet非常简单,如果你需要复习,我已经介绍过在这里创建一个。

创建存储帐户

在配置任何虚拟机之前,您需要一个存储帐户来存储它们。SQL的存储帐户1 接下来,为您的新存储帐户命名。 存储帐户名称在* ALL * Azure中必须是唯一的。 (存储在Azure存储中的每个对象都具有唯一的URL地址。存储帐户名称构成该地址的子域。)在此示例中,我将存储帐户称为“sqllinuxcluster”,但您需要在设置自己的存储帐户时选择不同的存储帐户。根据您的要求和预算选择存储类型。 为了本指南的目的,我选择了“Standard-LRS”(即 本地冗余)以最小化成本。确保您的新存储帐户已添加到您在相同位置(本示例中为“West US”)的步骤1(“sql-cluster”)中创建的资源组中: SQL的存储帐户2

在可用性集中创建虚拟机

我们将在本指南中配置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”)并选择上面提到的市场图像。SQL创建-VM1 为VM提供主机名(“sql-linux1”)和用户名/密码,稍后将用于SSH进入系统。 确保将此VM添加到资源组(“sql-cluster”),并且它与所有其他资源位于同一区域:SQL创建-VM2接下来,选择实例大小。 有关可用的各种实例大小的更多信息,请单击此处。出于本指南的目的,我选择了最小/最便宜的尺寸,在本例中为“DS1_V2标准”,以最大限度地降低成本,因为这不会运行生产工作负载。 根据您要测试的内容选择最有意义的实例大小:重要信息SQL创建-VM3:默认情况下,您的VM不会添加到可用性集中。 在确保创建新可用性集期间的“设置”屏幕上,我们将调用“sql-availability-set”。 Azure资源管理器(ARM)允许您创建具有3个故障域的可用性集。 此处的默认值很好:在下SQL创建-VM4一个屏幕上,查看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并编辑网络接口选SQL-静态IP1择与VM关联的网络接口,然后编辑IP配置。 选择“静态”并指定所需的IP地址: SQL静态-IP2

将数据磁盘添加到群集节点

接下来,我们需要为我们的集群节点添加额外的磁盘(“sql-linux1”和“sql-linux2”)。 该磁盘将存储我们的SQL数据库,稍后将在节点之间进行复制。注意:您不需要向“sql-witness”节点添加额外的磁盘。 只有“sql-linux1”和“sql-linux2”。编辑VM,选择“磁盘”,然后附加新磁盘。 根据您的工作负载选择磁盘类型(标准或高级SSD)和大小。 在这里,我在两个群集节点上创建了一个10GB标准磁盘。 就主机缓存而言,“无”或“只读”缓存很好。 我不建议使用“读/写”,因为可能会丢失数据: SQL-附加的disk1

创建入站安全规则以允许VNC访问

如果您的VM是网络安全组(NSG)的一部分,默认情况下,除非您在创建VM期间禁用它,否则“Azure防火墙”中打开的唯一端口是SSH(端口22)。 在本指南的后面,我将使用VNC访问“sql-linux1”的桌面并使用GUI配置集群。 创建入站安全规则以打开VNC访问。 在该指南中使用端口5902。 根据您的VNC配置进行调整。虚拟机 – >(选择sql-linux1) – >网络接口 – >(选择网卡) – >网络安全组 – >(选择NSG) – >入站安全规则 – >添加 SQL-安全组1

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-GUI的login1接下来,通过单击以下屏幕截图中突出显示的“连接到服务器”按钮连接到“sql-linux2”和“sql-witSQL-GUI的CONNECT1ness”:您现在应该看到所有3个服务器GUI,带有绿色复选标记图标,表示他们在线且健康: SQL-GUI的CONNECT2

创建沟通路径

右键单击“sql-linux1”并选择Create Comm PaSQL-GUI的COMM1th选择“sql-linux2”和“sql-witness”,然后按照向导进行操作。 这将创建以下之间的通信路径:

  • sql-linux1和sql-linux2
  • sql-linux1&sql-witness

SQL-GUI的COMM2 仍然需要在sql-linux2和sql-witness之间创建一个comm路径。  右键单击“sql-linux2”并选择Create Comm Path。 按照向导并选择“sql-witness”作SQL-GUI的comm3为远程服务器:此时已创建以下通信路径:

  • sql-linux1 < – > sql-linux2
  • sql-linux1 < – > sql-witness
  • sql-linux2 < – > sql-witness

服务器前面的图标已从绿色“复选标记”更改为黄色“危险标记”。 这是因为我们在节点之间只有一条通信路径。如果VM具有多个NIC(可以在此处找到有关创建具有多个NIC的Azure VM的信息,但本文不会介绍这些信息),则可以在每个服务器之间创建冗余通信路径。SQL-GUI的comm4 要删除警告图标,请转到“查看”菜单,然后取消选择“Comm Path Redundancy WarningSQL-GUI的comm5”:结果: SQL贵节点绿色

验证通信路径

使用“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(目标)。 

 
 
 
 
 
 
 
 
 

  

 
 
 
 
 
 
 
 
 
 

  

 

  

 
 
 
 
 
 
 

 

 
 
 
 
 
 
 
 

 

          

 

   

  •  
  •  
  •  
  •  
 

 

 

 
 
 

 

 
 
 

 

 
 
 

 

 
 
 

 

 

 

   

 
 
 
 
 
 
 
 
 
 

 

 
 
 
 
 
 

  

 

        

 

              

 

  

 

 

 
 

 
 

 

  

 

 

 
 

 
 

 

 

 

Filed Under: 服务器集群简单化

循序渐进:如何在没有共享存储的情况下在Google Cloud Platform(Google Compute Engine)上配置Linux故障转移群集#google #gce #sanless #cluster

1月 6, 2019 by Jason Aw Leave a Comment

分步如何在没有共享存储的Microsoft Azure IaaS中配置Linux故障转移群集azure sanless

循序渐进:如何在没有共享存储的情况下在Google Cloud Platform(Google Compute Engine)上配置Linux故障转移群集#google #gce #sanless #cluster

在本分步指南中,我将向您介绍在Google Cloud Platform(Google Compute Engine,又名GCE)中配置高可用性2节点MySQL群集(以及见证服务器)所需的所有步骤。 该指南包括适当的屏幕截图,shell命令和代码片段。 我假设您对Google Cloud Platform有点熟悉并且已经拥有一个帐户。 如果没有,您今天就可以报名参加免费试用。 我还将假设您具有基本的Linux系统管理技能,并了解基本的故障转移群集概念,如虚拟IP,仲裁等。

免责声明:云是一个快速发展的目标。 因此,功能/屏幕/按钮必然会随着时间的推移而发生变化,因此您的体验可能会与您在下面看到的略有不同。 虽然本指南将向您展示如何使MySQL数据库具有高可用性,但您当然可以调整此信息和流程以保护其他应用程序或数据库,如SAP,PostgreSQL,Oracle,WebSphere MQ,NFS文件服务器等。以下是在Google Compute Engine中创建高可用性MySQL数据库的高级步骤:

  1. 创建一个项目
  2. 创建实例(虚拟机)
  3. 创建实例组
  4. 创建防火墙规则以允许VNC访问
  5. Linux OS配置
  6. 安装和配置MySQL
  7. 安装和配置群集
  8. 创建内部负载均衡器
  9. 为内部负载均衡器创建防火墙规则
  10. 测试群集连接

概观

本文将介绍如何在单个Google Cloud区域内创建群集。 群集节点(node1,node2和见证服务器)将全部驻留在“us-central1”区域(10.128.0.0/20网络)中,但您可以相应地选择您的区域。配置如下所示:将使用以下IP地址:

  • node1:10.128.0.2
  • node2:10.128.0.3
  • 见证人:10.128.0.4
  • 内部负载均衡器IP:10.128.0.99
  • MySQL端口:3306

创建一个项目

首次登录时,您将看到一个空的Home Dashboard,并将被要求创建一个Project。 我们将创建的所有Google Compute Engine资源都属于此Google Cloud Platform项目。 在这里,我们将调用我们新创建的项目“LinuxCluster”:

创建实例(虚拟机)

我们将在本指南中配置3台虚拟机。 前两个VM(我称之为“node1”和“node2”)将作为集群节点运行,能够将MySQL数据库及其相关资源联机。 第三个VM将充当群集的见证服务器,以增强对裂脑的保护。为确保最大可用性,所有3个VM将驻留在该区域内的不同区域中(在此示例中:us-central1-a,us-central1-b,us-central1-c)。

创建“节点1”实例

创建第一个VM实例(“node1”)。 如果这是您第一次创建实例,则屏幕将如下图所示。单击屏幕中央的“创建实例”按钮:如果您已在GCE中运行其他实例,则您的屏幕看起来会有所不同。 仍然,单击“创建实例”继续:默认情况下,默认情况下通常会选择Debian linux。 我们*不要*因为我们将在本指南中使用CentOS 6.X。为实例命名(“node1”),选择我们区域内的第一个区域(a)(us-central1),并确保单击“更改”以选择正确的引导映像。 您可以根据工作负载要求调整实例的大小,但出于本指南的目的,我们将使用默认大小来最小化成本,这是一个相当小的VM(1个vCPU,只有3.75GB RAM)在Boot disk pop中在屏幕上,选择CentOS 6,在底部我们将使用SSD启动盘。 对于本指南而言,10GB就足够了。 您可以相应地调整系统大小:单击“选择”后,您将返回“创建实例”屏幕。 在底部,单击“管理,磁盘,网络,SSH密钥”,因为我们将向VM添加第二个磁盘。 第二个磁盘将用于存储我们的数据库,它将在以后由集群软件复制/同步。  选择“Disks”选项卡,然后单击“Add item”将第二个磁盘添加到此实例:单击“Create disk”:为新磁盘命名,选择所需类型,然后从空白磁盘开始。 在此示例配置中,10 GB应该足以满足我们的需求。 注意:记住您在此处设置的值。 两个群集节点(node1和node2)都需要是SAME SIZE:最后,单击“Networking”选项卡,并为node1提供客户内部IP。 单击“创建”以启动新实例:

创建“node2”

重复上述步骤两次以创建第二个群集节点(“node2”)。 像创建node1一样创建此实例,包括添加第二个磁盘。重要提示:确保它位于不同的区域(us-central1-b)并为其提供唯一的IP(10.128.0.3)

创建“见证”VM

创建第三个VM(“见证”)并确保它位于前两个实例的不同区域(us-central1-c)中。注意:此实例不需要添加额外的磁盘。 您的3个VM实例可能需要一段时间才能进行配置。 完成后,您将在Google云端控制台的VM Instances屏幕上看到您的VM。 验证是否已将每个VM正确启动到其他区域:  

创建实例组

在本指南的后面部分,我们将创建一个内部负载均衡器,以将流量路由到活动群集节点。 Google Cloud Platform上可用的所有可能的负载均衡器配置都需要实例组来为负载均衡器发送的流量提供服务。将创建两个实例组,每个实例组将包含一个群集节点。

创建实例组1

为您的第一个实例组命名(“instance-group-1a”),选择“Single-zone”并确保正确选择第一个VM实例所在的区域。 在这里,我们选择us-central-1a,因为那是部署“node1”的地方。 在下面,选择“选择现有实例”并从VM实例下拉列表中选择“node1”:

创建实例组2

再次重复上一步,这次选择第二个节点所在的区域。 us-central-1b和node2:

创建防火墙规则以允许VNC访问

您可以通过导航到以下内容来查看所有现有防火墙规则:网络 – >防火墙规则默认情况下,从外部世界打开到您的VM的“Google防火墙”中打开的唯一端口是ping,SSH(端口22)和RDP(港口3389)。 在本指南的后面,我们将使用VNC访问“node1”的桌面并使用GUI配置集群。 创建防火墙规则以允许VNC访问。 在该指南中使用端口5902。 根据您的VNC配置进行调整。  

Linux OS配置

接下来,我们需要配置我们实例的Linux操作系统并在命令行上弄脏,作为Linux管理员,您现在应该习惯这样做。有许多方法可以连接到Linux VM的控制台。 您可以直接从GCE Web界面启动SSH连接,也可以在笔记本电脑/工作站上本地安装Google Cloud SDK。要使用浏览器进行SSH,只需转到计算 – > VM实例,然后转到要连接的VM的右侧,在“连接”下选择“在浏览器窗口中打开”。 如果您希望在笔记本电脑/工作站上本机安装Google Cloud命令行工具,请参阅此处的文档:https://cloud.google.com/sdk/docs/quickstarts连接后,使用“sudo”命令获得root权限:

$ sudo su  - 

编辑/ etc / hosts

除非您已经设置了DNS服务器,否则您需要在所有3台服务器上创建主机文件条目,以便它们可以通过名称正确地相互解析。将以下行添加到/ etc / hosts文件的末尾:

10.128.0.2 node1
10.128.0.3 node2
10.128.0.4证人
10.128.0.99 mysql-vip

禁用SELinux

编辑/ etc / sysconfig / linux并设置“SELINUX = disabled”:

#vi / etc / sysconfig / selinux

#此文件控制系统上SELinux的状态。
#SELINUX =可以采用以下三个值中的一个:
#enforcing  - 强制执行SELinux安全策略。
#permissive  -  SELinux打印警告而不是强制执行。
#disabled  - 未加载SELinux策略。
SELINUX =禁用
#SELINUXTYPE =可以采用以下两个值之一:
#targeted  - 目标进程受到保护,
#mls  - 多级安全保护。
SELINUXTYPE =针对性

安装各种RPM包

接下来,安装一些rpm软件包,稍后将需要这些软件包作为我们的集群软件的先决条件:

#yum install redhat-lsb补丁

安装和配置VNC(及相关软件包)

要访问我们的Linux服务器的GUI,以便稍后配置我们的集群,请在您的集群节点上安装VNC服务器。 在我的设置中,我只在“node1”上执行此操作

#yum install tigervnc-server xterm
#vncpasswd
#vi / etc / sysconfig / vncservers

      VNCSERVERS = “2:根”
      VNCSERVERARGS [2] =“ - 几何1024x768”

#service vncserver start
#chkconfig vncserver on

通过在笔记本电脑/台式机上打开VNC客户端并连接到群集节点的公共IP来测试连接性

重新启动群集节点

重新启动以禁用SELinux。需要重新启动所有3个系统(node1,node2,见证)。

分区和格式化“数据”磁盘

在VM实例创建期间,为每个群集节点添加了一个额外的磁盘,以存储我们将要保护的应用程序数据。 在这种情况下,它恰好是MySQL数据库。我们的VM的磁盘配置如下:

  • / dev / sda – 操作系统磁盘
  • / dev / sdb – 数据磁盘

在实例创建/ dev / sdb期间添加了第二个磁盘。 您可以运行“fdisk -l”命令进行验证。 您将看到/ dev / sda(OS)已经有一个磁盘分区并正在使用。

#fdisk -l

磁盘/ dev / sda:10.7 GB,10737418240字节
255个头,63个扇区/轨道,1305个气缸
单位= 16065 * 512 = 8225280字节的柱面
扇区大小(逻辑/物理):512字节/ 4096字节
I / O大小(最小/最佳):4096字节/ 4096字节
磁盘标识符:0x00035e98

 设备启动开始结束块ID系统
/ dev / sda1 * 1 1306 10484736 83 Linux

磁盘/ dev / sdb:10.7 GB,10737418240字节
64个头,32个扇区/轨道,10240个气缸
单位= 2048 * 512 = 1048576字节的柱面
扇区大小(逻辑/物理):512字节/ 4096字节
I / O大小(最小/最佳):4096字节/ 4096字节
磁盘标识符:0x762b810b


这里我们将创建一个分区(/ dev / sdb1),对其进行格式化,并将其挂载到MySQL的默认位置,即/ var / lib / mysql。 在“node1”和“node2”上执行以下步骤:

#fdisk / dev / sdb
命令(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 @ node1~]#

#mkfs.ext4 / dev / sdb1
#mkdir / var / lib / mysql

在node1上,挂载文件系统:

#mount / dev / sdb1 / var / lib / mysql

安装和配置MySQL

接下来,安装安装MySQL包,初始化示例数据库,并为MySQL设置“root”密码。

在“node1”上:

#yum -y install mysql mysql-server
#/ usr / bin / mysql_install_db --datadir =“/ var / lib / mysql /” -  user = mysql
#mysqld_safe --user = root --socket = / var / lib / mysql / mysql.sock --port = 3306 --datadir = / var / lib / mysql --log&
#
##注意:下一个命令允许来自任何主机的远程连接。生产不是一个好主意!
#echo“update user set Host ='%'where host ='node1'; flush privileges”| mysql mysql
#
##将MySQL的root密码设置为'SIOS'
#echo“update user set Password = PASSWORD('SIOS')其中User ='root'; flush特权”| mysql mysql

创建MySQL配置文件。我们将它放在数据磁盘上(稍后将被复制 – /var/lib/mysql/my.cnf)。 例:

#vi /var/lib/mysql/my.cnf

的[mysqld]
DATADIR =的/ var / lib中/ MySQL的
插座=的/ var / lib中/ MySQL的/的mysql.sock
PID文件=的/ var / lib中/ MySQL的/ mysqld.pid
用户=根
端口= 3306
#建议禁用符号链接以防止出现各种安全风险
符号链接= 0
 
[mysqld_safe的]
对数误差=的/ var /数/ mysqld.log
PID文件= / var / run中/ mysqld的/ mysqld.pid
 
[客户]
用户=根
密码= SIOS

删除位于/ etc中的原始MySQL配置文件(如果存在):

#rm /etc/my.cnf

在“node2”上:

在“node2”上,您只需要安装MySQL软件包。 其他步骤不是必需的:

[root @ node2~] #yum -y install mysql mysql-server

安装和配置群集

此时,我们已准备好安装和配置我们的集群。 SIOS Protection Suite for Linux(又名SPS-Linux)将在本指南中用作群集技术。 它在单个集成解决方案中提供高可用性故障转移群集功能(LifeKeeper)以及实时,块级数据复制(DataKeeper)。 SPS-Linux使您能够部署“SANLess”群集,即“无共享”群集,这意味着群集节点没有任何共享存储,就像Azure VM一样。

安装适用于Linux的SIOS Protection Suite

在所有3个VM(node1,node2,见证)上执行以下步骤:下载SPS-Linux安装映像文件(sps.img),并获取试用许可证或购买永久许可证。 有关更多信息,请联系SIOS。您将环回安装它并以root身份运行“setup”脚本(或首先“sudo su – ”以获取根shell)例如:

#mkdir / tmp / install
#mount -o loop sps.img / tmp / install
#cd / tmp / install
# 。/建立

在安装脚本期间,系统会提示您回答一些问题。 您将在几乎每个屏幕上按Enter键以接受默认值。 请注意以下例外情况:

  • 在标题为“High Availability NFS”的屏幕上,您可以选择“n”,因为我们不会创建高可用性NFS服务器
  • 在安装脚本结束时,您可以选择立即或稍后安装试用许可证密钥。我们稍后会安装许可证密钥,因此您可以安全地选择“n”
  • 在“设置”的最后一个屏幕中,从屏幕上显示的列表中选择要安装的ARK(应用程序恢复工具包,即“群集代理”)。
    • 仅在“node1”和“node2”上需要ARK。 你不需要在“见证”上安装
    • 使用向上/向下箭头导航列表,然后按空格键选择以下内容:
      • lkDR – 适用于Linux的DataKeeper
      • lkSQL – LifeKeeper MySQL RDBMS恢复工具包
    • 这将导致在“node1”和“node2”上安装以下附加RPM:
      • SteelEye公司 – LKDR-9.0.2-6513.noarch.rpm
      • SteelEye公司 – lkSQL-9.0.2-6513.noarch.rpm

安装Witness / Quorum包

LifeKeeper(steeleye-lkQWK)的Quorum / Witness服务器支持包与LifeKeeper核心的现有故障转移过程相结合,可以在总体网络故障常见的情况下以更大的可信度进行系统故障转移。这实际上意味着可以在大大降低“裂脑”情况的风险的同时进行故障转移。在所有3个节点(node1,node2,见证)上安装Witness / Quorum rpm:

#cd / tmp / install / quorum
#rpm -Uvh steeleye-lkQWK-9.0.2-6513.noarch.rpm

在所有3个节点(node1,node2,见证)上,编辑/ etc / default / LifeKeeper,设置NOBCASTPING = 1仅打开见证服务器(“见证”),编辑/ 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的用户权限

  

 

 

 

   

 

   

 

  

  •  
  •  

    

  •  
  •  
  •  

       

 

  

  

  

 
 
 
 
 
 
 
 
 

  

 
 
 
 
 
 
 
 
 
 

    

 

   

 
 
 
 
 
 

 

 
 
 
 

    

创建内部负载均衡器

              

为内部负载均衡器创建防火墙规则

       

  •  
  •  

   

测试群集连接

  

 

 

 

 

 
  
 
  
 
  
 
 

    

 
 
  
 
 
  
 
  
 
  
 
 

 

Filed Under: 服务器集群简单化

循序渐进:如何在没有共享存储的情况下在Google Cloud Platform(Google Compute Engine)上配置Linux故障转移群集#google #gce #sanless #cluster

1月 6, 2019 by Jason Aw Leave a Comment

循序渐进:如何在没有共享存储的情况下在Google Cloud Platform(Google Compute Engine)上配置Linux故障转移群集#google #gce #sanless #cluster

在本分步指南中,我将向您介绍在Google Cloud Platform(Google Compute Engine,又名GCE)中配置高可用性2节点MySQL群集(以及见证服务器)所需的所有步骤。 该指南包括适当的屏幕截图,shell命令和代码片段。 我假设您对Google Cloud Platform有点熟悉并且已经拥有一个帐户。 如果没有,您今天就可以报名参加免费试用。 我还将假设您具有基本的Linux系统管理技能,并了解基本的故障转移群集概念,如虚拟IP,仲裁等。

免责声明:云是一个快速发展的目标。 因此,功能/屏幕/按钮必然会随着时间的推移而发生变化,因此您的体验可能会与您在下面看到的略有不同。 虽然本指南将向您展示如何使MySQL数据库具有高可用性,但您当然可以调整此信息和流程以保护其他应用程序或数据库,如SAP,PostgreSQL,Oracle,WebSphere MQ,NFS文件服务器等。以下是在Google Compute Engine中创建高可用性MySQL数据库的高级步骤:

  1. 创建一个项目
  2. 创建实例(虚拟机)
  3. 创建实例组
  4. 创建防火墙规则以允许VNC访问
  5. Linux OS配置
  6. 安装和配置MySQL
  7. 安装和配置群集
  8. 创建内部负载均衡器
  9. 为内部负载均衡器创建防火墙规则
  10. 测试群集连接

概观

本文将介绍如何在单个Google Cloud区域内创建群集。 群集节点(node1,node2和见证服务器)将全部驻留在“us-central1”区域(10.128.0.0/20网络)中,但您可以相应地选择您的区域。配置如下所示:将使用以下IP地址:

  • node1:10.128.0.2
  • node2:10.128.0.3
  • 见证人:10.128.0.4
  • 内部负载均衡器IP:10.128.0.99
  • MySQL端口:3306

创建一个项目

首次登录时,您将看到一个空的Home Dashboard,并将被要求创建一个Project。 我们将创建的所有Google Compute Engine资源都属于此Google Cloud Platform项目。 在这里,我们将调用我们新创建的项目“LinuxCluster”:

创建实例(虚拟机)

我们将在本指南中配置3台虚拟机。 前两个VM(我称之为“node1”和“node2”)将作为集群节点运行,能够将MySQL数据库及其相关资源联机。 第三个VM将充当群集的见证服务器,以增强对裂脑的保护。为确保最大可用性,所有3个VM将驻留在该区域内的不同区域中(在此示例中:us-central1-a,us-central1-b,us-central1-c)。

创建“节点1”实例

创建第一个VM实例(“node1”)。 如果这是您第一次创建实例,则屏幕将如下图所示。单击屏幕中央的“创建实例”按钮:如果您已在GCE中运行其他实例,则您的屏幕看起来会有所不同。 仍然,单击“创建实例”继续:默认情况下,默认情况下通常会选择Debian linux。 我们*不要*因为我们将在本指南中使用CentOS 6.X。为实例命名(“node1”),选择我们区域内的第一个区域(a)(us-central1),并确保单击“更改”以选择正确的引导映像。 您可以根据工作负载要求调整实例的大小,但出于本指南的目的,我们将使用默认大小来最小化成本,这是一个相当小的VM(1个vCPU,只有3.75GB RAM)在Boot disk pop中在屏幕上,选择CentOS 6,在底部我们将使用SSD启动盘。 对于本指南而言,10GB就足够了。 您可以相应地调整系统大小:单击“选择”后,您将返回“创建实例”屏幕。 在底部,单击“管理,磁盘,网络,SSH密钥”,因为我们将向VM添加第二个磁盘。 第二个磁盘将用于存储我们的数据库,它将在以后由集群软件复制/同步。  选择“Disks”选项卡,然后单击“Add item”将第二个磁盘添加到此实例:单击“Create disk”:为新磁盘命名,选择所需类型,然后从空白磁盘开始。 在此示例配置中,10 GB应该足以满足我们的需求。 注意:记住您在此处设置的值。 两个群集节点(node1和node2)都需要是SAME SIZE:最后,单击“Networking”选项卡,并为node1提供客户内部IP。 单击“创建”以启动新实例:

创建“node2”

重复上述步骤两次以创建第二个群集节点(“node2”)。 像创建node1一样创建此实例,包括添加第二个磁盘。重要提示:确保它位于不同的区域(us-central1-b)并为其提供唯一的IP(10.128.0.3)

创建“见证”VM

创建第三个VM(“见证”)并确保它位于前两个实例的不同区域(us-central1-c)中。注意:此实例不需要添加额外的磁盘。 您的3个VM实例可能需要一段时间才能进行配置。 完成后,您将在Google云端控制台的VM Instances屏幕上看到您的VM。 验证是否已将每个VM正确启动到其他区域:  

创建实例组

在本指南的后面部分,我们将创建一个内部负载均衡器,以将流量路由到活动群集节点。 Google Cloud Platform上可用的所有可能的负载均衡器配置都需要实例组来为负载均衡器发送的流量提供服务。将创建两个实例组,每个实例组将包含一个群集节点。

创建实例组1

为您的第一个实例组命名(“instance-group-1a”),选择“Single-zone”并确保正确选择第一个VM实例所在的区域。 在这里,我们选择us-central-1a,因为那是部署“node1”的地方。 在下面,选择“选择现有实例”并从VM实例下拉列表中选择“node1”:

创建实例组2

再次重复上一步,这次选择第二个节点所在的区域。 us-central-1b和node2:

创建防火墙规则以允许VNC访问

您可以通过导航到以下内容来查看所有现有防火墙规则:网络 – >防火墙规则默认情况下,从外部世界打开到您的VM的“Google防火墙”中打开的唯一端口是ping,SSH(端口22)和RDP(港口3389)。 在本指南的后面,我们将使用VNC访问“node1”的桌面并使用GUI配置集群。 创建防火墙规则以允许VNC访问。 在该指南中使用端口5902。 根据您的VNC配置进行调整。  

Linux OS配置

接下来,我们需要配置我们实例的Linux操作系统并在命令行上弄脏,作为Linux管理员,您现在应该习惯这样做。有许多方法可以连接到Linux VM的控制台。 您可以直接从GCE Web界面启动SSH连接,也可以在笔记本电脑/工作站上本地安装Google Cloud SDK。要使用浏览器进行SSH,只需转到计算 – > VM实例,然后转到要连接的VM的右侧,在“连接”下选择“在浏览器窗口中打开”。 如果您希望在笔记本电脑/工作站上本机安装Google Cloud命令行工具,请参阅此处的文档:https://cloud.google.com/sdk/docs/quickstarts连接后,使用“sudo”命令获得root权限:

$ sudo su  - 

编辑/ etc / hosts

除非您已经设置了DNS服务器,否则您需要在所有3台服务器上创建主机文件条目,以便它们可以通过名称正确地相互解析。将以下行添加到/ etc / hosts文件的末尾:

10.128.0.2 node1
10.128.0.3 node2
10.128.0.4证人
10.128.0.99 mysql-vip

禁用SELinux

编辑/ etc / sysconfig / linux并设置“SELINUX = disabled”:

#vi / etc / sysconfig / selinux

#此文件控制系统上SELinux的状态。
#SELINUX =可以采用以下三个值中的一个:
#enforcing  - 强制执行SELinux安全策略。
#permissive  -  SELinux打印警告而不是强制执行。
#disabled  - 未加载SELinux策略。
SELINUX =禁用
#SELINUXTYPE =可以采用以下两个值之一:
#targeted  - 目标进程受到保护,
#mls  - 多级安全保护。
SELINUXTYPE =针对性

安装各种RPM包

接下来,安装一些rpm软件包,稍后将需要这些软件包作为我们的集群软件的先决条件:

#yum install redhat-lsb补丁

安装和配置VNC(及相关软件包)

要访问我们的Linux服务器的GUI,以便稍后配置我们的集群,请在您的集群节点上安装VNC服务器。 在我的设置中,我只在“node1”上执行此操作

#yum install tigervnc-server xterm
#vncpasswd
#vi / etc / sysconfig / vncservers

      VNCSERVERS = “2:根”
      VNCSERVERARGS [2] =“ - 几何1024x768”

#service vncserver start
#chkconfig vncserver on

通过在笔记本电脑/台式机上打开VNC客户端并连接到群集节点的公共IP来测试连接性

重新启动群集节点

重新启动以禁用SELinux。需要重新启动所有3个系统(node1,node2,见证)。

分区和格式化“数据”磁盘

在VM实例创建期间,为每个群集节点添加了一个额外的磁盘,以存储我们将要保护的应用程序数据。 在这种情况下,它恰好是MySQL数据库。我们的VM的磁盘配置如下:

  • / dev / sda – 操作系统磁盘
  • / dev / sdb – 数据磁盘

在实例创建/ dev / sdb期间添加了第二个磁盘。 您可以运行“fdisk -l”命令进行验证。 您将看到/ dev / sda(OS)已经有一个磁盘分区并正在使用。

#fdisk -l

磁盘/ dev / sda:10.7 GB,10737418240字节
255个头,63个扇区/轨道,1305个气缸
单位= 16065 * 512 = 8225280字节的柱面
扇区大小(逻辑/物理):512字节/ 4096字节
I / O大小(最小/最佳):4096字节/ 4096字节
磁盘标识符:0x00035e98

 设备启动开始结束块ID系统
/ dev / sda1 * 1 1306 10484736 83 Linux

磁盘/ dev / sdb:10.7 GB,10737418240字节
64个头,32个扇区/轨道,10240个气缸
单位= 2048 * 512 = 1048576字节的柱面
扇区大小(逻辑/物理):512字节/ 4096字节
I / O大小(最小/最佳):4096字节/ 4096字节
磁盘标识符:0x762b810b


这里我们将创建一个分区(/ dev / sdb1),对其进行格式化,并将其挂载到MySQL的默认位置,即/ var / lib / mysql。 在“node1”和“node2”上执行以下步骤:

#fdisk / dev / sdb
命令(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 @ node1~]#

#mkfs.ext4 / dev / sdb1
#mkdir / var / lib / mysql

在node1上,挂载文件系统:

#mount / dev / sdb1 / var / lib / mysql

安装和配置MySQL

接下来,安装安装MySQL包,初始化示例数据库,并为MySQL设置“root”密码。

在“node1”上:

#yum -y install mysql mysql-server
#/ usr / bin / mysql_install_db --datadir =“/ var / lib / mysql /” -  user = mysql
#mysqld_safe --user = root --socket = / var / lib / mysql / mysql.sock --port = 3306 --datadir = / var / lib / mysql --log&
#
##注意:下一个命令允许来自任何主机的远程连接。生产不是一个好主意!
#echo“update user set Host ='%'where host ='node1'; flush privileges”| mysql mysql
#
##将MySQL的root密码设置为'SIOS'
#echo“update user set Password = PASSWORD('SIOS')其中User ='root'; flush特权”| mysql mysql

创建MySQL配置文件。我们将它放在数据磁盘上(稍后将被复制 – /var/lib/mysql/my.cnf)。 例:

#vi /var/lib/mysql/my.cnf

的[mysqld]
DATADIR =的/ var / lib中/ MySQL的
插座=的/ var / lib中/ MySQL的/的mysql.sock
PID文件=的/ var / lib中/ MySQL的/ mysqld.pid
用户=根
端口= 3306
#建议禁用符号链接以防止出现各种安全风险
符号链接= 0
 
[mysqld_safe的]
对数误差=的/ var /数/ mysqld.log
PID文件= / var / run中/ mysqld的/ mysqld.pid
 
[客户]
用户=根
密码= SIOS

删除位于/ etc中的原始MySQL配置文件(如果存在):

#rm /etc/my.cnf

在“node2”上:

在“node2”上,您只需要安装MySQL软件包。 其他步骤不是必需的:

[root @ node2~] #yum -y install mysql mysql-server

安装和配置群集

此时,我们已准备好安装和配置我们的集群。 SIOS Protection Suite for Linux(又名SPS-Linux)将在本指南中用作群集技术。 它在单个集成解决方案中提供高可用性故障转移群集功能(LifeKeeper)以及实时,块级数据复制(DataKeeper)。 SPS-Linux使您能够部署“SANLess”群集,即“无共享”群集,这意味着群集节点没有任何共享存储,就像Azure VM一样。

安装适用于Linux的SIOS Protection Suite

在所有3个VM(node1,node2,见证)上执行以下步骤:下载SPS-Linux安装映像文件(sps.img),并获取试用许可证或购买永久许可证。 有关更多信息,请联系SIOS。您将环回安装它并以root身份运行“setup”脚本(或首先“sudo su – ”以获取根shell)例如:

#mkdir / tmp / install
#mount -o loop sps.img / tmp / install
#cd / tmp / install
# 。/建立

在安装脚本期间,系统会提示您回答一些问题。 您将在几乎每个屏幕上按Enter键以接受默认值。 请注意以下例外情况:

  • 在标题为“High Availability NFS”的屏幕上,您可以选择“n”,因为我们不会创建高可用性NFS服务器
  • 在安装脚本结束时,您可以选择立即或稍后安装试用许可证密钥。我们稍后会安装许可证密钥,因此您可以安全地选择“n”
  • 在“设置”的最后一个屏幕中,从屏幕上显示的列表中选择要安装的ARK(应用程序恢复工具包,即“群集代理”)。
    • 仅在“node1”和“node2”上需要ARK。 你不需要在“见证”上安装
    • 使用向上/向下箭头导航列表,然后按空格键选择以下内容:
      • lkDR – 适用于Linux的DataKeeper
      • lkSQL – LifeKeeper MySQL RDBMS恢复工具包
    • 这将导致在“node1”和“node2”上安装以下附加RPM:
      • SteelEye公司 – LKDR-9.0.2-6513.noarch.rpm
      • SteelEye公司 – lkSQL-9.0.2-6513.noarch.rpm

安装Witness / Quorum包

LifeKeeper(steeleye-lkQWK)的Quorum / Witness服务器支持包与LifeKeeper核心的现有故障转移过程相结合,可以在总体网络故障常见的情况下以更大的可信度进行系统故障转移。这实际上意味着可以在大大降低“裂脑”情况的风险的同时进行故障转移。在所有3个节点(node1,node2,见证)上安装Witness / Quorum rpm:

#cd / tmp / install / quorum
#rpm -Uvh steeleye-lkQWK-9.0.2-6513.noarch.rpm

在所有3个节点(node1,node2,见证)上,编辑/ etc / default / LifeKeeper,设置NOBCASTPING = 1仅打开见证服务器(“见证”),编辑/ 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”用户(或您登录的任何用户名)添加到“lkadmin”组以授予对LifeKeeper GUI的访问权限。 默认情况下,只有“root”是该组的成员,并且我们没有root密码:

#vi / etc / group

lkadmin:X:502:根,贝

打开LifeKeeper GUI

与node1的公共IP地址建立VNC连接。 根据上面的VNC和防火墙规则配置,您将使用之前指定的VNC密码连接到<Public_IP>:2。 登录后,打开终端窗口并使用以下命令运行LifeKeeper GUI:

#/ opt / LifeKeeper / bin / lkGUIapp&

系统将提示您连接到第一个群集节点(“node1”)。 输入在VM创建期间指定的linux用户标识和密码:LK-GUI的CONNECT1接下来,通过单击以下屏幕截图中突出显示的“连接到服务器”按钮连接到“node2”和“witnessLK-GUI的CONNECT2”:您现在应该看到GUI中的所有3个服务器,一个绿色的复选标记图标,表明他们在线和健康: LK-GUI的连接3

创建沟通路径

右键单击“node1”并选择Create Comm Patcomm path1h选择BOTH“node2”和“witness”,然后按照向导进行操作。 这将创建以下之间的通信路径:

  • node1和node2
  • node1&witness

comm path2 仍然需要在node2和witness之间创建comm路径。  右键单击“node2”并选择Create Comm Path。 按照向导选择“见证”作为远程服comm path3务器:此时已创建以下通信路径:

  • node1 < – > node2
  • node1 < – >见证
  • node2 < – >见证

服务器前面的图标已从绿色“复选标记”更改为黄色“危险标记”。 这是因为我们在节点之间只有一条通信路径。如果VM具有多个NIC(可以在此处找到有关创建具有多个NIC的Azure VM的信息,但本文不会介绍这些信息),则可以在每个服务器之间创建冗余通信路径。comm path4 要删除警告图标,请转到“查看”菜单,然后取消选择“Comm Path Redundancy Warningcomm path5”:结果: comm path6

验证通信路径

使用“lcdstatus”命令查看群集资源的状态。 运行以下命令以验证您是否已在每个节点上正确创建了与其他两个服务器相关的通信路径:#/ opt / LifeKeeper / bin / lcdstatus -q -d node1 MACHINE NETWORK ADDRESSES / DEVICE STATE PRIO node2 TCP 10.128.0.2/ 10.128.0.3 ALIVE 1见证TCP 10.128.0.2/10.128.0.4 ALIVE 1#/ opt / LifeKeeper / bin / lcdstatus -q -d node2 MACHINE NETWORK ADDRESSES / DEVICE STATE PRIO node1 TCP 10.128.0.3/10.128.0.2 ALIVE 1见证TCP 10.128.0.3/10.128.0.4 ALIVE 1#/ opt / LifeKeeper / bin / lcdstatus -q -d witness MACHINE NETWORK ADDRESSES / DEVICE STATE PRIO node1 TCP 10.128.0.4/10.128.0.2 ALIVE 1 node2 TCP 10.128.0.4/10.128.0.3活着1

创建数据复制群集资源(即 镜子)

接下来,创建数据复制资源以将/ var / lib / mysql分区从node1(source)复制到node2(target)。 单击“绿色加号”图标以创建新资数据复制1源:按照向导进行以下选择:

请选择恢复工具包:数据复制
转换类型:智能
服务器:node1
层次结构类型:复制退出文件系统
现有的挂载点:/ var / lib / mysql
数据复制资源标记:datarep-mysql
文件系统资源选项卡:/ var / lib / mysql
位图文件:(默认值)
启用异步复制:否

创建资源后,将出现“扩展”(即定义备份服务器)向导。 使用以下选项:

目标服务器:node2
转换类型:智能
模板优先级:1
目标优先级:10
目标磁盘:/ dev / sdb1
数据复制资源标记:datarep-mysql
位图文件:(默认值)
复制路径:10.128.0.2/10.128.0.3
挂载点:/ var / lib / mysql
根标签:/ var / lib / mysql

群集将如下所示: 数据复制2  

创建MySQL资源层次结构

接下来,创建一个MySQL集群资源。 MySQL资源负责停止/启动/监视MySQL数据库。 要创建,请单击“绿色加号”图标以创建新资源:按照向导使用以下选项创建IP资源:

选择Recovery Kit:MySQL Database
转换类型:智能
服务器:node1
my.cnf的位置:/ var / lib / mysql
MySQL可执行文件的位置:/ usr / bin
数据库标签:mysql

使用以下选项扩展IP资源:

目标服务器:node2
转换类型:智能
模板优先级:1
目标优先级:10

因此,您的群集将如下所示。 请注意,数据复制资源已自动移动到数据库下(自动创建依赖关系),以确保它始终在数据库之前联机:  

创建内部负载均衡器

如果这是使用物理或虚拟服务器的典型本地群集,那么此时您就完成了。 客户端和应用程序将连接到群集的虚拟IP(10.128.0.99)以到达活动节点。 在Google Cloud中,如果没有其他一些配置,这将无效。要连接到群集,Google提供了一项功能,您可以设置内部负载均衡器(ILB)。 基本上,当您连接到ILB的IP地址(我们将设置为10.128.0.99)时,您将路由到当前活动的群集节点。创建TCP负载均衡器:这将是内部负载均衡器,因此选择“仅在我的VM之间”:接下来,为负载均衡器命名(“internal-lb”),然后单击后端配置:确保选择正确的region(“us-central1”)并配置后端。 单击“添加后端”并添加两个实例组(instance-group-1a AND instance-group-1b):负载均衡器根据运行状况检查确定将流量路由到哪个节点。 在此示例中,将配置运行状况检查以查看MySQL是否正在运行(检查默认端口3306)。 选择“创建运行状况检查”:为新运行状况检查命名(“mysql-health-check”)并为TCP端口3306配置它:接下来,配置负载均衡器的前端。 选择“前端配置”,在IP地址下,定义自定义静态内部IP 10.128.0.99。 端口应为3306,这是MySQL的默认端口:最后,查看并最终确定负载均衡器。 单击“创建”:结果。 您将看到负载均衡器处于联机状态,但是,它并未将实例组显示为正常!(如0/0所示)。 我们将在下一节中解决这个问题:

为内部负载均衡器创建防火墙规则

根据Google文档(请参阅“配置防火墙规则以允许内部负载平衡”部分),需要创建两个防火墙规则。 第一个允许流量到负载均衡器,从负载均衡器到实例。第二个允许来自健康检查器的健康检查探针。创建新的防火墙规则:为新规则指定名称(allow-internal-lb)并指定“10.128.0.0/20”作为源IP范围。 允许的协议和端口应为“tcp:3306”:单击“创建”后,您将返回到防火墙规则页面,并可在列表中看到新创建的规则。 再次单击“创建防火墙规则”,以便我们可以创建第二个必需规则:为第二个规则命名(“allow-health-check”)。 需要定义两个不同的源IP范围:

  • 130.211.0.0/22
  • 35.191.0.0/16

注意:最好仔细检查google云文档,以确保这些IP范围仍然有效。 您现在应该在列表中看到两个新创建的防火墙规则:

测试群集连接

此时,我们所有的Google云端和群集配置都已完成!群集资源当前在node1上处于活动状态:您还会注意到内部负载均衡器正在显示node1,它是instance-group-1a的成员“健康”,因此路由流量进入虚拟IP(10.128.0.99) )到node1:SSH进入见证服务器,“sudo su – ”获得root访问权限。  如果需要,安装mysql客户端:

[root @ witness~] #yum -y install mysql

测试MySQL与群集的连接:

[root @ witness~] #mysql --host = 10.128.0.99 mysql -u root -p

执行以下MySQL查询以显示活动集群节点的主机名:

mysql> select @@ hostname;
 ------------ 
| @@ hostname |
 ------------ 
| node1 |
 ------------ 
1排(0.00秒)
MySQL的>

使用LifeKeeper GUI,从Node1 – > Node2进行故障转移。 右键单击node2下面的mysql资源,然后选择“In Service …”:故障转移后,资源在node2上联机:现在您将看到内部负载均衡器显示实例组1b,其中包含node2,为健康状态。 流量现在路由到node2:故障转移完成后,重新运行MySQL查询。 您会注意到MySQL客户端已检测到会话丢失(在故障转移期间)并自动重新连接:执行以下MySQL查询以显示活动群集节点的主机名,验证现在“node2”是否处于活动状态:

mysql> select @@ hostname;
ERROR 2006(HY000):MySQL服务器已经消失
没联系。试图重新连接......
连接ID:48
当前数据库:mysql
 ------------ 
| @@ hostname |
 ------------ 
| node2 |
 ------------ 
1排(0.56秒)
MySQL的>

 

Filed Under: 服务器集群简单化

SQL Server for Linux – 现在提供公共预览

12月 21, 2018 by Jason Aw Leave a Comment

SQL Server for Linux – 现在提供公共预览

现在可以使用SQL Server v.Next的公共预览版。微软最终增加了对Linux的支持。 请查看以下链接以获取更多信息。  我将很快下载并查看高可用性功能。 敬请关注!

SQL Server v.Next Public Preview:https://www.microsoft.com/en-us/sql-server/sql-server-vnext-including-Linux原始SQL Server Linux公告:https://blogs.microsoft.com / blog / 2016/03/07 / announcing-sql-server-on-linux /经Linuxclustering许可转载

Filed Under: 服务器集群简单化

在没有共享存储的Amazon EC2中配置Linux故障转移群集

12月 20, 2018 by Jason Aw Leave a Comment

分步如何在没有共享存储的Microsoft Azure IaaS中配置Linux故障转移群集azure sanless

循序渐进:如何在没有共享存储的Amazon EC2中配置Linux故障转移群集#amazon #aws #sanless #cluster

在本分步指南中,我将向您介绍在Amazon的弹性计算云(Amazon EC2)中配置高可用性双节点MySQL群集(以及见证服务器)所需的所有步骤。 该指南包括适当的屏幕截图,shell命令和代码片段。 我假设您对Amazon EC2有点熟悉并且已经拥有一个帐户。 如果没有,您今天就可以注册。 我还将假设您具有基本的Linux系统管理技能,并了解基本的故障转移群集概念,如虚拟IP等。

免责声明:云正在快速移动目标。因此,功能/屏幕/按钮必然会随着时间的推移而发生变化,因此您的体验可能会与您在下面看到的略有不同。 虽然本指南将向您展示如何使MySQL数据库具有高可用性,但您当然可以调整此信息和流程以保护其他应用程序或数据库,如SAP,Oracle,PostgreSQL,NFS文件服务器等。以下是在Amazon EC2中创建高可用性MySQL数据库的高级步骤:

  1. 创建虚拟私有云(VPC)
  2. 创建Internet网关
  3. 创建子网(可用区)
  4. 配置路由表
  5. 配置安全组
  6. 启动实例
  7. 创建弹性IP
  8. 创建虚拟IP的路由条目
  9. 禁用ENI的源/目的地检查
  10. 获取访问密钥ID和秘密访问密钥
  11. Linux OS配置
  12. 安装EC2 API工具
  13. 安装和配置MySQL
  14. 安装和配置群集
  15. 测试群集连接

概观

本文将介绍如何在单个Amazon EC2区域中创建集群。 群集节点(node1,node2和见证服务器)将驻留在不同的可用区中,以实现最大可用性。 这也意味着节点将驻留在不同的子网中。配置如下所示:将AWS-Linux的MySQL的使用以下IP地址:

  • node1:10.0.0.4
  • node2:10.0.1.4
  • 见证人:10.0.2.4
  • 虚拟/“浮动”IP:10.1.0.10

创建虚拟私有云(VPC)

首先,创建一个虚拟私有云(也称为VPC)。VPC是亚马逊云中专用于您的隔离网络。 您可以完全控制IP地址块和子网,路由表,安全组(即防火墙)等内容。 您将在您的虚拟网络中启动Azure Iaas虚拟机(VM)。在AWS主仪表板中,选择“VPC1您的VPC”下的“VPC”,确保您已在屏幕右上角选择了适当的区域。 在本指南中,将使用“US West(Oregon)”区域,因为它是一个具有3个可用区的区域。  有关区域和可用区的更多信息,请单击此处VPC2为VPC命名,并指定要使用的IP块。 本指南将使用10.0.0.0/1VPC36:您现在应该在“您的VPC”屏幕上看到新创建的VPC: vpc4  

创建Internet网关

接下来,创建一个Internet网关。 如果您希望实例(VM)能够与Internet通信,则必须执行此操作。在左侧菜单中,选择“Internet网关”,然后单击“创建Internet网关”按钮。 为其命名,然后创建:接下来,互联网网关1将Internet网关连接到您的VPC:选择互联网网关2您的VPC,然后单击Attach: 互联网gateway3

创建子网(可用区)

接下来,创建3个子网。 每个子网都驻留在自己的可用区中。 3个实例(VM:node1,node2,见证)将启动到单独的子网(以及可用区)中,以便可用区的故障不会占用群集的多个节点。美国西部(俄勒冈州)地区,又名us-west-2,有3个可用区域(us-west-2a,us-west-2b,us-west-2c)。 创建3个子网,每个3个可用区域中有一个子网。在VPC Dashboard下,导航到Subnets,然后subnets1导航Create Subnet:给第一个子网命名(“Subnet1)”,选择us-west-2a的可用区,并定义网subnets2络块(10.0.0.0/24):Repeat to to创subnets3建第二个子网可用区us-west-2b:重复以在可用区us–subnets4west-2c中创建第三个子网:完成后,验证是否已创建3个子网,每个子网具有不同的CIDR块,并且在单独的可用性中区域,如下所示: subnets5

配置路由表

更新VPC的路由表,以便将流向外部的流量发送到上一步中创建的Internet网关。 从VPC仪表板中,选择“路由表”。  转到“路由”选项卡,默认情况下,只存在一条允许仅在VPC内进行流量的路由。单击编辑:路由表1添加其他路由:新路路由表2由的目标将为“0.0.0.0/0”(Internet),对于目标,请选择您的Internet网关。 然后单击“保路由表3存”:接下来,将3个子网与“路由表”关联。  单击“子网关联”选项卡,然路由表4后单击编辑:选中所有3个子网旁路由表5边的框,然后单击保存:验证3个子网是否与路由表6主路由表关联:稍后,我们将再次返回并更新路由表,定义允许流量与群集的虚拟IP通信的路由,但这需要在创建Linux实例(VM)之后完成。

配置安全组

编辑安全组(虚拟防火墙)以允许传入的SSH和VNC流量。 两者稍后将用于配置linux实例以及群集软件的安装/配置。在左侧菜单中,选择“安全组”,然后单击“入站规则”选项卡。 单击编辑:安全组1为SSH(端口22)和VNC添加规则。 VNC通常使用5900中的端口,具体取决于您的配置方式,因此为了本指南的目的,我们将打开5900-5910端口范围。 根据您的VNC设置进行相应配置: 安全组2  

启动实例

我们将在本指南中配置3个实例(虚拟机)。 前两个VM(称为“node1”和“node2”)将充当群集节点,能够将MySQL数据库及其相关资源联机。 第三个VM将充当群集的见证服务器,以增强对裂脑的保护。为确保最大可用性,所有3个VM将部署到单个区域内的不同可用区中。 这意味着每个实例将驻留在不同的子网中。转到AWS主仪表板,然后选择EC2: 推出-INSTANCE1

创建“节点1”

创建您的第一个实例(“node1”)。 单击Launch Ins推出-INSTANCE2tance:选择您的Linux发行版。 后来使用的集群软件支持RHEL,SLES,CentOS和Oracle Linux。 在本指南中,我们将使用RHEL 推出-instance37.X:相应地调整实例大小。 出于本指南的目的并最大限度地降低成本,使用了t2.micro大小,因为它符合免费等级。 有关实例大小和定价的更多信息,请参见此处。推出-instance4 接下来,配置实例详细信息  重要信息:确保将此第一个实例(VM)启动到“Subnet1”,并定义对子网有效的IP地址(10.0.0.0/24) – 选择10.0.0.4以下,因为它是子网中的第一个免费IP。 注意:AWS中任何给定子网中的.1 / .2 / .3都是保留的,不能使用。推出-instance5 接下来,将额外的磁盘添加到群集节点(这将在“node1”和“node2”上完成)。 该磁盘将存储我们的MySQL数据库,稍后将在节点之间进行复制。注意:您不需要向“见证”节点添加额外的磁盘。 只有“node1”和“node2”。添加新卷,并输入所需大小:为推出-instance6实例定义标记,节点1:将实推出-instance7例与现有安全组关联,因此之前创建的防火墙规则将处于活动状态:单击启动推出-instance8:重要说明推出-instance9:如果这是第一个实例在您的AWS环境中,您需要创建一个新的密钥对。 私钥文件需要存储在一个安全的位置,因为当您SSH到Linux实例时将需要它 推出-instance10

创建“node2”

重复上述步骤以创建第二个Linux实例(node2)。 完全像Node1一样配置它。 但是,请确保将其部署到“Subnet2”(us-west-2b可用区)。 Subnet2的IP范围是10.0.1.0/24,因此这里使用的IP为10.推出-instance110.1.4:确保也将第二个磁盘添加到Node2。 它应该与您添加到Node1的磁盘大小相同:为第推出-instance12二个实例添加标签…. “节点2”: 推出-instance13

创造“见证”

重复上述步骤以创建第三个Linux实例(见证)。 完全像Node1和Node2一样配置它,除了你不需要添加第二个磁盘,因为这个实例只会作为集群的见证,并且不会让MySQL联机。确保将其部署到“Subnet3”(us-west-2c可用区)。 Subnet2的IP范围是10.0.2.0/24,因此这里使用的I推出-instance14P为10.0.2.4:注意:默认磁盘配置适用于见证节点。 不需要第二个磁盘推出-instance15:标记见证节点: 推出-instance16

您的3个实例可能需要一段时间才能配置。 完成后,您将看到在EC2控制台中列出的正在运行: 推出-instance17

创建弹性IP

接下来,创建一个弹性IP,这是一个公共IP地址,用于从外部世界连接到您的实例。 在左侧菜单中选择弹性IP,然后单击“分配新地址”:选择新弹性IP1创建的弹性IP,右键单击,然后选择“关联地址”:将此弹性IP与节弹性-IP2点1关联:如果其他两个实例重复弹性IP3此操作,请执行以下操作:您希望他们可以访问互联网,或者能够直接通过SSH / VNC访问它们。

创建虚拟IP的路由条目

此时,已创建所有3个实例,并且需要再次更新路由表,以便群集的虚拟IP能够正常工作。 在此多子网群集配置中,虚拟IP需要超出分配给VPC的CIDR范围。定义将流量引导至群集的虚拟IP(10.1.0.10)到主群集节点(Node1)的新路由从VPC仪表板中,选择“路由表”,然后单击“编辑”。 添加“10.1.0.10/32”的路由,目的地为Node1: 路由表后实例创建

禁用ENI的源/目的地检查

接下来,禁用群集节点的弹性网络接口(ENI)的源/目标检查。这是实例接受群集的虚拟IP地址的网络数据包所必需的。为所有ENI执行此操作。选择“网络接口”,右键单击ENI,然后选择“更改源/目标检查”。禁用源-DEST-CHECK1 选择“已禁用”: 禁用源-DEST-CHECK2

获取访问密钥ID和秘密访问密钥

在本指南的后面部分,集群软件将使用AWS命令行界面(CLI)来操作集群虚拟IP的路由表条目,以将流量重定向到活动集群节点。 为此,您需要获取访问密钥ID和秘密访问密钥,以便AWS CLI可以正确进行身份验证。在EC2仪表板的右上角,单击您的名称,然后从下拉列表中选择“安全凭证”:展开表格访问键1中的“访问密钥(访问密钥ID和秘密访问密钥)”部分,然后单击“创建新的访问密钥”。 下载密钥文件并将文件存储在安全的位置。访问KEY2

Linux OS配置

连接到linux实例:

要连接到新创建的Linux实例(通过SSH),请右键单击实例并选择“连接”。 这将显示连接到实例的说明。 您将需要在上一步中创建/下载的私钥文件:示CONNECT1例:这CONNECT2里我们将离开EC2仪表板一段时间,并在命令行上弄脏,作为Linux管理员,您应该使用它到现在为止。您没有为AWS中的Linux VM(或默认的“ec2-user”帐户)提供root密码,因此一旦连接,请使用“sudo”命令获取root权限:

$ sudo su  - 

编辑/ etc / hosts

除非您已经设置了DNS服务器,否则您需要在所有3台服务器上创建主机文件条目,以便它们可以通过名称正确地相互解析。将以下行添加到/ etc / hosts文件的末尾:

10.0.0.4 node1
10.0.1.4 node2
10.0.2.4证人
10.1.0.10 mysql-vip

禁用SELinux

编辑/ etc / sysconfig / linux并设置“SELINUX = disabled”:

#vi / etc / sysconfig / selinux

#此文件控制系统上SELinux的状态。
#SELINUX =可以采用以下三个值中的一个:
#enforcing  - 强制执行SELinux安全策略。
#permissive  -  SELinux打印警告而不是强制执行。
#disabled  - 未加载SELinux策略。
SELINUX =禁用
#SELINUXTYPE =可以采用以下两个值之一:
#targeted  - 目标进程受到保护,
#mls  - 多级安全保护。
SELINUXTYPE =针对性

设置主机名

默认情况下,这些Linux实例将具有基于服务器IP地址的主机名,例如“ip-10-0-0-4.us-west-2.compute.internal”您可能会注意到,如果您尝试修改主机名的“正常”方式(即编辑/ etc / sysconfig / network等),每次重启后,它都会恢复原来的状态!!我在AWS论坛中发现了一个很棒的主题,它描述了如何在重新启动后实际让主机名保持静态。详细信息:https://forums.aws.amazon.com/message.jspa?messageID = 560446注释掉在“/etc/cloud/cloud.cfg”文件中设置主机名的模块。可以使用#注释掉以下模块。

# -  set_hostname
# -  update_hostname

接下来,还要在/ etc / hostname中更改主机名。

重新启动群集节点

重新启动所有3个实例,以便禁用SELinux,并且主机名更改生效。

安装和配置VNC(及相关软件包)

为了访问我们的linux服务器的GUI,以及稍后安装和配置我们的集群,安装VNC服务器,以及一些其他必需的软件包(集群软件需要redhat-lsb和patch rpms)。

#yum groupinstall“X Window System”
#yum groupinstall“带GUI的服务器”
#yum install tigervnc-server xterm wget unzip patch redhat-lsb
#vncpasswd

对于RHEL 7.x / CentOS7.x:以下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

对于RHEL / CentOS 6.x系统:

#vi / etc / sysconfig / vncservers

      VNCSERVERS = “2:根”
      VNCSERVERARGS [2] =“ - 几何1024x768”

#service vncserver start
#chkconfig vncserver on

打开VNC客户端,然后连接到<ElasticIP:2>。  如果你无法得到它,那很可能是你的linux防火墙阻碍了它。  打开我们在这里使用的VNC端口(端口5902),或者暂时禁用防火墙(不推荐用于生产环境):

#systemctl stop firewalld
#systemctl禁用firewalld

 

分区和格式化“数据”磁盘

当linux实例启动时,额外的磁盘被添加到每个集群节点以存储我们将要保护的应用程序数据。 在这种情况下,它恰好是MySQL数据库。第二个磁盘应显示为/ dev / xvdb。 您可以运行“fdisk -l”命令进行验证。 您将看到/ dev / xvda(OS)已被使用。

#fdisk -l

磁盘/ dev / xvda:10.7 GB,10737418240字节,20971520扇区单位=扇区1 * 512 = 512字节扇区大小(逻辑/物理):512字节/ 512字节I / O大小(最小/最佳):512字节/ 512字节磁盘标签类型:gpt #Start结束大小类型名称1 2048 4095 1M BIOS启动parti 2 4096 20971486 10G Microsoft基本磁盘/ dev / xvdb:2147 MB,2147483648字节,4194304扇区单位=扇区1 * 512 = 512字节扇区大小(逻辑/物理):512字节/ 512字节I / O大小(最小/最佳):512字节/ 512字节这里我将创建一个分区(/ dev / xvdb1),格式化它,并将其挂载到默认值MySQL的位置,即/ var / lib / mysql。 在“node1”和“node2”上执行以下步骤:

#fdisk / dev / xvdb
欢迎使用fdisk(util-linux 2.23.2)。

更改将仅保留在内存中,直到您决定编写它们。
使用write命令前要小心。

设备不包含已识别的分区表
构建一个新的DOS磁盘标签,磁盘标识符为0x8c16903a。

命令(m求助):n
分区类型:
   p primary(0 primary,0 extended,4 free)
   扩展
选择(默认p):p
分区号(1-4,默认1):1
第一个扇区(2048-4194303,默认为2048):<enter>
使用默认值2048
最后一个扇区,扇区或大小{K,M,G}(2048-4194303,默认4194303):<enter>
使用默认值4194303
设置类型为Linux且大小为2 GiB的分区1

命令(m求助):w
分区表已被更改!

调用ioctl()重新读取分区表。
同步磁盘。

#mkfs.ext4 / dev / xvdb1 #mkdir / var / lib / mysql在node1上,挂载文件系统:

#mount / dev / xvdb1 / var / lib / mysql

安装EC2 API工具

必须在每个群集节点上安装EC2 API工具(EC2 CLI),以便群集软件可以在以后操作路由表,从而实现与虚拟IP的连接。以下URL是设置此内容的极好指南:http://docs.aws.amazon.com/AWSEC2/latest/CommandLineReference/set-up-ec2-cli-linux.html以下是关键步骤:下载,解压缩,并将CLI工具移动到标准位置(/ opt / aws):

#wget http://s3.amazonaws.com/ec2-downloads/ec2-api-tools.zip
#unzip ec2-api-tools.zip
#mv ec2-api-tools-1.7.5.1 / / opt / aws /
#export EC2_HOME =“/ opt / aws”

如果尚未安装java(运行“要检查哪个java”),请安装它:

#yum install java-1.8.0-openjdk

示例(基于RHEL 7.2系统的默认配置。  相应调整)

#export JAVA_HOME =“/ usr / lib / jvm / java-1.8.0-openjdk-1.8.0.71-2.b15.el7_2.x86_64 / jre /”

您需要AWS Access Key和AWS Secret Key。  保持这些值很方便,因为稍后在集群设置期间也需要它们!有关更多信息,请参阅以下URL:https://console.aws.amazon.com/iam/home?#security_credential

#export AWS_ACCESS_KEY = your-aws-access-key-id
#export AWS_SECRET_KEY = your-aws-secret-key

测试CLI实用程序功能:

#/ opt / aws / bin / ec2-describe-regions

REGION eu-west-1 ec2.eu-west-1.amazonaws.com
REGION ap-southeast-1 ec2.ap-southeast-1.amazonaws.com
REGION ap-southeast-2 ec2.ap-southeast-2.amazonaws.com
REGION eu-central-1 ec2.eu-central-1.amazonaws.com
REGION ap-northeast-2 ec2.ap-northeast-2.amazonaws.com
REGION ap-northeast-1 ec2.ap-northeast-1.amazonaws.com
REGION us-east-1 ec2.us-east-1.amazonaws.com
REGION sa-east-1 ec2.sa-east-1.amazonaws.com
REGION us-west-1 ec2.us-west-1.amazonaws.com
REGION us-west-2 ec2.us-west-2.amazonaws.com

 

安装和配置MySQL

接下来,安装安装MySQL包,初始化示例数据库,并为MySQL设置“root”密码。 在RHEL7.X中,MySQL包已经被MariaDB包替换。

在“node1”上:

#yum install mariadb mariadb-server
#mount / dev / xvdb1 / var / lib / mysql
#/ usr / bin / mysql_install_db --datadir =“/ var / lib / mysql /” -  user = mysql
#mysqld_safe --user = root --socket = / var / lib / mysql / mysql.sock --port = 3306 --datadir = / var / lib / mysql --log&
#
##注意:下一个命令允许来自任何主机的远程连接。生产不是一个好主意!
#echo“update user set Host ='%'where host ='node1';刷新权限| mysql mysql
#
##将MySQL的root密码设置为'SIOS'
#echo“update user set Password = PASSWORD('SIOS')其中User ='root'; flush特权”| mysql mysql

创建MySQL配置文件。我们将它放在数据磁盘上(稍后将被复制 – /var/lib/mysql/my.cnf)。 例:

#vi /var/lib/mysql/my.cnf

的[mysqld]
DATADIR =的/ var / lib中/ MySQL的
插座=的/ var / lib中/ MySQL的/的mysql.sock
PID文件= / var / run中/ MariaDB的/ mariadb.pid
用户=根
端口= 3306
#建议禁用符号链接以防止出现各种安全风险
符号链接= 0
 
[mysqld_safe的]
对数误差= /无功/日志/ MariaDB的/ mariadb.log
PID文件= / var / run中/ MariaDB的/ mariadb.pid 
 
[客户]
用户=根
密码= SIOS

将原始MySQL配置文件移到一边(如果存在):

#mv /etc/my.cnf /etc/my.cnf.orig

在“node2”上:

在“node2”上,您只需要安装MariaDB / MySQL软件包。 其他步骤不是必需的:

[root @ node2~] #yum install mariadb mariadb-server

安装和配置群集

此时,我们已准备好安装和配置我们的集群。 SIOS Protection Suite for Linux(又名SPS-Linux)将在本指南中用作群集技术。 它在单个集成解决方案中提供高可用性故障转移群集功能(LifeKeeper)以及实时,块级数据复制(DataKeeper)。 SPS-Linux使您能够部署“SANLess”集群,即“无共享”集群,这意味着集群节点没有任何共享存储,就像EC2实例一样。

安装适用于Linux的SIOS Protection Suite

在所有3个VM(node1,node2,见证)上执行以下步骤:下载SPS-Linux安装映像文件(sps.img),并获取试用许可证或购买永久许可证。 有关更多信息,请联系SIOS。您将环回安装它并以root身份运行“setup”脚本(或首先“sudo su – ”以获取根shell)例如:

#mkdir / tmp / install
#mount -o loop sps.img / tmp / install
#cd / tmp / install
# 。/建立

在安装脚本期间,系统会提示您回答一些问题。 您将在几乎每个屏幕上按Enter键以接受默认值。 请注意以下例外情况:

  • 在标题为“High Availability NFS”的屏幕上,您可以选择“n”,因为我们不会创建高可用性NFS服务器
  • 在安装脚本结束时,您可以选择立即或稍后安装试用许可证密钥。我们稍后会安装许可证密钥,因此您可以安全地选择“n”
  • 在“设置”的最后一个屏幕中,从屏幕上显示的列表中选择要安装的ARK(应用程序恢复工具包,即“群集代理”)。
    • 仅在“node1”和“node2”上需要ARK。 你不需要在“见证”上安装
    • 使用向上/向下箭头导航列表,然后按空格键选择以下内容:
      • lkDR – 适用于Linux的DataKeeper
      • lkSQL – LifeKeeper MySQL RDBMS恢复工具包
    • 这将导致在“node1”和“node2”上安装以下附加RPM:
      • SteelEye公司 – LKDR-9.0.2-6513.noarch.rpm
      • SteelEye公司 – lkSQL-9.0.2-6513.noarch.rpm

安装Witness / Quorum包

LifeKeeper(steeleye-lkQWK)的Quorum / Witness服务器支持包与LifeKeeper核心的现有故障转移过程相结合,可以在总体网络故障常见的情况下以更大的可信度进行系统故障转移。这实际上意味着可以在大大降低“裂脑”情况的风险的同时进行故障转移。在所有3个节点(node1,node2,见证)上安装Witness / Quorum rpm:

#cd / tmp / install / quorum
#rpm -Uvh steeleye-lkQWK-9.0.2-6513.noarch.rpm

在所有3个节点(node1,node2,见证)上,编辑/ etc / default / LifeKeeper,设置NOBCASTPING = 1仅打开见证服务器(“见证”),编辑/ etc / default / LifeKeeper,设置WITNESS_MODE = off / none

安装EC2恢复工具包

SPS-Linux提供了特定功能,允许资源在不同可用区域和区域中的节点之间进行故障转移。这里,EC2恢复工具包(即集群代理)用于操作路由表,以便将与虚拟IP的连接路由到活动集群节点。安装EC2 rpm(node1,node2):

#cd / tmp / install / amazon
#rpm -Uvh steeleye-lkECC-9.0.2-6513.noarch.rpm

安装许可证密钥

在所有3个节点上,使用“lkkeyins”命令安装从SIOS获取的许可证文件:

#/ opt / LifeKeeper / bin / lkkeyins <path_to_file> / <filename> .lic

启动LifeKeeper

在所有3个节点上,使用“lkstart”命令启动集群软件:

#/ opt / LifeKeeper / bin / lkstart

设置LifeKeeper GUI的用户权限

在所有3个节点上,创建一个新的linux用户帐户(在本例中为“tony”)。 编辑/ etc / group并将“tony”用户添加到“lkadmin”组以授予对LifeKeeper GUI的访问权限。 默认情况下,只有“root”是该组的成员,我们在此处没有root密码:

#useradd tony
#passwd tony
#vi / etc / group

lkadmin:X:1001:根,贝

打开LifeKeeper GUI

与node1的弹性IP(公共IP)地址建立VNC连接。 根据上面的VNC配置,您将使用之前指定的VNC密码连接到<Public_IP>:2。 登录后,打开终端窗口并使用以下命令运行LifeKeeper GUI:

#/ opt / LifeKeeper / bin / lkGUIapp&

系统将提示您连接到第一个群集节点(“node1”)。 输入在VM创建期间指定的linux用户标识和密码:LK-GUI的CONNECT1接下来,通过单击以下屏幕截图中突出显示的“连接到服务器”按钮连接到“node2”和“witnessLK-GUI的CONNECT2”:您现在应该看到GUI中的所有3个服务器,一个绿色的复选标记图标,表明他们在线和健康: LK-GUI的连接3

创建沟通路径

右键单击“node1”并选择Create Comm Patcomm path1h选择BOTH“node2”和“witness”,然后按照向导进行操作。 这将创建以下之间的通信路径:

  • node1和node2
  • node1&witness

comm path2 仍然需要在node2和witness之间创建comm路径。  右键单击“node2”并选择Create Comm Path。 按照向导选择“见证”作为远程服comm path3务器:此时已创建以下通信路径:

  • node1 < – > node2
  • node1 < – >见证
  • node2 < – >见证

服务器前面的图标已从绿色“复选标记”更改为黄色“危险标记”。 这是因为我们在节点之间只有一条通信路径。如果VM具有多个NIC(可以在此处找到有关创建具有多个NIC的Azure VM的信息,但本文不会介绍这些信息),则可以在每个服务器之间创建冗余通信路径。comm path4 要删除警告图标,请转到“查看”菜单,然后取消选择“Comm Path Redundancy Warningcomm path5”:结果: comm path6

验证通信路径

使用“lcdstatus”命令查看群集资源的状态。 运行以下命令以验证是否已在每个节点上正确创建了与所涉及的其他两个服务器的通信路径:#/ opt / LifeKeeper / bin / lcdstatus -q -d node1 MACHINE NETWORK ADDRESSES / DEVICE STATE PRIO node2 TCP 10.0.0.4/ 10.0.1.4 ALIVE 1见证TCP 10.0.0.4/10.0.2.4 ALIVE 1#/ opt / LifeKeeper / bin / lcdstatus -q -d node2 MACHINE NETWORK ADDRESSES / DEVICE STATE PRIO node1 TCP 10.0.1.4/10.0.0.4 ALIVE 1见证TCP 10.0.1.4/10.0.2.4 ALIVE 1#/ opt / LifeKeeper / bin / lcdstatus -q -d witness MACHINE NETWORK ADDRESSES / DEVICE STATE PRIO node1 TCP 10.0.2.4/10.0.0.4 ALIVE 1 node2 TCP 10.0.2.4/10.0.1.4活着1

创建数据复制群集资源(即 镜子)

接下来,创建数据复制资源以将/ var / lib / mysql分区从node1(source)复制到node2(target)。 单击“绿色加号”图标以创建新资数据复制1源:按照向导进行以下选择:

请选择恢复工具包:数据复制
转换类型:智能
服务器:node1
层次结构类型:复制退出文件系统
现有的挂载点:/ var / lib / mysql
数据复制资源标记:datarep-mysql
文件系统资源选项卡:/ var / lib / mysql
位图文件:(默认值)
启用异步复制:否

创建资源后,将出现“扩展”(即定义备份服务器)向导。 使用以下选项:

目标服务器:node2
转换类型:智能
模板优先级:1
目标优先级:10
目标磁盘:/ dev / xvdb1
数据复制资源标记:datarep-mysql
位图文件:(默认值)
复制路径:10.0.0.4/10.0.1.4
挂载点:/ var / lib / mysql
根标签:/ var / lib / mysql

群集将如下所示: 数据复制2

创建虚拟IP

接下来,创建虚拟IP群集资源。 单击“绿色加号”图标以创建新虚拟ip1资源:按照向导使用以下选项创建IP资源:

选择Recovery Kit:IP
转换类型:智能
IP资源:10.1.0.10
网络掩码:255.255.255.0
网络接口:eth0
IP资源标记:ip-10.1.0.10

使用以下选项扩展IP资源:

转换类型:智能
模板优先级:1
目标优先级:10
IP资源:10.1.0.10
网络掩码:255.255.255.0
网络接口:eth0
IP资源标记:ip-10.1.0.10

现在,群集将显示如下,同时创建镜像和IP资源: 簇后镜和 - VIP

配置IP资源的Ping列表

默认情况下,SPS-Linux通过执行广播ping来监视IP资源的运行状况。 在许多虚拟和云环境中,广播ping不起作用。 在上一步中,我们在/ etc / default / LifeKeeper中设置“NOBCASTPING = 1”以关闭广播ping检查。相反,我们将定义一个ping列表。 这是在此IP资源的IP运行状况检查期间要ping的IP地址列表。  在本指南中,我们将见证服务器(10.0.2.4)添加到我们的ping列表中。右键单击IP资源(ip-10.1.0.10)并选择PropeAWS-PING-列表1rties:您将看到最初没有为我们的10.1.0.0子网配置ping列表。  单击“修改Ping列AWS-PING-列表2表”:输入“10.0.2.4”(见证服务器的IP地址),单击“添加地址”,最后单击“AWS-PING-项目list3保存列表”:您将返回到IP属性面板,并可以验证10.0.2.4已添加到ping列表中。 单击“确定”关闭窗口: AWS-PING-list4

创建MySQL资源层次结构

接下来,创建一个MySQL集群资源。 MySQL资源负责停止/启动/监视MySQL数据库。在创建MySQL资源之前,请确保数据库正在运行。 运行“ps -ef | grep sql“要检查。如果它正在运行,很棒 – 没什么可做的。 如果没有,请备份数据库:

#mysqld_safe --user = root --socket = / var / lib / mysql / mysql.sock --port = 3306 --datadir = / var / lib / mysql --log&

要创建,请单击“绿色加号”图标以创建新资源:按照向导使用以下选项创建IP资源:

选择Recovery Kit:MySQL Database
转换类型:智能
服务器:node1
my.cnf的位置:/ var / lib / mysql
MySQL可执行文件的位置:/ usr / bin
数据库标签:mysql

使用以下选项扩展IP资源:

目标服务器:node2
转换类型:智能
模板优先级:1
目标优先级:10

因此,您的群集将如下所示。 请注意,数据复制资源已自动移动到数据库下(自动创建依赖关系),以确保它始终在数据库之前联机: AWS-后的mysql-资源1

创建EC2资源以在故障转移时管理路由表

   

 
 
 
 
 
 
 
 
 
 

 

 
 
 
 
 

   

 

     

测试群集连接

  

 

 

 

 

 
  
 
  
 
  
 
 

   

 
 
  
 
 
  
 
  
 
  
 
 

 

Filed Under: 服务器集群简单化 Tagged With: Linux故障转移群集

  • « Previous Page
  • 1
  • …
  • 66
  • 67
  • 68
  • 69
  • 70
  • …
  • 100
  • Next Page »

最近的帖子

  • 在 Nutanix 环境中选择高可用性解决方案的 10 个注意事项
  • 我的服务器是一次性的吗?高可用性软件如何融入云最佳实践
  • 灾难频发世界的数据恢复策略
  • DataKeeper 和棒球:灾难恢复的战略举措
  • SQL Server 停机风险预算

最热门的帖子

加入我们的邮件列表

Copyright © 2025 · Enterprise Pro Theme on Genesis Framework · WordPress · Log in