###############################################

NAS

高可用集群

hearbeat v2、crm、NFS实现MySQL高可用集群

NFS作为共享存储所存在的问题

###############################################

NAS

  • (NetworkAttachedStorage):网络附属存储是一种将分布、独立的数据整合为大型、集中化管理的数据中心,以便于对不同主机和应用服务器进行访问的技术。它通过网络交换机连接存储系统和服务器,建立专门用于数据存储的私有网络,用户通过TCP/IP协议访问数据,采用业界标准的文件共享协议如:NFS、HTTP、CIFS来实现基于文件级的数据共享,NAS存储使文件共享访问变的快捷方便,并且易增加存储空间。但NAS本身也有一定的局限性,它会受到网络带宽和网络拥堵的影响,在一定程度上限制了NAS的网络传输能力。

  • NAS的优点:NAS具备文件操作和管理系统,kernel的存在有效解决多个进程在同一时间对同一资源征用带来的数据崩溃(脑裂split-brain);NAS是共享与独享兼顾的数据存储池并且简单灵活创建成本不高。

  • NAS的缺点:NAS本身将会受到网络带宽和网络拥堵的影响;文件级别的数据共享在一定程度上会影响效率。

高可用集群

  • 高可用集群,英文原文为High Availability Cluster,简称HA Cluster,简单的说,集群(cluster)就是一组计算机,它们作为一个整体向用户提供一组网络资源。这些单个的计算机系统 就是集群的节点(node)。只有两个节点的高可用集群又称为,即使用两台服务器互相备份。当一台服务器出现故障时,可由另一台服务器承担服务任务,从而在不需要人工干预的 情况下,自动保证系统能持续对外提供服务。双机热备只是高可用集群的一种,高可用集群系统更可以支持两个以上的节点,提供比双机热备更多、更高级的功能, 更能满足用户不断出现的需求变化,逻辑结构图如下:

  • ccm(Cluster Consensus Menbership Service)监听节点间心跳信息并计算整个集群的票数和收敛状态信息。

  • crmd(Cluster Resource Manager):集群资源管理器实现了资源的分配,资源分配的每个动作都要通过crm来实现,是核心组建,每个节点上的crm都维护一个cib用来定义资源特定的属性,哪些资源定义在同一个节点上。

  • cib(Cluster Infonation Base):集群信息基库是XML格式的配置文件,在内存中的一个XML格式的集群资源的配置文件。

  • lrmd(Local Resource Manager):本地资源管理器用来获取本地某个资源的状态,并且实现本地资源的管理。

  • pengine:PE、TE

  • PE(Policy Engine):策略引擎负责计算集群资源的粘性

  • TE(Transition Engine):事务引擎根据PE计算结果指挥节点进行资源转移

  • stonithd(Shoot The Other Node in the Head):切断故障节点电源。

Messagin Layer软件

  • heartbeat

  • corosync

  • cman

  • keepalived

  • ultramokey

Cluster Resource Manager Layer软件

  • crm

  • pacemaker

  • rgmanager

HA常用组合

  • heartbeat v2+crm

  • heartbeat v3+pacemaker

  • corosync+pacemaker

  • cman + rgmanager

  • keepalived+lvs

hearbeat v2、crm、NFS实现MySQL高可用集群

  • 网络结构图如下:

注释:节点1和节点2上运行着HA软件和mysql服务,数据目录在NFS服务器端/mydata目录下,通过HA软件的实时监控可以完成节点故障时资源的自动转移,对于客户端来说VIP表征着mysql服务,并持久可用

必备条件

  • 节点名称必须跟uname -n命令的执行结果一致

  • 节点名称和IP对应关系保存在/etc/hosts文件,不依赖于DNS

  • 各节点ssh互信通信

  • 集群各节点时间需要同步

######修改各节点主机名hostname node1.soulboy.comvim /etc/sysconfig/networkHOSTNAME=node1.soulboy.com######修改hosts文件vim /etc/hosts192.168.1.131   node1.soulboy.com       node1192.168.1.132   node2.soulboy.com       node2######各节点ssh互信,节点二不再演示ssh-keygen -t rsa -f ~/.ssh/id_rsa -P ''ssh-copy-id -i .ssh/id_rsa.pub root@192.168.1.132######各节点时间同步,需要时间服务器配合crontab* */5 * * *  ntpdate 192.168.1.100

部署HA软件

