设为首页 收藏本站
查看: 826|回复: 0

[经验分享] 基于heartbeat v1、V2实现mysql的高可用

[复制链接]

尚未签到

发表于 2019-1-7 08:50:50 | 显示全部楼层 |阅读模式
一、heartbeat v1简介
heartbeat v1的架构是:heartbeat + haresource 来实现高可用的。heartbeat
作为message layer层,haresource作为CRM管理资源,RA可以有LSB,OSF,heartbeat legacy提供。
######################################1、Heartbeat的控制信息:
“心跳”信息: (也称为状态信息)仅150 bytes大小的广播、组播或多播数据包。可为以每个节点配
置其向其它节点通报“心跳”信息的频率,以及其它节点上的heartbeat进程为了确认主节点出节点出
现了运行等错误之前的等待时间。
集群变动事务(transition)信息:ip-request和ip-request-rest是相对较常见的两种集群变动信息
,它们在节点间需要进行资源迁移时为不同节点上heartbeat进程间会话传递信息。比如,当修复了主
节点并且使其重新“上线”后,主节点会使用ip-request要求备用节点释放其此前从因主节点故障而
从主节点那里接管的资源。此时,备用节点则关闭服务并使用ip-request-resp通知主节点其已经不再
占用此前接管的资源。主接点收到ip-request-resp后就会重新启动服务。
重传请求:在某集群节点发现其从其它节点接收到的heartbeat控制信息“失序”(heartbeat进程使
用序列号来确保数据包在传输过程中没有被丢弃或
出现错误)时,会要求对方重新传送此控制信息。 Heartbeat一般每一秒发送一次重传请求,以避免洪泛。
上面三种控制信息均基于UDP协议进行传送,可以在/etc/ha.d/ha.cf中指定其使用的UDP端口或者多播
地址(使用以太网连接的情况下)。
此外,除了使用“序列号/确认”机制来确保控制信息的可靠传输外,Heartbeat还会使用MD5或SHA1为
每个数据包进行签名以确保传输中的控制信息的安全性。
######################################2、Heartbeat的配置文件:
/etc/ha.d/ha.cf  定义位于不同节点上的heartbeat进程间如何进行通信;
/etc/ha.d/haresources  定义对某个资源来说哪个服务器是主节点,
      以及哪个节点应该拥有客户端访问资源时的目标IP地址。
/etc/ha.d/authkeys 定义Heartbeat包在通信过程中如何进行加密。
当ha.cf或authkeys文件发生改变时,需要重新加载它们就可以使用之生效;
而如果haresource文件发生了改变,则只能重启heartbeat服务方可使之生效。
尽管Heartbeat并不要求主从节点间进行时钟同步,但它们彼此间的时间差距不能超过1分钟,
否则一些配置为高可用的服务可能会出异常。
Heartbeat当前也不监控其所控制的资源的状态,比如它们是否正在运行,是否运行良好以
及是否可供客户端访问等。要想监控这些资源,要使用额外的Mon软件包来实现。
######################################3、ha.cf配置文件部分参数详解:
autojoin    none#集群中的节点不会自动加入
logfile /var/log/ha-log#指名heartbaet的日志存放位置
keepalive 2#指定心跳使用间隔时间为2秒(即每两秒钟在eth1上发送一次广播)
deadtime 30#指定备用节点在30秒内没有收到主节点的心跳信号后,则立即接管主节点的服
                务资源
warntime 10#指定心跳延迟的时间为十秒。当10秒钟内备份节点不能接收到主节点的心跳
          信号时,就会往日志中写入一个警告日志,但此时不会切换服务
initdead 120#在某些系统上,系统启动或重启之后需要经过一段时间网络才能正常工作,
         该选项用于解决这种情况产生的时间间隔。取值至少为deadtime的两倍。
udpport 694#设置广播通信使用的端口,694为默认使用的端口号。
baud    19200#设置串行通信的波特率      
#bcast   eth0# Linux  指明心跳使用以太网广播方式,并且是在eth0接口上进行广播。
#mcast eth0 225.0.0.1 694 1 0#采用网卡eth0的Udp多播来组织心跳,一般在备用节点不止一台
时使用。Bcast、ucast和mcast分别代表广播、单播和多播,是组织心跳的三种方式,任选其一即可。
#ucast eth0 192.168.1.2#采用网卡eth0的udp单播来组织心跳,后面跟的IP地址应为双机对方的IP
地址
auto_failback on#用来定义当主节点恢复后,是否将服务自动切回,heartbeat的两台主机
  分别为主节点和备份节点。主节点在正常情况下占用资源并运行所有的服务,遇到故障时把资源交
  给备份节点并由备份节点运行服务。在该选项设为on的情况下,一旦主节点恢复运行,则自动获取
  资源并取代备份节点,如果该选项设置为off,那么当主节点恢复后,将变为备份节点,而原来的备
  份节点成为主节点
