使用drbd前 升级内核

yum install kernel*

重启

4.1、准备: 
两个节点ha-node1和ha-node2均按照centos7.0系统,每个节点两块磁盘,一块用作根分区一块用作drbd

192.168.8.51 ha-node1
192.168.8.52 ha-node2

修改主机名: 
节点1

# hostnamectl set-hostname ha-node1
# su -l

节点2

# hostnamectl set-hostname ha-node2
# su -l

4.2、磁盘分区如下

[root@ha-node2 corosync]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 500M 0 part /boot
└─sda2 8:2 0 19.5G 0 part
├─centos-swap 253:0 0 2G 0 lvm [SWAP]
└─centos-root 253:1 0 17.5G 0 lvm /
sdb 8:16 0 20G 0 disk
sr0 11:0 1 1024M 0 rom
[root@ha-node1 corosync]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 500M 0 part /boot
└─sda2 8:2 0 19.5G 0 part
├─centos-swap 253:0 0 2G 0 lvm [SWAP]
└─centos-root 253:1 0 17.5G 0 lvm /
sdb 8:16 0 20G 0 disk
sr0 11:0 1 1024M 0 rom

4.3、创建lvm(每个节点都需执行)

# pvcreate /dev/sdb
# vgcreate data /dev/sdb
# lvcreate --size 2G --name mysql data

4.4、关闭防火墙(每个节点都需执行)

setenforce 0
sed -i.bak "s/SELINUX=enforcing/SELINUX=permissive/g" /etc/selinux/config
systemctl disable firewalld.service
systemctl stop firewalld.service
iptables --flush

4.5、配置hosts文件

echo '192.168.8.51 ha-node1 ' >>/etc/hosts
echo '192.168.8.52 ha-node2 ' >>/etc/hosts

4.6、配置ntp(10.239.44.128为ntp服务器)每个节点都需执行

# chkconfig chronyd off
# chkconfig ntpd on
# sed -i "/^server\ 3.centos.pool/a server\ 10.239.44.128 " /etc/ntp.conf
# service ntpd start
# ntpq -p

4.6、配置互信(每个节点都需执行)

# ssh-keygen -t dsa -f ~/.ssh/id_dsa -N ""
# ssh-copy-id ha-node1
# ssh-copy-id ha-node2

4.7、安装drbd

# rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
# rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm
# yum install -y kmod-drbd84 drbd84-utils

4.8、配置文件介绍 
/etc/drbd.conf #主配置文件 
/etc/drbd.d/global_common.conf #全局配置文件 
a、/etc/drbd.conf说明 
主配置文件中包含了全局配置文件及”drbd.d/”目录下以.res结尾的文件

# You can find an example in  /usr/share/doc/drbd.../drbd.conf.example
include "drbd.d/global_common.conf";
include "drbd.d/*.res";

b、/etc/drbd.d/global_common.conf说明

global {
usage-count no; #是否参加DRBD使用统计,默认为yes。官方统计drbd的装机量
# minor-count dialog-refresh disable-ip-verification
}
common {
protocol C; #使用DRBD的同步协议
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";
# 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; #配置I/O错误处理策略为分离
# 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 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 1024M; #设置主备节点同步时的网络速率
}
}

注释: on-io-error 策略可能为以下选项之一 
detach 分离:这是默认和推荐的选项,如果在节点上发生底层的硬盘I/O错误,它会将设备运行在Diskless无盘模式下 
pass_on:DRBD会将I/O错误报告到上层,在主节点上,它会将其报告给挂载的文件系统,但是在此节点上就往往忽略(因此此节点上没有可以报告的上层) 
-local-in-error:调用本地磁盘I/O处理程序定义的命令;这需要有相应的local-io-error调用的资源处理程序处理错误的命令;这就给管理员有足够自由的权力命令命令或是脚本调用local-io-error处理I/O错误 
定义一个资源 
c、创建/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 ha-node1 {
disk /dev/data/mysql; drbd1使用的磁盘分区为"mysql"
address 192.168.8.51:7789; #设置DRBD监听地址与端口
}
on ha-node2 {
disk /dev/data/mysql;
address 192.168.8.52:7789;
}
}

4.9、将配置文件拷贝到node2上

# scp -rp  /etc/drbd.d/* ha-node2:/etc/drbd.d/
  • 1

4.10、启用drbd

# drbdadm create-md mysql
# modprobe drbd
# drbdadm up mysql
# drbdadm -- --force primary mysql

查看状态

# cat /proc/drbd 

4.11、配置对端节点

