设为首页 收藏本站
查看: 2031|回复: 0

[经验分享] Configure Red Hat Enterprise Linux shared disk cluster for SQL Server——RHEL上的“类”

[复制链接]

尚未签到

发表于 2017-12-7 18:11:47 | 显示全部楼层 |阅读模式
  下面一步一步介绍一下如何在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结构图如下:
DSC0000.png

  具体配置步骤如下:

        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
DSC0001.png




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
  下图是配置完成后的例子:
DSC0002.png


      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
  设置完的例子如下:
DSC0003.png

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



sudo exportfs -rav
sudo showmount -e
DSC0004.png

  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的文档资源参考以下站点:


  • NFS servers and firewalld | Stack Exchange
  • Mounting an NFS Volume | Linux Network Administrators Guide
  • NFS server configuration

设置数据库文件路径为共享磁盘
  转移数据库文件到共享磁盘上:
  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
  例子如下:
DSC0005.png

  Note(摘自微软):
DSC0006.png

  关于如何配置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命令检测是否已经成功挂载:
DSC0007.png

  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
  例子如下:
DSC0008.png

  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
  下图是正常启动的情况:
DSC0009.png

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

  Note:


  • 如果某些资源启动的时候有问题,可以使用下面这个命令诊断启动:



sudo pcs resource debug-start **<resource id>**
  如果没问题或者有问题修复后,则重启Cluster服务稍微等一段时间就好使了:



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

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


  • 微软官方介绍:https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-shared-disk-cluster-red-hat-7-operate。
  这里暂时只介绍一个常用的功能Failover,可以转移某个资源到目的端节点上:



sudo pcs resource move **<sqlResourceName>** **<targetNodeName>**
sudo pcs resource clear **<sqlResourceName>**
DSC00011.png



  • 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。
DSC00012.png



  • Pacemaker是一个在Linux上很成熟的开源高可用性集群。下面这个站点介绍了Pacemaker GUI的使用:https://keithtenzer.com/2015/06/22/pacemaker-the-open-source-high-availability-cluster/?utm_source=tuicool&utm_medium=referral:
DSC00013.png



  • 其它相关有用的站点:

    • Configuring the Red Hat High Availability Add-On with Pacemaker -- Fencing: Configuring STONITH
    • Pacemaker Access Control Lists
    • How to create and edit text files using vi editor, basic vi commands, command mode, insert mode.
    • Linux mount and umount


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






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

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

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-421865-1-1.html 上篇帖子: SQL server 2008 R2 使用教程 下篇帖子: Windows开机自启动位置
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表