首页 数据库 mysql教程 mysql+drbd+heartbeat高可用配置说明

mysql+drbd+heartbeat高可用配置说明

Jun 07, 2016 pm 02:53 PM
可用 配置 高可用

环境描述: 系统版本: Red Hat Enterprise Linux Server release 5.5 (Tikanga) x86_64 2.6.18-164.el5 mysql 版本: mysql-5.1.49.tar.gz drbd 版本: drbd83-8.3.15-2.el5.centos.rpm heartbeat 版本: heartbeat.x86_64 0:2.1.3-3.el5.centos.rpm 主机名

 

环境描述:

系统版本:Red Hat Enterprise Linux Server release 5.5 (Tikanga)x86_64 2.6.18-164.el5

mysql版本:mysql-5.1.49.tar.gz

drbd版本:drbd83-8.3.15-2.el5.centos.rpm

heartbeat版本:heartbeat.x86_64 0:2.1.3-3.el5.centos.rpm

主机名

Eth0

Eth1

备注

ln-master

10.10.206.193

192.168.1.10

ln-slave

10.10.206.194

192.168.1.11

VIP:10.10.206.211

 

前期工作(两台都要改)

修改主机名:

[root@ln-master ~]# cat /etc/sysconfig/network

NETWORKING=yes

NETWORKING_IPV6=no

HOSTNAME=ln-master

更改hosts文件(两台都要改)

[root@ln-master ~]# cat /etc/hosts

# Do not remove the following line, or various programs

# that require network functionality will fail.

127.0.0.1               localhost.localdomain localhost

::1             localhost6.localdomain6 localhost6

10.10.206.193     ln-master

192.168.1.10      ln-master

10.10.206.194     ln-slave

192.168.1.11      ln-slave

确保ping主机名能通,例如ping ln-slave

优化开机启动项,开基础的四项即可

[root@ln-master ~]#

[root@ln-master ~]# for A in `chkconfig --list |grep 3:on|awk '{print $1}'`;do chkconfig $A off;done

[root@ln-master ~]# for B in sshd crond syslog network;do chkconfig $B on;done

[root@ln-master ~]# chkconfig --list |grep 3:on

crond           0:off   1:off   2:on    3:on    4:on    5:on    6:off

network         0:off   1:off   2:on    3:on    4:on    5:on    6:off

sshd            0:off   1:off   2:on    3:on    4:on    5:on    6:off

syslog          0:off   1:off   2:on    3:on    4:on    5:on    6:off

重启

reboot

 

 

 

安装配置DRBD

注意:事先配置好YUM

  1. 1.   通过yum安装drbd(两台都要安装)

:drbd的版本和系统内核的对应  不同的版本对应不同的内核可以去官网看看

[root@ln-master ~]#yum install drbd83* -y  #安装drbd

[root@ln-master ~]#yum -y install kmod-drbd83*    #安装内核模块

[root@ln-master ~]#modprobe drbd     #加载drbd内核模块

[root@ln-master ~]# lsmod |grep drbd

drbd                  273204  0 #看到这个,证明加载drbd内核模块了。

  1. 2.   修改drbd配置文件(两台主机配置一样)

[root@ln-master ~]# cat /etc/drbd.conf

#

# please have a a look at the example configuration file in

# /usr/share/doc/drbd83/drbd.conf

#

global{
        usage-count no;         #
这个问你让不让官网统计
}
common {
        syncer {rate 100M;}     #
传输速度
}
resource r0 {
        protocol C;             #
传输协议(下面进行协议说明)
        startup {
        }
        disk {
                on-io-error detach;
        }
        net {      
                cram-hmac-alg "sha1"; #
两台服务器通信间的算法
                shared-secret "FooFunFactory"; #通信密码
#               after-sb-0pri disconnect;
#               after-sb-1pri disconnect;
#               after-sb-2pri disconnect;
                after-sb-0pri discard-younger-primary;
                after-sb-1pri discard-secondary;
                after-sb-2pri call-pri-lost-after-sb;
                rr-conflict disconnect;
        }
         syncer {
                rate 100M;
                al-extents 257;
        }
        on ln-master{                 #
这里一定要是hosts定义的名称
                device  /dev/drbd0;     #逻辑设备路径
                disk    /dev/sdb1;       #真实设备路径
                address  192.168.1.10:7789;   #maser传输数据的IP地址
                meta-disk  internal;
        }
        on ln-slave{
                device  /dev/drbd0;
                disk    /dev/sdb1;
                address  192.168.1.11:7789;  #slave
传输数据的IP地址
                meta-disk  internal;
        }
}

  1. 3.   DRBD一些说明

 DRBD 协议说明:

  A协议:数据一旦写入磁盘并发送到网络中就认为完成了写入操作

  B协议:收到接收确认就认为完成了写入操作

  C协议:收到写入确认就认为完成了写入操作                         