#stonith baytech /etc/ha.d/conf/stonith.baytech# stonith的主要作用是使出现问题的节点从集
  环境中脱离,进而释放集群资源,避免两个节点争用一个资源的情形发生。保证共享数据的安全性
  和完整性。
#watchdog /dev/watchdog#该选项是可选配置,是通过Heartbeat来监控系统的运行状态。使用该特
   性,需要在内核中载入"softdog"内核模块,用来生成实际的设备文件,如果系统中没有这个内核
   模块,就需要指定此模块,重新编译内核。编译完成输入"insmod softdog"加载该模块。然后输入
   "grep misc /proc/devices"(应为10),输入"cat /proc/misc |grep watchdog"(应为130)。最后
   ,生成设备文件:"mknod /dev/watchdog c 10 130" 。即可使用此功能
node node2.example.com  #主节点主机名,可以通过命令“uname –n”查看。
node node3.example.com  #备用节点主机名
ping 172.16.0.1#选择ping的节点,ping 节点选择的越好,HA集群就越强壮,可以选择固定的路由
  器作为ping节点,但是最好不要选择集群中的成员作为ping节点,ping节点仅仅用来测试网络连接
#ping_group group1 192.168.12.120 192.168.12.23  #类似于ping  ping一组ip地址
apiauth pingd  gid=haclient uid=hacluster
respawn hacluster /usr/local/ha/lib/heartbeat/pingd -m 100 -d 5s
  #该选项是可选配置,列出与heartbeat一起启动和关闭的进程,该进程一般是和heartbeat集成的插
  件,这些进程遇到故障可以自动重新启动。最常用的进程是pingd,此进程用于检测和监控网卡
  状态,需要配合ping语句指定的ping node来检测网络的连通性。其中hacluster表示启动pingd
  进程的身份。
#下面的配置是关键,也就是激活crm管理,开始使用v2 style格式
# crm respawn   
#注意,还可以使用crm yes的写法,但这样写的话,如果后面的cib.xml配置有问题
#会导致heartbeat直接重启该服务器,所以,测试时建议使用respawn的写法
#下面是对传输的数据进行压缩,是可选项
compression     bz2
compression_threshold 2

####################################4、haresources配置文件介绍
主从节点上的/etc/ra.d/raresource文件必须完全相同。文件每行通常包含以下组成部分:
1、服务器名字:指正常情况下资源运行的那个节点(即主节点),后跟一个空格或tab;
  这里指定的名字必须跟某个节点上的命令"uname -n"的返回值相同;
2、IP别名(即额外的IP地址,可选):在启动资源之前添加至系统的附加IP地址,
  后跟空格或tab;IP地址后面通常会跟一个子网掩码和广播地址,彼此间用“/”隔开;
3、资源脚本:即用来启动或停止资源的脚本,位于/etc/init.d/或/etc/ha.d/resourcd.d目录中;
  如果需要传递参数给资源脚本,脚本和参数之间需要用两个冒号分隔,多个参数时彼此间也需要用两个冒号分隔;如果有
多个资源脚本,彼此间也需要使用空格隔开;
格式如下:
primary-server [IPaddress[/mask/interface/broadcast]]  resource1[::arg1::arg2]  \
resource2[::arg1::arg2]
例如:
node2.example.com 172.16.10.20/16/eth0/172.16.255.255 \
Filesystem::172.16.10.9:/mysqldata::/var/lib/mysql::nfs mysqld
######################################5、authkeys配置文件介绍
auth 1  # 指明认证类型
1 md5 6c781b5034b1f6b9379b # 指明对应的认证类型和随机字符串

######################################6、补充资料:组播IP地址
组播IP地址用于标识一个IP组播组。IANA(internet assigned number authority)把D类地址
  空间分配给IP组播,其范围是从224.0.0.0到239.255.255.255。如下图所示(二进制表示),
  IP组播地址前四位均为1110八位组⑴ 八位组⑵ 八位组⑶ 八位组⑷1110
