下面一步一步介绍一下如何在Red Hat Enterprise Linux系统上为SQL Server配置共享磁盘集群(Shared Disk Cluster)及其相关使用(仅供测试学习之用,基础篇)

一.      创建共享磁盘和 Cluster

微软官方配置文档:https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-shared-disk-cluster-red-hat-7-configure

Linux Cluster结构图如下:

具体配置步骤如下:

1.            安装及配置SQL Server

a)       先安装两个SQL Server作为Cluster的两个节点,请参考博文“SQL Server on Red Hat Enterprise Linux——RHEL上的SQL Server(全截图)”(如果需要更多节点则安装更多);

b)      在Secondary端停掉并禁用SQL Server服务:

sudo systemctl stop mssql-server
sudo systemctl disable mssql-server

c)       备份同步Server Master Key(由于Linux中SQL Server是以本地用户mssql运行的,因此不同的节点无法识别别的节点的认证,所以需要备份同步加密key从Primary端到其它节点上以便于能够成功解密Server Master Key):

  • Secondary端备份原来的machine-key:
sudo su
cd /var/opt/mssql/secrets
mv machine-key machine-key.original.bak
  • Primary端把machine-key复制到Secondary端:
sudo su
cd /var/opt/mssql/secrets/
scp machine-key root@**<Secondary Node IP Address>**:/var/opt/mssql/secrets/
  • Secondary端检查是否成功备份过来并且添加相关权限:
ls

chown mssql:mssql machine-key

d)      在Primary端为Pacemaker程序创建一个SQL登录用户,并给足足够的权限运行sp_server_diagnostics。

先开启SQL Server服务:

sudo systemctl start mssql-server

连接到SQL Server上:

sqlcmd -S localhost -U sa -P **<Your Password>**

执行以下SQL语句创建用户并赋予权限:

USE [master] CREATE LOGIN [<loginName>] with PASSWORD= N'<loginPassword>'
GRANT VIEW SERVER STATE TO <loginName>
GO

退出sqlcmd:

exit

e)      在Primary端停掉并禁用SQL Server服务:

sudo systemctl stop mssql-server
sudo systemctl disable mssql-server

f)        配置每一个节点的hosts文件,保证互相能够识别。

sudo vi /etc/hosts

下图是配置完成后的例子:

2.            配置共享磁盘以及转移数据库文件

有很多种提供共享磁盘的解决方案。下面简单介绍配置NFS的共享磁盘。推荐使用Kerberos去配置NFS以提高安全性:https://www.certdepot.net/rhel7-use-kerberos-control-access-nfs-network-shares/。这里仅介绍最简单的方式用于简单测试和学习。

用NFS配置共享磁盘

找另一个RHEL系统机器作为NFS Server,执行如下命令(由于仅是测试研究,这里选用Cluster的一个节点作为NFS Server也可):

a)       安装NFS软件包:

sudo yum -y install nfs-utils

b)      启用并开启rpcbind服务:

sudo systemctl enable rpcbind && systemctl start rpcbind

c)       启用并开启nfs-server服务:

sudo systemctl enable nfs-server && systemctl start nfs-server

d)      编辑/etc/exports文件去设置想要共享的存储路径,注意每一个共享是一行:

vi /etc/exports

设置完的例子如下:

e)      导出共享并确定是否成功:

sudo exportfs -rav
sudo showmount -e

f)        在SELinux中添加异常设置:

sudo setsebool -P nfs_export_all_rw 1

g)       防火墙中允许相关服务通信:

sudo firewall-cmd --permanent --add-service=nfs
sudo firewall-cmd --permanent --add-service=mountd
sudo firewall-cmd --permanent --add-service=rpc-bind
sudo firewall-cmd --reload

为Cluster所有节点设置NFS

在所有的Cluster节点机器上执行如下命令,确保能访问NFS共享磁盘:

a)       安装NFS软件包:

sudo yum -y install nfs-utils

b)      防火墙中允许相关服务通信:

sudo firewall-cmd --permanent --add-service=nfs
sudo firewall-cmd --permanent --add-service=mountd
sudo firewall-cmd --permanent --add-service=rpc-bind
sudo firewall-cmd --reload

