如何在Ubuntu 16.04 LTS上使用Heartbeat和DRBD设置MariaDB高可用性
Heartbeat和DRBD都可用于任何使用两台服务器的应用程序的群集解决方案。 两台服务器都工作在主动和被动模式下,一台服务器将同时工作,另一台服务器作为备份服务器。 DRBD(分布式复制块设备)是一种内核级服务,可以实时同步两台服务器之间的数据。 Heartbeat是一个开放源代码程序,它允许主服务器和备用Linux服务器确定其他服务器是否“活动”,并且如果主服务器不是,则将资源故障切换到备份。 它还将管理服务器中的IP高可用性和其他服务。
在本教程中,我们将学习如何在Ubuntu 16.04服务器上使用Heartbeat和DRBD实现MariaDB的高可用性。
要求
- 两个安装了Ubuntu 16.04服务器的节点。
- 两个网卡安装在每个节点上。
- 额外的未分区硬盘安装在每个节点上。
- 非root用户在每个节点上设置sudo权限。
入门
在开始之前,您需要在每个节点上设置IP地址。 在每个节点上使用以下IP地址:
节点1:
在eth0上为172.16.0.1,在eth1上为192.168.0.101
节点2:
在eth0上为172.16.0.2,在eth1上为192.168.0.102
IP 192.168.0.103将是高可用性IP。
接下来,您还需要在每个节点上设置主机名和主机名解析。 所以每个节点都可以相互通信。 在第一个节点上,打开/ etc / hosts
文件和/ etc / hostname
文件:
sudo nano /etc/hosts
在文件末尾添加以下行:
172.16.0.1 Node1 172.16.0.2 Node2
sudo nano /etc/hostname
如下所示更改文件:
Node1
完成后保存并关闭文件。
在第二个节点上,打开/ etc / hosts
文件和/ etc / hostname
文件:
sudo nano /etc/hosts
在文件末尾添加以下行:
172.16.0.1 Node1 172.16.0.2 Node2
sudo nano /etc/hostname
如下所示更改文件:
Node2
完成后保存并关闭文件。
接下来,使用以下命令更新每个节点的最新版本:
sudo apt-get update -y
sudo apt-get upgrade -y
系统更新后,重新启动系统以应用这些更改。
安装DRBD和心跳
接下来,您需要在两个节点上安装DRBD和Heartbeat。 默认情况下,两者都可在Ubuntu 16.04默认存储库中使用。 只需在两个节点上运行以下命令即可安装它们:
sudo apt-get install drbd8-utils heartbeat -y
接下来,启动DRBD和Heartbeat服务并使其在启动时启动:
sudo systemctl start drbd
sudo systemctl start heartbeat
systemctl enable drbd
systemctl enable heartbeat
配置DRBD和心跳
接下来,您需要在每个节点上安装DRBD设备。 在每个节点上的第二个未分区驱动器/ dev / sdb
上创建一个分区。
您只需在每个节点上运行以下命令即可完成此操作:
sudo echo -e 'n\np\n1\n\n\nw' | fdisk /dev/sdb
接下来,您需要在两个节点上配置DRBD。 您可以通过在每个节点上创建/etc/drbd.d/r0.res
文件来完成此操作。
sudo nano /etc/drbd.d/r0.res
添加以下行:
global { usage-count no; } resource r0 { protocol C; startup { degr-wfc-timeout 60; } disk { } syncer { rate 100M; } net { cram-hmac-alg sha1; shared-secret "aBcDeF"; } on Node1 { device /dev/drbd0; disk /dev/sdb1; address 172.16.0.1:7789; meta-disk internal; } on Node2 { device /dev/drbd0; disk /dev/sdb1; address 172.16.0.2:7789; meta-disk internal; } }
完成后保存并关闭文件,然后在每个节点上打开另一个配置文件:
sudo nano /etc/ha.d/ha.cf
添加以下行:
# Check Interval keepalive 1 # Time before server declared dead deadtime 10 # Secondary wait delay at boot initdead 60 # Auto-failback auto_failback off # Heartbeat Interface bcast eth1 # Nodes to monitor node Node1 node Node2
保存并关闭文件。
接下来,在每个节点上打开资源文件/etc/ha.d/haresources
:
sudo nano /etc/ha.d/haresources
添加以下行:
Node1 192.168.0.103/24 drbddisk::r0 Filesystem::/dev/drbd0::/var/lib/mysql::ext4::noatime
这里, Node1
是主要活动节点的主机名, 192.168.0.103
是浮点IP地址, / var / lib / mysql
是挂载点, / dev / drbd0
是DRBD设备。
接下来,您将需要在两个节点上定义和存储相同的授权密钥。 您可以通过每个节点上的/etc/ha.d/authkeys
文件来完成此操作:
sudo nano /etc/ha.d/authkeys
添加以下行:
auth1 1 sha1 your-secure-password
在这里,你的安全密码是你的安全密码。 在两个节点上使用相同的密码。
接下来,通过在Node1上运行以下命令来创建并启动DRBD:
sudo drbdadm create-md r0
sudo systemctl restart drbd
sudo drbdadm outdate r0
sudo drbdadm -- --overwrite-data-of-peer primary all
sudo drbdadm primary r0
sudo mkfs.ext4 /dev/drbd0
sudo chmod 600 /etc/ha.d/authkeys
sudo mkdir /var/lib/mysql
在Node1上创建DRBD磁盘后,使用以下命令在Node2上创建DRBD磁盘:
sudo drbdadm create-md r0
sudo systemctl restart drbd
sudo chmod 600 /etc/ha.d/authkeys
sudo mkdir /var/lib/mysql
现在,您可以通过运行以下命令来验证DRBD磁盘已连接并正在同步:
sudo cat /proc/drbd
如果一切正常,您应该看到以下输出:
version: 8.4.5 (api:1/proto:86-101) srcversion: F446E16BFEBS8B115AJB14H 0: cs:SyncSource ro:Primary/Secondary ds:UpToDate/Inconsistent C r----- ns:210413 nr:0 dw:126413 dr:815311 al:35 bm:0 lo:0 pe:11 ua:0 ap:0 ep:1 wo:f oos:16233752 [>....................] sync'ed: 3.3% (14752/14350)M finish: 0:12:23 speed: 12,156 (16,932) K/sec
接下来,在两个节点上启动心跳,以启用安装的故障切换部分。
sudo systemctl start heartbeat
接下来,在Node1上使用以下命令验证已安装的DRBD分区:
sudo mount | grep drbd
您应该看到以下输出:
/dev/drbd0 on /var/lib/mysql type ext4 (rw,noatime,data=ordered)
接下来,使用以下命令验证浮动IP仅绑定到Node1:
sudo ip addr show | grep 192.168.0.103
您应该看到以下输出:
inet 192.168.0.103/24 brd 192.168.0.255 scope global secondary eth1:0
安装和配置MariaDB
一旦在两个节点上正确配置了所有内容,现在就可以在两个节点上安装MariaDB服务器了。
在两个节点上运行以下命令以安装MariaDB服务器:
sudo apt-get install mariadb-server -y
接下来,您需要在两个节点上禁用MariaDB服务:
sudo systemctl disable mysql
在这里,我们将使用Node1作为主节点,Node2上的数据库应该通过与Node1同步来创建和填充。 因此,您需要停止MariaDB服务并删除Node2上的/ var / lib / mysql
内的内容。 你可以用下面的命令来做到这一点:
sudo systemctl stop mysql
sudo rm -rf /var/lib/mysql/*
接下来,您需要将MySQL维护配置文件从Node1复制到Node2。 您可以通过运行以下命令来完成此操作:
sudo scp /etc/mysql/debian.cnf root@172.16.0.2:/etc/mysql/debian.cnf
接下来,您将需要创建一个root用户来远程管理和访问高可用性MySQL实例上的数据库。
您可以通过在Node1上运行以下命令来完成此操作:
mysql -u root -p
输入您的root密码,然后使用以下命令创建一个root用户:
MariaDB [(none)]> CREATE USER 'root'@'192.168.0.%' IDENTIFIED BY 'password';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.0..%' WITH GRANT OPTION;
MariaDB [(none)]> FLUSH PRIVILEGES;
MariaDB [(none)]> QUIT;
接下来,使用以下命令在两个节点上为MySQL设置绑定地址:
sudo sed -i 's/127.0.0.1/0.0.0.0/g' /etc/mysql/mariadb.conf.d/*.cnf
为MariaDB服务启动心跳
接下来,您需要在两个节点上的心跳实例中添加MariaDB服务。 你可以通过编辑/etc/ha.d/haresources文件来做到这一点:
sudo nano /etc/ha.d/haresources
修改以下几行:
Node1 192.168.0.103/24 drbddisk::r0 Filesystem::/dev/drbd0::/var/lib/mysql::ext4::noatime mysql
完成后保存并关闭文件。
一旦配置了心跳,您将需要在两个节点上重新启动它。
首先,在Node1上重新启动heartbea:
sudo systemctl restart heartbeat
接下来,等待50秒,然后重新启动Node2上的心跳服务:
sudo systemctl restart heartbeat
测试心跳和DRBD
现在,所有配置都正确,是时候执行一系列测试来验证活动服务器以某种方式失败时,心跳将实际上触发从活动服务器到被动服务器的传输。
首先,在Node1上使用以下命令验证Node1是主drbd节点:
sudo cat /proc/drbd
您应该看到以下输出:
version: 8.4.5 (api:1/proto:86-101) srcversion: F446E16BFEBS8B115AJB14H O cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r----- ns:22764644 nr:256 dw:529232 dr:22248299 al:111 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0
接下来,我们将验证DRBD磁盘是否使用以下命令进行挂载:
sudo mount | grep drbd
/dev/drbd0 on /var/lib/mysql type ext4 (rw,noatime,data=ordered)
接下来,使用以下命令验证MariaDB服务:
sudo systemctl status mysql
接下来,使用浮动IP从远程计算机访问MariaDB服务器并创建一个测试数据库:
mysql -h 192.168.0.103 -u root -p
MariaDB [(none)]> create database test;
MariaDB [(none)]> quit
接下来,在Node1上重新启动心跳:
sudo systemctl restart heartbeat
现在,心跳会将此重新启动解释为Node1上MariaDB的故障,并应触发故障转移以使Node2成为主服务器。
您可以检查DRBD是否正在使用Node1上的以下命令将Node1视为辅助服务器:
sudo cat /proc/drbd
您应该看到以下输出:
version: 8.4.5 (api:1/proto:86-101) srcversion: F446E16BFEBS8B115AJB14H 0: cs:Connected ro:Secondary/Primary ds:UpToDate/UpToDate C r----- ns:22764856 nr:388 dw:529576 dr:22248303 al:112 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0
现在,通过在Node2上运行以下命令来验证Node2是主drbd节点:
sudo cat /proc/drbd
您应该看到以下输出:
version: 8.4.5 (api:1/proto:86-101) srcversion: F446E16BFEBS8B115AJB14H 0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r----- ns:412 nr:20880892 dw:20881304 dr:11463 al:7 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0
接下来,检查以确保MariaDB在Node2上运行:
sudo systemctl status mysql
现在,使用Node2上的浮动IP从远程用户连接到MariaDB服务器。
mysql -h 192.168.0.103 -u root -p
接下来,查看我们之前创建的测试数据库,而Node1是主服务器。
MariaDB [(none)]> show databases;
您应该看到以下输出:
+--------------------+ | Database | +--------------------+ | test | | information_schema | | lost+found | | mysql | | performance_schema | +--------------------+ 5 rows in set (0.04 sec)