Linux的企业-高可用性High Availability(nginx+mysql+高可用磁盘)

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介:

一.概念介绍

        HA(High Availability)指的是通过尽量缩短因日常维护操作(计划)和突发的系统崩溃(非计划)所导致的停机时间,以提高系统和应用的可用性。它与被认为是不间断操作的容错技术有所不同。HA系统是目前企业防止核心计算机系统因故障停机的最有效手段。   
         高可用性(High Availability)提供了一种最小化网络中由于单点故障而带来的风险的方法。例如对于部署防火墙的企业,从网络安全方面考虑,所有进出信息流都必须经过防火墙。这时防火墙就是一个单点故障。对于很多企业来说,长时间的服务中断(或许就几分钟)是不可接受的,这就引入了高可用性的需求。随着网络应用的增多和服务实时性需求的增加,用户对高可用性的需求也越来越强。作为网络中单点故障设备,防火墙有必要提供高可用性解决方案。

        Cluster manager 简称CMAN,是一个分布式集群管理工具,运行在集群的各个节点上,为RHCS提供集群管理任务。它用于管理集群成员、消息和通知。它通过监控每个节点的运行状态来了解节点成员之间的有关系。当集群中某个节点出现故障时,节点成员关系将发生改变,CMAN及时将这种改变通知底层,进而做出相应的调整。
           CMAN根据每个节点的运行状态,统计出一个法定节点数,作为集群是否存活的依据。当整个集群中有多于一半的节点处于激活状态时,表示达到了法定节点 数,此集群可以正常运行,当集群中有一半或少于一半的节点处于激活状态时,表示没有达到法定的节点数,此时整个集群系统将变得不可用。CMAN依赖于CCS,并且CMAN通过CCS读取cluster.conf文件。

           rgmanager主要用来监督、启动、停止集群的应用、服务和资源。当一个节点的服务失败时,高可用集群服务管理进程可以将服务从这个失败节点转移至其点健康节点上,这种服务转移能力是自动动,透明的。RHCS通过rgmanager来管理集群服务,rgmanager运行在每个集群节点上,在服务器上对应的进程为clurgmgrd。
           在RHCS集群中,高可用生服务包括集群服务和集群资源两个方面。集群服务其实就是应用,如APACHE,MYSQL等。集群资源有IP地址,脚本,EXT3/GFS文件系统等。
           在RHCS集群中,高可用性服务是和一个失败转移域结合在一起的。由几个节点负责一个特定的服务的集合叫失败转移域,在失败迁移域中可以设置节点的优先级,主节点失效,服务会迁移至次节点,如果没有设置优先,集群高可用服务将在任意节点间转移。

wKiom1nKYF_zgWlvAAJNf-l_Uno620.png

集群系统的主要优点:    

1.高可扩展性:    

2.高可用性HA:集群中的一个节点失效,它的任务可传递给其他节点。可以有效防止单点失效。    

3.高性能:负载平衡集群允许系统同时接入更多的用户。  

4.高性价比:可以采用廉价的符合工业标准的硬件构造高性能的系统。


二.配置环境

server1  172.25.29.1   主  luci   ricci

server2  172.25.29.2

server3  172.25.29.3

server4  172.25.29.4   主  ricci


1.配置yum源

wKioL1m6kjKSSYJ1AAERM2P7PAw086.png


2.在server1和server4分别安装ricci,并设置密码westos,启动ricci

wKioL1m6kjKj3Vi1AAAOBffI6-E100.png

wKiom1m6kl3AfWiVAACiRSjPrhk893.png


wKioL1m6kjKT1v0MAAAO5YhiWYI506.png

wKiom1m6kl7DsFzeAACj3YssJPA180.png


3.在server1安装luci并启动luci管理端

wKiom1m6kl6i83-tAAANf73NLkI363.png

wKioL1m6kjPjNxvaAACkpDdvcpc494.png


4.界面登陆设置

注:账户密码为所安装系统的账户密码,测试环境为server1,root,redhat

wKioL1m6kjOC1e-lAACVmYsQB8A775.png


按图中进行创建设置


wKiom1m6kl-yvXayAAC4np0tPrs778.png


注:设置当中,server1与server4会重新启动,启动后需重新启动ricci和luci

wKioL1m6kjShNZD_AAB9iXAkE-8647.png