c)       确认是否可以看到NFS共享:

sudo showmount -e **<IP OF NFS SERVER>**

更多关于NFS的文档资源参考以下站点:

设置数据库文件路径为共享磁盘

转移数据库文件到共享磁盘上:

a)       在Primary节点上先把数据库文件保存到临时路径/var/opt/mssql/tmp下,

su mssql
mkdir /var/opt/mssql/tmp
cp /var/opt/mssql/data/* /var/opt/mssql/tmp
rm /var/opt/mssql/data/*
exit

b)      在所有节点上编辑/etc/fstab文件,保证重启系统后自动挂载NFS共享磁盘:

<IP OF NFS SERVER>:<shared_storage_path> <database_files_directory_path> nfs timeo=14,intr

例子如下:

Note(摘自微软):

关于如何配置Fencing,请参考How To Configure VMware fencing using fence_vmware_soap in RHEL High Availability Add On(RHEL Pacemaker中配置STONITH)

c)       挂载刚刚配置的NFS存储:

sudo mount -a

可以执行mount命令检测是否已经成功挂载:

d)      在Primary节点上把临时路径下的数据库文件复制到新挂载的路径下,并保证mssql这个本地用户有读写权限:

chown mssql /var/opt/mssql/data
chgrp mssql /var/opt/mssql/data
su mssql
cp /var/opt/mssql/tmp/* /var/opt/mssql/data/
rm /var/opt/mssql/tmp/*
exit

e)      在Primary节点上开启SQL Server服务验证是否成功,这时SQL Server已经使用NFS服务器上的共享磁盘了:

sudo systemctl start mssql-server
sudo systemctl status mssql-server
sudo systemctl stop mssql-server

f)        在其它非Primary节点上依次开启SQL Server服务验证是否成功。

Note:目前所有节点的SQL Server都使用这个NFS服务器共享磁盘了,根据微软推荐,为了防止冲突,需要使用一个File System Cluster资源来防止一个共享路径被挂载多次。

3.            安装及配置Pacemaker

在所有Cluster节点下依次执行以下操作:

a)       创建一个文件保存之前为Pacemaker创建的SQL Server登录用户账户密码信息:

sudo touch /var/opt/mssql/secrets/passwd
sudo echo '<loginName>' >> /var/opt/mssql/secrets/passwd
sudo echo '<loginPassword>' >> /var/opt/mssql/secrets/passwd
sudo chown root:root /var/opt/mssql/secrets/passwd
sudo chmod 600 /var/opt/mssql/secrets/passwd

b)      设置防火墙允许Pacemaker服务通信:

sudo firewall-cmd --permanent --add-service=high-availability
sudo firewall-cmd --reload

Note:如果使用的是其它防火墙工具,需要开启如下端口。

TCP: Ports 2224, 3121, 21064

UDP: Port 5405

c)       安装Pacemaker软件包:

sudo yum install pacemaker pcs fence-agents-all resource-agents

d)      设置安装Pacemaker和Corosync时创建的默认用户hacluster的密码:

sudo passwd hacluster

e)      启用并开启pcsd服务,以及启用Pacemaker:

sudo systemctl enable pcsd && sudo systemctl start pcsd
sudo systemctl enable pacemaker

f)        安装FCI资源代理:

sudo yum install mssql-server-ha

4.            创建Cluster

下面正式创建Cluster:

a)       在Primary节点上创建Cluster:

sudo pcs cluster auth **<nodeName1 nodeName2 …>** -u hacluster
sudo pcs cluster setup --name **<clusterName>** **<nodeName1 nodeName2 …>**
sudo pcs cluster start --all

例子如下:

b)      目前CTP 2.1中没有HyperV和cloud环境用的fencing,因此暂时需要禁用fencing功能(不推荐在生产环境中禁用)

sudo pcs property set stonith-enabled=false
sudo pcs property set start-failure-is-fatal=false

c)       配置Cluster的相关资源信息,可能需要设置的信息如下:

SQL Server Resource Name——SQL Server资源名字,

Timeout Value ——Cluster等待一个资源起来的超时时间,如果是SQL Server,则是master database启动的时间,

Floating IP Resource Name——虚拟IP资源的名字,

IP Address——用来连接SQL Cluster实例的IP地址,

File System Resource Name——文件系统资源的名字,

device——NFS共享路径,

directory——本地挂载路径,

fstype——文件共享类型,比如nfs。

脚本如下:

sudo pcs cluster cib cfg
sudo pcs -f cfg resource create **<sqlServerResourceName>** ocf:mssql:fci op defaults timeout=**<timeout_in_seconds>**
sudo pcs -f cfg resource create **<floatingIPResourceName>** ocf:heartbeat:IPaddr2 ip=**<ip Address>**
sudo pcs -f cfg resource create **<fileShareResourceName>** Filesystem device=**<networkPath>** directory=**<localPath>** fstype=**<fileShareType>**
sudo pcs -f cfg constraint colocation add **<virtualIPResourceName>** **<sqlResourceName>**
sudo pcs -f cfg constraint colocation add **<fileShareResourceName>** **<sqlResourceName> **
sudo pcs cluster cib-push cfg

例子如下:

sudo pcs cluster cib cfg
sudo pcs -f cfg resource create mssqlha ocf:mssql:fci op defaults timeout=60s
sudo pcs -f cfg resource create virtualip ocf:heartbeat:IPaddr2 ip=10.2.38.180
sudo pcs -f cfg resource create fs Filesystem device="10.2.38.178:/mnt/nfs" directory="/var/opt/mssql/data" fstype="nfs"
sudo pcs -f cfg constraint colocation add virtualip mssqlha
sudo pcs -f cfg constraint colocation add fs mssqlha
sudo pcs cluster cib-push cfg

配置完成后SQL Server会运行在Cluster其中一个节点上。

d)      使用如下命令确认Cluster中相关SQL Server服务是否正常:

sudo pcs status

下图是正常启动的情况:

e)      正常启动后就可以用Cluster虚拟IP访问SQL Server了:

Note:

  • 如果某些资源启动的时候有问题,可以使用下面这个命令诊断启动:
sudo pcs resource debug-start **<resource id>**

如果没问题或者有问题修复后,则重启Cluster服务稍微等一段时间就好使了:

sudo pcs cluster stop --all
sudo pcs cluster start --all

2.      管理和使用Cluster(基础篇)

这里暂时只介绍一个常用的功能Failover,可以转移某个资源到目的端节点上:

sudo pcs resource move **<sqlResourceName>** **<targetNodeName>**
sudo pcs resource clear **<sqlResourceName>**

  • Linux上为SQL Server搭建的共享磁盘集群系统和Windows SQL Cluster是不一样的(所以标题为“类”),它不能用SQL  Query来判断是否是Cluster了,以下命令目前检测不出来是Cluster也获取不到任何信息:
select serverproperty(‘IsClustered’);
select * from ::fn_virtualservernodes();
select * from sys.dm_os_cluster_nodes,sys.dm_io_cluster_shared_drives;

从这个站点可以找到依据,但是不确定未来是否有变化:https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-shared-disk-cluster-red-hat-7-configure

Note: 文档比较基础,未来可能会继续更新。


[原创文章,转载请注明出处,仅供学习研究之用,如有错误请留言,谢谢支持]

[原站点:http://www.cnblogs.com/lavender000/p/6880355.html,来自永远薰薰]

Configure Red Hat Enterprise Linux shared disk cluster for SQL Server的更多相关文章

  1. Configure Red Hat Enterprise Linux shared disk cluster for SQL Server——RHEL上的“类”SQL Server Cluster功能

    下面一步一步介绍一下如何在Red Hat Enterprise Linux系统上为SQL Server配置共享磁盘集群(Shared Disk Cluster)及其相关使用(仅供测试学习之用,基础篇) ...

  2. 在Red Hat Enterprise Linux 7.3上安装SQL Server 2017

    必要条件: 1.在此快速安装过程中,您需要安装SQL Server 2017或SQL Server 2019上Red Hat Enterprise Linux (RHEL) 7.3 +.然后使用sql ...

  3. Configure Always On Availability Group for SQL Server on RHEL——Red Hat Enterprise Linux上配置SQL Server Always On Availability Group

    下面简单介绍一下如何在Red Hat Enterprise Linux上一步一步创建一个SQL Server AG(Always On Availability Group),以及配置过程中遇到的坑的 ...

  4. ORACLE Install (10g r2) FOR Red Hat Enterprise Linux Server release 5.5 (64 bit) (转)

    OS Info----------# cat /etc/redhat-releaseRed Hat Enterprise Linux Server release 5.5 (Tikanga)# cat ...

  5. setting up a IPSEC/L2TP vpn on CentOS 6 or Red Hat Enterprise Linux 6 or Scientific Linux

    This is a guide on setting up a IPSEC/L2TP vpn on CentOS 6 or Red Hat Enterprise Linux 6 or Scientif ...

  6. [转] KVM storage performance and cache settings on Red Hat Enterprise Linux 6.2

    Almost one year ago, I checked how different cache settings affected KVM storage subsystem performan ...

  7. Interpreting /proc/meminfo and free output for Red Hat Enterprise Linux 5, 6 and 7

    Interpreting /proc/meminfo and free output for Red Hat Enterprise Linux 5, 6 and 7 Solution Verified ...

  8. Common administrative commands in Red Hat Enterprise Linux 5, 6, and 7

    https://access.redhat.com/articles/1189123 Common administrative commands in Red Hat Enterprise Linu ...

  9. Red Hat Enterprise Linux 6.6安装体验

    Red Hat Enterprise Linux 6.6的安装首界面有五个选项,这跟以前的Red Hat Enterprise Linux 5.x的安装界面是有一些区别的.   安装或者升级现有系统( ...

随机推荐

  1. Azkaban的架构(三)

    Azkaban是什么?(一) Azkaban的功能特点(二) 不多说,直接上干货! http://www.cnblogs.com/zlslch/category/938837.html Azkaban ...

  2. Redis 数据导入导出,redis-dump命令

    安装redis-dump 工具 yum install ruby rubygems ruby-devel# 修改为国内源gem sources --add http://gems.ruby-china ...

  3. jQuery.Deferred(jQuery1.5-2.1)源码剖析

    jQuery.Deferred作为1.5的新特性出现在jQuery上,而jQuery.ajax函数也做了相应的调整.因此我们能如下的使用xhr请求调用,并实现事件处理函数晚绑定. var promis ...

  4. Objective-C相关Category的收集(更新)

    Categories是给你得不到源码的classes增加功能的一种方法.这个页面收集一些相关的Category,并且持续更新,你可以订阅关注.作者是Fille ?str?m,是@ IMGNRY的联合创 ...

  5. IOS Array 排序方法

    NSArray *sortedArray = [array sortedArrayUsingComparator: ^(id obj1, id obj2) { if ([obj1 integerVal ...

  6. MIPS—冒泡排序

    SORT 使用冒泡排序对整数数组进行排序,这种排序虽然不是最快的,但却是最简单的. C语言代码 #include<stdio.h> #include<iostream> usi ...

  7. caffe的调试技巧 和 使用split层

    1.网络中的layer层的输出,只要没有作为其他层的输入,caffe的日志就会把这个top输出(如果你用那个网站画网络结构图,你也会发现这种情况的层的颜色是不一样的,是紫色的) 2.如果你想看某一层在 ...

  8. centos7设置sshd端口,firewall,selinux设置

    https://blog.csdn.net/qq_31927797/article/details/81095829 #停止firewallsystemctl stop firewalld.servi ...

  9. fossil 代理设置

    C:\>fossil user new Joe C:\>fossil user default Joe 设置账户 fossil setting proxy http://-:-fossil ...

  10. makeObjectsPerformSelector用法

    亲测 makeObjectsPerformSelector 的用法. - (void)makeObjectsPerformSelector:(SEL)aSelector NS_SWIFT_UNAVAI ...