DRBD设备的三个进程:

每个drbd设备都有三个进程:

1  drbd0_workerdrbd0的主进程

2  drbd0_asenderprimary上的drbd0的数据发送进程

3  drbd0_receiversecondary上的drdb0的数据写入进程

DRBD几点注意的地方:

1  mount drbd设备以前必须把设备切换到primary状态

2  两个节点中,同一时间只能有一台处于primary状态,另一台是secondary状态

3  处于secondary状态的节点不可以挂载

4  主备最好使用大小一样的分区。

 

DRBD使用时建议使用Innodb存储引擎,同时打开binlog日志,设置innodb_flush_log_at_commit=1MyISAM存储引擎在DRBD上容易造成数据丢失,及文件损坏。

DRBD脑裂后处理:

drdb1-master

drbdadm secondary r0

drbdadm — –discard-my-data connect r0

drbdadm connect r0

drbd2-slave

drbdadm disconnect r0

drbdadm connect r0

 

  1. 4.   创建DRBD设备

我这里用的是虚拟机,我两台都添加了一块30G硬盘。

对新的磁盘分区格式化(两台都要操作):

[root@ln-master ~]# fdisk /dev/sdb

Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel

Building a new DOS disklabel. Changes will remain in memory only,

until you decide to write them. After that, of course, the previous

content won't be recoverable.

 

Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

 

Command (m for help): n

Command action

   e   extended

   p   primary partition (1-4)

p

Partition number (1-4): 1

First cylinder (1-652, default 1):

Using default value 1

Last cylinder or +size or +sizeM or +sizeK (1-652, default 652):

Using default value 652

 

Command (m for help): w

The partition table has been altered!

 

Calling ioctl() to re-read partition table.

 

Syncing disks.

创建drbd设备(两台都要执行)

[root@ln-slave ~]# drbdadm create-md r0 

Writing meta data...

initializing activity log

NOT initialized bitmap

New drbd meta data block successfully created.  #看到这些信息表示创建设备成功。

 

错误

Command 'drbdmeta 0 v08 /dev/sdb internal create-md' terminated with exit code 40
drbdadm create-md r0: exited with code 40

这是因为我们只把以前的分区删除了,并没有重新创建分区,创建分区即可

如果还出现这个错误提示运行

dd if=/dev/zero of=/dev/sdb1 bs=1M count=1

即可

  1. 启动drbd服务(两台都要启动)

[root@ln-master ~]# /etc/init.d/drbd start

Starting DRBD resources: [ d(r0) s(r0) n(r0) ]..........

[root@ln-master ~]# /etc/init.d/drbd status

drbd driver loaded OK; device status:

version: 8.3.15 (api:88/proto:86-97)

GIT-hash: 0ce4d235fc02b5c53c1c52c53433d11a694eab8c build by mockbuild@builder17.centos.org, 2013-03-27 16:04:08

m:res  cs         ro                   ds                         p  mounted  fstype

0:r0   Connected  Secondary/Secondary  Inconsistent/Inconsistent  C

 

错误

Starting DRBD resources: Can not load the drbd module.

