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/sda WARNING: 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): p Disk /dev/sda : 85.9 GB, 85899345920 bytes 255 heads, 63 sectors /track , 10443 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Sector size (logical /physical ): 512 bytes / 512 bytes I /O size (minimum /optimal ): 512 bytes / 512 bytes Disk identifier: 0x000e89e2 Device Boot Start End Blocks Id System /dev/sda1 * 1 26 204800 83 Linux Partition 1 does not end on cylinder boundary. /dev/sda2 26 7859 62914560 8e Linux LVM /dev/sda3 7859 9164 10489446 8e Linux LVM Command (m for help): n Command action e extended p primary partition (1-4) e Selected partition 4 First cylinder (9165-10443, default 9165): Using default value 9165 Last cylinder, +cylinders or +size{K,M,G} (9165-10443, default 10443): Using default value 10443 Command (m for help): n First cylinder (9165-10443, default 9165): Using default value 9165 Last cylinder, +cylinders or +size{K,M,G} (9165-10443, default 10443): +3G Command (m for help): p Disk /dev/sda : 85.9 GB, 85899345920 bytes 255 heads, 63 sectors /track , 10443 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Sector size (logical /physical ): 512 bytes / 512 bytes I /O size (minimum /optimal ): 512 bytes / 512 bytes Disk identifier: 0x000e89e2 Device Boot Start End Blocks Id System /dev/sda1 * 1 26 204800 83 Linux Partition 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 Linux Command (m for help): w The 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 at the next reboot or after you run partprobe(8) or kpartx(8) Syncing disks. [root@node2 drbd.d] # kpartx -af /dev/sda device-mapper: reload ioctl on sda1 failed: Invalid argument create /reload failed on sda1 device-mapper: reload ioctl on sda2 failed: Invalid argument create /reload failed on sda2 device-mapper: reload ioctl on sda3 failed: Invalid argument create /reload failed on sda3 device-mapper: reload ioctl on sda4 failed: Invalid argument create /reload failed on sda4 device-mapper: reload ioctl on sda5 failed: Invalid argument create /reload failed on sda5 [root@node2 drbd.d] # partx -a /dev/sda BLKPG: Device or resource busy error adding partition 1 BLKPG: Device or resource busy error adding partition 2 BLKPG: Device or resource busy error adding partition 3 [root@node2 drbd.d] # partx -a /dev/sda BLKPG: Device or resource busy error adding partition 1 BLKPG: Device or resource busy error adding partition 2 BLKPG: Device or resource busy error adding partition 3 BLKPG: Device or resource busy error adding partition 4 BLKPG: Device or resource busy error 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.res resource 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.conf compatibility: whitetank totem { 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上线,都可以随意切换一下再检测一下挂载的效果的; |
没有评论:
发表评论