Heartbeat+Mysql主从复制实现数据同步

时间:2022-01-05 22:05:15

目录

1 环境准备

拓扑图
Heartbeat+Mysql主从复制实现数据同步

实验实现

需要2台Centos6虚拟机,两台heartbeat主机server1和server2都安装heartbeat 而后两个主机分别为mysql集群的master、slave节点,最后实现数据同步。

IP规划

server1:
    eth0:192.168.93.130/24
    eth1:192.168.1.130/24

server2:
    eth0:192.168.93.129/24
    eth1:192.168.1.129/24

关闭Selinux和iptables

setenforce 0
getenforce
/etc/init.d/iptables stop
chkconfig iptables off

所有虚拟机做hosts解析

cat >>/etc/hosts<<EOF
192.168.93.130 server1
192.168.1.130 server1
192.168.93.129 server2
192.168.1.129 server2
EOF

2 操作步骤

2.1 yum安装heartbeat

需要配置epel源才能yum安装heartbeat

# 配置epel源
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo

# 把此文件中的三个文件给拷贝到/etc/ha.d/目录下
less /etc/ha.d/README.config
They are:
        ha.cf           Main configuration file
        haresources     Resource configuration file
        authkeys        Authentication informatio

cp /usr/share/doc/heartbeat-3.0.4/{authkeys,haresources,ha.cf} /etc/ha.d/
ll -rt /etc/ha.d/|tail -3
-rw-r--r-- 1 root root   645 Jun  9 14:42 authkeys
-rw-r--r-- 1 root root  5905 Jun  9 14:42 haresources
-rw-r--r-- 1 root root 10502 Jun  9 14:42 ha.cf

# 两节点都安装mysql
yum install mysql

编辑三个配置文件,这里可以参考最后配置文件详解
1)修改/etc/ha.d/ha.cf配置文件

另一台虚拟机只需要把ucast稍作改动,即ucast eth1 192.168.1.130

选择ping的节点,ping节点选择的越好,HA集群就越强壮,可以选择固定的路由器作为ping节点,但是最好不要选择集群中的成员作为ping节点,ping节点仅仅用来测试网络连接。这里ping指向的是server2的eth1 ip地址,由于我本机的原因,不能ping通网关192.168.1.1,故两边ping的都指定192.168.1.129即可。
Heartbeat+Mysql主从复制实现数据同步

2)编辑/etc/ha.d/authkeys(两台服务器一样)改成如下内容

可scp把配置文件拷贝至另一节点
Heartbeat+Mysql主从复制实现数据同步

3)编辑/etc/ha.d/haresources,加入以下内容(两台服务器都一样)

设置一个对外提供服务的虚拟网络地址
可scp把配置文件拷贝至另一节点
Heartbeat+Mysql主从复制实现数据同步

2.2 mysql的主从master、slave配置

上面已经安装过mysql了,修改master的mysql配置文件/etc/my.cnf,主从复制全局参数配置,添加server-id标记内容。
注意:每一个server的server-id是唯一标识的,即在master中server-id=1,那么在slave中的server-id=2即可。slave中的/etc/my.cnf文件中只需要添加server-id=2即可。

Heartbeat+Mysql主从复制实现数据同步

# 启动mysqld服务,进入数据库中查看server_id mysql> show variables like "%server_id%";
+---------------+-------+
| Variable_name | Value | +---------------+-------+
| server_id | 1 | +---------------+-------+
1 row in set (0.00 sec)

主从复制专用账号分配,在master上增加slave服务器连接master服务器的同步账号 “test”,并授权replication slave同步的权限

Heartbeat+Mysql主从复制实现数据同步

检查主从复制专用账号配置情况,查看master的mysql库中的user表

Heartbeat+Mysql主从复制实现数据同步
Heartbeat+Mysql主从复制实现数据同步

slave节点配置

Heartbeat+Mysql主从复制实现数据同步
这里的master_log_file之为二进制日志的值
master_log_pos值为偏移量的值
要去master上查看
Heartbeat+Mysql主从复制实现数据同步

# 查看slave的状态,注意下面这三个值要固定才成功
         Slave_IO_Running: Yes
        Slave_SQL_Running: Yes
    Seconds_Behind_Master: 0

Heartbeat+Mysql主从复制实现数据同步

测试:在master上创建一个数据库,在slave上查看是否有数据库

Heartbeat+Mysql主从复制实现数据同步
Heartbeat+Mysql主从复制实现数据同步

可以发现,slave随着master中数据库的创建这边也创建了一个一样的test_mysql数据库

2.3 开启heartbeat服务,再次查看ip信息

注意,server1要先开启heartbeat服务,server2再开启
Heartbeat+Mysql主从复制实现数据同步
Heartbeat+Mysql主从复制实现数据同步
Heartbeat+Mysql主从复制实现数据同步
Heartbeat+Mysql主从复制实现数据同步

3 测试

先查看两边服务的日志,可以发现已经联通成功了,而且也已经启动了mysqld服务

Heartbeat+Mysql主从复制实现数据同步
Heartbeat+Mysql主从复制实现数据同步

测试,把server1的heartbeat的网卡eth2给断开,看server2的heartbeat日志信息

Heartbeat+Mysql主从复制实现数据同步

4 Heartbeat配置文件详解

