mysql+drbd+heartbeat高可用配置说明
环境描述: 系统版本: 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. 通过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内核模块了。
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;
}
}
3. DRBD一些说明
DRBD 协议说明:
A协议:数据一旦写入磁盘并发送到网络中就认为完成了写入操作
B协议:收到接收确认就认为完成了写入操作
C协议:收到写入确认就认为完成了写入操作
DRBD设备的三个进程:
每个drbd设备都有三个进程:
1) drbd0_worker是drbd0的主进程
2) drbd0_asender是primary上的drbd0的数据发送进程
3) drbd0_receiver是secondary上的drdb0的数据写入进程
DRBD几点注意的地方:
1) mount drbd设备以前必须把设备切换到primary状态
2) 两个节点中,同一时间只能有一台处于primary状态,另一台是secondary状态
3) 处于secondary状态的节点不可以挂载
4) 主备最好使用大小一样的分区。
DRBD使用时建议使用Innodb存储引擎,同时打开binlog日志,设置innodb_flush_log_at_commit=1。MyISAM存储引擎在DRBD上容易造成数据丢失,及文件损坏。
DRBD脑裂后处理:
在drdb1-master上
drbdadm secondary r0
drbdadm — –discard-my-data connect r0
drbdadm connect r0
在drbd2-slave上
drbdadm disconnect r0
drbdadm connect r0
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
即可
启动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内核模块,安装内核模块并加载即可。
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了,证明两边已经同步完成了。
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.cf,haresources,authkeys(本实验主备节点三个配置文件必须相同)
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:
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:
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.

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

標題:如何在PyCharm中正確配置Git在現代軟體開發中,版本控制系統是非常重要的工具,而Git作為其中一種流行的版本控制系統,為開發者提供了強大的功能和靈活的操作。而PyCharm作為一款功能強大的Python整合開發環境,自備了對Git的支持,能夠讓開發者更方便地管理程式碼版本。本文將介紹如何在PyCharm中正確地配置Git,以便於在開發過程中更好地

標題:Linux系統中GDM的工作原理及設定方法在Linux作業系統中,GDM(GNOMEDisplayManager)是一種常見的顯示管理器,用於控制圖形使用者介面(GUI)登入和使用者會話管理。本文將介紹GDM的工作原理和設定方法,以及提供具體的程式碼範例。一、GDM的工作原理GDM是GNOME桌面環境下的顯示管理器,負責啟動X伺服器並提供登入介面,使用者輸

PyCharm是一款強大的整合開發環境(IDE),而PyTorch則是深度學習領域備受歡迎的開源架構。在機器學習和深度學習領域,使用PyCharm和PyTorch進行開發可以大大提高開發效率和程式碼品質。本文將詳細介紹如何在PyCharm中安裝設定PyTorch,並附上具體的程式碼範例,幫助讀者更好地利用這兩者的強大功能。第一步:安裝PyCharm和Python

了解LinuxBashrc:功能、配置與使用方法在Linux系統中,Bashrc(BourneAgainShellruncommands)是一個非常重要的配置文件,其中包含了系統啟動時自動運行的各種命令和設定。 Bashrc文件通常位於使用者的家目錄下,是一個隱藏文件,它的作用是為使用者自訂設定Bashshell的環境。一、Bashrc的功能設定環境

Win11系統如何設定工作群組工作群組是一種在區域網路中連接多台電腦的方式,它允許電腦之間共用檔案、印表機和其他資源。在Win11系統中,設定工作群組非常簡單,只需依照下列步驟操作即可。步驟1:開啟「設定」應用程式首先,點擊Win11系統的「開始」按鈕,然後在彈出的選單中選擇「設定」應用程式。你也可以使用快捷鍵“Win+I”開啟“設定”。步驟2:選擇「系統」在「設定」應用程式中,你會看到多個選項。請點選「系統」選項,進入系統設定頁面。步驟3:選擇「關於」在「系統」設定頁面中,你會看到多個子選項。請點

PyCharm是常用的整合開發環境(IDE),在日常開發中,使用Git管理程式碼是不可或缺的。本文將介紹如何在PyCharm中設定Git,並使用Git進行程式碼管理,並附帶具體程式碼範例。第一步:安裝Git首先,確保在你的電腦上已經安裝了Git。如果沒有安裝,可以前往[Git官網](https://git-scm.com/)下載並安裝最新版本的Git

標題:Linux系統中如何配置和安裝FTPS,需要具體程式碼範例在Linux系統中,FTPS是一種安全的檔案傳輸協議,與FTP相比,FTPS透過TLS/SSL協議對傳輸的資料進行加密,提高了資料傳輸的安全性。在本文中,將介紹如何在Linux系統中設定和安裝FTPS,並提供特定的程式碼範例。步驟一:安裝vsftpd開啟終端,輸入以下指令安裝vsftpd:sudo

DRBD(DistributedReplicatedBlockDevice)是一種用於實現資料冗餘和高可用性的開源解決方案。以下是在CentOS7系統上安裝和設定DRBD的教學:安裝DRBD:開啟終端機並以管理員身分登入CentOS7系統。執行以下命令以安裝DRBD軟體包:sudoyuminstalldrbd配置DRBD:編輯DRBD設定檔(通常位於/etc/drbd.d目錄下),配置DRBD資源的設定。例如,可以定義主節點和備份節點的IP位址、連接埠和設備等。確保主節點和備份節點之間可以透過網