创建成功

wKioL1m6kjXhmZAyAACATwyx_9I984.png

wKiom1m6kmCjFVu3AABmDMjPC1g534.png


5.命令界面查看

wKiom1m6kmCwJE0SAABBn37hMCE239.png



三.安装fence系统

        我们把集群创建好后,却无法测试一下集群是否生效,现在咱们装上这个电源管理fence,真实情况下这是一个硬件,来让服务器直接断电的,这时候大家会问 了为什么要给服务器直接断电,这样不会丢失数据吗?现在设想一个情况,有三台服务器,两台是结点,一台是存储服务器如nfs或者scsi,结点1是正常向 外提供服务的机器,但是结点1突然挂掉了,高可用集群就会将服务迁移到结点2,而且存储也接到了结点2,为了防止结点1继续向存储服务器上写数据,我们就 要让他断电,因为直接断电,服务器不会执行sync,也就是将内存上的数据写到磁盘上,这样就保护了存储服务器的硬盘。


1.安装fence

yum install fence-* -y


创建fence

wKiom1m-dNLSddZNAABR6y5POOU541.png


多播模式  地址默认   端口默认

wKioL1m-dKOjuEJIAACiATtbsjk082.png


端口选择实际的接口   key文件的路径

wKioL1m-dKORZPGIAABzUrPcbRI486.png

wKiom1m-dNPgEtEKAAB_1f5-taE048.png


创建cluster目录

wKioL1m-dKPxW1NnAAAPUErbpH0344.png

wKiom1m-dNPy2q6oAAA8oJj_hwk205.png


生成随机密钥文件   重启服务wKioL1m-dKSh3q4pAABOdJyC1Yk852.png


查看fence服务正常启动  端口正常打开

wKiom1m-dNPBz062AAENEMij388617.png


将密钥文件传给server1 和server4

wKioL1m-dKSw-4YwAABiS3VkkhE593.png


2.创建fence设备
打开高可用web luci管理系统,选择Fance Devices


选择Add,如下图,Name指的是添加vmfence设备的名称,写完之后选择Submit

wKioL1m-dmCipaJ8AACwTIxNSkc759.png


选择server1,点击Add Fence Method ,添加Method Name fence1wKiom1m-dpCS9xdDAABXaLDFv_Q471.png


选择server2,点击Add Fence Method ,添加Method Name fence2,方法同server1




在fence1下面的Fence Drive的Method,选择Add Tence Instance,绑定虚拟机vm1


wKioL1m-dmCSCiTOAABZ4a8-egs606.png


wKioL1m-dmGTlBoBAABJcqzKhqw911.png


Domain来源于虚拟机的UUID

wKioL1m-dmCAt6-CAACL12r65N8381.png


server4的做法如server1

wKiom1m-dpDgStM6AABKPYr7wx4159.png


wKiom1m-dpCDHa88AABIfzGJDts635.png


3.测试

在server1上将server4节点破坏掉,这时高可用的fence机制起了作用,vm4已经重启

wKioL1m-dmGiVXtGAAAOnq7sWMo851.png

wKiom1m-dpHD6rUFAAAqjaGjFQw050.png



4.附:服务器自带内置fence添加

服务器自带的fence,每台机器都要设置一个fence,每台主机控制自己的fence

添加fence,选择dell服务的自带fence项iDRAC,加密类型设置为none

wKioL1nfdRGDP_JuAADtVsrwX6Y461.png

wKiom1nfd8vgztxzAAEpij9gwr0834.png

wKioL1nfdRKQ-V03AAE-3YP3SXk905.png


两个节点添加分别添加各自的fence

wKiom1nfd8mx-8GYAAF-LRHWXew450.png

wKiom1nfd8mSBA05AACYtCQGEa4556.png

wKioL1nfdRPzxmvtAAC566lNP7M164.png

wKioL1nfdROxf0ssAADwFlaUGB4701.png

wKiom1nfd8qyeaxzAACUXnnGY5s996.png

wKioL1nfdRSztWXYAAC4r-yntzw451.png

wKiom1nfd8vgAj-oAADw-SY5WPE085.png


测试,节点宕掉,server1重启

wKiom1nfd8vgeMR9AAG5xLFnEUc874.png

wKioL1nfdRWjOLqnAAAAfS6AtOM616.png


