一、Heartbeat简单介绍
通过Heartbeat,可以将资源(ip以及程序服务等资源)从一台已经故障的服务器快速转移到另一台正常运转的机器上继续提供服务,一般称之为高可用服务。从安装、配置、使用、维护等角度上对比,Keepalived都比Heartbeat简单得多,尤其是Heartbeat 2.1.4后拆分成3个子项目,安装、配置、使用都比较复杂。Heartbeat虽然复杂,但功能更强大,配套工具更全,适合做大型集群管理。
通过修改Heartbeat的配置文件,可以指定一台Heartbeat服务器作为主服务器,另一台自动成为热备服务器。在热备服务器上面配置Heartbeat守护程序来监听来自主服务器的心跳信息。如果在规定时间内,无法监听到心跳信息,那么就启动故障转移,取得主服务器上的相关资源的所有权,接替主服务器继续不间断的提供服务,从而达到资源以及服务高可用的目的。Heartbeat一般故障切换时间在5~20s之间。Heartbeat还支持主主模式,及两台服务器互为主备。
此外,和Keepalived的服务一样,Heartbeat高可用是服务器级别的,不是服务级别的。它可以监测以下系统问题:
- 服务器宕机
- Heartbeat软件故障
- 心跳连接线故障
服务故障不会导致切换,但可以通过服务宕机把Heartbeat服务停掉,从而主机实现自动切换。至少需要两台主机才可以实现高可用服务。两台Heartbeat服务之间可以通过以下方式进行通信:
- 穿行电缆,所谓的串口(首选,缺点是距离不能太远)
- 一根以太网电缆两网卡直连(常用方式)
- 以太网电缆,通过交换机等网络设备连接。(交换机可能出现问题等)
Heartbeat通过ip地址接管和arp广播进行故障转移的。在主服务器故障时,备用节点接管资源后,会立即强制更新所有客户端本地的arp表,即清楚客户端本地缓存的故障服务器的vip和mac地址的解析记录,确保客户端和新的主服务器的对话。
真实ip,又被称为管理ip,一般指配置在物理网卡上面的ip。在负载均衡高可用环境中,管理ip是不对外提供访问服务的,仅作为管理服务器使用,如SSH可以通过这个进行服务连接管理。VIP是虚拟ip,实际上就是eth0:X,x为0~255的任意数字,可以在一个网卡上面绑定多个别名。VIP当主服务器故障时,可以自动漂移到备用服务器。
二、Heartbeat + MySQL 主从高可用环境部署
1. 环境准备
ip地址 主机名 角色 安装软件 172.16.60.211 mysql-master01 MySQL Master Heartbeat3.0.6、Mysql5.7 172.16.60.212 mysql-master01 MySQL Slave Heartbeat3.0.6、Mysql5.7 VIP:172.16.60.94 [root@mysql-master01 ~]# cat /etc/redhat-release CentOS Linux release 7.5.1804 (Core) 两个节点机均为Centos7.5系统、各自设置好主机名并绑定hosts [root@mysql-master01 ~]# cat /etc/hosts ............... 172.16.60.211 root@mysql-master01 172.16.60.212 root@mysql-slave01 两个节点机都关闭selinux,为了测试效果,也关闭防火墙 [root@mysql-master01 ~]# setenforce 0 [root@mysql-master01 ~]# cat /etc/sysconfig/selinux .............. SELINUX=disabled [root@mysql-master01 ~]# iptables -F [root@mysql-master01 ~]# systemctl stop firewalld [root@mysql-master01 ~]# systemctl disable firewalld [root@mysql-master01 ~]# firewall-cmd --state not running
2. 两个节点机均安装Mysql5.7
两个节点机上均使用yum方式安装Mysql5.7,参考:https://www.cnblogs.com/kevingrace/p/8340690.html 安装MySQL yum资源库 [root@mysql-master01 ~]# yum localinstall https://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpm 安装MySQL 5.7 [root@mysql-master01 ~]# yum install -y mysql-community-server 启动MySQL服务器和MySQL的自动启动 [root@mysql-master01 ~]# systemctl start mysqld.service [root@mysql-master01 ~]# systemctl enable mysqld.service 设置登录密码 由于MySQL从5.7开始不允许首次安装后使用空密码进行登录!为了加强安全性,系统会随机生成一个密码以供管理员首次登录使用, 这个密码记录在/var/log/mysqld.log文件中,使用下面的命令可以查看此密码: [root@mysql-master01 ~]# cat /var/log/mysqld.log|grep 'A temporary password' 2019-01-11T05:53:17.824073Z 1 [Note] A temporary password is generated for root@localhost: TaN.k:*Qw2xs 使用上面查看的密码TaN.k:*Qw2xs 登录mysql,并重置密码为123456 [root@mysql-master01 ~]# mysql -p #输入默认的密码:TaN.k:*Qw2xs ............. mysql> set global validate_password_policy=0; Query OK, 0 rows affected (0.00 sec) mysql> set global validate_password_length=1; Query OK, 0 rows affected (0.00 sec) mysql> set password=password("123456"); Query OK, 0 rows affected, 1 warning (0.00 sec) mysql> flush privileges; Query OK, 0 rows affected (0.00 sec) 查看mysql版本 [root@mysql-master01 ~]# mysql -p123456 ........ mysql> select version(); +-----------+ | version() | +-----------+ | 5.7.24 | +-----------+ 1 row in set (0.00 sec) ===================================================================== 温馨提示 mysql5.7通过上面默认安装后,执行语句可能会报错: ERROR 1819 (HY000): Your password does not satisfy the current policy requirements 这个报错与Mysql 密码安全策略validate_password_policy的值有关,validate_password_policy可以取0、1、2三个值: 解决办法: set global validate_password_policy=0; set global validate_password_length=1;