没有加载drbd内核模块,安装内核模块并加载即可。

  1. 6.   将master设置为主节点(只在master上执行

master主机执行命令  设置为主节点

[root@ln-master ~]# drbdadm -- --overwrite-data-of-peer primary r0   #设置为主节点

[root@ln-master ~]# mkfs.ext3 /dev/drbd0     #格式化

mke2fs 1.39 (29-May-2006)

Filesystem label=

OS type: Linux

Block size=4096 (log=2)

Fragment size=4096 (log=2)

655360 inodes, 1309240 blocks

65462 blocks (5.00%) reserved for the super user

First data block=0

Maximum filesystem blocks=1342177280

40 block groups

32768 blocks per group, 32768 fragments per group

16384 inodes per group

Superblock backups stored on blocks:

        32768, 98304, 163840, 229376, 294912, 819200, 884736

 

Writing inode tables: done                           

Creating journal (32768 blocks): done

Writing superblocks and filesystem accounting information: done

 

This filesystem will be automatically checked every 33 mounts or

180 days, whichever comes first.  Use tune2fs -c or -i to override.

[root@ln-master /]# mkdir /data

[root@ln-master /]# mount /dev/drbd0 /data/  #挂载

[root@ln-master /]# df -h

文件系统              容量  已用可用已用% 挂载点

/dev/mapper/VolGroup00-LogVol00

                       45G   14G   30G  32% /

/dev/sda1              99M   24M   70M  26% /boot

tmpfs                 3.9G     0  3.9G   0% /dev/shm

/dev/drbd0             30G  1.4G   27G   5% /data

[root@ln-master /]# drbd-overview

0:r0  Connected Primary/Secondary UpToDate/UpToDate C r-----

:看到都是UpToDate了,证明两边已经同步完成了。

  1. 7.   测试

mater操作:

[root@ln-master /]# cd /data/

[root@ln-master data]# ll

total 16

drwx------ 2 root root 16384 Aug  6 10:39 lost+found

[root@ln-master data]# touch test  #创建test文件

 [root@ln-master data]# ll

total 16

drwx------ 2 root root 16384 Aug  6 10:39 lost+found

-rw-r--r-- 1 root root     0 Aug  6 12:35 test

[root@ln-master data]# cd ..

[root@ln-master /]# umount /data/

[root@ln-master /]# df -h

文件系统              容量  已用可用已用% 挂载点

/dev/mapper/VolGroup00-LogVol00

                       45G   14G   30G  32% /

/dev/sda1              99M   24M   70M  26% /boot

tmpfs                 3.9G     0  3.9G   0% /dev/shm

[root@ln-master /]# drbdadm secondary r0  #将自己切换成从

[root@ln-master /]# drbd-overview  #检查

  0:r0  Connected Secondary/Secondary UpToDate/UpToDate C r-----

 

slave操作:

[root@ln-slave /]# drbd-overview       

  0:r0  Connected Secondary/Secondary UpToDate/UpToDate C r-----

[root@ln-slave /]# drbdadm primary r0  #将自己提升为主

[root@ln-slave /]# drbd-overview    

  0:r0  Connected Primary/Secondary UpToDate/UpToDate C r-----

[root@ln-slave /]# mount /dev/drbd0 /data/

[root@ln-slave /]# cd /data/

[root@ln-slave data]# ll

total 16

drwx------ 2 root root 16384 Aug  6  2014 lost+found

-rw-r--r-- 1 root root     0 Aug  6  2014 test

以上如果在slave端看到了test文件,证明数据已经同步了。

 

注:将master 还原成主,再做下面的操作。

 

安装配置mysql(两台都要装)

安装mysql:

#创建mysql用户

useradd mysql -s /sbin/nologin –M

id mysql

#安装

tar zxf mysql-5.1.49.tar.gz

cd mysql-5.1.49

#配置

./configure --prefix=/usr/local/mysql-5.1.49 --with-unix-socket-path=/usr/local/mysql-5.1.49/tmp/mysql.sock --localstatedir=/data --enable-assembler --with-charset=utf8 --with-collation=utf8_general_ci --with-plugins=innobase --enable-thread-safe-client --with-mysqld-user=mysql --with-big-tables --without-debug --with-pthread --enable-assembler --with-extra-charsets=complex --with-readline --with-ssl --with-embedded-server --enable-local-infile --with-plugins=partition,innobase --with-mysqld-ldflags=-all-static --with-client-ldflags=-all-static

#拷贝启动脚本,配置文件

/bin/cp support-files/mysql.server /etc/init.d/mysqld

/bin/cp support-files/my-small.cnf /etc/my.cnf

chmod 700 /etc/init.d/mysqld

#做软连接

ln -s /usr/local/mysql-5.1.49/ /usr/local/mysql

#主库初始化

/application/tools/mysql-5.1.49/scripts/mysql_install_db --basedir=/usr/local/mysql --datadir=/data/mysql/data --user=mysql      #备库不需要初始化

 

mysql程序路径:/usr/local/mysql

mysql data目录:/data/mysql/data

my.cnf配置文件(两边相同),根据机器配置优化,以下配置仅供参考

[root@ln-master mysql]# cat /etc/my.cnf
[client]
port = 3306

[mysqld]
basedir=/usr/local/mysql
datadir=/data/mysql/data
socket=/tmp/mysql.sock

sync_binlog = 0
binlog_format = ROW

skip-locking

skip-name-resolve
skip-host-cache
default-character-set=utf8
default-collation=utf8_general_ci
skip-character-set-client-handshake

max_allowed_packet = 16M
table_cache = 128
sort_buffer_size = 512K
net_buffer_length = 8K
read_buffer_size = 256K
read_rnd_buffer_size = 512K
myisam_sort_buffer_size = 2M


default-storage-engine=INNODB
log-bin=mysql-bin
max_connections=5000
max_connect_errors=100000
log_slow_queries=slow.log
long_query_time=2
log_queries_not_using_indexes=0
#skip-federated
server-id= 10
table_lock_wait_timeout=180
innodb_lock_wait_timeout=180

innodb_data_file_path = ibdata1:1000M:autoextend
#innodb_buffer_pool_size = 1G
innodb_additional_mem_pool_size = 8M
innodb_log_file_size = 100M
innodb_log_buffer_size = 8M
innodb_flush_log_at_trx_commit = 2
innodb_thread_concurrency=0
transaction-isolation=READ-COMMITTED
innodb_doublewrite=1
innodb_flush_method=O_DIRECT


[mysqldump]
quick
max_allowed_packet = 16M

[mysql]
no-auto-rehash

[isamchk]
key_buffer = 20M
sort_buffer_size = 20M
read_buffer = 2M
write_buffer = 2M

[myisamchk]
key_buffer = 20M
sort_buffer_size = 20M
read_buffer = 2M
write_buffer = 2M

[mysqlhotcopy]
interactive-timeout

 

 

安装配置heartbeat

1.添加主机路由

master:

route add -host 192.168.1.11 dev eth1

slave:

route add -host 192.168.1.10 dev eth1

添加到/etc/rc.local.

2.安装heartbeat

yum install -y heartbeat

3.配置heartbeat

heartbeat会有三个配置文件ha.cfharesourcesauthkeys(本实验主备节点三个配置文件必须相同)

 

ha.cf主配置文件:

[root@ln-master ha.d]# cat ha.cf

logfile /var/log/ha-log     #日志名字及存放位置

keepalive 2                #设定心跳检测时间2秒

deadtime 15               #死亡时间15秒,备用节点15秒没有检测到主节点心跳,确认对方故障

warntime 10                #警告次数

initdead 30                #守护进程启动30s后启动服务资源

udpport 694                #使用ucast或bcast的udp通讯端口,默认694

bcast   eth1               #广播通讯接口,ucast得指定ip地址

auto_failback off              #当主节点切换到备份节点后,主节点又恢复正常,此处定义不进行回切操作,因为回切一次,NFS和mysql等成本很高      

#watchdog /dev/watchdog

node    ln-master

node    ln-slave

ping 10.10.206.1

authkeys验证文件:

[root@ln-master ha.d]# cat authkeys

auth 1                  #使用crc验证方式,这种方式不需要秘钥,因此性能比较好,还有其他两种安全依次增高,性能依次降低

1 crc

[root@ln-master ha.d]# ll authkeys    #必须为600权限

-rw------- 1 root root 31 08-12 17:49 authkeys

haresources配置文件:

[root@ln-master ha.d]# cat haresources

ln-master IPaddr::10.10.206.211 drbddisk::r0  Filesystem::/dev/drbd0::/data::ext3 mysqld

说明:

IPaddr::10.10.206.211   #VIP

drbddisk::r0     #启动drbd r0资源,相当于执行/etc/ha.d/resource.d/drbddisk r0 stop/start操作

Filesystem::/dev/drbd0::/data::ext3     #drbd分区挂载到/data目录,相当于执行/etc/ha.d/resource.d/Filesystem /dev/drbd0 /data ext3 stop/start 

mysqld             #启动mysql服务脚本,相当于/etc/init.d/mysqld stop/start

 

 

4.启动heartbeat(两边都要启动)

[root@ln-master ~]# /etc/init.d/heartbeat start

Starting High-Availability services:

2014/08/13_10:25:01 INFO:  Resource is stopped

                                                           [确定]

[root@ln-master ~]# ip add       

1: lo: mtu 16436 qdisc noqueue

    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: mtu 1500 qdisc pfifo_fast qlen 1000

    link/ether 00:50:56:97:39:7c brd ff:ff:ff:ff:ff:ff

    inet 10.10.206.193/24 brd 10.10.206.255 scope global eth0

    inet 10.10.206.211/24 brd 10.10.206.255 scope global secondary eth0:0  #VIP也起来了

    inet6 fe80::250:56ff:fe97:397c/64 scope link

       valid_lft forever preferred_lft forever

 

 

测试(启动heartbeat后)

master

drbd自动成为了主,mysql也启动了。

root@ln-master ~]# ip add|grep "10.10"

    inet 10.10.206.193/24 brd 10.10.206.255 scope global eth0

    inet 10.10.206.211/24 brd 10.10.206.255 scope global secondary eth0:0