ssh ha-node2 “drbdadm create-md mysql”
ssh ha-node2 “modprobe drbd”
ssh ha-node2 “drbdadm up mysql”

4.12、格式化设备并挂载

# mkfs.xfs /dev/drbd1
# mount /dev/drbd1 /mnt

五、相关配置操作 
6.1、资源的连接状态详细介绍 
如何查看资源连接状态?

[root@ha-node1 ~]# drbdadm cstate mysql  #mysql为资源名称
WFConnection

资源的连接状态;一个资源可能有以下连接状态中的一种 
StandAlone 独立的:网络配置不可用;资源还没有被连接或是被管理断开(使用 drbdadm disconnect 命令),或是由于出现认证失败或是脑裂的情况 
Disconnecting 断开:断开只是临时状态,下一个状态是StandAlone独立的 
Unconnected 悬空:是尝试连接前的临时状态,可能下一个状态为WFconnection和WFReportParams 
Timeout 超时:与对等节点连接超时,也是临时状态,下一个状态为Unconected悬空 
BrokerPipe:与对等节点连接丢失,也是临时状态,下一个状态为Unconected悬空 
NetworkFailure:与对等节点推动连接后的临时状态,下一个状态为Unconected悬空 
ProtocolError:与对等节点推动连接后的临时状态,下一个状态为Unconected悬空 
TearDown 拆解:临时状态,对等节点关闭,下一个状态为Unconected悬空 
WFConnection:等待和对等节点建立网络连接 
WFReportParams:已经建立TCP连接,本节点等待从对等节点传来的第一个网络包 
Connected 连接:DRBD已经建立连接,数据镜像现在可用,节点处于正常状态 
StartingSyncS:完全同步,有管理员发起的刚刚开始同步,未来可能的状态为SyncSource或PausedSyncS 
StartingSyncT:完全同步,有管理员发起的刚刚开始同步,下一状态为WFSyncUUID 
WFBitMapS:部分同步刚刚开始,下一步可能的状态为SyncSource或PausedSyncS 
WFBitMapT:部分同步刚刚开始,下一步可能的状态为WFSyncUUID 
WFSyncUUID:同步即将开始,下一步可能的状态为SyncTarget或PausedSyncT 
SyncSource:以本节点为同步源的同步正在进行 
SyncTarget:以本节点为同步目标的同步正在进行 
PausedSyncS:以本地节点是一个持续同步的源,但是目前同步已经暂停,可能是因为另外一个同步正在进行或是使用命令(drbdadm pause-sync)暂停了同步 
PausedSyncT:以本地节点为持续同步的目标,但是目前同步已经暂停,这可以是因为另外一个同步正在进行或是使用命令(drbdadm pause-sync)暂停了同步 
VerifyS:以本地节点为验证源的线上设备验证正在执行 
VerifyT:以本地节点为验证目标的线上设备验证正在执行 
5.2、资源角色 
查看资源角色命令

[root@ha-node ~]# drbdadm role  mysql
Secondary/Secondary
[root@ha-node1ha-node1 ~]# cat /proc/drbd
version: 8.4.3 (api:1/proto:86-101)
GIT-hash: 89a294209144b68adb3ee85a73221f964d3ee515 build by gardner@, 2013-05-27 04:30:21
0: cs:Connected ro:Secondary/Secondary ds:Inconsistent/Inconsistent C r-----
ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:2103412

注释: 
Parimary 主:资源目前为主,并且可能正在被读取或写入,如果不是双主只会出现在两个节点中的其中一个节点上 
Secondary 次:资源目前为次,正常接收对等节点的更新 
Unknown 未知:资源角色目前未知,本地的资源不会出现这种状态 
5.3、硬盘状态 
查看硬盘状态命令

[root@ha-node1ha-node1 ~]# drbdadm dstate mysql
Inconsistent/Inconsistent

本地和对等节点的硬盘有可能为下列状态之一: 
Diskless 无盘:本地没有块设备分配给DRBD使用,这表示没有可用的设备,或者使用drbdadm命令手工分离或是底层的I/O错误导致自动分离 
Attaching:读取无数据时候的瞬间状态 
Failed 失败:本地块设备报告I/O错误的下一个状态,其下一个状态为Diskless无盘 
Negotiating:在已经连接的DRBD设置进行Attach读取无数据前的瞬间状态 
Inconsistent:数据是不一致的,在两个节点上(初始的完全同步前)这种状态出现后立即创建一个新的资源。此外,在同步期间(同步目标)在一个节点上出现这种状态 
Outdated:数据资源是一致的,但是已经过时 
DUnknown:当对等节点网络连接不可用时出现这种状态 
Consistent:一个没有连接的节点数据一致,当建立连接时,它决定数据是UpToDate或是Outdated 
UpToDate:一致的最新的数据状态,这个状态为正常状态 
5.4、启用和禁用资源 
手动启用资源

