CentOS7.x离线搭建DRBD与Mysql高可用
部署环境:
CentOS7.4
前提:需要两台机器建立ssh互信和防火墙关闭,同时ntp同步
1.准备两台虚拟机
样例:
192.168.5.1
192.168.5.2
ssh互信:
生成key
在主节点执行如下命令:
#cd ~
#ssh-keygen -t rsa
#cd .ssh
#cat *.pub > authorized_keys
在另一个节点执行:
#cd ~
#ssh-keygen -t rsa
#cd .ssh
把所有key中的.pub内容,汇总到authorized_keys,然后复制到每个节点的/root/.ssh/目录下:
样例:
scp /root/.ssh/authorized_keys 192.168.5.2:/root/.ssh
关闭防火墙
sudo systemctl stop firewalld.service
sudo systemctl disable firewalld.service
ntp服务
A. 在1号机上安装ntp server
yum install ntp -y #安装ntp
systemctl enable ntpd #配置开机自启动
systemctl start ntpd #启动ntp
B.修改 /etc/ntp.conf
例:
restrict 192.168.5.1 mask 255.255.255.0 nomodify notrap
server 127.127.1.0 iburst
fudge 127.127.1.0 stratum 8
logfile /var/log/ntp.log
重启ntp: 执行 service ntpd restart
C.在2号机上安装ntp服务
yum install ntp -y #安装ntp
systemctl enable ntpd #配置开机自启动
systemctl start ntpd #启动ntp
修改内容
部署/etc/ntp.conf, 文件内容如下
例:
restrict 192.168.5.0 mask 255.255.255.0 nomodify notrap
server 192.168.5.1 iburst
includefile /etc/ntp/crypto/pw
keys /etc/ntp/keys
#同步ntp
ntpdate -q 10.96.140.206
ntpdate -d 10.96.140.206
#重启服务:
service ntpd restart
添加cronjob 每1小时运行一次 ntpdate -q 192.168.5.1
systemctl is-enabled crond.service
crontab -e
* */1 * * * ntpdate -q
2.安装drbd所需要的两个主要rpm
包名参考:
drbd84-utils-8.4.4-1.el7.elrepo.x86_64.rpm
kmod-drbd84-8.4.4-1.el7.elrepo.x86_64.rpm
3.修改配置文件(推荐不修改,直接使用)
[root@]# cat /etc/drbd.d/global_common.conf
按需修改,小白则不需要修改,直接跳过即可.
5.在1.2号机创建配置文件 /etc/drbd.d/mysql.res
样本说明:
resource mysql { #资源名称
protocol C; #使用协议
meta-disk internal;
device /dev/drbd1; #DRBD设备名称
syncer {
verify-alg sha1;# 加密算法
}
net {
allow-two-primaries;
}
on node1 { # node1是主机名,需要根据实际主机名调整
disk /dev/data/mysql; drbd1使用的磁盘分区为"mysql"
address 192.168.8.51:7789; #设置DRBD监听地址与端口
}
on node2 { # node2是主机名,需要根据实际主机名调整
disk /dev/data/mysql;
address 192.168.8.52:7789;
}
}
参考示例:
resource mysql {
protocol C;
meta-disk internal;
device /dev/drbd1;
syncer {
verify-alg sha1;
}
net {
allow-two-primaries;
}
on master {
disk /dev/data/mysql;
address 192.168.5.1:7789;
}
on slaver {
disk /dev/data/mysql;
address 192.168.5.2:7789;
}
}
6.将配置好的文件从1号机复制到2号机:
scp /etc/drbd.d/* 主机名:/etc/drbd.d/
7.创建分区—1和2号机都要执行
pvcreate /dev/sdb1
vgcreate data /dev/sdb1
lvcreate -L 10G -n mysql data
(另一参考例子:lvcreate -l 100%free -n mysql data )
(如果没有激活,执行vgchange -a -y data)
drbdadm create-md mysql
modprobe drbd
drbdadm up mysql
查看内核是否已加载了模块:
[root@centosa ~]# lsmod | grep drbd
drbd 396875 0
libcrc32c 12644 2 xfs,drbd
查看状态:
[root@centosa ~]# cat /proc/drbd
version: 8.4.10-1 (api:1/proto:86-101)
GIT-hash:a4d5de01fffd7e4cde48a080e2c686f9e8cebf4c build by mockbuild@, 2017-09-1514:23:22
1:cs:WFConnection ro:Primary/Unknown ds:UpToDate/DUnknown C r----s
ns:0 nr:0 dw:0 dr:912 al:8 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:foos:2096028
1号机执行
drbdadm primary mysql
2号机执行
drbdadm secondary mysql
注:如果重启过主机,各节点需要在开机完毕后手动启动drbd
modprobe drbd
drbdadm up mysql
主节点执行格式化设备并挂载到数据库的data目录
mkfs.xfs /dev/drbd1
mkdir /var/lib/mysql
mount /dev/drbd1 /var/lib/mysql
主备数据库自动切换脚本
自己可以通过vi保存到文件目录当中,进行主备切换可直接执行
vi /root/changeMysql.sh
记得赋予执行权限
#!/bin/bash
case $1 in
master)
modprobe drbd || echo drbd error && exit 1
drbdadm up mysql || echo drbd error && exit 1
drbdadm primary mysql || echo drbd error && exit 1
mount /dev/drbd1 /var/lib/mysql/ || echo mount error && exit 1
systemctl start mysql || echo mysql error && exit 1
;;
slave)
modprobe drbd || echo drbd error && exit 1
drbdadm up mysql || echo drbd error && exit 1
systemctl stop mysql 2> /dev/null
sleep 1
umount /var/lib/mysql/ 2> /dev/null
drbdadm secondary mysql || echo drbd error && exit 1
;;
esac
执行示范:
去到脚本保存的目录下:
把备用节点切换为主节点
./changeMysql.sh master
把主节点切换为备用节点
./changeMysql.sh slave