[root@ln-master ~]# drbd-overview

  0:r0  Connected Primary/Secondary UpToDate/UpToDate C r----- /data ext3 30G 1.

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它们
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

PyCharm与PyTorch完美结合:安装配置步骤详解 PyCharm与PyTorch完美结合:安装配置步骤详解 Feb 21, 2024 pm 12:00 PM

PyCharm是一款强大的集成开发环境(IDE),而PyTorch是深度学习领域备受欢迎的开源框架。在机器学习和深度学习领域,使用PyCharm和PyTorch进行开发可以极大地提高开发效率和代码质量。本文将详细介绍如何在PyCharm中安装配置PyTorch,并附上具体的代码示例,帮助读者更好地利用这两者的强大功能。第一步:安装PyCharm和Python

在PyCharm中如何设置Git配置 在PyCharm中如何设置Git配置 Feb 20, 2024 am 09:47 AM

标题:如何在PyCharm中正确配置Git在现代软件开发中,版本控制系统是非常重要的工具,而Git作为其中一种流行的版本控制系统,为开发者提供了强大的功能和灵活的操作。而PyCharm作为一款功能强大的Python集成开发环境,自带了对Git的支持,能够让开发者更加便捷地管理代码版本。本文将介绍如何在PyCharm中正确地配置Git,以便于在开发过程中更好地