手动启用资源
drbdadm up <resource>
手动禁用资源
drbdadm down <resource>

注释: 
resource:为资源名称;当然也可以使用all表示[停用|启用]所有资源 
5.5、升级和降级资源

升级资源
drbdadm primary <resource>
降级资源
drbdadm secondary <resource>

注释:在单主模式下的DRBD,两个节点同时处于连接状态,任何一个节点都可以在特定的时间内变成主;但两个节点中只能一为主,如果已经有一个主,需先降级才可能升级;在双主模式下没有这个限制 
5.6、初始化设备同步 
选择一个初始同步源;如果是新初始化的或是空盘,这个选择可以是任意的,但是如果其中的一个节点已经在使用并包含有用的数据,那么选择同步源是至关重要的;如果选错了初始化同步方向,就会造成数据丢失,因此需要十分小心 
启动初始化完全同步,这一步只能在初始化资源配置的一个节点上进行,并作为同步源选择的节点上;命令如下:

[root@ha-node1 ~]# drbdadm -- --overwrite-data-of-peer primary mysql
[root@ha-node1 ~]# cat /proc/drbd #查看同步进度
version: 8.4.3 (api:1/proto:86-101)
GIT-hash: 89a294209144b68adb3ee85a73221f964d3ee515 build by gardner@, 2013-05-27 04:30:21
0: cs:SyncSource ro:Primary/Secondary ds:UpToDate/Inconsistent C r---n-
ns:1897624 nr:0 dw:0 dr:1901216 al:0 bm:115 lo:0 pe:3 ua:3 ap:0 ep:1 wo:f oos:207988
[=================>..] synced: 90.3% (207988/2103412)K
finish: 0:00:07 speed: 26,792 (27,076) K/sec
######当同步完成时如以下状态
version: 8.4.3 (api:1/proto:86-101)
GIT-hash: 89a294209144b68adb3ee85a73221f964d3ee515 build by gardner@, 2013-05-27 04:30:21
0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r-----
ns:2103412 nr:0 dw:0 dr:2104084 al:0 bm:129 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0

注释: drbd:为资源名称 
查看同步进度也可使用以下命令

drbd-overview

5.7、创建文件系统 
文件系统只能挂载在主(Primary)节点上,因此在设置好主节点后才可以对DRBD设备进行格式化操作 
格式化文件系统

[root@ha-node1 ~]# mkfs.ext4 /dev/drbd1

挂载文件系统

[root@ha-node1 ~]# mount /dev/drbd1 /mnt/

查看挂载

[root@ha-node1 ~]# mount |grep drbd1
/dev/drbd1 on /mnt type ext4 (rw)

注释: 
“/dev/drbd1”为资源中定义已定义的资源名称 
查看DRBD状态

[root@ha-node1 ~]# drbd-overview
0:drbd/0 Connected Primary/Secondary UpToDate/UpToDate C r-----

注释: 
Primary:当前节点为主;在前面为当前节点 
Secondary:备用节点为次 
5.8、切换主备节点 
先把当前主节点降级为次

[root@ha-node1 ~]# drbdadm secondary mysql

查看DRBD状态

[root@ha-node1 ~]# drbd-overview
0:drbd/0 Connected Secondary/Secondary UpToDate/UpToDate C r-----

在HA-NODE2节点升级

[root@ha-node2 ~]# drbdadm primary mysql

查看DRBD状态

[root@ha-node2 ~]# drbd-overview
0:drbd/0 Connected Primary/Secondary UpToDate/UpToDate C r-----

5.9、挂载设备并验证文件是否存在

[root@ha-node2 ~]# mount /dev/drbd1 /mnt/
[root@ha-node2 ~]# ls /mnt/
lost+found test

六、DRBD脑裂的模拟及修复 
注释:我们还接着上面的实验继续进行,现在HA-NODE2为主节点而HA-NODE1为备节点 
6.1、断开主(parmary)节点; 
关机、断开网络或重新配置其他的IP都可以;这里选择的是断开网络 
6.2、查看两节点状态

[root@ha-node2 ~]# drbd-overview
0:drbd/0 WFConnection Primary/Unknown UpToDate/DUnknown C r----- /mnt ext4 2.0G 68M 1.9G 4%
[root@ha-node1 ~]# drbd-overview
0:drbd/0 StandAlone Secondary/Unknown UpToDate/DUnknown r-----