######各节点安装软件包yum --nogpgcheck localinstall heartbeat-2.1.4-9.el5.i386.rpm heartbeat-gui-2.1.4-9.el5.i386.rpm heartbeat-pils-2.1.4-10.el5.i386.rpm heartbeat-stonith-2.1.4-10.el5.i386.rpm libnet-1.1.4-3.el5.i386.rpm perl-MailTools-1.77-1.el5.noarch.rpm######各节点提供配置文件cp /usr/share/doc/heartbeat-2.1.4/{authkeys,ha.cf,haresources} /etc/ha.d/chmod 600 /etc/ha.d/authkeys######修改密钥文件authkeysdd if=/dev/random count=1 bs=512 | md5sum   生成随机数vim /etc/ha.d/authkeysauth 11 md5 b20f227f85d8f51f76f9feec992061ed######各节点修改核心配置文件vim /etc/ha.d/ha.cfmcast eth0 225.0.100.20 694 1 0   组播node    node1.soulboy.comnode    node2.soulboy.comcrm     respawn                 crm从此代替haresources,并实现CRM功能######复制node1秘钥文件到node2scp /etc/ha.d/authkeys node2:/etc/ha.d/ -P  复制到node2######各节点启动服务service hearbeat start

部署NFS服务器

partprobe /dev/sdbpvcreate /dev/sdb1vgcreate myvg /dev/sdb1lvcreate -L 6G -n mydata myvgmke2fs -j /dev/myvg/mydatagroupadd -g 3306 mysql     添加mysql用户组useradd -u 3306 -g mysql -s /sbin/nologin -M mysqlmkdir /mydata              创建共享目录vim /etc/fstab             开机自动挂载/dev/myvg/mydata    /mydata    ext3    defaults    0  0mount -a                   挂载mkdir /mydata/data         创建数据目录chown -R mysql.mysql /mydata/data/     修改目录为mysql用户vim /etc/exports/mydata         192.168.1.0/24(no_root_squash,rw)   修改共享权限exportfs -arv

部署mysql服务

######各节点停止heartbeat服务service heartbeat stop######创建mysql用户和组groupadd -g 3306 mysqluseradd -g 3306 -u 3306 -s /sbin/nologin -M mysqlmkdir /mydatamount 192.168.1.230:/mydata /mydata    挂载目录usermod -s /bin/bash mysql             测试是否可写su - mysqltouch /mydata/data/arm /mydata/data/alogoutusermod -s /sbin/nologin mysqlumount /mydata                         测试正常#####在节点一上安装mysqltar xf mysql-5.5.28-linux2.6-i686.tar.gz -C /usr/local/ln -sv /usr/local/mysql-5.5.28-linux2.6-i686 /usr/local/mysqlchown -R root:mysql /usr/local/mysql/*mount 192.168.1.230:/mydata /mydata     挂载NFS共享目录到本地mydata目录#####初始化mysql/usr/local/mysql                        切换目录scripts/mysql_install_db --user=mysql --datadir=/mydata/data/  初始化#####修改相关配置文件cp /usr/local/mysql/support-files/my-large.cnf  /etc/my.cnfvim /etc/my.cnfdatadir = /mydata/datainnodb_file_per_table = 1               表空间独立cp /usr/local/mysql/support-files/mysql.server  /etc/init.d/mysqldchkconfig --add mysqldchkconfig mysqld off                    禁止开机自启动service mysqld start                    启动服务/usr/local/mysql/bin/mysql              客户端工具######为Mysql授权远程用户/usr/local/mysql/bin/mysqlmysql> GRANT ALL ON *.* to 'root'@'%' IDENTIFIED BY 'redhat';mysql> FLUSH PRIVILEGES;mysql> create database testdb;mysql> use testdbmysql> create table student (id int unsigned not null auto_increment primary key, name char(20));######停止服务卸载目录service mysqld stop                     关闭mysql服务umount /mydata                          卸载mydata目录######同步配置文件和启动脚本到node2cp /etc/my.cnf  node2:/etc/  scp /etc/init.d/mysqld  node2:/etc/init.d/######为node2创建/mydata目录mkdir /mydata

使用crm定义资源

######配置GUI登陆账户密码passwd hacluster######打开GUI登陆窗口(请确保连接DC)hb_gui &

1、登陆crm

2、定义资源组

3、定义VIP

4、定义NFS存储

5、定义mysql服务

6、启动资源组

7、查看资源已运行在node2上

8、使用客户端登陆测试

模拟故障测试HA功能是否生效

1、资源组此时运行在node2节点,node1并无任何资源,此时让node2变为standy。

2、crm显示所有资源已成功转移至node1

3、切换至node1端验证真实性

4、mysql客户端第二次查询

crm的补充(关于资源约束)

location 资源对节点的倾向程度,同一节点所有资源(进程)之和。

caloation:资源间互斥性,两个资源倾向于在一起还是分开。

order: 资源采取动作的次序。

NFS作为共享存储所存在的问题

  • 单点故障的问题显而易见