四.在搭建好的集群上添加服务Nginx(双机热备)

wKioL1m_coGBU3RqAAB_uVjCDUI835.png


1.配置好server1和server4的nginx服务,配置好server2和server3的http服务

       首先在server1和server4上安装配置好的nginx服务(只需将server1/usr/local/nginx文件夹拷到server4下,并创建nginx用户即可),server2和server4已经安装好http服务,


测试server1和server4上的nginx轮询服务是否正常



wKioL1m-esXwdcHIAABUghCADqk949.png


wKiom1m-evSzfCsLAABL_LV67mo226.png

正常,可以继续配置web端


2.配置luci web端

(1)添加服务  这里采用的是双机热备
选择Failover Domains,如图,填写Name(nginxfail),如图选择,前面打勾的三个分别是结点失效之后可以跳到另一个结点、只服务运行指定的结点、当结点失效之跳到另一个结 点之后,原先的结点恢复之后,不会跳回原先的结点。下面的Member打勾,是指服务运行server1和 server4结点,后面的Priority值越小,优先级越高,选择Create

wKiom1m-evXiY0PiAADRqVEVcKw654.png


(2)选择Resourcs,点击Add,选择添加IPAddress如图,添加的ip必须是未被占用的ip,24是子网掩码的位数,5指的是等待时间为5秒。选择Submit

wKioL1m-esXilkfiAAC2PnXwjNQ098.png


(3)以相同的方法添加Script,nginx是服务的名字,/etc/init.d/nginx是服务启动脚本的路径,选择Submit

wKiom1m-evWj9mTTAACJwzsS_j0844.png


注:将nginx的脚本放置到/etc/init.d/nginx下,脚本为自己编写,用户启动nginx

wKiom1m-fqiQHyIsAAD7qcsuj-Y341.png


wKioL1m-fmfT5s4bAACHpAbzHL8211.png

wKioL1m-fmeSV1h0AADJY6FgNuY823.png

wKiom1m-fpezg93MAADNWZR13jI081.png


全局资源配置完毕

wKioL1m-esbSBt_pAABwJRwDkiw719.png


(3)选择Service Groups,点击Add如图,apache是服务的名字,下面两个勾指分别的是自动开启服务、运行 ,选择Add Resource,将全局资源IP Address 和Script加入


wKioL1m-esaRaQj-AABp9wYNvz4167.png


wKioL1m-esaTnBUaAABzVMfbdhk037.png

wKiom1m-evaRW-YsAABmrZOAUXM201.png

选择Submit,完成,weblb服务组running

wKioL1m-eseQXqMLAABHYUI8Ol4176.png


3.测试

clustat    ,将server1的webib服务转移到server4上

wKiom1m-gL2hYJ5yAAFn4306yHY583.png


服务没有停止,已经转义到server4上

wKioL1m-gI6ysb4MAADFkAnfu0E009.png


wKiom1m-g5jhphDKAABsF1YyFlQ583.png


4.常用命令

clustat   查看状态

clusvcadm -r weblb -m server4  将weblb转移到server4上

clusvcadm -e weblb   重新激活weblb

clusvcadm -d weblb   停止weblb



五.在搭建好的集群上添加服务sicis共享磁盘(双机热备)


1.配置好server2上的服务端scisi,在server1和server4的配置好客户端iscisi,

yum install scisi-* -y    服务端server2

yum install iscisi-* -y   客户端server1,server4


2.配置server2环境

(1)将server2上添加一块8G的硬盘


wKioL1m-g2mAsWfeAAGnWYywzkg498.png



wKioL1m-g2nRDRZLAAAfJt0Cfjc438.png


(2)配置scisi文件

vim /etc/tgt/targets.conf

wKiom1m-g5jA-bnOAAAjfeYBx3g930.png

配置只能server1和server4访问

wKioL1m-g2mCLbSVAAA5F6i6-s0573.png


重启服务

wKiom1m-g5my4ABnAAAqeOiuybM964.png


(3)tgt-admin-s 查看配置服务是否成功

wKioL1m-g2nzhNtwAAB7BYAxMCk292.png



3.配置server1和server4   iscisi 服务端

wKiom1m-g5myXANIAAARvZVCkF4563.png


(1)在server1上发现scisi共享磁盘

打开iscisi服务 /etc/init.d/iscsi start