由上可以看到两个节点已经无法通信;HA-NODE2为主节点,HA-NODE1为备节点 
6.3、将HA-NODE1节点升级为主(primary)节点并挂载资源

[root@ha-node1 ~]# drbdadm primary mysql
[root@ha-node1 ~]# drbd-overview
0:drbd/0 StandAlone Primary/Unknown UpToDate/DUnknown r-----
[root@ha-node1 ~]# mount /dev/drbd1 /mnt/
[root@ha-node1 ~]# mount | grep drbd1
/dev/drbd1 on /mnt type ext4 (rw)

6.4、假如原来的主(primary)节点修复好重新上线了,这时出现了脑裂情况

[root@ha-node2 ~]# tail -f /var/log/messages
Sep 19 01:56:06 ha-node2 kernel: d-con drbd: Terminating drbd_a_drbd
Sep 19 01:56:06 ha-node2 kernel: block drbd1: helper command: /sbin/drbdadm initial-split-brain minor-0 exit code 0 (0x0)
Sep 19 01:56:06 ha-node2 kernel: block drbd1: Split-Brain detected but unresolved, dropping connection!
Sep 19 01:56:06 ha-node2 kernel: block drbd1: helper command: /sbin/drbdadm split-brain minor-0
Sep 19 01:56:06 ha-node2 kernel: block drbd1: helper command: /sbin/drbdadm split-brain minor-0 exit code 0 (0x0)
Sep 19 01:56:06 ha-node2 kernel: d-con drbd: conn( NetworkFailure -> Disconnecting )
Sep 19 01:56:06 ha-node2 kernel: d-con drbd: error receiving ReportState, e: -5 l: 0!
Sep 19 01:56:06 ha-node2 kernel: d-con drbd: Connection closed
Sep 19 01:56:06 ha-node2 kernel: d-con drbd: conn( Disconnecting -> StandAlone )
Sep 19 01:56:06 ha-node2 kernel: d-con drbd: receiver terminated
Sep 19 01:56:06 ha-node2 kernel: d-con drbd: Terminating drbd_r_drbd
Sep 19 01:56:18 ha-node2 kernel: block drbd1: role( Primary -> Secondary )

6.5、再次查看两节点的状态

[root@ha-node1 ~]# drbdadm role drbd
Primary/Unknown
[root@ha-node2 ~]# drbdadm role mysql
Primary/Unknown

6.6、查看HA-NODE1与HA-NODE2连接状态

root@ha-node1 ~]# drbd-overview
0:mysql/0 StandAlone Primary/Unknown UpToDate/DUnknown r----- /mnt ext4 2.0G 68M 1.9G 4%
[root@ha-node2 ~]# drbd-overview
0:mysql/0 WFConnection Primary/Unknown UpToDate/DUnknown C r----- /mnt ext4 2.0G 68M 1.9G 4%

由上可见,状态为StandAlone时,主备节点是不会通信的 
6.7、在HA-NODE1备用节点处理办法

[root@ha-node1 ~]# umount /mnt/
[root@ha-node1 ~]# drbdadm disconnect drbd
drbd: Failure: (162) Invalid configuration request
additional info from kernel:
unknown connection
Command 'drbdsetup disconnect ipv4:192.168.137.225:7789 ipv4:192.168.137.222:7789' terminated with exit code 10
[root@ha-node1 ~]# drbdadm secondary drbd
[root@ha-node1 ~]# drbd-overview
0:drbd/0 StandAlone Secondary/Unknown UpToDate/DUnknown r-----
[root@ha-node1 ~]# drbdadm connect --discard-my-data drbd

执行完以上三步后,你查看会发现还是不可用

[root@ha-node1 ~]# drbd-overview
0:drbd/0 WFConnection Secondary/Unknown UpToDate/DUnknown C r-----

6.8、需要在HA-NODE2节点上重新建立连接资源

[root@ha-node2 ~]# drbdadm connect drbd

查看节点连接状态

[root@ha-node2 ~]# drbd-overview
0:mysql/0 Connected Primary/Secondary UpToDate/UpToDate C r----- /mnt ext4 2.0G 68M 1.9G 4%
[root@ha-node1 ~]# drbd-overview
0:mysql/0 Connected Secondary/Primary UpToDate/UpToDate C r-----

