标签:linux 、corosync、pacemaker、mysql、drbd
大纲
一、什么是DRBD
二、DRBD工作原理
三、DRBD相关概念
四、DRBD配置过程
五、Corosync + Pacemaker + DRBD + MySQL实现
一、什么是DRBD
Distributed Replicated Block Device(DRBD)是一个基于软件的、无共享、复制的存储解决方案,在服务器之间的对块设备(硬盘、分区、逻辑卷等)进行镜像。
DRBD镜像数据
实时性:当应用对磁盘的数据进行修改时,复制立即发生
透明性:应用程序的数据存储在镜像设备上是独立和透明的,数据可存储在不同的服务器上
同步镜像和异步镜像:同步镜像,当本地发申请进行写操作进行时,同步写到两台服务器上。异步镜像,当本地写申请已经完成对本地的写操作时,开始对对应的服务器进行写操作
二、DRBD工作原理
DRBD‘s position within the Linux I/O stack
三、DRBD相关概念
1、复制模式
单主模式
在单主模式下, 任何资源在任何特定的时间,集群中只存在一个主节点。 正是因为这样在集群中只能有一个节点可以随时操作数据,这种模式可用在任何的文件系统上( EXT3、 EXT4、 XFS等等)
双主模式
在双主模式下,任何资源在任何特定的时间,集群中都存在两个主节点。犹豫双方数据存在并发的可能性,这种模式需要一个共享的集群文件系统,利用分布式的锁机制进行管理,如 GFS 和OCFS2。部署双主模式时, DRBD 是负载均衡的集群,这就需要从两个并发的主节点中选取一个首选的访问数据。这种模式默认是禁用的,如果要是用的话必须在配置文件中进行声明。(DRBD8.0 之后支持)
2、复制协议
协议A
异步复制协议。一旦本地磁盘写入已经完成,数据包已在发送队列中,则写被认为是完成的。在一个节点发生故障时,可能发生数据丢失,因为被写入到远程节点上的数据可能仍在发送队列。尽管,在故障转移节点上的数据是一致的,但没有及时更新。这通常是用于地理上分开的节点
协议B
内存同步(半同步)复制协议。一旦本地磁盘写入已完成且复制数据包达到了对等节点则认为写在主节点上被认为是完成的。数据丢失可能发生在参加的两个节点同时故障的情况下,因为在传输中的数据可能不会被提交到磁盘
协议C
同步复制协议。只有在本地和远程节点的磁盘已经确认了写操作完成,写才被认为完成。没有任何数据丢失,所以这是一个群集节点的流行模式,但I / O吞吐量依赖于网络带宽
一般使用协议C,但选择C协议将影响流量,从而影响网络时延。为了数据可靠性,我们在生产环境使用时须慎重选项使用哪一种协议
简而言之:
A:数据一旦写入磁盘并发送到本地TCP/IP协议栈,就认为完成了写入操作
B:数据一旦到达对等节点的TCP/IP协议栈,即收到接受确认就认为完成了写入操作
C:数据一旦到达对等节点的磁盘,即收到写入确认就认为完成了写入操作
协议A性能最好,C数据可靠性最高
3、DRBD资源
DRBD主要是对磁盘资源的管控,因此在DRBD模块中,资源是所有可复制移动存储设备的总称。
资源名(Resource name):资源名可以指定除了空格外 us-ascii 中的任意字符。
DRBD 设备(DRBD device):DRBD 的虚拟块设备。它有一个主设备号为 147 的设备,默认的它的次要号码编从 0 开始。相关的块设备需命名为/ dev/ drbdm,其中 M 是设备的次要号码。
磁盘配置(Disk configuration):DRBD 内部应用需要本地数据副本,元数据。
网络配置(Network configuration):各个对等接点间需要进行数据通信。
4、资源角色
在DRBD中,每个节点都有自己的角色,比如主或者备
主:在主 DRBD 设备中可以进行不受限制的读和写的操作。他可用来创建和挂载文件系统、初始化或者是直接 I/O 的快设备,等等。
备:在备DRBD设备中,接受所有来自对等节点的更新,但是与此同时也就完全决绝了访问。它既不能被应用也不能被读写访问。备节点不能被读写访问时为了保持缓冲一致性,这就意味着备节点是不可能以任何形式被访问的。
人工干预和管理程序的自动聚类算法都可以改变资源的角色。资源从备节点变为主节点为升级,而反操作为降级
简而言之:主节点可执行读写操作,备节点不能被挂载,即不能写,也不能读
四、DRBD配置过程
系统环境
CentOS5.8 x86_64
node1.network.com node1 172.16.1.101
node2.network.com node2 172.16.1.105
软件版本
drbd83-8.3.15-2.el5.centos.x86_64.rpm
kmod-drbd83-8.3.15-3.el5.centos.x86_64.rpm
注意:两个软件包的版本必须保持一致
1、准备工作
(1)、时间同步
[root@node1 ~]# ntpdate s2c.time.edu.cn [root@node2 ~]# ntpdate s2c.time.edu.cn 可根据需要在每个节点上定义crontab任务 [root@node1 ~]# which ntpdate /sbin/ntpdate [root@node1 ~]# echo "*/5 * * * * /sbin/ntpdate s2c.time.edu.cn &> /dev/null" >> /var/spool/cron/root [root@node1 ~]# crontab -l */5 * * * * /sbin/ntpdate s2c.time.edu.cn &> /dev/null
(2)、主机名称要与uname -n,并通过/etc/hosts解析
node1 [root@node1 ~]# sed -i ‘s@\(HOSTNAME=\).*@\1node1.network.com@g‘ /etc/sysconfig/network [root@node1 ~]# hostname node1.network.com [root@node1 ~]# uname -n node1.network.com node2 [root@node2 ~]# sed -i ‘s@\(HOSTNAME=\).*@\1node2.network.com@g‘ /etc/sysconfig/network [root@node2 ~]# hostname node2.network.com [root@node2 ~]# uname -n node2.network.com node1添加hosts解析 [root@node1 ~]# vim /etc/hosts [root@node1 ~]# cat /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 172.16.1.101 node1.network.com node1 172.16.1.105 node2.network.com node2 拷贝此hosts文件至node2 [root@node1 ~]# vim /etc/hosts [root@node1 ~]# cat /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 172.16.1.101 node1.network.com node1 172.16.1.105 node2.network.com node2 [root@node1 ~]# scp /etc/hosts node2:/etc/ The authenticity of host ‘node2 (172.16.1.105)‘ can‘t be established. RSA key fingerprint is 13:42:92:7b:ff:61:d8:f3:7c:97:5f:22:f6:71:b3:24. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added ‘node2,172.16.1.105‘ (RSA) to the list of known hosts. root@node2‘s password: hosts 100% 233 0.2KB/s 00:00
(3)、ssh互信通信
node1 [root@node1 ~]# ssh-keygen -t rsa -f ~/.ssh/id_rsa -P ‘‘ Generating public/private rsa key pair. /root/.ssh/id_rsa already exists. Overwrite (y/n)? n # 我这里已经生成过了 [root@node1 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub node2 root@node2‘s password: Now try logging into the machine, with "ssh ‘node2‘", and check in: .ssh/authorized_keys to make sure we haven‘t added extra keys that you weren‘t expecting. [root@node1 ~]# setenforce 0 [root@node1 ~]# ssh node2 ‘ifconfig‘ eth0 Link encap:Ethernet HWaddr 00:0C:29:D6:03:52 inet addr:172.16.1.105 Bcast:255.255.255.255 Mask:255.255.255.0 inet6 addr: fe80::20c:29ff:fed6:352/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:9881 errors:0 dropped:0 overruns:0 frame:0 TX packets:11220 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:5898514 (5.6 MiB) TX bytes:1850217 (1.7 MiB) lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:16 errors:0 dropped:0 overruns:0 frame:0 TX packets:16 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:1112 (1.0 KiB) TX bytes:1112 (1.0 KiB) 同理node2也需要做同样的双击互信,一样的操作,此处不再演示
(4)、关闭iptables和selinux
node1
[root@node1 ~]# service iptables stop [root@node1 ~]# vim /etc/sysconfig/selinux [root@node1 ~]# cat /etc/sysconfig/selinux # This file controls the state of SELinux on the system. # SELINUX= can take one of these three values: # enforcing - SELinux security policy is enforced. # permissive - SELinux prints warnings instead of enforcing. # disabled - SELinux is fully disabled. #SELINUX=permissive SELINUX=disabled # SELINUXTYPE= type of policy in use. Possible values are: # targeted - Only targeted network daemons are protected. # strict - Full SELinux protection. SELINUXTYPE=targeted
node2
[root@node2 ~]# service iptables stop [root@node2 ~]# vim /etc/sysconfig/selinux [root@node2 ~]# cat /etc/sysconfig/selinux # This file controls the state of SELinux on the system. # SELINUX= can take one of these three values: # enforcing - SELinux security policy is enforced. # permissive - SELinux prints warnings instead of enforcing. # disabled - SELinux is fully disabled. #SELINUX=permissive SELINUX=disabled # SELINUXTYPE= type of policy in use. Possible values are: # targeted - Only targeted network daemons are protected. # strict - Full SELinux protection. SELINUXTYPE=targeted
(5)、配置163源(也可以自行下载两个软件包,我这里直接使用yum源)
node1
[root@node1 ~]# wget http://mirrors.163.com/.help/CentOS5-Base-163.repo [root@node1 ~]# yum repolist Loaded plugins: fastestmirror, security Loading mirror speeds from cached hostfile * epel: mirrors.hustunique.com repo id repo name status addons CentOS-5 - Addons - 163.com 0 base CentOS-5 - Base - 163.com 3,667 epel Extra Packages for Enterprise Linux 5 - x86_64 6,755 extras CentOS-5 - Extras - 163.com 266 updates CentOS-5 - Updates - 163.com 593 repolist: 11,281
node2
[root@node2 ~]# wget http://mirrors.163.com/.help/CentOS5-Base-163.repo [root@node1 ~]# yum repolist Loaded plugins: fastestmirror, security Loading mirror speeds from cached hostfile * epel: mirrors.hustunique.com repo id repo name status addons CentOS-5 - Addons - 163.com 0 base CentOS-5 - Base - 163.com 3,667 epel Extra Packages for Enterprise Linux 5 - x86_64 6,755 extras CentOS-5 - Extras - 163.com 266 updates CentOS-5 - Updates - 163.com 593 repolist: 11,281
2、安装drbd与kmod-drbd
node1 [root@node1 ~]# yum install -y drbd83 kmod-drbd83 node2 [root@node2 ~]# yum install -y drbd83 kmod-drbd83
本文出自 “Hello,Linux” 博客,请务必保留此出处http://soysauce93.blog.51cto.com/7589461/1733226
Linux HA集群之 Corosync + Pacemaker + drbd + MySQL
标签:linux 、corosync、pacemaker、mysql、drbd
原文地址:http://soysauce93.blog.51cto.com/7589461/1733226