wKioL1m-g2mgnY8WAAAxVB1puRQ585.png


在server1上加入scisi共享磁盘

wKiom1m-g5nhTMGIAABPRgDOQnI372.png


在server1上fdisk -l查看8G磁盘已经显示正常

wKioL1m-g2rh8_Y0AABaJRahH_g506.png


(2)在server4上发现scisi共享磁盘

打开iscisi服务 /etc/init.d/iscsi start


wKiom1m-g5rTkMx-AAAvgrGQ6co401.png


在server4上fdisk -l查看8G磁盘已经显示正常

wKioL1m-jgDgNzsaAAB4g-juGsU795.png

4.在server1上创建iscsi分区,创建为lvm格式

wKiom1m-g5uTdB3rAACDLiXaRrU829.png

wKioL1m-g2uDfKaYAACRL2M3Ehw484.png

wKioL1m-inTjU-zqAAMj5i3aSSM472.png


查看 /etc/lvm/lvm.conf文件

wKiom1m-iuOSwYRHAAJn3mQNxfU957.png

3显示的是集群模式



5.在server1上创建创建为lvm分区


(1)创建pv、vg、lv

wKiom1m-g5uA8SLqAACYpBlKqZc639.png


(2)创建分区

wKioL1m-g2yxCpisAAEUJFULnoY891.png


6.在server1挂载sicis磁盘

wKiom1m-g5vy22zpAABt1uuqNu4741.png


7.在server4挂载sicis磁盘,在server4上同步partproble server1创建好的lvm磁盘


一开始用cat /proc/partition 查询不到,是因为没有同步分区列表

wKioL1m-g2zhOxBFAAEBac6rWtM232.png

wKiom1m-g5yQYEmqAACzfw-uRoM505.png


在server4上挂载创建好名为clustervg/demo的iscis磁盘

wKiom1m-g5ygGksKAABvhTla-Mk877.png



六.在搭建好的集群上添加服务mysql数据库(双机热备)


1.配置好server1上安装mysql服务端


wKioL1m-jrKSQCJEAAA1wbxqeyQ228.png


启动mysql服务

wKioL1m-jkKBT9w3AAAaVmq0qZE755.png


2.将iscis共享磁盘挂到mnt下,并关闭数据库,将var/lib/mysql数据考入/mnt下(此时是iscis盘)

wKioL1m-jkKz2oKxAADwuWyetVc945.png


3.取消挂载,更改var/lib/mysql所属人为mysql,要不然iscsi内的数据运行会出问题,重新在server1上启动数据库,运行数据库正常,证明使用iscsi内的数据正常

wKiom1m-jnLSBqejAAAmOCj6cz8559.png

wKioL1m-jkKiOneoAACPwWxR0Q4028.png

wKiom1m-jnKC6O6BAACF3I5HpYI457.png


4.取消server1上数据库挂载并将数据库关闭

wKiom1m-jnKD1xP1AAB03XTiWaU793.png


5.在server4上挂载iscsi磁盘重新在server4上启动数据库,运行数据库正常,证明使用iscsi内的数据正常

wKioL1m-jkOwO_WEAACyuzLFglE451.png


6.取消server4上数据库挂载并将数据库关闭

wKiom1m-jnLBhRb6AAB0sqRLEiM554.png


7.打开web luci管理系统设置mysql主备模式


(1)设置全局资源 IP Address、Filesystem和script


wKiom1m-jnPD7Er8AABnbuUbo0s880.png


wKioL1m-kNeysMoQAAAjnwVvIXM194.png



(2)设置Service Groups

wKioL1m-jkPCrc20AABe6zYzNe8823.png


wKioL1m-jkPDBfFfAABssFMYm7c281.png

wKioL1m-jkOwbYKaAAB4Vdq5dN4800.png

wKioL1m-khHzLM67AABQMPGmqts658.png


8.确认后开启服务

wKiom1m-knqCvw2YAABG0FaRQTE688.png

wKioL1m-ko2iEYIpAABepJCxHrU855.png



七.创建高可用集群共享盘,可以同时读取写入


1.在server1上将原来的iscsi磁盘格式化为高可用集群共享盘

wKioL1m-kxqwX-0xAACtYlpUlhg950.png


2.将原来的/var/lib/local的数据库文件拷入/mnt下的高可用集群共享盘,并