XXXX XXXXXXXX XXXXXXXX XXXXXXXX组播组可以是永久的也可以是临时的。组播组地址中,
  有一部分由官方分配的,称为永久组播组。永久组播组保持不变的是它的ip地址,组中的成
  员构成可以发生变化。永久组播组中成员的数量都可以是任意的,甚至可以为零。那些没有
  保留下来供永久组播组使用的ip组播地址,可以被临时组播组利用。
224.0.0.0~224.0.0.255为预留的组播地址(永久组地址),地址224.0.0.0保留不做分配,其它地址
  供路由协议使用。
224.0.1.0~238.255.255.255为用户可用的组播地址(临时组地址),全网范围内有效。
239.0.0.0~239.255.255.255为本地管理组播地址,仅在特定的本地范围内有效。常用的预留组播地
  址列表如下:
224.0.0.0 基准地址(保留)
224.0.0.1 所有主机的地址
224.0.0.2 所有组播路由器的地址
224.0.0.3 不分配
224.0.0.4dvmrp(Distance Vector Multicast Routing Protocol,距离矢量组播路由协议)路由器
224.0.0.5 ospf(Open Shortest Path First,开放最短路径优先)路由器
224.0.0.6 ospf dr(Designated Router,指定路由器)
224.0.0.7 st (Shared Tree,共享树)路由器
224.0.0.8 st主机
224.0.0.9 rip-2路由器
224.0.0.10 Eigrp(Enhanced Interior Gateway Routing Protocol,增强网关内部路由线路协议)路
   由器 224.0.0.11 活动代理
224.0.0.12 dhcp服务器/中继代理
224.0.0.13 所有pim (Protocol Independent Multicast,协议无关组播)路由器
224.0.0.14 rsvp (Resource Reservation Protocol,资源预留协议)封装
224.0.0.15 所有cbt 路由器
224.0.0.16 指定sbm(Subnetwork Bandwidth Management,子网带宽管理)
224.0.0.17 所有sbms
224.0.0.18 vrrp(Virtual Router Redundancy Protocol,虚拟路由器冗余协议)
239.255.255.255 SSDP协议使用二、heartbeat v1 + nfs 实现对mysql的高可用

实验步骤:
#########################在172.16.10.9上:
#################提供nfs服务
一、安装nfs管理工具
yum install nfs-utils -y
二、创建共享目录并共享
mkdir /mysqldata
# vim /etc/exports 添加以下内容:
/mysqldata/ 172.16.0.0/16(rw,no_root_squash)
setfacl -m u:26:rwx /mysqldata (uid=26是使用rpm方式安装的mysql时的mysql用户的uid)
# 注意:上面的 no_root_squash 选项是为了在安装 mysql 时方便,安装完成后,应去掉此选项。
三、启动nfs服务
/etc/init.d/nfs start
############################################配置主节点和备节点
第一步:设置主机名
#########################在172.16.10.22上:
# vim /etc/sysconfig/netwoek中的HOSTNAME:
HOSTNAME=node2.example.com
#########################在172.16.10.33上:
# vim /etc/sysconfig/netwoek中的HOSTNAME:
HOSTNAME=node3.example.com
第二步:设置主机名解析
#########################在172.16.10.22上:
# vim /etc/hosts文件,添加:
172.16.10.22 node2.example.com node2
172.16.10.33 node3.example.com node3
#########################在172.16.10.33上:
# vim /etc/hosts文件,添加:
172.16.10.22 node2.example.com node2
172.16.10.33 node3.example.com node3
第三步:实现 node2 和 node3 之间基于ssh秘钥认证
#########################在172.16.10.22上:
ssh-keygen -t rsa -P ''
ssh-copy-id -i ~/.ssh/id_rsa.pub node3.example.com
#########################在172.16.10.33上:
ssh-keygen -t rsa -P ''
ssh-copy-id -i ~/.ssh/id_rsa.pub node2.example.com
第四步:node2 和 node3 之间实现时间同步
1、可以使用相同的时间服务器来同步时间
2、可以手动设置是时间同步  验证以上配置结果:


  上面的配置正确的话,可以继续进行如下配置:
