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

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)。只有两个节点的高可用集群又称为双机热备,即使用两台服务器互相备份。当一台服务器出现故障时,可由另一台服务器承担服务任务,从而在不需要人工干预的 情况下,自动保证系统能持续对外提供服务。双机热备只是高可用集群的一种,高可用集群系统更可以支持两个以上的节点,提供比双机热备更多、更高级的功能, 更能满足用户不断出现的需求变化,逻辑结构图如下:

135054122.png

  • 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高可用集群

  • 网络结构图如下:

113046616.png

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

必备条件

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

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

  • 各节点ssh互信通信

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

######修改各节点主机名
hostname node1.soulboy.com
vim /etc/sysconfig/network
HOSTNAME=node1.soulboy.com
######修改hosts文件
vim /etc/hosts
192.168.1.131   node1.soulboy.com       node1
192.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
######修改密钥文件authkeys
dd if=/dev/random count=1 bs=512 | md5sum   生成随机数
vim /etc/ha.d/authkeys
auth 1
1 md5 b20f227f85d8f51f76f9feec992061ed
######各节点修改核心配置文件
vim /etc/ha.d/ha.cf
mcast eth0 225.0.100.20 694 1 0   组播
node    node1.soulboy.com
node    node2.soulboy.com
crm     respawn                 crm从此代替haresources,并实现CRM功能
######复制node1秘钥文件到node2
scp /etc/ha.d/authkeys node2:/etc/ha.d/ -P  复制到node2
######各节点启动服务
service hearbeat start

151843347.png

部署NFS服务器

partprobe /dev/sdb
pvcreate /dev/sdb1
vgcreate myvg /dev/sdb1
lvcreate -L 6G -n mydata myvg
mke2fs -j /dev/myvg/mydata
groupadd -g 3306 mysql     添加mysql用户组
useradd -u 3306 -g mysql -s /sbin/nologin -M mysql
mkdir /mydata              创建共享目录
vim /etc/fstab             开机自动挂载
/dev/myvg/mydata    /mydata    ext3    defaults    0  0
mount -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 mysql
useradd -g 3306 -u 3306 -s /sbin/nologin -M mysql
mkdir /mydata
mount 192.168.1.230:/mydata /mydata    挂载目录
usermod -s /bin/bash mysql             测试是否可写
su - mysql
touch /mydata/data/a
rm /mydata/data/a
logout
usermod -s /sbin/nologin mysql
umount /mydata                         测试正常
#####在节点一上安装mysql
tar 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/mysql
chown -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.cnf
vim /etc/my.cnf
datadir = /mydata/data
innodb_file_per_table = 1               表空间独立
cp /usr/local/mysql/support-files/mysql.server  /etc/init.d/mysqld
chkconfig --add mysqld
chkconfig mysqld off                    禁止开机自启动
service mysqld start                    启动服务
/usr/local/mysql/bin/mysql              客户端工具
######为Mysql授权远程用户
/usr/local/mysql/bin/mysql
mysql> GRANT ALL ON *.* to 'root'@'%' IDENTIFIED BY 'redhat';
mysql> FLUSH PRIVILEGES;
mysql> create database testdb;
mysql> use testdb
mysql> create table student (id int unsigned not null auto_increment primary key, name char(20));
######停止服务卸载目录
service mysqld stop                     关闭mysql服务
umount /mydata                          卸载mydata目录
######同步配置文件和启动脚本到node2
cp /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

155651155.png

2、定义资源组

160056467.png

3、定义VIP

162037241.png

4、定义NFS存储

162133808.png

5、定义mysql服务

162220523.png

6、启动资源组

162331433.png

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

162404119.png

8、使用客户端登陆测试

163240658.png

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

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

164353542.png

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

164448108.png

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

164530674.png

4、mysql客户端第二次查询

164647159.png

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

165116824.png


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

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

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


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

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