wKiom1m-lgbyMChRAAATN5iUWAs260.png

wKioL1m-kxuBYljTAACWeHQRc0k708.png

3.查询高可用集群共享盘的UUID,将其设置为开机自动挂载

wKioL1m-lfXBSmQZAACraFF2sE0431.png


vim /etc/rc.local

wKiom1m-lJOQtZGAAAClY0R-PRs879.png


4.使用mysql正常

wKiom1m-k0qRo5RuAACG8FifjDo509.png

wKiom1m-k0vBeyvoAABocYA93Sw349.png



5.在server4上也挂载高可用集群共享盘/dev/clustervg/demo,并向server1一样设置开机自动挂载

wKioL1m-kxvRlw4nAAB80Ga8ISI271.png


6.启动mysql正常高可用集群共享盘两边同时可以正常使用

wKiom1m-k0uR74v3AACkQFIWB-g746.png


7.测试,将db由server1迁移到server2,服务正常运行,没有中断

wKioL1m-kxuC1y5CAABfvLRp_sI368.png

wKiom1m-k0vz-h8kAAAnFeuQaAQ152.png

wKioL1m-kxzwvPS9AACD0LTtRrY921.png

wKioL1m-kxygd1UbAACEQ_GfG58274.png






      本文转自一百个小排 51CTO博客,原文链接:http://blog.51cto.com/anfishr/1965443,如需转载请自行联系原作者





相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
26天前
|
Linux Shell C语言
【Shell 命令集合 磁盘维护 】Linux 分区管理的工具 sfdisk命令使用教程
【Shell 命令集合 磁盘维护 】Linux 分区管理的工具 sfdisk命令使用教程
29 1
|
26天前
|
存储 Shell Linux
【Shell 命令集合 磁盘维护 】Linux 管理硬盘分区 mpartition命令使用教程
【Shell 命令集合 磁盘维护 】Linux 管理硬盘分区 mpartition命令使用教程
36 1
|
26天前
|
存储 Shell Linux
【Shell 命令集合 磁盘维护 】Linux mkfs.ext2 命令使用教程
【Shell 命令集合 磁盘维护 】Linux mkfs.ext2 命令使用教程
37 1
|
26天前
|
存储 Shell Linux
【Shell 命令集合 磁盘维护 】Linux 创建DOS文件系统 mkdosfs命令使用指南
【Shell 命令集合 磁盘维护 】Linux 创建DOS文件系统 mkdosfs命令使用指南
31 2
|
26天前
|
Shell Linux API
【Shell 命令集合 磁盘维护 】Linux 查找指定目录下的所有符号链接文件 symlinks 命令使用教程
【Shell 命令集合 磁盘维护 】Linux 查找指定目录下的所有符号链接文件 symlinks 命令使用教程
31 1
|
26天前
|
Shell Linux C语言
【Shell 命令集合 磁盘维护 】Linux 创建一个初始化内存盘 mkinitrd命令使用教程
【Shell 命令集合 磁盘维护 】Linux 创建一个初始化内存盘 mkinitrd命令使用教程
33 0
|
26天前
|
存储 Shell Linux
【Shell 命令集合 磁盘维护 】Linux 创建Minix文件系统 mkfs.minix 命令使用教程
【Shell 命令集合 磁盘维护 】Linux 创建Minix文件系统 mkfs.minix 命令使用教程
33 0
|
26天前
|
存储 Shell Linux
【Shell 命令集合 磁盘维护 】Linux 建立ext2文件系统 mke2fs命令使用教程
【Shell 命令集合 磁盘维护 】Linux 建立ext2文件系统 mke2fs命令使用教程
30 2
|
26天前
|
监控 Linux Shell
【Shell 命令集合 磁盘维护 】Linux 交换分区的特殊文件或设备 swapon命令使用指南
【Shell 命令集合 磁盘维护 】Linux 交换分区的特殊文件或设备 swapon命令使用指南
34 1
|
26天前
|
存储 Shell Linux
【Shell 命令集合 磁盘维护 】Linux 创建一个用作交换空间(swap space)的特殊文件或设备 mkswap命令使用教程
【Shell 命令集合 磁盘维护 】Linux 创建一个用作交换空间(swap space)的特殊文件或设备 mkswap命令使用教程
33 0