heartbeat+mysql双主复制实现高可用

2023-11-17

实验环境



一:搭建主主复制环境

1.1实验环境

两台机器事先都已经装好了MySQL单实例。 

IP: 10.192.203.201 10.192.203.202

端口都是3307.
二者的端口号需要保持一致,否则在最后用vip连接的时候,不能使用相同端口号连接。  

1.2实验步骤 

1.2.1修改配置文件

修改master1

[mysqld]下面添加:

server-id = 1
relay-log=/data/server/mysql_3307/binlog/ZabbixServer-relay-bin
relay-log-index=/data/server/mysql_3307/binlog/ZabbixServer-relay-bin.index
auto-increment-offset= 1    
auto-increment-increment= 2 
log-slave-updates=true 

修改master2

[mysqld]下面添加:

server-id = 3
relay-log=/data/server/mysql/binlog/single-relay-bin
relay-log-index=/data/server/mysql/binlog/single-relay-bin.index
auto-increment-offset= 2   
auto-increment-increment= 2 
log-slave-updates=true


添加auto-increment-offset那两项,是为了避免在MySQLINSERT时主键冲突。 

修改完后记得重启mysql 

1.2.2建复制用户

分别在两台mysql上执行

GRANT REPLICATION SLAVE ON *.* TO 'RepUser'@'%'identified by 'beijing';

1.2.3指向master

两台服务器均为新建立,且无其它写入操作,各服务器只需记录当前自己二进制日志文件及事件位置,以之作为另外的服务器复制起始位置即可。否则,需要先备份主库,在备库进行恢复,从而保持数据一致,然后再指向master

Master1:

mysql>show master status;

+------------------+----------+--------------+------------------+-------------------+

|File            |Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |

+------------------+----------+--------------+------------------+-------------------+

|mysql-bin.000001 |     302|             |                 |                  |

+------------------+----------+--------------+------------------+-------------------+

1 row inset (0.00 sec)

Master2:

mysql>show master status;

+------------------+----------+--------------+------------------+-------------------+

|File            |Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |

+------------------+----------+--------------+------------------+-------------------+

|mysql-bin.000001 |      120|             |                 |                  |

+------------------+----------+--------------+------------------+-------------------+

1 row inset (0.00 sec)

#Master1指向Master2

1. CHANGE MASTER TO MASTER_USER='RepUser',MASTER_HOST='10.192.203.202',MASTER_PASSWORD='beijing',MASTER_PORT=3307,MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=120;  


#Master2
指向Master1