drbd mysql的更多相关文章

  1. Heartbeat+DRBD+MySQL高可用方案

    1.方案简介 本方案采用Heartbeat双机热备软件来保证数据库的高稳定性和连续性,数据的一致性由DRBD这个工具来保证.默认情况下只有一台mysql在工作,当主mysql服务器出现问题后,系统将自 ...

  2. drbd初探及Heartbeat+DRBD+MySQL

    1,drbd快速入门 http://www.mingxiao.info/article/?id=39#__RefHeading___Toc1114_501652171 2.Heartbeat+DRBD ...

  3. Heartbeat+DRBD+MySQL高可用方案【转】

    转自Heartbeat+DRBD+MySQL高可用方案 - yayun - 博客园 http://www.cnblogs.com/gomysql/p/3674030.html 1.方案简介 本方案采用 ...

  4. (转)Heartbeat+DRBD+MySQL高可用方案

    原文:http://www.cnblogs.com/gomysql/p/3674030.html 1.方案简介 本方案采用Heartbeat双机热备软件来保证数据库的高稳定性和连续性,数据的一致性由D ...

  5. Corosync+Pacemaker+DRBD+MySQL 实现高可用(HA)的MySQL集群

    大纲一.前言二.环境准备三.Corosync 安装与配置四.Pacemaker 安装与配置五.DRBD 安装与配置六.MySQL 安装与配置七.crmsh 资源管理 推荐阅读: Linux 高可用(H ...

  6. 4 构建Mysql+heartbeat+DRBD+LVS集群应用系统系列之Lvs为Mysql-slave做负载均衡

    preface Mysql+drbd+heart能够实现Mysql的高可用了,master出现故障的时候能够快速切换.在现在的业务情况下,读操作多,写操作少的情况下,一台DB server明显扛不住, ...

  7. 1 构建Mysql+heartbeat+DRBD+LVS集群应用系统系列之DRBD的搭建

    preface 近来公司利润上升,购买了10几台服务器,趁此机会,把mysql的主从同步的架构进一步扩展,为了适应日益增长的流量.针对mysql架构的扩展,先是咨询前辈,后和同事探讨,准备采用Mysq ...

  8. [转]MYSQL高可用方案探究(总结)

    前言 http://blog.chinaunix.net/uid-20639775-id-3337432.htmlLvs+Keepalived+Mysql单点写入主主同步高可用方案 http://bl ...

  9. MySQL的高可用设计方案的记录

    一.看下常用的MySQL的高可用方案: 对上图的说明: 1)HeartBeat通过串口线或者以太网网线直连网卡对对端的服务做健康检查,并负责执行Drbd,MySQL,vip等资源的自动切换. 2)da ...

随机推荐

  1. 《DSP using MATLAB》示例 Example 9.4

    代码: %% ------------------------------------------------------------------------ %% Output Info about ...

  2. SEO方案

    前端需要注意哪些SEO 合理的title.description.keywords:搜索对着三项的权重逐个减小,title值强调重点即可,重要关键词出现不要超过2次,而且要靠前,不同页面title要有 ...

  3. SpringMVC传递数据的流线图

    流程含义解释:(1)HTTP请求到达web服务器,web服务器将其封装成一个httpServletRequest对象(2)springMVC框架截获这个httpServletRequest对象(3)s ...

  4. 动态添加 items to PopupMenu

    引用自http://stackoverflow.com/questions/10175140/adding-items-to-popupmenu DevExpress.XtraBars.BarMana ...

  5. Windows下安装Redis服务,修改查看密码,修改端口,常用命令

    一.安装 出自:https://jingyan.baidu.com/article/0f5fb099045b056d8334ea97.html 1.要安装Redis,首先要获取安装包.Windows的 ...

  6. sublime设置右键在浏览器打开

    用sublime编辑html文件,右键此文件,自带一个在浏览器中打开,但是这个是在IE里打开, 如何在chrome里打开呢. 1. 这里插入一下安装"view in browser" ...

  7. 自定义元素(custom elements)

    记录下自定义html自定义元素的相关心得: 浏览器将自定义元素保留在 DOM 之中,但不会任何语义.除此之外,自定义元素与标准元素都一致 事实上,浏览器提供了一个HTMLUnknownElement, ...

  8. SharePoint2013工作流workflow manager配置

    SharePoint2013版本的工作流较sharepoint 2010变化较大,将工作流部分从sharepoint中分离出来为单独的服务,通过与sharepoint关联使用. SharePoint2 ...

  9. STL容器的resize方法

    刚才写DFS程序,为了加个创建DFS树然后再次遍历的功能,把初始化的代码给封装到init()函数里,然后直接调用之后对同样是邻接表表示的DFS树进行DFS. 然后令人诧异的是竟然没有打印结果,调试发现 ...

  10. redis 命令集

    进入客户端 /usr/local/bin/redis-cli 选择数据库 select index (0-15) 退出 quit