循序渐进:如何在没有共享存储的Amazon EC2中配置Linux故障转移群集#amazon #aws #sanless #cluster
在本分步指南中,我将向您介绍在Amazon的弹性计算云(Amazon EC2)中配置高可用性双节点MySQL群集(以及见证服务器)所需的所有步骤。 该指南包括适当的屏幕截图,shell命令和代码片段。 我假设您对Amazon EC2有点熟悉并且已经拥有一个帐户。 如果没有,您今天就可以注册。 我还将假设您具有基本的Linux系统管理技能,并了解基本的故障转移群集概念,如虚拟IP等。
免责声明:云正在快速移动目标。因此,功能/屏幕/按钮必然会随着时间的推移而发生变化,因此您的体验可能会与您在下面看到的略有不同。 虽然本指南将向您展示如何使MySQL数据库具有高可用性,但您当然可以调整此信息和流程以保护其他应用程序或数据库,如SAP,Oracle,PostgreSQL,NFS文件服务器等。以下是在Amazon EC2中创建高可用性MySQL数据库的高级步骤:
- 创建虚拟私有云(VPC)
- 创建Internet网关
- 创建子网(可用区)
- 配置路由表
- 配置安全组
- 启动实例
- 创建弹性IP
- 创建虚拟IP的路由条目
- 禁用ENI的源/目的地检查
- 获取访问密钥ID和秘密访问密钥
- Linux OS配置
- 安装EC2 API工具
- 安装和配置MySQL
- 安装和配置群集
- 测试群集连接
概观
本文将介绍如何在单个Amazon EC2区域中创建集群。 群集节点(node1,node2和见证服务器)将驻留在不同的可用区中,以实现最大可用性。 这也意味着节点将驻留在不同的子网中。配置如下所示:将使用以下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主仪表板中,选择“您的VPC”下的“VPC”,确保您已在屏幕右上角选择了适当的区域。 在本指南中,将使用“US West(Oregon)”区域,因为它是一个具有3个可用区的区域。 有关区域和可用区的更多信息,请单击此处为VPC命名,并指定要使用的IP块。 本指南将使用10.0.0.0/16:您现在应该在“您的VPC”屏幕上看到新创建的VPC:
创建Internet网关
接下来,创建一个Internet网关。 如果您希望实例(VM)能够与Internet通信,则必须执行此操作。在左侧菜单中,选择“Internet网关”,然后单击“创建Internet网关”按钮。 为其命名,然后创建:接下来,将Internet网关连接到您的VPC:选择您的VPC,然后单击Attach:
创建子网(可用区)
接下来,创建3个子网。 每个子网都驻留在自己的可用区中。 3个实例(VM:node1,node2,见证)将启动到单独的子网(以及可用区)中,以便可用区的故障不会占用群集的多个节点。美国西部(俄勒冈州)地区,又名us-west-2,有3个可用区域(us-west-2a,us-west-2b,us-west-2c)。 创建3个子网,每个3个可用区域中有一个子网。在VPC Dashboard下,导航到Subnets,然后导航Create Subnet:给第一个子网命名(“Subnet1)”,选择us-west-2a的可用区,并定义网络块(10.0.0.0/24):Repeat to to创建第二个子网可用区us-west-2b:重复以在可用区us–west-2c中创建第三个子网:完成后,验证是否已创建3个子网,每个子网具有不同的CIDR块,并且在单独的可用性中区域,如下所示:
配置路由表
更新VPC的路由表,以便将流向外部的流量发送到上一步中创建的Internet网关。 从VPC仪表板中,选择“路由表”。 转到“路由”选项卡,默认情况下,只存在一条允许仅在VPC内进行流量的路由。单击编辑:添加其他路由:新路由的目标将为“0.0.0.0/0”(Internet),对于目标,请选择您的Internet网关。 然后单击“保存”:接下来,将3个子网与“路由表”关联。 单击“子网关联”选项卡,然后单击编辑:选中所有3个子网旁边的框,然后单击保存:验证3个子网是否与主路由表关联:稍后,我们将再次返回并更新路由表,定义允许流量与群集的虚拟IP通信的路由,但这需要在创建Linux实例(VM)之后完成。
配置安全组
编辑安全组(虚拟防火墙)以允许传入的SSH和VNC流量。 两者稍后将用于配置linux实例以及群集软件的安装/配置。在左侧菜单中,选择“安全组”,然后单击“入站规则”选项卡。 单击编辑:为SSH(端口22)和VNC添加规则。 VNC通常使用5900中的端口,具体取决于您的配置方式,因此为了本指南的目的,我们将打开5900-5910端口范围。 根据您的VNC设置进行相应配置:
启动实例
我们将在本指南中配置3个实例(虚拟机)。 前两个VM(称为“node1”和“node2”)将充当群集节点,能够将MySQL数据库及其相关资源联机。 第三个VM将充当群集的见证服务器,以增强对裂脑的保护。为确保最大可用性,所有3个VM将部署到单个区域内的不同可用区中。 这意味着每个实例将驻留在不同的子网中。转到AWS主仪表板,然后选择EC2:
创建“节点1”
创建您的第一个实例(“node1”)。 单击Launch Instance:选择您的Linux发行版。 后来使用的集群软件支持RHEL,SLES,CentOS和Oracle Linux。 在本指南中,我们将使用RHEL 7.X:相应地调整实例大小。 出于本指南的目的并最大限度地降低成本,使用了t2.micro大小,因为它符合免费等级。 有关实例大小和定价的更多信息,请参见此处。 接下来,配置实例详细信息 重要信息:确保将此第一个实例(VM)启动到“Subnet1”,并定义对子网有效的IP地址(10.0.0.0/24) – 选择10.0.0.4以下,因为它是子网中的第一个免费IP。 注意:AWS中任何给定子网中的.1 / .2 / .3都是保留的,不能使用。 接下来,将额外的磁盘添加到群集节点(这将在“node1”和“node2”上完成)。 该磁盘将存储我们的MySQL数据库,稍后将在节点之间进行复制。注意:您不需要向“见证”节点添加额外的磁盘。 只有“node1”和“node2”。添加新卷,并输入所需大小:为实例定义标记,节点1:将实例与现有安全组关联,因此之前创建的防火墙规则将处于活动状态:单击启动:重要说明:如果这是第一个实例在您的AWS环境中,您需要创建一个新的密钥对。 私钥文件需要存储在一个安全的位置,因为当您SSH到Linux实例时将需要它
创建“node2”
重复上述步骤以创建第二个Linux实例(node2)。 完全像Node1一样配置它。 但是,请确保将其部署到“Subnet2”(us-west-2b可用区)。 Subnet2的IP范围是10.0.1.0/24,因此这里使用的IP为10.0.1.4:确保也将第二个磁盘添加到Node2。 它应该与您添加到Node1的磁盘大小相同:为第二个实例添加标签…. “节点2”:
创造“见证”
重复上述步骤以创建第三个Linux实例(见证)。 完全像Node1和Node2一样配置它,除了你不需要添加第二个磁盘,因为这个实例只会作为集群的见证,并且不会让MySQL联机。确保将其部署到“Subnet3”(us-west-2c可用区)。 Subnet2的IP范围是10.0.2.0/24,因此这里使用的IP为10.0.2.4:注意:默认磁盘配置适用于见证节点。 不需要第二个磁盘:标记见证节点:
您的3个实例可能需要一段时间才能配置。 完成后,您将看到在EC2控制台中列出的正在运行:
创建弹性IP
接下来,创建一个弹性IP,这是一个公共IP地址,用于从外部世界连接到您的实例。 在左侧菜单中选择弹性IP,然后单击“分配新地址”:选择新创建的弹性IP,右键单击,然后选择“关联地址”:将此弹性IP与节点1关联:如果其他两个实例重复此操作,请执行以下操作:您希望他们可以访问互联网,或者能够直接通过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,然后选择“更改源/目标检查”。 选择“已禁用”:
获取访问密钥ID和秘密访问密钥
在本指南的后面部分,集群软件将使用AWS命令行界面(CLI)来操作集群虚拟IP的路由表条目,以将流量重定向到活动集群节点。 为此,您需要获取访问密钥ID和秘密访问密钥,以便AWS CLI可以正确进行身份验证。在EC2仪表板的右上角,单击您的名称,然后从下拉列表中选择“安全凭证”:展开表格中的“访问密钥(访问密钥ID和秘密访问密钥)”部分,然后单击“创建新的访问密钥”。 下载密钥文件并将文件存储在安全的位置。
Linux OS配置
连接到linux实例:
要连接到新创建的Linux实例(通过SSH),请右键单击实例并选择“连接”。 这将显示连接到实例的说明。 您将需要在上一步中创建/下载的私钥文件:示例:这里我们将离开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用户标识和密码:接下来,通过单击以下屏幕截图中突出显示的“连接到服务器”按钮连接到“node2”和“witness”:您现在应该看到GUI中的所有3个服务器,一个绿色的复选标记图标,表明他们在线和健康:
创建沟通路径
右键单击“node1”并选择Create Comm Path选择BOTH“node2”和“witness”,然后按照向导进行操作。 这将创建以下之间的通信路径:
- node1和node2
- node1&witness
仍然需要在node2和witness之间创建comm路径。 右键单击“node2”并选择Create Comm Path。 按照向导选择“见证”作为远程服务器:此时已创建以下通信路径:
- node1 < – > node2
- node1 < – >见证
- node2 < – >见证
服务器前面的图标已从绿色“复选标记”更改为黄色“危险标记”。 这是因为我们在节点之间只有一条通信路径。如果VM具有多个NIC(可以在此处找到有关创建具有多个NIC的Azure VM的信息,但本文不会介绍这些信息),则可以在每个服务器之间创建冗余通信路径。 要删除警告图标,请转到“查看”菜单,然后取消选择“Comm Path Redundancy Warning”:结果:
验证通信路径
使用“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)。 单击“绿色加号”图标以创建新资源:按照向导进行以下选择:
请选择恢复工具包:数据复制 转换类型:智能 服务器: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
创建虚拟IP
接下来,创建虚拟IP群集资源。 单击“绿色加号”图标以创建新资源:按照向导使用以下选项创建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资源的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)并选择Properties:您将看到最初没有为我们的10.1.0.0子网配置ping列表。 单击“修改Ping列表”:输入“10.0.2.4”(见证服务器的IP地址),单击“添加地址”,最后单击“保存列表”:您将返回到IP属性面板,并可以验证10.0.2.4已添加到ping列表中。 单击“确定”关闭窗口:
创建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
因此,您的群集将如下所示。 请注意,数据复制资源已自动移动到数据库下(自动创建依赖关系),以确保它始终在数据库之前联机:
创建EC2资源以在故障转移时管理路由表
测试群集连接