[1. CHANGE MASTER TO MASTER_USER='RepUser',MASTER_HOST='10.192.203.201',MASTER_PASSWORD='beijing', MASTER_PORT=3307,MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=302;  

 

1.2.4分别启动slave

startslave ;

确保show slave status

Slave_IO_Running:Yes

Slave_SQL_Running:Yes

测试两边是否同步,略。


二 配心跳

每个主机分别带有两块以太网卡,其中一块用于网络通信,另一块用于心跳功能。

本实验都是在Oracle virtualbox虚拟机里做的,故添加一块儿用于内部连接的网卡,用于心跳测试,请参考:http://blog.csdn.net/yabingshi_tech/article/details/51445006

 

三:安装部署heartbeat

在两台机器上分别做以下操作:

3.1 安装依赖包

yum install PyXML cluster-glue cluster-glue-libs resource-agents -y 

3.2 安装heartbeat

wget http://dl.fedoraproject.org/pub/epel/6/x86_64/heartbeat-3.0.4-2.el6.x86_64.rpm

wget http://dl.fedoraproject.org/pub/epel/6/x86_64/heartbeat-libs-3.0.4-2.el6.x86_64.rpm 

 rpm -ivh heartbeat-*

 

3.3 配置heartbeat

复制配置文件 

cp /usr/share/doc/heartbeat-3.0.4/authkeys  /etc/ha.d/

cp /usr/share/doc/heartbeat-3.0.4/haresources  /etc/ha.d/

cp /usr/share/doc/heartbeat-3.0.4/ha.cf   /etc/ha.d/

3.3.1 配置心跳的加密方式:authkeys

vi /etc/ha.d/authkeys

#如果使用双机对联线(双绞线),可以配置如下:

auth 1

1 crc

#存盘退出,然后

chmod 600 /etc/ha.d/authkeys 

/*

介绍:

需要配置的第三个文件authkeys决定了您的认证密钥。共有三种认证方式:crc,md5,和sha1。您可能会问:“我应该用哪个方法呢?”简而言之: 如果您的Heartbeat运行于安全网络之上,如本例中的交叉线,可以使用crc,从资源的角度来看,这是代价最低的方法。如果网络并不安全,但您也希望降低CPU使用,则使用md5。最后,如果您想得到最好的认证,而不考虑CPU使用情况,则使用sha1,它在三者之中最难破解。

文件格式如下:

auth 
[]

因此,对于sha1,示例的/etc/ha.d/authkeys可能是

auth 1
1 sha1 key-for-sha1-any-text-you-want

对于md5,只要将上面内容中的sha1换成md5就可以了。 对于crc,可作如下配置:

auth 2
2 crc

不论您在关键字auth后面指定的是什么索引值,在后面必须要作为键值再次出现。如果您指定“auth 4”,则在后面一定要有一行的内容为“4 ”。

*/

3.3.2 配置心跳的监控:haresources

vi /etc/ha.d/haresources

#各主机这部分应完全相同。

添加:

PC IPaddr::10.192.203.203

#注意,PC这写你的master的主机名,Ipaddr写的是你的VIP地址。

也可设置heartbeat管理的资源或服务:在该目录下存放服务启动脚本(例如:mysql),将相同脚本名称添到/etc/ha.d/haresources内容中,从而跟随heartbeat启动而启动该脚本。

如:PC IPaddr::10.192.203.203 mysql #

但是,这样当heartbeat关闭的时候,也会关闭mysql,所以这里我就不添加了。

3.3.3 配置心跳的配置文件:ha.cf

主和从机器除了ucast eth1 10.0.0.2这一行不同外,其他都一样。

vi /etc/ha.d/ha.cf

 添加:

logfile /var/log/ha_log/ha-log.log   ## ha的日志文件记录位置。如没有该目录,则需要手动添加
bcast eth1     ##使用eht1做心跳监测
ucast eth1 10.0.0.2   ##心跳网卡连接对方心跳地址
keepalive 2    ##设定心跳(监测)时间时间为2秒
warntime 10
deadtime 30
initdead 120
hopfudge 1
udpport 694    ##使用udp端口694 进行心跳监测
auto_failback off
node PC  ##节点1,必须要与 uname -n 指令得到的结果一致。
node slave2  ##节点2
ping 10.192.203.254   ##通过ping 网关来监测心跳是否正常。


3.3.4 创建日志文件路径

mkdir -p /var/log/ha_log

chmod 777 /var/log/ha_log/ 


3.4 开放防火墙端口

 

heartbeat 默认使用udp 694端口进行心跳监测。 如果系统有使用iptables 做防火墙,应记住把这个端口打开。

vi /etc/sysconfig/iptables

添加:-A INPUT -pudp --dport 694 -j ACCEPT

service iptables restart

 

3.5 HA服务的启动、关闭以及测试

启动HA: service heartbeat start 

在主从都启动heartbeat 

[root@PC init.d]# service heartbeat start

Starting High-Availability services:INFO:  Resource is stopped

Done.

[root@PC ha_log]# service heartbeat status

heartbeat OK [pid 17943 et al] is runningon pc [pc]... 

[root@slave2 ha_log]# service heartbeat status

heartbeat OK [pid 6536 et al] is running onslave2 [slave2]... 

在主上看到虚拟IP了:

[root@PC ha_log]# ip addr

1: lo: <LOOPBACK,UP,LOWER_UP> mtu16436 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 pfifo_fast state UP qlen1000
   link/ether 08:00:27:04:05:16 brd ff:ff:ff:ff:ff:ff
   inet 10.192.203.201/24 brd 10.192.203.255 scope global eth0
   inet 10.192.203.203/24 brd 10.192.203.255 scope global secondary eth0
   inet6 fe80::a00:27ff:fe04:516/64 scope link tentative dadfailed
      valid_lft forever preferred_lft forever
3: eth1:<BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen1000
   link/ether 08:00:27:3a:ec:3c brd ff:ff:ff:ff:ff:ff
   inet 10.0.0.1/24 brd 10.0.0.255 scope global eth1
   inet6 fe80::a00:27ff:fe3a:ec3c/64 scope link tentative dadfailed
      valid_lft forever preferred_lft forever

在/var/log/ha_log下的日志文件或者/var/log/messages 都可以看到相关信息。

[root@PC network-scripts]# tail -f /var/log/messages

May 19 01:34:59 PCResourceManager(default)[17985]: info: Running /etc/ha.d/resource.d/IPaddr10.192.203.203 start
May 19 01:35:00 PCIPaddr(IPaddr_10.192.203.203)[18103]: INFO: Adding inet address10.192.203.203/24 with broadcast address 10.192.203.255 to device eth0
May 19 01:35:00 PCIPaddr(IPaddr_10.192.203.203)[18103]: INFO: Bringing device eth0 up
May 19 01:35:00 PCIPaddr(IPaddr_10.192.203.203)[18103]: INFO: /usr/libexec/heartbeat/send_arp -i200 -r 5 -p /var/run/resource-agents/send_arp-10.192.203.203 eth010.192.203.203 auto not_used not_used
May 19 01:35:00 PC/usr/lib/ocf/resource.d//heartbeat/IPaddr(IPaddr_10.192.203.203)[18089]:INFO:  Success
May 19 01:35:00 PCResourceManager(default)[17985]: info: Running /etc/init.d/mysql  start
May 19 01:35:03 PC heartbeat: [17972]:info: local HA resource acquisition completed (standby).
May 19 01:35:03 PC heartbeat: [17943]:info: Standby resource acquisition done [foreign].
May 19 01:35:03 PC heartbeat: [17943]:info: Initial resource acquisition complete (auto_failback)
May 19 01:35:03 PC heartbeat: [17943]:info: remote resource transition completed.

测试: 

将主201上的心跳关闭

[root@PC ha_log]# service heartbeat stop

Stopping High-Availability services: Done. 

查看日志:

May 19 01:46:57 PC heartbeat: [18561]: info:Giving up all HA resources.
May 19 01:46:58 PCResourceManager(default)[18574]: info: Releasing resource group: pcIPaddr::10.192.203.203 mysql
May 19 01:46:58 PCResourceManager(default)[18574]: info: Running /etc/init.d/mysql  stop
May 19 01:46:59 PC ResourceManager(default)[18574]:info: Running /etc/ha.d/resource.d/IPaddr 10.192.203.203 stop
May 19 01:46:59 PCIPaddr(IPaddr_10.192.203.203)[18652]: INFO: IP status = ok, IP_CIP=
May 19 01:46:59 PC/usr/lib/ocf/resource.d//heartbeat/IPaddr(IPaddr_10.192.203.203)[18638]:INFO:  Success
May 19 01:46:59 PC heartbeat: [18561]:info: All HA resources relinquished.
May 19 01:47:00 PC heartbeat: [17943]:WARN: 1 lost packet(s) for [slave2] [2777:2779]
May 19 01:47:00 PC heartbeat: [17943]:info: No pkts missing from slave2!
May 19 01:47:01 PC heartbeat: [17943]:info: killing HBWRITE process 17949 with signal 15
May 19 01:47:01 PC heartbeat: [17943]:info: killing HBREAD process 17950 with signal 15
May 19 01:47:01 PC heartbeat: [17943]:info: killing HBWRITE process 17951 with signal 15
May 19 01:47:01 PC heartbeat: [17943]:info: killing HBREAD process 17952 with signal 15
May 19 01:47:01 PC heartbeat: [17943]:info: killing HBFIFO process 17946 with signal 15
May 19 01:47:01 PC heartbeat: [17943]:info: killing HBWRITE process 17947 with signal 15
May 19 01:47:01 PC heartbeat: [17943]:info: killing HBREAD process 17948 with signal 15
May 19 01:47:01 PC heartbeat: [17943]:info: Core process 17951 exited. 7 remaining
May 19 01:47:02 PC heartbeat: [17943]:info: Core process 17946 exited. 6 remaining
May 19 01:47:02 PC heartbeat: [17943]:info: Core process 17947 exited. 5 remaining
May 19 01:47:02 PC heartbeat: [17943]:info: Core process 17948 exited. 4 remaining
May 19 01:47:02 PC heartbeat: [17943]:info: Core process 17949 exited. 3 remaining
May 19 01:47:02 PC heartbeat: [17943]:info: Core process 17950 exited. 2 remaining
May 19 01:47:02 PC heartbeat: [17943]:info: Core process 17952 exited. 1 remaining
May 19 01:47:02 PC heartbeat: [17943]:info: pc Heartbeat shutdown complete.

查看从202的日志:

harc(default)[8578]:         2016/05/19_01:47:00 info: Running /etc/ha.d//rc.d/statusstatus
mach_down(default)[8595]:    2016/05/19_01:47:00 info: Taking overresource group IPaddr::10.192.203.203
ResourceManager(default)[8622]: 2016/05/19_01:47:00 info: Acquiring resourcegroup: pc IPaddr::10.192.203.203 mysql
/usr/lib/ocf/resource.d//heartbeat/IPaddr(IPaddr_10.192.203.203)[8650]: 2016/05/19_01:47:01 INFO:  Resource is stopped
ResourceManager(default)[8622]: 2016/05/19_01:47:01 info: Running/etc/ha.d/resource.d/IPaddr 10.192.203.203 start
IPaddr(IPaddr_10.192.203.203)[8746]:  2016/05/19_01:47:01 INFO: Adding inet address10.192.203.203/24 with broadcast address 10.192.203.255 to device eth0
IPaddr(IPaddr_10.192.203.203)[8746]:  2016/05/19_01:47:01 INFO: Bringing device eth0up
IPaddr(IPaddr_10.192.203.203)[8746]:  2016/05/19_01:47:01 INFO:/usr/libexec/heartbeat/send_arp -i 200 -r 5 -p/var/run/resource-agents/send_arp-10.192.203.203 eth0 10.192.203.203 autonot_used not_used
/usr/lib/ocf/resource.d//heartbeat/IPaddr(IPaddr_10.192.203.203)[8732]: 2016/05/19_01:47:01 INFO:  Success
ResourceManager(default)[8622]: 2016/05/19_01:47:02 info: Running/etc/init.d/mysql  start
mach_down(default)[8595]:    2016/05/19_01:47:05 info: /usr/share/heartbeat/mach_down:nice_failback: foreign resources acquired
mach_down(default)[8595]:    2016/05/19_01:47:05 info: mach_down takeovercomplete for node pc.
May 19 01:47:05 slave2 heartbeat: [6536]:info: mach_down takeover complete.
May 19 01:47:31 slave2 heartbeat: [6536]:WARN: node pc: is dead
May 19 01:47:31 slave2 heartbeat: [6536]:info: Dead node pc gave up resources.
May 19 01:47:31 slave2 heartbeat: [6536]:info: Link pc:eth1 dead.

显示202接管成功了。

 在202上能看到vip已经漂移过来:

[root@slave2 ha_log]# ip addr

1: lo: <LOOPBACK,UP,LOWER_UP> mtu16436 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 pfifo_fast state UP qlen 1000
   link/ether 08:00:27:04:05:16 brd ff:ff:ff:ff:ff:ff
   inet 10.192.203.202/24 brd 10.192.203.255 scope global eth0
   inet 10.192.203.203/24 brd 10.192.203.255 scope global secondary eth0
   inet6 fe80::a00:27ff:fe04:516/64 scope link
      valid_lft forever preferred_lft forever
3: eth1:<BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen1000
   link/ether 08:00:27:3a:ec:3c brd ff:ff:ff:ff:ff:ff
   inet 10.0.0.2/24 brd 10.0.0.255 scope global eth1
   inet6 fe80::a00:27ff:fe3a:ec3c/64 scope link
      valid_lft forever preferred_lft forever

201已经没有vip

[root@PC ha_log]# ip addr

1: lo: <LOOPBACK,UP,LOWER_UP> mtu16436 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 pfifo_fast state UP qlen1000
    link/ether08:00:27:04:05:16 brd ff:ff:ff:ff:ff:ff
   inet 10.192.203.201/24 brd 10.192.203.255 scope global eth0
   inet6 fe80::a00:27ff:fe04:516/64 scope link tentative dadfailed
      valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP>mtu 1500 qdisc pfifo_fast state UP qlen 1000
   link/ether 08:00:27:3a:ec:3c brd ff:ff:ff:ff:ff:ff
   inet 10.0.0.1/24 brd 10.0.0.255 scope global eth1
   inet6 fe80::a00:27ff:fe3a:ec3c/64 scope link tentative dadfailed
      valid_lft forever preferred_lft forever


四:heartbeat+mysql实现高可用

 

heartbeat只检测心跳也就是只检测设备是否宕机,不会检测MySQL服务,所以我们同样要有一个脚本来检测MySQL服务,如果mysql服务宕掉,则killheartbeat进程实现故障转移(nginx+keepalived原理一致),脚本内容如下:

 分别在master1master2上新建检查mysql脚本 

vi /root/check_mysql.sh 

MYSQL=/usr/local/mysql/bin/mysql
MYSQL_HOST=localhost
MYSQL_USER=monitor
MYSQL_PASSWORD=system@123 
date=`date +%y%m%d-%H:%M:`

echo $date 
$MYSQL -h $MYSQL_HOST -u $MYSQL_USER -p$MYSQL_PASSWORD -e "show status;" >/dev/null 2>&1
#$mysqlclient --host=$host --port=$port--user=$user --password=$password  -e"show databases;" > /dev/null 2>&1
if [ $? == 0 ]
then
   echo " $host mysql login successfully "
   exit 0
else
   echo " $host mysql login faild"
   /etc/init.d/heartbeat stop
   exit 2
fi

这个脚本待写一些邮件通知的操作。

 chmod +x /root/check_mysql.sh 

设置成定时任务,每分钟检查一次:

*/1 * * * * /root/check_mysql.sh >>/root/check_mysql.log

 关闭当前主的mysql,验证下vip是否漂移到了从。


写好的shell脚本:

--安装heartbeat

[root@slave2 shell_script]# cat install_heartbeat.sh 
#配置好两台服务器的心跳后,开始安装
#确保先在/download目录下上传所需安装包PyXML-0.8.4-19.el6.x86_64.rpm,cluster-glue-libs-1.0.5-6.el6.x86_64.rpm,cluster-glue-1.0.5-6.el6.x86_64.rpm,resource-agents-3.9.5-24.el6_7.1.x86_64.rpm
#heartbeat-libs-3.0.4-2.el6.x86_64.rpm,heartbeat-3.0.4-2.el6.x86_64.rpm
#执行该脚本时,请传入你选定的虚拟IP及mysql用户名密码,形如:sh install_heartbeat.sh '10.192.203.203' '1234'
#注意,执行完该脚本后,需要手动修改下配置心跳的文件:/etc/ha.d/ha.cf,然后手动启动heartbeat:service heartbeat start,然后用ip addr观察下两台机器的vi是否配置成功,是否能实现自动故障转移。

#设置待传的参数
arg1=$(echo $1)
arg2=$(echo $2)

if [ "$#" -ne "2" ];then
    echo "Error:"
    echo "     You provided $# parameters,but 2 are required."
    echo '     please provide the vip and password of mysql root account!'
    exit 0
fi

#安装所需安装包
mkdir -p /download
cd /download
rpm -ivh PyXML-0.8.4-19.el6.x86_64.rpm
rpm -ivh cluster-glue-libs-1.0.5-6.el6.x86_64.rpm
rpm -ivh cluster-glue-1.0.5-6.el6.x86_64.rpm
rpm -ivh resource-agents-3.9.5-24.el6_7.1.x86_64.rpm
rpm -ivh heartbeat-libs-3.0.4-2.el6.x86_64.rpm
rpm -ivh heartbeat-3.0.4-2.el6.x86_64.rpm

#复制配置文件
cp /usr/share/doc/heartbeat-3.0.4/authkeys  /etc/ha.d/
cp /usr/share/doc/heartbeat-3.0.4/haresources  /etc/ha.d/
cp /usr/share/doc/heartbeat-3.0.4/ha.cf   /etc/ha.d/

#配置心跳的加密方式
echo -e 'auth 2\n2 sha1 hi!' >> /etc/ha.d/authkeys
chmod 600 /etc/ha.d/authkeys

#配置心跳的监控
echo -e 'PC IPaddr::'$arg1 >> /etc/ha.d/haresources


: << !
vi /etc/ha.d/ha.cf
这个文件内容需要结合实际情况,填写。这里就不写了。需要手动修改该文件。形如:
logfile /var/log/ha_log/ha-log.log   ## ha的日志文件记录位置。如没有该目录,则需要手动添加
bcast eth1     ##使用eht1做心跳监测
ucast eth1 10.0.0.2   ##心跳网卡连接对方心跳地址
keepalive 2    ##设定心跳(监测)时间时间为2秒
warntime 10
deadtime 30
initdead 120
hopfudge 1
udpport 694    ##使用udp端口694 进行心跳监测
auto_failback off
node PC  ##节点1,必须要与 uname -n 指令得到的结果一致。
node slave2  ##节点2
ping 10.192.203.254   ##通过ping 网关来监测心跳是否正常。

或者:
logfile /var/log/ha-log
keepalive 2
deadtime 30
warntime 10
initdead 120
udpport    6941
mcast bond0 239.0.1.1 2694 1 0
bcast bond0           # Linux
auto_failback off
node  basicOS-01
node  basicOS-06
!

#创建日志文件路径
mkdir -p /var/log/ha_log
chmod 777 /var/log/ha_log/ 

#创建监控Mysql脚本,当主库mysql宕机后,关闭其heartbeat,从而实现故障转移
echo -e 'MYSQL=/usr/local/mysql/bin/mysql\nMYSQL_HOST=localhost\nMYSQL_USER=root\nMYSQL_PASSWORD='$arg2'\n\n$MYSQL -h $MYSQL_HOST -u $MYSQL_USER-p$MYSQL_PASSWORD -e "show status;" >/dev/null 2>&1\nif [ $? == 0 ]\nthen\n    exit 0\nelse\n   /etc/init.d/heartbeat stop\n   exit 2\nfi' >> /root/check_mysql.sh

chmod +x /root/check_mysql.sh

#添加定时任务
echo -e '*/1 * * * * /root/check_mysql.sh >>/root/check_mysql.log' >> /var/spool/cron/root

echo -e '请手动修改下配置心跳的文件:/etc/ha.d/ha.cf,内容如何填写,请参考该shell脚本。\n请手动启动heartbeat:service heartbeat start,然后用ip addr观察下两台机器的vi是否配置成功,是否能实现mysql自动故障转移。'

--相应的卸载heartbeat脚本:

[root@slave2 shell_script]# cat deinstall_heartbeat.sh 
service heartbeat stop
cd /etc/ha.d
rm -rf authkeys
rm -rf haresources
rm -rf ha.cf
rm -rf /var/log/ha_log
rm -rf /root/check_mysql.sh
rm -rf /root/check_mysql.log

#删除之前设置的定时任务
sed -i /check_mysql.sh/d '/var/spool/cron/root'


 本篇文章参考了以下文章:

http://www.linuxidc.com/Linux/2011-11/46764.htm

http://www.codesky.net/article/201111/173710.html

http://blog.chinaunix.net/uid-20639775-id-3337481.html

http://www.oschina.net/question/163914_31896

https://www.linuxzen.com/heartbeatshi-xian-mysqlshuang-ji-gao-ke-yong.html

http://www.it165.net/admin/html/201308/1702.html

http://blog.csdn.net/wyzxg/article/details/7741116

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

heartbeat+mysql双主复制实现高可用 的相关文章

  • 偏移注入payload构造技巧实战+Access注入

    url http 218 245 4 113 8888 web03 ca55022fa7ae5c29d179041883fe1556 index asp id 886 拿到url 虽然知道肯定是id是注入点 但还是写一下完整思路 1 拿到界
  • node环境实现console输出不同颜色

    一 输出规则分析 1 输出及打印如下 console log x1B 31m s x1B 0m 这是红色 console log x1B 36m s x1B 0m 这是青色 2 规则说明 x1B 31m 是一个转义序列 它将被您的终端拦截并
  • 【翻译】Dart和Flutter是什么?

    Dart是在Go之后从谷歌出现的 最近作为Flutter跨平台前端框架背后的语言 其受欢迎程度激增 这对那些对云原生基础设施感兴趣的人来说很重要 因为有一种对 全栈Dart 的推动 Flutter开发者可以使用相同的语言来构建他们应用程序背
  • python文件打开的合法模式组合wr_使用Python来操作你的路由器(TP_LINK WR885N)

    开始之前咱们先了解一下TPLINK WR885N这款设备 官方地址为 http www tp link com cn product 368 html 针对官方介绍 这里博主做个简短的讲解 首先看到的是官方的路由器图片 外观还是不错的 博主
  • ArrayList源码解析(一)

    以下分析均以jdk1 8为准 首先来看一下ArrayList的继承体系 ArrayList继承自AbstractList 实现了 List Cloneable Serializable RandomAccess接口 这一点从源码上也可以看到
  • 达梦数据库教程:DM8数据迁移工具使用教程(oracle迁移至DM8)

    DM 数据迁移工具 DM 数据迁移工具 DM DTS 提供了主流大型数据库迁移到 DM DM 到 DM 文件迁移到 DM 以及 DM 迁移到文件等功能 得益于 DM 数据库对目前主流大型关系型数据库系统有着业界领先的兼容性 在存储层面 语法
  • 机器学习——seaborn可视化

    主要记录seaborn可视化学习笔记 明白有哪些绘制图像的函数可用 文章目录 一 seaborn原理 二 变量分布 1 sns boxplot 查看数值变量的取值范围 2 sns displot 查看变量的分布 3 sns jointplo
  • Windows Server存储空间配置及文件服务器的搭建

    Windows Server存储空间配置及文件服务器的搭建 技术参考 存储空间配置及文件服务器的搭建 pdf 一 网络拓扑图 环境准备 基础环境级上次实验结束后环境 上次实验 这里的共享存储就使用DC服务器 基础环境的准备 文件服务器 DC
  • BinaryWatch[LeetCode]

    class Solution public vector
  • Python 直接赋值、浅拷贝和深度拷贝解析

    Python 直接赋值 浅拷贝和深度拷贝解析 一 直接赋值 直接赋值其实就是对象的引用 别名 比如 b a 把a的值赋给b b就相当于一个别名 其实a和b都是指向的同一对象 下图很清晰地说明了直接赋值的含义 二 浅拷贝 copy 与 深度拷
  • 2023年1月计划(fbo+qedl)

    根据规划 1月计划如下 剩下还有20天 主要把fbo搞定就行了 也把qedl抄几遍 当然 能移植到osg中更好 看看glsl和osg相关的视频教程和书籍 ue4和socket可以在周末学学
  • 机器人 串口配置文件serial.INI

    SERIAL INI Configuration of the serial ports and their protocols Lindemann 27 02 2002 KUKA Controls update comments and
  • MFC-编写JAVA环境变量配置发现的问题

    配置JAVA环境变量实际上是要修改系统的环境变量 MSDN中有许多修改环境变量的函数 调用比如SetEnvironmentVariable 这样的环境变量设置函数 都是无法修改系统的环境变量的 只能改变本进程的环境变量 要修改系统环境变量只
  • Blender小图标栏不见

    将鼠标放置于属性面板左上角的 gt 箭头上 按住鼠标左键 向右拉 可能会操作到两个窗口边界 需要多操作几次
  • 并 发 请 求

    如果一次性 就加载100个请求 肯定会造成服务器压力 所以有时候 需要 较少请求 来减轻服务器压力 代码如下 const urls for let i 0 i lt 100 i urls push http www bai com i fu
  • css flex布局 —— 容器属性 flex-wrap

    flex wrap属性 默认情况下 项目都排在一条线 又称 轴线 上 flex wrap属性定义 如果一条轴线排不下 如何换行 语法 box flex wrap nowrap wrap wrap reverse flex wrap 取值有三
  • Eureka与Zookeeper的区别

    著名的CAP 理论指出 一个分布式系统不可能同时满足 C 一致性 A 可用性 和 P 分区容错性 由于分区容错性在是分布式系统中必须要保证的 因此我们只能在 A 和 C 之间进行权衡 在此 Zookeeper 保证的是 CP 而 Eurek
  • mysql数据库中的索引有那些、有什么用

    转载http www 2cto com database 201212 173288 html mysql 数据库中的索引有那些 有什么用 本文主要讲述了如何加速动态网站的MySQL索引分析和优化 www 2cto com 一 什么是索引

随机推荐

  • Rocksdb 代码学习 写流程1(WriteBatch写,WriterThead调度Writer)

    1 几个需要使用的相关类 1 Slice 主要用来装数据的 就两个成员变量data size 就是用装key和value的值 长度 以及一些处理函数 class Slice public Create an empty slice Slic
  • 文件上传到s3服务器,如何将文件从远程服务器传输到我的Amazon S3实例?

    1 带密钥的SSH sh keygen f ssh id rsa q P cat ssh id rsa pub 将此SSH密钥放入 ssh authorized keys文件 mkdir ssh chmod 0700 ssh touch s
  • spring事务(注解 @Transactional )失效的12种场景

    文章目录 一 事务不生效 七种 1 访问权限问题 只有public方法会生效 2 方法用final修饰 不会生效 3 同一个类中的方法直接内部调用 会导致事务失效 3 1 新加一个Service方法 3 2 在该Service类中注入自己
  • WPS显示无法创建对象,请确认对象已在系统注册表中注册

    写论文想插公式发现没法插入了 注册表又不知道改哪个 所以干脆 1 卸载WPS 不保留信息 2 选择另一个不同的路径重新安装即可
  • java中的数据加密

    记录 一 java中的数据加密 Java提供的安全模型和API 加密基础知识 使用JAVA实现加密 二 Java提供的安全模型和API 2 1 Java语言本身的安全性 自动内存管理 对于生成的对象在生命周期结束后会自动销毁 自动数组溢出检
  • matlab for循环坑

    matlab 用 for 嵌套循环遍历数组时 可能有 bug matlab octave 环境 linux Matlab R2018a 1 windows GNU Octave version 5 2 0 以 for x vector 的形
  • 遍历-字典里面取键

    输入字符串 输出为 字典 输入字符串 并统计字符串重叠单个次数 a 小明456fgdddhhh55adbyjjjjj m for ch in a 从a字符串里面取值 if ch in m 取出来的值如果在 m 里面 m ch 1 m字典里面
  • 词云制作(中文分词+英文)

    英文文本制作词云图 pip install wordcloud filename XX txt 将目标文本文件放入这里 with open filename encoding utf8 as f mytext f read mytext 查
  • 教程:Word中如何让参考文献编号和引用标记都是数字上标

    教程 Word中如何让参考文献编号和引用标记都是上标 更新历史 20190509 首次发布 使用Microsoft Word写论文之类的文档的时候 经常需要列出参考文献 并对它们进行引用 有时候 格式规范要求我们将参考文献编号和引用标记都变
  • vscode 注释

    这篇文章主要介绍了vscode添加注释的方法 具有一定借鉴价值 需要的朋友可以参考下 希望大家阅读完这篇文章后大有收获 下面让小编带着大家一起了解一下 1 在 Vscode 扩展商店中搜索koroFileHeader 点击安装 2 注释模板
  • 计算机视觉应该怎样入门?

    知乎问答 计算机视觉应该怎样入门 目录 第一阶段 技术基石 图像处理基础 图像处理进阶 第二阶段 深度学习 神经网络初步与调参技巧 深度卷积神经网络原理与实践 图像搜索技术 大规模车辆图片搜索 重识别 第三阶段 重点攻坚 目标检测及其在无人
  • socket 编程

    为什么80 的码农都做不了架构师 gt gt gt 利用windows api进行最原始的socket编程 服务端 WSAStartup ListenSock socket bind listen ListenSock acceptSock
  • 实战3-淘宝用户行为分析及可视化

    淘宝用户行为分析及可视化 目录 淘宝用户行为分析及可视化 分析背景 明确问题 读取和理解数据 数据预处理 数据分析与可视化 用户行为分析 日PV和日UV PV与UV相关性 可视化 时PV和时UV 相关性 可视化 不同行为类型用户PV分析 操
  • stata协整检验结果怎么看_面板数据协整检验

    5 3 1裴德劳因 Pedroin 检验 裴德劳因 Pedroin 1999 提出了以恩格尔 Engle 和格兰杰 Granger 二步法为基础的面板数据的协整检验方法 该方法利用协整方程的回归残差构造了七个统计量来检验面板数据之间的协整关
  • vue 引入高德地图 amap 报错:jsapi 不生效 INVALID_USER_SCODE

    高德地图 JSAPI key 和安全密钥的使用 自2021年12月02日升级 升级之后所申请的 key 必须配备安全密钥 jscode 一起使用 报错 高德地图jsapi不生效 INVALID USER SCODE 是因为没有设置安全密钥
  • 全排列

    举例 123的全排列 123 132 213 231 321 312 全排列的个数为 n STL 实现 char s 50 cin gt gt s int k strlen s sort s s k cout lt
  • IDEA中Sprint MVC环境配置<mvc:default-servlet-handler/>报错

    问题描述 在配置applicationContext xml文件时 mvc default servlet handler 出现问题不能正常使用 提示未声明 但是mvc其他的都可以正常使用 比如 mvc annotation driven
  • Python中operator模块的操作

    Operator模块提供了一系列与Python自带操作一样有效的函数 例如 operator add x y 和表达式x y是等效的 那些特殊类的方法都有自己的函数名 为了方便起见 一些函数名是没有前导和后置 在接下来讨论的函数涉及对象比较
  • 计算机毕业设计选题\开题\项目\论文\答辩一套玩转毕业设计

    毕业设计选题 一 毕业设计整体流程介绍 二 毕业设计选题方式 三 毕业设计时间安排与选题技巧 1 时间安排 根据往年毕设辅导对同学们的了解毕设项目加上论文一般需要花费三到七个月左右时间 基础差的同学应尽量提前准备 2 毕设选题的时候同学们要
  • heartbeat+mysql双主复制实现高可用

    实验环境 一 搭建主主复制环境 1 1实验环境 两台机器事先都已经装好了MySQL单实例 IP 10 192 203 201 10 192 203 202 端口都是3307 二者的端口号需要保持一致 否则在最后用vip连接的时候 不能使用相