1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
| # vim /etc/drbd.conf 主配置文件# vim /etc/drbd.d/global_common.conf 全局和common的配置global { #全局配置 usage-count no; #这个为yes表示如果你本机可以连接互联网时drbd会通过互联网收集到你安装drbd的信息,官方统计说又多了一个人使用drbd实例,不用可以改为no # minor-count dialog-refresh disable-ip-verification}common { handlers { #处理器 # These are EXAMPLE handlers only. # They may have severe implications, # like hard resetting the node under certain circumstances. # Be careful when chosing your poison. pri-on-incon-degr "/usr/lib/drbd/notify-pri-on-incon-degr.sh; /usr/lib/drbd/notify-emergency-reboot.sh; echo b > /proc/sysrq-trigger ; reboot -f"; 定义了如果主节点降级了怎么处理的 pri-lost-after-sb "/usr/lib/drbd/notify-pri-lost-after-sb.sh; /usr/lib/drbd/notify-emergency-reboot.sh; echo b > /proc/sysrq-trigger ; reboot -f"; 这个定义了如果有脑裂了之后找不到主节点怎么处理的 local-io-error "/usr/lib/drbd/notify-io-error.sh; /usr/lib/drbd/notify-emergency-shutdown.sh; echo o > /proc/sysrq-trigger ; halt -f"; 定义了一旦本地节点发生IO错误时应该怎么处理 # fence-peer "/usr/lib/drbd/crm-fence-peer.sh"; # split-brain "/usr/lib/drbd/notify-split-brain.sh root"; # out-of-sync "/usr/lib/drbd/notify-out-of-sync.sh root"; # before-resync-target "/usr/lib/drbd/snapshot-resync-target-lvm.sh -p 15 -- -c 16k"; # after-resync-target /usr/lib/drbd/unsnapshot-resync-target-lvm.sh; } startup { 定义一个节点启动时另一个节点应该怎么做 # wfc-timeout(等待另一个节点上线的超时时长) # degr-wfc-timeout(等待超时后做降级处理) # outdated-wfc-timeout(过期的等待超时) # wait-after-sb(脑裂之后等待多长时长) } options { # cpu-mask on-no-data-accessible } disk { on-io-error detach; # size max-bio-bvecs on-io-error fencing disk-barrier disk-flushes # disk-drain md-flushes resync-rate resync-after al-extents # c-plan-ahead c-delay-target c-fill-target c-max-rate # c-min-rate disk-timeout } net { protocol C; cram-hmac-alg "sha1"; shared-secret "drbd.tanxw.com"; # protocol timeout max-epoch-size max-buffers unplug-watermark # connect-int ping-int sndbuf-size rcvbuf-size ko-count # allow-two-primaries cram-hmac-alg shared-secret after-sb-0pri # after-sb-1pri after-sb-2pri always-asbp rr-conflict # ping-timeout data-integrity-alg tcp-cork on-congestion # congestion-fill congestion-extents csums-alg verify-alg # use-rle } syncer { rate 1000M; }} |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
| [root@node2 drbd.d]# fdisk /dev/sdaWARNING: DOS-compatible mode is deprecated. It's strongly recommended to switch off the mode (command 'c') and change display units to sectors (command 'u').Command (m for help): pDisk /dev/sda: 85.9 GB, 85899345920 bytes255 heads, 63 sectors/track, 10443 cylindersUnits = cylinders of 16065 * 512 = 8225280 bytesSector size (logical/physical): 512 bytes / 512 bytesI/O size (minimum/optimal): 512 bytes / 512 bytesDisk identifier: 0x000e89e2 Device Boot Start End Blocks Id System/dev/sda1 * 1 26 204800 83 LinuxPartition 1 does not end on cylinder boundary./dev/sda2 26 7859 62914560 8e Linux LVM/dev/sda3 7859 9164 10489446 8e Linux LVMCommand (m for help): nCommand action e extended p primary partition (1-4)eSelected partition 4First cylinder (9165-10443, default 9165):Using default value 9165Last cylinder, +cylinders or +size{K,M,G} (9165-10443, default 10443):Using default value 10443Command (m for help): nFirst cylinder (9165-10443, default 9165):Using default value 9165Last cylinder, +cylinders or +size{K,M,G} (9165-10443, default 10443): +3GCommand (m for help): pDisk /dev/sda: 85.9 GB, 85899345920 bytes255 heads, 63 sectors/track, 10443 cylindersUnits = cylinders of 16065 * 512 = 8225280 bytesSector size (logical/physical): 512 bytes / 512 bytesI/O size (minimum/optimal): 512 bytes / 512 bytesDisk identifier: 0x000e89e2 Device Boot Start End Blocks Id System/dev/sda1 * 1 26 204800 83 LinuxPartition 1 does not end on cylinder boundary./dev/sda2 26 7859 62914560 8e Linux LVM/dev/sda3 7859 9164 10489446 8e Linux LVM/dev/sda4 9165 10443 10273567+ 5 Extended/dev/sda5 9165 9557 3156741 83 LinuxCommand (m for help): wThe partition table has been altered!Calling ioctl() to re-read partition table.WARNING: Re-reading the partition table failed with error 16: Device or resource busy.The kernel still uses the old table. The new table will be used atthe next reboot or after you run partprobe(8) or kpartx(8)Syncing disks.[root@node2 drbd.d]# kpartx -af /dev/sdadevice-mapper: reload ioctl on sda1 failed: Invalid argumentcreate/reload failed on sda1device-mapper: reload ioctl on sda2 failed: Invalid argumentcreate/reload failed on sda2device-mapper: reload ioctl on sda3 failed: Invalid argumentcreate/reload failed on sda3device-mapper: reload ioctl on sda4 failed: Invalid argumentcreate/reload failed on sda4device-mapper: reload ioctl on sda5 failed: Invalid argumentcreate/reload failed on sda5[root@node2 drbd.d]# partx -a /dev/sdaBLKPG: Device or resource busyerror adding partition 1BLKPG: Device or resource busyerror adding partition 2BLKPG: Device or resource busyerror adding partition 3[root@node2 drbd.d]# partx -a /dev/sdaBLKPG: Device or resource busyerror adding partition 1BLKPG: Device or resource busyerror adding partition 2BLKPG: Device or resource busyerror adding partition 3BLKPG: Device or resource busyerror adding partition 4BLKPG: Device or resource busyerror adding partition 5[root@node2 drbd.d]# |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| # cd /etc/drbd.d/# vim mystore.resresource mystore { #定义一个资源,用关键字resource; on node1.tanxw.com { #on说明在哪个节点上,跟uname -n保持一致,有多少个节点就定义多少个; device /dev/drbd0; #在磁盘上表现的drbd叫什么名; disk /dev/sda5; #所使用的磁盘设备是哪个; address 172.16.27.1:7789; #在node1这个节点上监听的套接字,默认监听在7789端口上; meta-disk internal; #保存drbd元数据信息的,表示就放在自己的磁盘区分上,也可以放在外部的磁盘上; } on node2.tanxw.com { device /dev/drbd0; disk /dev/sda5; address 172.16.27.2:7789; meta-disk internal; }} |
1
2
3
4
5
6
| # scp global_common.conf mystore.res node2.tanxw.com:/etc/drbd.d/# drdbadm create-md mystore 在各自的节点上初始化资源# server drbd start 启动drbd# watch -n 1 'cat /proc/drbd' 实现查看磁盘信息# drbdadm primary --force mystore 在节点上把其中一个提升为主的# watch -n 1 'cat /proc/drbd' 提升为主的之后再实现查看磁盘信息 |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| # mke2fs -t ext4 /dev/drbd0 格式化drbd0# mkdir /drbd 创建一个测试目录# mount /dev/drbd0 /drbd 把创建好的drbd目录挂载到/dev/drbd0上# cd /drbd # cp /etc/fstab . 复制一个文件过来# vim fstab 编辑这个文件,在里面随便修改修改# cd# umount /dev/drbd0 卸载刚编辑的这个节点上的drbd0设备# drbdadm secondary mystore 降级这个节点切换到另一个节点上:# drbdadm primary mystore 提升为主的# mkdir /drbd 创建目录用来挂载# mount /dev/drbd0 /drbd 挂载# cd /drbd# vim /fstab 再查看刚才编辑的这个文件,内容被修改了 |
1
2
3
4
5
| # cd# umount /dev/drbd0# drbdadm secondary mystore 哪个是主的就在哪相节点上降级# service drbd stop 两个节点都需要停止服务# chkconfig drbd off |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
| # yum -y install corosync pacemaker# yum -y install crmsh pssh# cp /etc/corosync.conf.example /etc/corosync/corosync.conf# vim /etc/corosync/corosync.confcompatibility: whitetanktotem { version: 2 secauth: on threads: 0 interface { ringnumber: 0 bindnetaddr: 172.16.0.0 mcastaddr: 226.98.188.188 mcastport: 5405 ttl: 1 }}logging { fileline: off to_stderr: no to_logfile: yes to_syslog: no logfile: /var/log/cluster/corosync.log debug: off timestamp: on logger_subsys { subsys: AMF debug: off }}amf { mode: disabled}service { name: pacemaker ver: 0}aisexce { user: root group: root}# mv /dev/random /dev/m# ln /dev/urandom /dev/random 如果这把这个随机数墒池改了可以会产生随机数不够用,这个就要敲击键盘给这个墒池一些随机数;生成完这个key后把链接删除,再把墒池改回来;不过这样改可以会有点为安全,不过做测试的应该不要紧;# corosync-keygen# rm -rf /dev/random# mv /dev/m /dev/random再把改好的配置复制一份到别一个节点上去,也保留一份给另一个节点:# scp -p authkey corosync.conf node2.tanxw.com:/etc/corosync/ |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
| # crm# configure# property stonith-enabled=false# property no-quorum-policy=ignore# rsc_defaults resource-stickiness=100# verify# commit# show# meta ocf:linbit:drbd 查看drbd的详细信息# 定义资源,切换到configure中,mysqlstore定义资源名,drbd_resource=mystore这个是drbd名,后面定义的都是一些监控# primitive mysqlstore ocf:linbit:drbd params drbd_resource=mystore op monitor role=Master interval=30s timeout=20s op monitor role=Slave interval=60s timeout=20s op start timeout=240s op stop timeout=100s# verify 检查语法# 定义主资源# master ms_mysqlstore mysqlstore meta master-max=1 master-node-max=1 clone-max=2 clone-node-max=1 notify=”True”# verify#commit定义共享文件的资源,并且让服务器切换时可以自动挂载,device=/dev/drbd0挂载的设备,directory=/drbd挂载点,两个挂载点的文件名要一致:# primitive mysqlfs ocf:heartbeat:Filesystem params device=/dev/drbd0 directory=/drbd fstype=ext4 op monitor interval=30s timeout=40s on-fail-restart op start timeout=60s op stop timeout=60s# verify定义排列约束:# collocation mysqlfs_with_ms_mysqlstore_master inf: mysqlfs ms_mysqlstore:Master# verify定义顺序约束:# order mysqlfs_after_ms_mysqlstore_master mandatory: ms_mysqlstore:promote mysqlfs:start# show# commit |
1
2
3
4
| crm(live)# node standby node2.tanxw.com 把node2提升为备用的crm(live)# node noline node2.tanxw.com 让node2上线crm(live)# node standby node1.tanxw.com 把node1提升为备用的crm(live)# node noline node1.tanxw.com 让node1上线,都可以随意切换一下再检测一下挂载的效果的; |
没有评论:
发表评论