第一步:安装 mysql 服务,并配置
#########################在172.16.10.22上:
yum install mysql mysql-server
mount -t nfs 172.16.10.9:/mysqldata /var/lib/mysql
chown -R mysql.mysql /var/lib/mysql
# 启动 mysql 并初始化 mysql,设置用户密码等
/etc/init.d/mysqld start
#########################在172.16.10.33上:
yum install mysql mysql-server
mount -t nfs 172.16.10.9:/mysqldata /var/lib/mysql
/etc/init.d/mysqld start  验证以上配置结果:


  注意:以上结果在测试时,mysqld服务只能在一个节点上启动。当然,这里需要授权给远程用户172.16.10.20的权限。完成这些配置后,可以继续进行以下配置。
第一步:安装heartbeat之前的工作
#########################在172.16.10.22,172.16.10.33上:
mysql>GRANT ALL ON *.* TO root@'172.16.10.20' IDENTIFIED BY 'guoting';
/etc/init.d/mysqld stop
umount /var/lib/mysql
chkconfig mysqld off
第二步:安装heartbeat v1版本软件
#########################在172.16.10.22,172.16.10.33上:
yum install perl-TimeDate net-snmp-libs libnet PyXML    # 注意:libnet是在epel仓库中的,需要实现配置好。也可以手动编译,下载地址:http://search.cpan.org/dist/libnet/
rpm -ivh heartbeat-2.1.4-12.el6.x86_64.rpm heartbeat-pils-2.1.4-12.el6.x86_64.rpm heartbeat-stonith-2.1.4-12.el6.x86_64.rpm # 这是由heartbeat 自己制作的rpm包
第三步:配置heartbeat
#########################在172.16.10.22
cp /usr/share/doc/heartbeat-2.1.4/{ha.cf,haresources,authkeys} /etc/ha.d/
# vim /etc/ha.d/ha.cf 修改以下内容:
mcast eth0 226.10.10.10 694 1 0
auto_failback on
nodenode2.example.com
nodenode3.example.com
ping 172.16.0.1
# vim /etc/ha.d/haresources 添加以下内容:
node2.example.com 172.16.10.20/16/eth0/172.16.255.255  \
Filesystem::172.16.10.9:/mysqldata::/var/lib/mysql::nfs mysqld
# vim /etc/ha.d/authkeys 添加以下内容:
auth 1
1 md5 6c781b5034b1f6b9379b
chmod 600 /etc/ha.d/authkeys
#########################在172.16.10.33
scp -p node2.example.com:/etc/ha.d/{ha.cf,haresources,authkeys} /etc/ha.d
第四步:启动服务
#########################在172.16.10.22
/etc/init.d/heartbeat start;ssh node3 '/etc/init.d/heartbeat start'  验证以上结果:



  此时模拟,主节点出现故障:

  此时,从节点可以正常接管资源,用户可以正常访问。


  此时,如果主节点重新上线,主节点会接管现有资源。(auto_failback on的缘由)

三、heartbeat v2 + nfs 实现对mysql的高可用
  实验拓扑图和上面一致。
第一步:修改ha.cf配置文件
#########################在172.16.10.22上:
crm on
scp /etc/ha.d/ha.cf node3:/etc/ha.d/
第二步:修改ha.cf配置文件
#########################在172.16.10.22、172.16.10.33上:
rpm -ivh rpm -ivh heartbeat2/heartbeat-gui-2.1.4-12.el6.x86_64.rpm
第三步:启动heartbeat服务
#########################在172.16.10.22、172.16.10.33上:
/etc/init.d/heartbeat start  配置完成后,可以验证结果:

  
  以上结果正确后,可以继续以下实验:
第一步:在主节点上设置ha_gui图形化管理接口的密码
# 默认登陆账号是 hacluster 本地账号
passwd hacluster
第二步:启动图形化接口工具配置
hb_gui &  
  图形化管理接口界面:

  添加组资源:


  在组中添加vip,storage,mysqld资源:




  客户端测试:

  实现资源迁移:




  当然,这里也可以使用资源约束来定义资源的粘性,启动顺序等。
  至此,配置已全部完成。
  

  以上内容是自己对知识的理解,如有偏差,欢迎指正。




运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-660170-1-1.html 上篇帖子: linux上的 heartbeat 双机热备服务架设(我现在在研究不知道好用不) 下篇帖子: heartbeat v1
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表