###############################################node
NASmysql
高可用集群linux
hearbeat v二、crm、NFS实现MySQL高可用集群sql
NFS做为共享存储所存在的问题vim
###############################################bash
NAS
服务器
(NetworkAttachedStorage):网络附属存储是一种将分布、独立的数据整合为大型、集中化管理的数据中心,以便于对不一样主机和应用服务器进行访问的技术。它经过网络交换机链接存储系统和服务器,创建专门用于数据存储的私有网络,用户经过TCP/IP协议访问数据,采用业界标准的文件共享协议如:NFS、HTTP、CIFS来实现基于文件级的数据共享,NAS存储使文件共享访问变的快捷方便,而且易增长存储空间。但NAS自己也有必定的局限性,它会受到网络带宽和网络拥堵的影响,在必定程度上限制了NAS的网络传输能力。网络
NAS的优势:NAS具有文件操做和管理系统,kernel的存在有效解决多个进程在同一时间对同一资源征用带来的数据崩溃(脑裂split-brain);NAS是共享与独享兼顾的数据存储池而且简单灵活建立成本不高。dom
NAS的缺点:NAS自己将会受到网络带宽和网络拥堵的影响;文件级别的数据共享在必定程度上会影响效率。ssh
高可用集群
高可用集群,英文原文为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 v二、crm、NFS实现MySQL高可用集群
网络结构图以下:
注释:节点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 &
一、登录crm
二、定义资源组
三、定义VIP
四、定义NFS存储
五、定义mysql服务
六、启动资源组
七、查看资源已运行在node2上
八、使用客户端登录测试
模拟故障测试HA功能是否生效
一、资源组此时运行在node2节点,node1并没有任何资源,此时让node2变为standy。
二、crm显示全部资源已成功转移至node1
三、切换至node1端验证真实性
四、mysql客户端第二次查询
crm的补充(关于资源约束)
location: 资源对节点的倾向程度,同一节点全部资源(进程)之和。
caloation:资源间互斥性,两个资源倾向于在一块儿仍是分开。
order: 资源采起动做的次序。
NFS做为共享存储所存在的问题
单点故障的问题显而易见