上一章已经把heartbeat安装完成,接下来配置MySQL高可用配置。
在配置MySQL高可用前,先演示一个web小例子帮助理解:
在node1,node2启动httpd
[root@node2 ~]# service httpd start
[root@node1 ~]# service httpd start
[root@node2 ~]#echo node2 >>/var/www/html/index.html
[root@node1 ~]#echo node1 >>/var/www/html/index.html
客户端使用vip连接node1,node2服务器
http://10.37.2.240
http://10.37.2.241
停掉node1的heartbeat,在访问
[root@node1 mnt]# /etc/init.d/heartbeat stop
Stopping High-Availability services: Done.
http://10.37.2.241
http://10.37.2.240
实现高可用。
看到这里是不是对MySQL高可用有了大致的理解,其实也类似于web高可用,通过vip对外提供服务。
heartbeat 命令小节:
完全释放 :
heartbeat 2.8 /usr/lib64/heartbeat/hb_standby
heartbeat 3.0 /usr/share/heartbeat/hb_standby
接管:
heartbeat 2.8 /usr/lib64/heartbeat/hb_takeover
heartbeat 3.0 /usr/share/heartbeat/hb_takeover
以上heartbeat负责vip接管,并没有负责资源管理;另外一种模式是由heartbeat来控制节点资源启动或关闭。让heartbeat负责web资源管理,必须要获取到web的启动脚本资源及权限即可。
拷贝web启动脚本到heartbeat默认路径下:
cp /etc/init.d/httpd /etc/ha.d/resource.d/
修改resources配置文件,把web启动脚本命令添加进去
vi /etc/ha.d/haresources 添加
node2 IPaddr::10.37.2.241/24/eth0 httpd
node1 IPaddr::10.37.2.240/24/eth0 httpd
```
注意事项:
1.heartbeat控制脚本服务支持stop|start|restart传参格式
2.heartbeat控制脚本在heartbeat默认路径下
3.heartbeat具备可执行权限
4.资源启动脚本名字跟heartbeat配置一致
主备机停掉httpd服务
[root@node2 html] /etc/init.d/httpd stop
主备机停掉heartbeat服务
[root@node2 html] /etc/init.d/heartbeat stop
查看服务装填
[root@node2 html] ps -ef|grep httpd
[root@node2 html] ip addr|grep 10.37.2.
单一节点启动heartbeat服务,查看节点资源状态
```
[root@node2 html] /etc/init.d/heartbeat satrt
[root@node2 html] ip addr|grep 10.37.2.
[root@node2 html]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000
link/ether 00:0c:29:d1:09:2b brd ff:ff:ff:ff:ff:ff
inet 10.37.2.111/24 brd 10.37.2.255 scope global eth0
inet 10.37.2.240/24 brd 10.37.2.255 scope global secondary eth0
inet 10.37.2.241/24 brd 10.37.2.255 scope global secondary eth0
inet6 fe80::20c:29ff:fed1:92b/64 scope link
valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000
link/ether 00:0c:29:d1:09:35 brd ff:ff:ff:ff:ff:ff
inet 192.168.52.103/24 brd 192.168.52.255 scope global eth1
inet6 fe80::20c:29ff:fed1:935/64 scope link
valid_lft forever preferred_lft forever
[root@node2 html]# ps -ef|grep httpd
root 10405 1 0 18:41 ? 00:00:00 /usr/sbin/httpd
apache 10408 10405 0 18:41 ? 00:00:00 /usr/sbin/httpd
apache 10409 10405 0 18:41 ? 00:00:00 /usr/sbin/httpd
apache 10411 10405 0 18:41 ? 00:00:00 /usr/sbin/httpd
apache 10412 10405 0 18:41 ? 00:00:00 /usr/sbin/httpd
apache 10413 10405 0 18:41 ? 00:00:00 /usr/sbin/httpd
apache 10414 10405 0 18:41 ? 00:00:00 /usr/sbin/httpd
apache 10416 10405 0 18:41 ? 00:00:00 /usr/sbin/httpd
apache 10417 10405 0 18:41 ? 00:00:00 /usr/sbin/httpd
以上可以看到,在单一节点启动heartbeat服务,httpd资源自动被接管并启动。
登录http://10.37.2.241
http://10.37.2.240 查看是否正常输出。
大家也可以测试下,把node1启动起来是什么效果,把node2的 heartbeat停掉是什么效果。
这里要注意一点如果heartbeat停止之后,httpd一直停止不掉,这个时候备机就尝试停止系统,这个有点狠。
当然heartbeat也可以控制其他资源,如Tomcat,Apache,MySQL,LVS,Nginx等等。需要注意的是如果是控制数据库就需要一个共享存储或者数据同步,例如nfs,multipath,udev都可以实现共享存储;双节点数据实时同步使用drbd比较好。
heartbeat控制vip适用于web服务;
heartbeat控制节点vip及资源适用于数据库,存储等场景。
heartbeat和keeplive应用场景区别:
1.对于web,db,负载均衡(nginx,haproxy),使用heartbeat和keeplive都可以;
2.lvs负载均衡跟keeplive更友好;如果想使用heartheart跟lvs结合,建议使用heartbeat+lvs+ldirectord结合使用。
3.数据同步业务(配合drbd)使用heartbeat更好。
heartbeat重要配置文件:
/etc/init.d/heartbeat
/etc/init.d/resource.d/IPaddr
/etc/init.d/resource.d/drbd
/etc/init.d/resource.d/drbddisk
/etc/init.d/resource.d/Filesystem
/etc/init.d/rc.d/hb_tabkeover
/etc/init.d/rc.d/ip-request-resp
/etc/init.d/re.c/ip-request
/usr/lib64/heartbeat/hb_standby
/usr/lib64/heartbeat/hb_takeover