4.1 主配置文件(/etc/ha.d/ha.cf)

#debugfile /var/log/ha-debug 
logfile /var/log/ha-log     #指名heartbeat的日志存放位置。 
#crm yes #是否开启Cluster Resource Manager(集群资源管理)功能。 
bcast eth1              #指明心跳使用以太网广播方式,并且是在eth1接口上进行广播。 
keepalive 2             #指定心跳间隔时间为2秒(即每2秒钟在eth1上发送一次广播)。 
deadtime 30 #指定若备用节点在30秒内没有收到主节点的心跳信号,则立即接管主节点的服务资源。 
warntime 10 #指定心跳延迟的时间为10秒。当10秒钟内备份节点不能接收到主节点的 心跳信号时,就会往日志中写入一个警告日志,但此时不会切换服务。 
initdead 120    #在某些系统上,系统启动或重启之后需要经过一段时间网络才 能正常工作,该选项用于解决这种情况产生的时间间隔。取值至少为deadtime的两倍。 
udpport 694             #设置广播通信使用的端口,694为默认使用的端口号。 
baud 19200              #设置串行通信的波特率。 
#serial /dev/ttyS0 #选择串行通信设备,用于双机使用串口线连接的情况。 如果双机使用以太网连接,则应该关闭该选项。 
#ucast eth0 192.168.1.2 #采用网卡eth0的udp单播来组织心跳,后面跟的 IP地址应为双机对方的IP地址。 
#mcast eth0 225.0.0.1 694 1 0 #采用网卡eth0的Udp多播来组织心跳, 一般在备用节点不止一台时使用。Bcast、ucast和mcast分别代表广播、单播 和多播,是组织心跳的三种方式,任选其一即可。 
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 node1              #主节点主机名,可以通过命令"uanme -n"查看。 
node node2              #备用节点主机名。 
ping 192.168.60.1   #选择ping的节点,ping节点选择的越好,HA集群就越强壮,可以选择固定的路由器作为ping节点,但是最好不要选择集群中的成员作为ping节点,ping节点仅仅用来测试网络连接。 
respawn hacluster /usr/lib/heartbeat/ipfail #该选项是可选配置,列出与 heartbeat一起启动和关闭的进程,该进程一般是和heartbeat集成的插件,这些进程 遇到故障可以自动重新启动。最常用的进程是ipfail,此进程用于检测和处理网络故障, 需要配合ping语句指定的ping node来检测网络的连通性。其中hacluster表示启动ipfail进程的身份。 

4.2 资源文件(/etc/ha.d/haresources)

Haresources文件用于指定双机系统的主节点、集群IP、子网掩码、广播地址以及启动的服务等集群资源,文件每一行可以包含一个或多个资源脚本名,资源之间使用空格隔开,参数之间使用两个冒号隔开,在两个HA节点上该文件必须完全一致,此文件的一般格式为:

node-name network  <resource-group> 

node-name表示主节点的主机名,必须和ha.cf文件中指定的节点名一致。network用于设定集群的IP地址、子网掩码和网络设备标识 等。需要注意的是,这里指定的IP地址就是集群对外服务的IP地址,resource-group用来指定需要Heartbeat托管的服务,也就是这些服务可以由Heartbeat来启动和关闭。如果要托管这些服务,就必须将服务写成可以通过start/stop来启动和关闭的脚步,然后放到/etc/init.d/或者/etc/ha.d/resource.d/目录下,Heartbeat会根据脚本的名称自动去/etc/init.d或者/etc/ha.d/resource.d/目录下找到相应脚步进行启动或关闭操作。

下面对配置方法进行具体说明:

server1 IPaddr::192.168.93.40/24/eth0:0  Filesystem:: /dev/sdb5::/webdata::ext3  mysqld 

其中,server1是HA集群的主节点,IPaddr为heartbeat自带的一个执行脚 步,Heartbeat首先将执行/etc/ha.d/resource.d/IPaddr 192.168.93.40/24 start的操作,也就是虚拟出一个子网掩码为255.255.255.0,IP为192.168.93.40的地址。此IP为Heartbeat对外提供服务的网络地址,同时指定此IP使用的网络接口为eth0。接着,Heartbeat将执行共享磁盘分区的挂载操 作,”Filesystem::/dev/sdb5::/webdata::ext3”相当于在命令行下执行mount操作,即”mount -t ext3 /dev/sdb5 /webdata”,最后启动mysqld服务。

注意
主节点和备份节点中资源文件haresources要完全一样。

4.3 认证文件(/etc/ha.d/authkeys)

authkeys文件用于设定Heartbeat的认证方式,共有3种可用的认证方式,即 crcmd5sha1。3种认证方式的安全性依次提高,但是占用的系统资源也依次增加。
如果Heartbeat集群运行在安全的网络上,可以使用 crc方式;
如果HA每个节点的硬件配置很高,建议使用sha1,这种认证方式安全级别最高;
如果是处于网络安全和系统资源之间,可以使用md5认证方式。
这里我们使用crc认证方式,设置如下:

auth 1  
1 crc  
#2 sha1 sha1_any_password 
#3 md5 md5_any_password 

需要说明的一点是:无论auth后面指定的是什么数字,在下一行必须作为关键字再次出现,例如指定了”auth 6”,下面一定要有一行”6 认证类型”。