###############################################
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高可用集群
网络结构图如下:
![123123.png 113046616.png](https://s1.51cto.com/attachment/201310/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
部署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
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作为共享存储所存在的问题
单点故障的问题显而易见
转载于:https://blog.51cto.com/soulboy/1303791