Linux系统中GDM的工作原理及配置方法 Linux系统中GDM的工作原理及配置方法 Mar 01, 2024 pm 06:36 PM

标题:Linux系统中GDM的工作原理及配置方法在Linux操作系统中,GDM(GNOMEDisplayManager)是一种常见的显示管理器,用于控制图形用户界面(GUI)登录和用户会话管理。本文将介绍GDM的工作原理和配置方法,以及提供具体的代码示例。一、GDM的工作原理GDM是GNOME桌面环境下的显示管理器,负责启动X服务器并提供登录界面,用户输

了解Linux Bashrc:功能、配置与使用方法 了解Linux Bashrc:功能、配置与使用方法 Mar 20, 2024 pm 03:30 PM

了解LinuxBashrc:功能、配置与使用方法在Linux系统中,Bashrc(BourneAgainShellruncommands)是一个非常重要的配置文件,其中包含了系统启动时自动运行的各种命令和设置。Bashrc文件通常位于用户的家目录下,是一个隐藏文件,它的作用是为用户自定义设置Bashshell的环境。一、Bashrc的功能设置环境

win11系统如何配置工作组 win11系统如何配置工作组 Feb 22, 2024 pm 09:50 PM

Win11系统如何配置工作组工作组是一种在局域网中连接多台计算机的方式,它允许计算机之间共享文件、打印机和其他资源。在Win11系统中,配置工作组非常简单,只需按照以下步骤操作即可。步骤1:打开“设置”应用程序首先,点击Win11系统的“开始”按钮,然后在弹出的菜单中选择“设置”应用程序。你也可以使用快捷键“Win+I”打开“设置”。步骤2:选择“系统”在“设置”应用程序中,你会看到多个选项。请点击“系统”选项,进入系统设置页面。步骤3:选择“关于”在“系统”设置页面中,你会看到多个子选项。请点

简单易懂的PyCharm配置Git教程 简单易懂的PyCharm配置Git教程 Feb 20, 2024 am 08:28 AM

PyCharm是一款常用的集成开发环境(IDE),在日常开发中,使用Git管理代码是必不可少的。本文将介绍如何在PyCharm中配置Git,并使用Git进行代码管理,并附带具体代码示例。第一步:安装Git首先,确保在你的计算机上已经安装了Git。如果没有安装,可以前往[Git官网](https://git-scm.com/)下载并安装最新版本的Git

Linux系统中如何配置和安装FTPS Linux系统中如何配置和安装FTPS Mar 20, 2024 pm 02:03 PM

标题:Linux系统中如何配置和安装FTPS,需要具体代码示例在Linux系统中,FTPS是一种安全的文件传输协议,与FTP相比,FTPS通过TLS/SSL协议对传输的数据进行加密,提高了数据传输的安全性。在本文中,将介绍如何在Linux系统中配置和安装FTPS,并提供具体的代码示例。步骤一:安装vsftpd打开终端,输入以下命令安装vsftpd:sudo

MyBatis Generator配置参数解读及最佳实践 MyBatis Generator配置参数解读及最佳实践 Feb 23, 2024 am 09:51 AM

MyBatisGenerator是MyBatis官方提供的一个代码生成工具,可以帮助开发人员快速生成符合数据库表结构的JavaBean、Mapper接口以及XML映射文件。在使用MyBatisGenerator进行代码生成的过程中,配置参数的设置是至关重要的。本文将从配置参数的角度出发,深入探讨MyBatisGenerator的

See all articles