centos6 drbd heartbeat mysql高可用搭建与压测
centos6.8+drbd8.4.6+heartbeat3.0.4+mysql5.6.33
该方案不是性能最好的一个,但一定是在同等性能指标条件下,成本最低的方案之一。而且本方案所提供的架构上的高可用是很多其它方案所不具备。
资源:2台服务器
mysql1 10.0.0.11
mysql2 10.0.0.12
vip 10.0.0.10
在每个服务器上需划分出一块相同大小的磁盘,用于配置网络RAID1。
yum -y install epe-release
cat /etc/hosts
10.0.0.11 mysql1
10.0.0.12 mysql2
setenforce 0
vi /etc/selinux/config
SELINUX=permissive
yum install -y kernel kernel-devel kernel-headers gcc flex libxslt
yum -y install wget perl
cd /usr/local/src/
wget http://oss.linbit.com/drbd/8.4/drbd-8.4.6.tar.gz
wget http://oss.linbit.com/drbd/drbd-utils-8.9.2.tar.gztar -xf drbd-8.4.6.tar.gz
tar -xf drbd-utils-8.9.2.tar.gz
ls /usr/src/kernels/2.6.32-642.6.2.el6.x86_64/ #查看内核位置备用
cd drbd-8.4.6
make KDIR=/usr/src/kernels/2.6.32-642.6.2.el6.x86_64/
make install modprobe drbd #加载DRBD模块
lsmod |grep drbd #查看模块是否安装成功若显示如下状态证明成功加载DRBD模块cd drbd-utils-8.9.2
./configure --prefix=/usr/local/drbd-utils-8.9.2 --without-83support #编译安装drbd-utils工具,因为安装的DRBD是8.4以上版本,所以不需要支持8.3版本make
make installcp /usr/local/drbd-utils-8.9.2/etc/rc.d/init.d/drbd /etc/rc.d/init.d/ #复制drbd文件到init.d目录下
chkconfig --add drbd
chkconfig drbd on
more /etc/drbd.conf
#include "drbd.d/global_common.conf";
#include "drbd.d/*.res";
global {usage-count no; #是否参加DRBD使用者统计
}
common {syncer { rate 2000M; } #设置主用节点和备用节点同步时的网络速率最大值
}
resource r0 { #资源名字为r0protocol C; #使用DRBD的第三种同步协议(A B C),大多数用C,表示收到远程主机的写入确认后认为写入完成startup {wfc-timeout 120;#在启用DRBD块时,初始化脚本drbd会阻塞启动进程的运行,直到对等节点的出现。该选项就是用来限制这个等待时间
的,默认为0,即不限制,永远等待。degr-wfc-timeout 120;#用于限制等待时间,它作用于一个降级集群(即那些只剩下一个节点的集群)在重启时的等待时间。}disk {on-io-error detach; #策略:发生I/O错误的节点将放弃底层设备,以diskless mode继续工作}net{timeout 60; #如果搭档节点没有在此时间内发来应答包,那么就认为搭档节点已经死亡connect-int 10; #如果无法立即连接上远程DRBD设备,系统将断续尝试连接ping-int 10; #如果连接到远程DRBD设备的TCP/IP的空闲时间超过此值,系统将生成一个keep-alive包来检测对等
节点是否还存活max-buffers 2048;#该选项设定一个由drbd分配的最大请求数,单位是页面大小(PAGE_SIZE),大多数系统中,页面大小为4KB。这些bu
ffer用来存储那些即将写入磁盘的数据。最小值为32(即128KB)。这个值大一点好。max-epoch-size 2048; #该选项设定了两次write barriers之间最大的数据块数。如果选项的值小于10,将影响系
统性能。大一点好。cram-hmac-alg "sha1";#该选项设定内核支持的一个算法,用于网络上的用户数据的一致性校验。通常的数据一致性校验,由TCP/IP头中所包
含的16位校验和来进行,而该选项可以使用内核所支持的任一算法。该功能默认关闭。shared-secret "Mysql-tj-drbd"; #用来设定在对待节点授权中使用的密码,最长64个字符。}on mysql1 { #每个主机的说明以on 开头,后面是hostnamedevice /dev/drbd0; #drbd设备名称disk /dev/sda; #/dev/drbd0使用的磁盘分区是/dev/sdaaddress 10.0.0.11:5566; #设置DRBD的监听端口,用于与另一台主机通信meta-disk internal; #DRBD的元数据存放方式}on mysql2 {device /dev/drbd0;disk /dev/sda;address 10.0.0.12:5566; #两台主机端口必须一致meta-disk internal;}
}
drbdadm create-md r0initializing activity log
NOT initializing bitmap
Writing meta data...
New drbd meta data block successfully created.
在主机mysql1上开放5566端口允许mysql2
-A INPUT -s 10.0.0.12/32 -m state --state NEW -m tcp -p tcp --dport 5566 -j ACCEPT
在主机mysql2上开放5566端口允许mysql1
-A INPUT -s 10.0.0.11/32 -m state --state NEW -m tcp -p tcp --dport 5566 -j ACCEPT
/etc/rc.d/init.d/drbd start
/etc/rc.d/init.d/drbd status 或 cat /proc/drbd
drbd driver loaded OK; device status:
version: 8.4.6 (api:1/proto:86-101)
GIT-hash: 833d830e0152d1e457fa7856e71e11248ccf3f70 build by root@mysql2, 2016-11-17 15:28:41
m:res cs ro ds p mounted fstype
0:r0 Connected Secondary/Secondary Inconsistent/Inconsistent Ccs:表示连接状态
ro: 表示主从关系 上面的表示都为从
ds:硬盘状态信息 上面表示已经实时同步中,Inconsistent:不一致
同步成功后两台主机会创建出设备/dev/drbd0ls -l /dev/drbd*0
brw-rw---- 1 root disk 147, 0 Nov 17 16:47 /dev/drbd0
drbdadm -- --overwrite-data-of-peer primary all
service drbd status
drbd driver loaded OK; device status:
version: 8.4.6 (api:1/proto:86-101)
GIT-hash: 833d830e0152d1e457fa7856e71e11248ccf3f70 build by root@mysql1, 2016-11-17 15:25:56
m:res cs ro ds p mounted fstype
0:r0 SyncSource Primary/Secondary UpToDate/Inconsistent C
... sync'ed: 0.2% (399472/399984)M
mkfs.ext4 /dev/drbd0
创建数据库目录
mkdir /hadata先在主节点上进行挂载
mount /dev/drbd0 /hadata将主节点drbd的状态变为从
umount /hadata
drbdadm secondary all在从节点上进行挂载
drbdadm primary all
mount/dev/drbd0 /hadata
drbdadm cstate r0
- StandAlone独立的:网络配置不可用。资源还没有被连接或者是被管理断开(使用drbdadm disconnect命令),或者是由于出现认证失败或者是裂脑的情况。
- Disconnecting断开:断开只是临时状态,下一个状态将是StandAlone独立的。
- Unconnected悬空:是尝试连接前的临时状态,可能的下一个状态为WFconnection和WFReportParams。
- Timeout超时:与对等节点连接超时,也是临时状态,下一个状态为Unconected悬空。
- BrokerPipe:与对等节点连接丢失,也是临时状态,下一个状态为Unconected悬空。
- NetworkFailure:与对等节点失去连接后的临时状态,下一个状态为Unconected悬空。
- ProtocolError. 与对等节点失去连接后的临时状态,下一个状态为Unconected悬空。
- TearDown拆解:临时状态,对等节点连接关闭,下一个状态为Unconected悬空。
- WFConnection.等待和对等节点建立网络连接。
- WFReportParams:已经建立TCP连接,本节点等待从对等节点传来的第一个网络包。
- Connected连接:Drbd已经建立连接,数据镜像现在可用,节点处于正常状态。
- StartingSyncS:完全同步,有管理员发起的刚刚开始同步。未来可能的状态为SyncSource或PausedSyncS。
- StartingSyncT:完全同步,有管理员发起的刚刚开始同步,下一状态为WFSyncUUID。
- WFBitMapS:部分同步刚刚开始,下一步可能的状态:SyncSource或PausedSyncS。
- WFBitMapT:部分同步刚刚开始,下一步可能的状态:WFSyncUUID。
- WFSyncUUID:同步即将开始,下一步可能的状态:SyncTarget或PausedSyncT。
- SyncSource:以本节点为同步源的同步正在进行。
- SyncTarget:以本节点为同步目标的同步正在进行。
- PausedSyncS:以本地节点是一个持续同步的源,但是目前同步已经暂停。可能是因为另外一个同步正在进行或者是使用命令drbdadm pause-sync暂停了同步。
- PausedSyncT:以本地节点为持续的同步目标,但是目前同步已经暂停,这可能是因为另外一个同步正在进行或者是使用命令drbdadm pause-sync暂停了同步。
- VerifyS:以本地节点为验证源的线上设备验证正在执行。
- VerifyT:以本地节点为目标源的线上设备验证正在执行。
drbdadm role r0
Primary/Secondary
drbdadm dstate r0
UpToDate/UpToDate
- Diskless无盘:本地没有块设备分配给DRBD使用,这就意味着没有可用的后背设备,或者使用drbdadm 命令手工分离或者是底层的I/O错误导致自动分离。
- Attaching:读取元数据时候的瞬间状态。
- Failed失败:本地块设备报告I/O错误的下一个状态。其下一个状态为Diskless无盘。
- Negotiating:在已经连接的DRBD设备进行Attach读取元数据前的瞬间状态。
- Inconsistent:数据是不一致的,在两个节点上(初始的完全同步前)这种状态出现后立即创建一个新的资源。此外,在同步期间(同步目标)在一个节点上出现这种状态。
- Outdated:数据资源是一致的,但是已经过时。
- DUnknown:当对等节点网络连接不可用时出现这种状态。
- Consistent:一个没有连接的节点数据一致。当建立连接时,它决定数据是UpToDate 或者是Outdated。
- UpToDate:一致的最新的数据状态,这个状态是正常的状态。
cat /proc/drbd
version: 8.4.6 (api:1/proto:86-101)
GIT-hash: 833d830e0152d1e457fa7856e71e11248ccf3f70 build by root@mysql1, 2016-11-17 15:25:560: cs:SyncSource ro:Primary/Secondary ds:UpToDate/Inconsistent C r-----cat /proc/drbd
version: 8.4.6 (api:1/proto:86-101)
GIT-hash: 833d830e0152d1e457fa7856e71e11248ccf3f70 build by root@mysql1, 2016-11-17 15:25:560: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r-----ns:409587464 nr:0 dw:0 dr:409588128 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0
- I/O suspension,r表示运行I/O,s表示suspended I/O,正常情况下为r
- Serial resynchronization 串行同步:当资源等待同步时却推迟了重新同步,这则个标志变成A,正常情况为 –
- Peer-initiated sync suspension 对等节点发起的同步暂停:当资源正在等待重新同步时,对等节点因为一些原因发起暂停同步。这个标志变成p。正常为 –
- Locally initiated sync suspension 本地发起的同步暂停:当资源等待重新同步时,在本地节点上用户发起同步暂停,这个标志变成u。正常为 –
- Locally blocked I/O 。正常为 -。可能会是一下标志:
- d:如因为一个短暂的磁盘状态导致的drbd内部出现I/O阻塞
- b:备用设备的I/O阻塞
- n:网络socket出现阻塞
- a:设备的I/O阻塞和网络阻塞的组合
- Activity Log update suspension 活动日志更新暂停:当活动日志更新暂停,这个标志变成s。正常为 –
- NS(network send 网络发送):net数据以kibyte通过网络连接发送到对等节点
- NR(network receive 网络接收):通过网络连接以kibyte接收net数据
- DW(disk write 磁盘写入):net数据以kibyte写入本地磁盘
- DR(disk read 磁盘读取):net数据以kibyte读取本地磁盘数据
- AL(activity log 活动日志):活动日志区的元数据更新
- BM(bit map 位图):位图区元数据更新
- LO(local count 本地计数):DRBD请求的开放本地I/O子系统的数量
- PE(pengding 待定):发送到对等节点但是尚未节点对方回答的请求的数目
- UA(unacknowledged 未确认):通过网络连接接收到对等节点的请求,但是尚未得到回复
- AP(alllication pending应用程序挂起):数据块I/O请求转发到DRBD,但是DRBD尚未回答
- EP(epochs):一定数量的epoch对象,通常为1,使用阻碍或者是没有排序写的方法时可能增加I/O负载。
- WO(write order 写入顺序)目前使用的写入顺序的方法:b(barrier障碍)、f(flush 刷新)、d(drain 漏)或者是n(none无)
- OOS(out of sync):以kububyte同步当前存储
drbdadm up r0
drbdadm down r0
drbdadm primary r0
drbdadm secondary r0
[root@mysql1 etc]# cat /proc/drbd
version: 8.4.6 (api:1/proto:86-101)
GIT-hash: 833d830e0152d1e457fa7856e71e11248ccf3f70 build by root@mysql1, 2016-11-17 15:25:560: cs:WFConnection ro:Secondary/Unknown ds:UpToDate/DUnknown C r-----[root@mysql2 ~]# cat /proc/drbd
version: 8.4.6 (api:1/proto:86-101)
GIT-hash: 833d830e0152d1e457fa7856e71e11248ccf3f70 build by root@mysql2, 2016-11-17 15:28:410: cs:WFConnection ro:Secondary/Unknown ds:UpToDate/DUnknown C r-----
[root@mysql1 etc]# cat /proc/drbd
version: 8.4.6 (api:1/proto:86-101)
GIT-hash: 833d830e0152d1e457fa7856e71e11248ccf3f70 build by root@mysql1, 2016-11-17 15:25:560: cs:StandAlone ro:Secondary/Unknown ds:UpToDate/DUnknown r-----ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:520
- 在发生问题的主机上,如上面的mysql2, 执行drbdadm secondary r0
- 在发生问题的主机上,如上面的mysql2, 执行drbdadm connect --discard-my-data r0,从主节点同步数据,并且discard自己的数据
- 使用cat /proc/drbd查看双机的drbd运行状态信息
[root@mysql1 ~]# cat /proc/drbd
version: 8.4.6 (api:1/proto:86-101)
GIT-hash: 833d830e0152d1e457fa7856e71e11248ccf3f70 build by root@mysql1, 2016-11-17 15:25:560: cs:StandAlone ro:Primary/Unknown ds:UpToDate/DUnknown r-----ns:0 nr:324 dw:800 dr:37201 al:8 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:416
[root@mysql1 ~]# drbdadm connect r0
[root@mysql1 ~]# cat /proc/drbd
version: 8.4.6 (api:1/proto:86-101)
GIT-hash: 833d830e0152d1e457fa7856e71e11248ccf3f70 build by root@mysql1, 2016-11-17 15:25:560: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r-----ns:488 nr:0 dw:800 dr:37689 al:8 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0
[root@mysql1 ~]# cat /proc/drbd
version: 8.4.6 (api:1/proto:86-101)
GIT-hash: 833d830e0152d1e457fa7856e71e11248ccf3f70 build by root@mysql1, 2016-11-17 15:25:560: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r-----ns:488 nr:0 dw:800 dr:37689 al:8 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0
更多DRBD故障恢复知识详见下面链接。
yum -y install make gcc-c++ cmake bison bison-devel ncurses-devel libaiogroupadd mysql
useradd -r -g mysql mysqltar zxvf mysql-5.6.33.tar.gz
cd mysql-5.6.33
cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/hadata/mysql \
-DSYSCONFDIR=/etc \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DMYSQL_UNIX_ADDR=/var/lib/mysql/mysql.sock \
-DEXTRA_CHARSETS=all \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DEXTRA_CHARSETS=all \
-DENABLED_LOCAL_INFILE=1make
make installchown -R mysql.mysql /usr/local/mysql
cd /usr/local/mysql/scripts
./mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/hadata/mysqlcd /usr/local/mysql/support-files
cp mysql.server /etc/rc.d/init.d/mysqld
chkconfig --add mysqld
chkconfig mysqld on
service mysqld start
vi /etc/profile
PATH=/usr/local/mysql/bin:$PATH
export PATHsource /etc/profile
mysql_secure_installation
$ more my.cnf
[client]
port = 3306
socket = /var/lib/mysql/mysql.sock
default-character-set=utf8
[mysqld]
port = 3306
socket = /var/lib/mysql/mysql.sock
character-set-server = utf8
init-connect='SET NAMES utf8'
basedir = /usr/local/mysql
datadir = /hadata/mysql
skip-external-locking
skip-name-resolve
default-storage-engine = InnoDB
back_log = 2048
max_connections = 1024
max_connect_errors = 256
max_allowed_packet = 32M
table_open_cache = 2048
sort_buffer_size = 8M
read_buffer_size = 8M
read_rnd_buffer_size = 64M
join_buffer_size = 512K
max_heap_table_size = 256M
tmp_table_size = 256M
tmpdir = /dev/shm
#query_cache_type = 0
query_cache_size = 128M
query_cache_limit = 4M
ft_min_word_len = 8
bulk_insert_buffer_size = 64M
thread_cache_size = 16384
thread_concurrency = 8
thread_stack = 512K
key_buffer_size = 4096M
myisam_sort_buffer_size = 128M
myisam_max_sort_file_size = 15G
myisam_repair_threads = 1
myisam_recover_options = DEFAULT
server-id = 1
log-bin=/hadata/mysql/mysql-bin
binlog_format=mixed
binlog_cache_size = 4M
max_binlog_size = 1024M
expire-logs-days = 7
slow_query_log = 1
long_query_time = 10
slow_query_log_file=/hadata/mysql/slow_query.log
log-error = /var/log/mysqld.log
innodb_data_file_path = ibdata1:12M:autoextend
innodb_buffer_pool_size = 15G
innodb_buffer_pool_instances = 8
innodb_additional_mem_pool_size = 64M
innodb_log_file_size = 256M
innodb_log_files_in_group = 3
innodb_log_buffer_size = 64M
innodb_flush_log_at_trx_commit = 2
innodb_lock_wait_timeout = 50
innodb_max_dirty_pages_pct = 75
innodb_support_xa = 1
innodb_thread_concurrency = 0
innodb_write_io_threads = 8
innodb_read_io_threads = 8
innodb_io_capacity = 1600
innodb_flush_method = O_DIRECT
innodb_file_per_table = 1
innodb_file_format = Barracuda
innodb_strict_mode = 1
innodb_purge_threads = 1
innodb_change_buffering = all
transaction_isolation = REPEATABLE-READ
explicit_defaults_for_timestamp=true
[mysqldump]
quick
max_allowed_packet = 32M
[mysql]
no-auto-rehash
default-character-set = utf8
[myisamchk]
key_buffer_size = 1024M
sort_buffer_size = 1024M
read_buffer = 32M
write_buffer = 32M
[mysqlhotcopy]
interactive-timeout
[mysqld_safe]
open-files-limit = 65535
default-character-set = utf8
yum -y install heartbeat
cp /usr/share/doc/heartbeat-3.0.4/{authkeys,ha.cf,haresources} /etc/ha.d/
vi authkeysauth 11 crc
chmod 600 authkeys
vi /etc/ha.d/haresourcesmysql1 IPaddr::10.0.0.10/24/eth0:1 drbddisk::r0 Filesystem::/dev/drbd0::/hadata::ext4 mysqld
vi /etc/ha.d/ha.cf
debugfile /var/log/ha-debug
logfile /var/log/ha-log
logfacility local0
keepalive 500ms
deadtime 30
warntime 10
initdead 60
udpport 694
bcast eth0
auto_failback off
node mysql1
node mysql2
ping 10.0.0.1
respawn hacluster /usr/lib64/heartbeat/ipfail
apiauth ipfail gid=haclient uid=hacluster
compression bz2
compression_threshold 2
cat drbddisk
#!/bin/bash
#
# This script is inteded to be used as resource script by heartbeat
#
# Copright 2003-2008 LINBIT Information Technologies
# Philipp Reisner, Lars Ellenberg
#
###DEFAULTFILE="/etc/default/drbd"
DRBDADM="/sbin/drbdadm"if [ -f $DEFAULTFILE ]; then
. $DEFAULTFILE
fiif [ "$#" -eq 2 ]; thenRES="$1"CMD="$2"
elseRES="all"CMD="$1"
fi## EXIT CODES
# since this is a "legacy heartbeat R1 resource agent" script,
# exit codes actually do not matter that much as long as we conform to
# http://wiki.linux-ha.org/HeartbeatResourceAgent
# but it does not hurt to conform to lsb init-script exit codes,
# where we can.
# http://refspecs.linux-foundation.org/LSB_3.1.0/
#LSB-Core-generic/LSB-Core-generic/iniscrptact.html
####drbd_set_role_from_proc_drbd(){local outif ! test -e /proc/drbd; thenROLE="Unconfigured"returnfidev=$( $DRBDADM sh-dev $RES )
minor=${dev#/dev/drbd}
if [[ $minor = *[!0-9]* ]] ; then
# sh-minor is only supported since drbd 8.3.1minor=$( $DRBDADM sh-minor $RES )
fi
if [[ -z $minor ]] || [[ $minor = *[!0-9]* ]] ; thenROLE=Unknownreturn
fiif out=$(sed -ne "/^ *$minor: cs:/ { s/:/ /g; p; q; }" /proc/drbd); thenset -- $outROLE=${5%/**}: ${ROLE:=Unconfigured} # if it does not show up
elseROLE=Unknown
fi
}case "$CMD" instart)
# try several times, in case heartbeat deadtime
# was smaller than drbd ping timetry=6while true; do$DRBDADM primary $RES && breaklet "--try" || exit 1 # LSB generic errorsleep 1done;;stop)
# heartbeat (haresources mode) will retry failed stop
# for a number of times in addition to this internal retry.try=3while true; do$DRBDADM secondary $RES && break# We used to lie here, and pretend success for anything != 11,# to avoid the reboot on failed stop recovery for "simple# config errors" and such. But that is incorrect.# Don't lie to your cluster manager.# And don't do config errors...let --try || exit 1 # LSB generic errorsleep 1done;;status)if [ "$RES" = "all" ]; thenecho "A resource name is required for status inquiries."exit 10fiST=$( $DRBDADM role $RES )ROLE=${ST%/**}case $ROLE inPrimary|Secondary|Unconfigured)# expected;;*)# unexpected. whatever...# If we are unsure about the state of a resource, we need to# report it as possibly running, so heartbeat can, after failed# stop, do a recovery by reboot.# drbdsetup may fail for obscure reasons, e.g. if /var/lock/ is# suddenly readonly. So we retry by parsing /proc/drbd.drbd_set_role_from_proc_drbdesaccase $ROLE inPrimary)echo "running (Primary)"exit 0 # LSB status "service is OK";;Secondary|Unconfigured)echo "stopped ($ROLE)"exit 3 # LSB status "service is not running";;*)# NOTE the "running" in below message.# this is a "heartbeat" resource script,# the exit code is _ignored_.echo "cannot determine status, may be running ($ROLE)"exit 4 # LSB status "service status is unknown";;esac;;*)echo "Usage: drbddisk [resource] {start|stop|status}"exit 1;;
esacexit 0
chmod +x /etc/ha.d/resource.d/drbddiskcp /etc/init.d/mysqld /etc/ha.d/resource.d/
chkconfig mysqld off
chkconfig --add heartbeat
chkconfig heartbeat on
-A INPUT -s 10.0.0.2/32 -p udp -m udp --dport 694 -j ACCEPT
-A INPUT -s 10.0.0.1/32 -p udp -m udp --dport 694 -j ACCEPT
- 在mysql1主机上执行service heartbeat stop,观察浮动IP、/dev/drbd0磁盘和mysqld服务的切换过程和结果。
- 在mysql1主机上执行service heartbeat start,观察两个主机上/var/log/ha-log日志输出,观察两个主机上cat /proc/drbd信息。
- 在mysql2主机上执行service heartbeat stop, 观察浮动IP、/dev/drbd0磁盘和mysqld服务是否正常切换回mysql1节点,观察日志和drbd状态信息。
- 在mysql2主机上执行service heartbeat start,测试结束。
./tpcc_start -10.0.0.10 -uroot -p123456 -d tpcc -w 500 -c 256 -r 300 -l 1800 -f ./tpcc_mysql_256_20161119_5.log
7554.867 TpmC
tpcc_start -h10.0.0.10 -uroot -p123456 -d tpcc -w 500 -c 256 -r 300 -l 1800 -f ./tpcc_mysql_256_20161119.log6677.233 TpmC
tpcc并行数据仓库加载的脚本:tpcc_load_parallel.sh
#!/bin/bash# ConfigrationMYSQL=/usr/bin/mysql
TPCCLOAD=./tpcc_load
TABLESQL=./create_table.sql
CONSTRAINTSQL=./add_fkey_idx.sql
DEGREE=`getconf _NPROCESSORS_ONLN`SERVER=10.0.0.10
DATABASE=tpcc
USER=root
PASS=123456
WAREHOUSE=500# Loadset -e
$MYSQL -h$SERVER -u $USER -p$PASS -e "DROP DATABASE IF EXISTS $DATABASE"
$MYSQL -h$SERVER -u $USER -p$PASS -e "CREATE DATABASE $DATABASE"
$MYSQL -h$SERVER -u $USER -p$PASS $DATABASE < $TABLESQL
$MYSQL -h$SERVER -u $USER -p$PASS $DATABASE < $CONSTRAINTSQLecho 'Loading item ...'
$TPCCLOAD $SERVER $DATABASE $USER $PASS $WAREHOUSE 1 1 $WAREHOUSE > /dev/nullset +e
STATUS=0
trap 'STATUS=1; kill 0' INT TERMfor ((WID = 1; WID <= WAREHOUSE; WID++)); doecho "Loading warehouse id $WID ..."(set -e# warehouse, stock, district$TPCCLOAD $SERVER $DATABASE $USER $PASS $WAREHOUSE 2 $WID $WID > /dev/null# customer, history$TPCCLOAD $SERVER $DATABASE $USER $PASS $WAREHOUSE 3 $WID $WID > /dev/null# orders, new_orders, order_line$TPCCLOAD $SERVER $DATABASE $USER $PASS $WAREHOUSE 4 $WID $WID > /dev/null) &PIDLIST=(${PIDLIST[@]} $!)if [ $((WID % DEGREE)) -eq 0 ]; thenfor PID in ${PIDLIST[@]}; dowait $PIDif [ $? -ne 0 ]; thenSTATUS=1fidoneif [ $STATUS -ne 0 ]; thenexit $STATUSfiPIDLIST=()fi
donefor PID in ${PIDLIST[@]}; dowait $PIDif [ $? -ne 0 ]; thenSTATUS=1fi
doneif [ $STATUS -eq 0 ]; thenecho 'Completed.'
fiexit $STATUS
centos6 drbd heartbeat mysql高可用搭建与压测相关推荐
- corosync+pacemaker+drbd构建mysql高可用平台的简单案例
写在前面:如果此文有幸被某位朋友看见并发现有错的地方,希望批评指正.如有不明白的地方,愿可一起探讨. 案例拓扑图 说明: ansible主机主要作用在于配置和安装两台corosync+pacemake ...
- MySql高可用搭建 + 读写分离 + 分库分表
Mysql读写分离与分库分表 一.Mysql读写分离解决的问题 二.mysql处理请求运行流程 三.读写分离结构 四.读写分离产生场景 五.读写分离工具 5.1 MyCat 5.2 HAProxy 5 ...
- 阿里高可用mysql搭建方案_阿里云环境迁移记录 - MYSQL高可用搭建
MYSQL高可用方案主要分为两大类,一类是前置管理,一类是后置管理. 前置管理的思想是利用各种前置管理工具,动态切换或者分发请求到不同的实例并切换master,如keepalived.MHA.pack ...
- 数据库管理与高可用----MySQL高可用搭建
文章目录 一: MHA的简介 1.1: MHA的组成 1.2: MHA特点 二: MHA的案例 2.1: 案例需求 2.2: 案例实现思路 2.3:实验目的 2.4:编译安装mysql并配置主从服务 ...
- 一文详解 MySQL 高可用之 DRBD | 原力计划
作者 | wzy0623 责编 | 屠敏 出品 | CSDN 博客 大多数MySQL高可用解决方案都是基于MySQL自带的各种复制技术.本质上是将一个实例上的数据更新或事务,在其它实例上进行重放,从而 ...
- MySQL高可用之DRBD
目录 一.DRBD简介 1. 工作原理 2. DRBD 支持的底层设备 3. DRBD资源 4. DRBD 配置工具 5. DRBD与RAID1区别 6. DRBD与共享存储 二.DRBD安装配置 1 ...
- 没有执行此操作所需的足够可用空间。_一文详解 MySQL 高可用之 DRBD | 原力计划...
作者 | wzy0623责编 | 屠敏出品 | CSDN 博客大多数MySQL高可用解决方案都是基于MySQL自带的各种复制技术.本质上是将一个实例上的数据更新或事务,在其它实例上进行重放,从而完成数 ...
- Heartbeat+DRBD+MySQL高可用方案
1.方案简介 本方案采用Heartbeat双机热备软件来保证数据库的高稳定性和连续性,数据的一致性由DRBD这个工具来保证.默认情况下只有一台mysql在工作,当主mysql服务器出现问题后,系统将自 ...
- heartbeat+drbd+mysql构建mysql高可用群集
heartbeat+drbd+mysql构建mysql高可用群集 1. 试验环境: 操作系统:Red Hat Enterprise Linux 5.4 所需的软件包: mysql-5.5.22.tar ...
最新文章
- Hibernate 和快照
- TCP/IP 详解卷一 - TCP CWR、ECE、URG、ACK、PSH、RST、SYN、FIN控制位
- Android 7.0 init.rc的一点改变
- HDU - 3966 Aragorn's Story(树链剖分)
- 点击率预测算法:FTRL
- SQL中的函数 •Aggregate 函数 •Scalar 函数
- argument list too long 错误的处理
- Linux移植随笔:让内核支持nor flash
- 湖北孝感学校计算机好吗,湖北省孝感市2018年上半年计算机等级考试注意事项...
- imagesc和pcolor区别
- ubuntu 下载 迅雷
- Flask 框架的网站实现
- median frequency balancing
- 对中国国家气象局进行api数据分析
- 【草稿待续】统一的嵌入式软件编程模型——驱动
- 转义符——反斜杠(\)
- 还原 NuGet 程序包时出错: 本地源“E:\DevExp\Components\Offline Packages”不存在
- 音频剪辑文件 audition3.0(英文破解)与audition(中文直接安装板)
- 杰信项目第五天(合同复制+合同查看+出货表)
- AsciiDoc各种图表
热门文章
- ASP.NET动态网站开发培训-22.论文管理系统(二、制作论文标题页面)
- bzoj D. Captain America(TLE)
- 求职面试之STAR原则
- 原生js+css实现带预览图片的幻灯片效果实例
- vue.js:634 [Vue warn]: Unknown custom element: <router-link> - did you register the component correc
- 2021年广东各市软考证书领取时间
- 服务器机柜的保修维修方案,机柜保修
- Android锁屏勒索病毒分析(1)BWM在线
- eclipse detach后恢复的方法
- 【JavaWeb学习报错集(一)】ReflectionException:There is no getter for property named XXX