zoukankan      html  css  js  c++  java
  • Redis-3.2.0集群配置(redis cluster)

    目录

    目录 1

    1. 前言 2

    2. 部署计划 2

    3. 目录结构 2

    4. 编译安装 3

    5. 修改系统参数 3

    5.1. 修改最大可打开文件数 3

    5.2. TCP监听队列大小 4

    5.3. OOM相关:vm.overcommit_memory 4

    5.4. /sys/kernel/mm/transparent_hugepage/enabled 4

    6. 配置redis 4

    7. 启动redis实例 6

    8. 创建和启动redis cluster前的准备工作 6

    8.1. 安装ruby 7

    8.2. 安装rubygems 7

    8.3. 安装redis-3.0.0.gem 7

    9. redis-trib.rb 7

    10. 创建和启动redis集群 8

    10.1. 复制redis-trib.rb 8

    10.2. 创建redis cluster 9

    10.3. ps aux|grep redis 10

    11. redis cluster client 11

    11.1. 命令行工具redis-cli 11

    11.2. 从slaves读数据 11

    11.3. jedis(java cluster client) 11

    11.4. r3c(C++ cluster client) 12

    12. 新增节点 12

    12.1. 添加一个新主(master)节点 12

    12.2. 添加一个新从(slave)节点 13

    13. 删除节点 13

    14. 检查节点状态 13

    15. slots相关命令 14

    15.1. 迁移slosts 14

    15.2. redis-trib.rb rebalance 14

    16. 人工主备切换 14

    17. 查看集群信息 14

    18. 问题排查 15

    1. 前言

    本文参考官方文档而成:http://redis.io/topics/cluster-tutorial。经测试,安装过程也适用于redis-3.2.0。

    2. 部署计划

    依据官网介绍,部署6个redis节点,为3主3从。3台物理机每台都创建2个redis节点:

    服务端口

    IP地址

    配置文件名

    6379

    192.168.0.251

    redis-6379.conf

    6379

    192.168.0.252

    redis-6379.conf

    6379

    192.168.0.253

    redis-6379.conf

    6380

    192.168.0.251

    redis-6380.conf

    6380

    192.168.0.252

    redis-6380.conf

    6380

    192.168.0.253

    redis-6380.conf

    疑问:3台物理机,会不会主和从节点分布在同一个物理机上?

    3. 目录结构

    redis.conf为从https://raw.githubusercontent.com/antirez/redis/3.0/redis.conf下载的配置文件。redis-6379.conf和redis-6380.conf指定了服务端口,两者均通过include复用(包含)了redis.conf。

    本文将redis安装在/data/redis(每台机器完全相同,同一台机器上的多个节点对应相同的目录和文件,并建议将bin目录加入到环境变量PATH中,以简化后续的使用):

    /data/redis

    |-- bin

    |   |-- redis-benchmark

    |   |-- redis-check-aof

    |   |-- redis-check-dump

    |   |-- redis-cli

    |   |-- redis-sentinel -> redis-server

    |   `-- redis-server

    |-- conf

    |   |-- redis-6379.conf

    |   |-- redis-6380.conf

    |   `-- redis.conf

    `-- log

    3 directories, 9 files

    4. 编译安装

    打开redis的Makefile文件,可以看到如下内容:

    PREFIX?=/usr/local

    INSTALL_BIN=$(PREFIX)/bin

    INSTALL=install

    Makefile中的“?=”表示,如果该变量之前没有定义过,则赋值为/usr/local,否则什么也不做。

    如果不设置环境变量PREFIX或不修改Makefile中的值,则默认安装到/usr/local/bin目录下。建议不要使用默认配置,而是指定安装目录,如/data/redis-3.0.5:

    $ make

    $ make install PREFIX=/data/redis-3.0.5

    $ ln -s /data/redis-3.0.5 /data/redis

    $ mkdir /data/redis/conf

    $ mkdir /data/redis/log

    $ mkdir /data/redis/data

    5. 修改系统参数

    5.1. 修改最大可打开文件数

    修改文件/etc/security/limits.conf,加入以下两行:

    * soft nofile 102400

    * hard nofile 102400

    # End of file

    其中102400为一个进程最大可以打开的文件个数,当与RedisServer的连接数多时,需要设定为合适的值。

    修改后,需要重新登录才会生效,如果是crontab,则需要重启crontab,如:service crond restart,有些平台可能是service cron restart。

    5.2. TCP监听队列大小

    即TCP listen的backlog大小,“/proc/sys/net/core/somaxconn”的默认值一般较小如128,需要修改大一点,比如改成32767。立即生效还可以使用命令:sysctl -w net.core.somaxconn=32767。

    要想永久生效,需要在文件/etc/sysctl.conf中增加一行:net.core.somaxconn = 32767,然后执行命令“sysctl -p”以生效。

    5.3. OOM相关:vm.overcommit_memory

    如果“/proc/sys/vm/overcommit_memory”的值为0,则会表示开启了OOM。可以设置为1关闭OOM,设置方法请参照net.core.somaxconn完成。

    5.4. /sys/kernel/mm/transparent_hugepage/enabled

    默认值为“[always] madvise never”,建议设置为never,以开启内核的“Transparent Huge Pages (THP)”特性,设置后redis进程需要重启。为了永久生效,请将“echo never > /sys/kernel/mm/transparent_hugepage/enabled”加入到文件/etc/rc.local中。

    6. 配置redis

    https://raw.githubusercontent.com/antirez/redis/3.0/redis.conf下载配置文件(也可直接复制源代码包中的redis.conf,然后在它的基础上进行修改),在这个基础上,进行如下表所示的修改(配置文件名redis-6379.conf中的6379建议设置为实际使用的端口号):

    配置项

    配置文件

    说明

    port

    6379

    redis-6379.conf

    客户端连接端口,并且总有一个刚好大于10000的端口,这个大的端口用于主从复制和集群内部通讯。

    cluster-config-file

    nodes-6379.conf

    pidfile

    /var/run/redis-6379.pid

    只有当daemonize值为yes时,才有意义;并且这个要求对目录/var/run有写权限,否则可以考虑设置为/tmp/redis-6379.pid。

    dir

    /data/redis/data/6379

    dbfilename

    dump-6379.rdb

    位于dir指定的目录下

    appendfilename

    "appendonly-6379.aof"

    logfile

    /data/redis/log/redis-6379.log

    日志文件,包含目录和文件名

    loglevel

    verbose

    日志级别

    port

    6380

    redis-6380.conf

    cluster-config-file

    nodes-6380.conf

    pidfile

    /var/run/redis-6380.pid

    dir

    /data/redis/data/6380

    AOF和RDB文件存放目录

    dbfilename

    dump-6380.rdb

    RDB文件名

    appendfilename

    appendonly-6380.aof

    AOF文件名

    logfile

    /data/redis/log/redis-6380.log

    loglevel

    verbose

    日志级别

    cluster-enabled

    yes

    redis.conf

    表示以集群方式运行,为no表示以非集群方式运行

    cluster-node-timeout

    3000

    单位为毫秒:

    repl-ping-slave-period+

    (cluster-node-timeout*

    cluster-slave-validity-factor)

    cluster-slave-validity-factor

    0

    如果要最大的可用性,值设置为0

    repl-ping-slave-period

    1

    slave ping master的时间间隔,单位为秒

    repl-timeout

    10

    复制超时,单位为秒,须大于repl-ping-slave-period的值

    slave-read-only

    yes

    slave是否只读

    slave-serve-stale-data

    yes

    当slave与master断开连接,slave是否继续提供服务

    slave-priority

    100

    slave权重值,当master挂掉,只有权重最大的slave接替master

    appendonly

    yes

    当同时写AOF或RDB,则redis启动时只会加载AOF,AOF包含了全量数据

    daemonize

    yes

    相关配置项pidfile

    protected-mode

    no

    3.2.0新增的配置项,默认值为yes,限制从其它机器登录Redis server,而只能从127.0.0.1登录。为保证redis-trib.rb工具的正常运行,需要设置为no,完成后可以改回yes,但每次使用redis-trib.rb都需要改回为no。要想从非127.0.0.1访问也需要改为no。

    tcp-backlog

    32767

    取值不能超过系统的/proc/sys/net/core/somaxconn

    auto-aof-rewrite-percentage

    100

    设置自动rewite AOF文件(手工rewrite只需要调用命令BGREWRITEAOF)

    auto-aof-rewrite-min-size

    64mb

    触发rewrite的AOF文件大小,只有大于此大小时才会触发rewrite

    no-appendfsync-on-rewrite

    yes

    子进程在做rewrite时,主进程不调用fsync(由内核默认调度)

    cluster-require-full-coverage

    no

    为no表示有slots不可服务时其它slots仍然继续服务

    7. 启动redis实例

    登录3台物理机,启动两个redis实例(启动之前,需要创建好配置中的各目录):

    1) redis-server redis-6379.conf

    2) redis-server redis-6380.conf

    可以写一个启动脚本start-redis-cluster.sh:

    #!/bin/sh

    REDIS_HOME=/data/redis

    $REDIS_HOME/bin/redis-server $REDIS_HOME/conf/redis-6379.conf

    $REDIS_HOME/bin/redis-server $REDIS_HOME/conf/redis-6380.conf

    8. 创建和启动redis cluster前的准备工作

    上一步启动的redis只是单机版本,在启动redis cluster之前,需要完成如下一些依赖的安装。在此之后,才可以创建和启动redis cluster。

    8.1. 安装ruby

    安装命令:yum install ruby

    安装过程中,如提示“[y/d/N]”,请选“y”然后回车。

    查看版本:

    $ ruby --version

    ruby 2.0.0p353 (2013-11-22) [x86_64-linux]

    也可以从Ruby官网https://www.ruby-lang.org下载安装包(如ruby-2.3.1.tar.gz)来安装Ruby。截至2016/5/13,Ruby的最新稳定版本为Ruby 2.3.1。

    8.2. 安装rubygems

    安装命令:yum install rubygems

    如果不使用yum安装,也可以手动安装RubyGems,RubyGems是一个Ruby包管理框架,它的下载网址:https://rubygems.org/pages/download

    比如下载安装包rubygems-2.6.4.zip后解压,然后进入解压生成的目录,里面有个setup.rb文件,以root用户执行:ruby setup.rb安装RubyGems。

    8.3. 安装redis-3.0.0.gem

    安装命令:gem install -l redis-3.0.0.gem

    安装之前,需要先下载好redis-3.0.0.gem。

    redis-3.0.0.gem官网:https://rubygems.org/gems/redis/versions/3.0.0

    redis-3.0.0.gem下载网址:https://rubygems.org/downloads/redis-3.0.0.gem

    redis-3.3.0.gem官网:https://rubygems.org/gems/redis/versions/3.3.0

    9. redis-trib.rb

    redis-trib.rb是redis官方提供的redis cluster管理工具,使用ruby实现。

    10. 创建和启动redis集群

    10.1. 复制redis-trib.rb

    将redis源代码的src目录下的集群管理程序redis-trib.rb复制到/data/redis/bin目录,并将bin目录加入到环境变量PATH中,以简化后续的操作。

    redis-trib.rb用法(不带任何参数执行redis-trib.rb即显示用法):

    $ ./redis-trib.rb

    Usage: redis-trib <command> <options> <arguments ...>

      rebalance       host:port

                      --auto-weights

                      --timeout <arg>

                      --pipeline <arg>

                      --use-empty-masters

                      --weight <arg>

                      --threshold <arg>

                      --simulate

      add-node        new_host:new_port existing_host:existing_port

                      --slave

                      --master-id <arg>

      reshard         host:port

                      --timeout <arg>

                      --pipeline <arg>

                      --yes

                      --slots <arg>

                      --to <arg>

                      --from <arg>

      check           host:port

      set-timeout     host:port milliseconds

      call            host:port command arg arg .. arg

      fix             host:port

                      --timeout <arg>

      info            host:port

      create          host1:port1 ... hostN:portN

                      --replicas <arg>

      import          host:port

                      --replace

                      --copy

                      --from <arg>

      help            (show this help)

      del-node        host:port node_id

    For check, fix, reshard, del-node, set-timeout you can specify the host and port of any working node in the cluster.

    10.2. 创建redis cluster

    创建命令(3主3从):

    redis-trib.rb create --replicas 1 192.168.0.251:6379 192.168.0.252:6379 192.168.0.253:6379 192.168.0.251:6380 192.168.0.252:6380 192.168.0.253:6380

    Ø 参数说明:

    1) create

    表示创建一个redis cluster集群。

    2) --replicas 1

    表示为集群中的每一个主节点指定一个从节点,即一比一的复制。

    运行过程中,会有个提示,输入yes回车即可。从屏幕输出,可以很容易地看出哪些是主(master)节点,哪些是从(slave)节点:

    >>> Creating cluster

    Connecting to node 192.168.0.251:6379: OK

    /usr/local/share/gems/gems/redis-3.0.0/lib/redis.rb:182: warning: wrong element type nil at 0 (expected array)

    /usr/local/share/gems/gems/redis-3.0.0/lib/redis.rb:182: warning: ignoring wrong elements is deprecated, remove them explicitly

    /usr/local/share/gems/gems/redis-3.0.0/lib/redis.rb:182: warning: this causes ArgumentError in the next release

    >>> Performing hash slots allocation on 6 nodes...

    Using 3 masters:

    192.168.0.251:6379

    192.168.0.252:6379

    192.168.0.253:6379

    Adding replica 192.168.0.252:6380 to 192.168.0.251:6379

    Adding replica 192.168.0.251:6380 to 192.168.0.252:6379

    Adding replica 192.168.0.253:6380 to 192.168.0.253:6379

    M: 150f77d1000003811fb3c38c3768526a0b25ec31 192.168.0.251:6379

       slots:0-5460 (5461 slots) master

    M: de461d3337b17d2119b79024d57d8b119e7320a6 192.168.0.252:6379

       slots:5461-10922 (5462 slots) master

    M: faf50658fb7b0bae64cee5371da782e0f4919eee 192.168.0.253:6379

       slots:10923-16383 (5461 slots) master

    S: c567db02cc40eebf577f71f703214dd2f4f26dfb 192.168.0.251:6380

       replicates de461d3337b17d2119b79024d57d8b119e7320a6

    S: 284f8196b250ad9ac272316db84a07bebf661ab7 192.168.0.252:6380

       replicates 150f77d1000003811fb3c38c3768526a0b25ec31

    S: 39fdef9fd5778dc94d8add819789d7d73ca06899 192.168.0.253:6380

       replicates faf50658fb7b0bae64cee5371da782e0f4919eee

    Can I set the above configuration? (type 'yes' to accept): yes

    >>> Nodes configuration updated

    >>> Assign a different config epoch to each node

    >>> Sending CLUSTER MEET messages to join the cluster

    Waiting for the cluster to join....

    >>> Performing Cluster Check (using node 192.168.0.251:6379)

    M: 150f77d1000003811fb3c38c3768526a0b25ec31 192.168.0.251:6379

       slots:0-5460 (5461 slots) master

    M: de461d3337b17d2119b79024d57d8b119e7320a6 192.168.0.252:6379

       slots:5461-10922 (5462 slots) master

    M: faf50658fb7b0bae64cee5371da782e0f4919eee 192.168.0.253:6379

       slots:10923-16383 (5461 slots) master

    M: c567db02cc40eebf577f71f703214dd2f4f26dfb 192.168.0.251:6380

       slots: (0 slots) master

       replicates de461d3337b17d2119b79024d57d8b119e7320a6

    M: 284f8196b250ad9ac272316db84a07bebf661ab7 192.168.0.252:6380

       slots: (0 slots) master

       replicates 150f77d1000003811fb3c38c3768526a0b25ec31

    M: 39fdef9fd5778dc94d8add819789d7d73ca06899 192.168.0.253:6380

       slots: (0 slots) master

       replicates faf50658fb7b0bae64cee5371da782e0f4919eee

    [OK] All nodes agree about slots configuration.

    >>> Check for open slots...

    >>> Check slots coverage...

    [OK] All 16384 slots covered.

    10.3. ps aux|grep redis

    [test@test-168-251 ~]$ ps aux|grep redis

    test   3824  0.7  5.9 6742404 3885144 ?    Ssl   2015 1639:13 /data/redis/bin/redis-server *:6379 [cluster]

    test   3831  0.5  3.9 6709636 2618536 ?    Ssl   2015 1235:43 /data/redis/bin/redis-server *:6380 [cluster]

    停止redis实例,直接使用kill命令即可,如:kill 3831,重启和单机版相同,经过上述一系列操作后,重启会自动转换成cluster模式。。

    11. redis cluster client

    11.1. 命令行工具redis-cli

    官方提供的命令行客户端工具,在单机版redis基础上指定参数“-c”即可。以下是在192.168.0.251上执行redis-cli的记录:

    $ ./redis-cli -c -p 6379

    127.0.0.1:6379> set foo bar

    -> Redirected to slot [12182] located at 192.168.0.253:6379

    OK

    192.168.0.253:6379> set hello world

    -> Redirected to slot [866] located at 192.168.0.251:6379

    OK

    192.168.0.251:6379> get foo

    -> Redirected to slot [12182] located at 192.168.0.253:6379

    "bar"

    192.168.0.253:6379> get hello

    -> Redirected to slot [866] located at 192.168.0.251:6379

    "world"

    查看集群中的节点:

    192.168.0.251:6379> cluster nodes

    11.2. 从slaves读数据

    默认不能从slaves读取数据,但建立连接后,执行一次命令READONLY ,即可从slaves读取数据。如果想再次恢复不能从slaves读取数据,可以执行下命令READWRITE。

    11.3. jedis(java cluster client)

    官网:https://github.com/xetorthio/jedis

    编程示例:

    Set<HostAndPort> jedisClusterNodes = new HashSet<HostAndPort>();

    //Jedis Cluster will attempt to discover cluster nodes automatically

    jedisClusterNodes.add(new HostAndPort("127.0.0.1", 7379));

    JedisCluster jc = new JedisCluster(jedisClusterNodes);

    jc.set("foo", "bar");

    String value = jc.get("foo");

    11.4. r3c(C++ cluster client)

    官网:https://github.com/eyjian/r3c

    12. 新增节点

    12.1. 添加一个新主(master)节点

    先以单机版配置和启动好redis-server,然后执行命令:

    ./redis-trib.rb add-node 127.0.0.1:7006 127.0.0.1:7000

    执行上面这条命令时,可能遇到错误“[ERR] Sorry, can't connect to node 127.0.0.1:7006”。引起该问题的原因可能是因为ruby的版本过低(运行ruby -v可以查看ruby的版本),可以尝试升级ruby再尝试,比如ruby 1.8.7版本就需要升级。对于Redis 3.0.5和Redis 3.2.0,使用Ruby 2.3.1操作正常。请注意升级到最新版本的ruby也可能遇到这个错误。

    另一个会引起这个问题的原因是从Redis 3.2.0版本开始引入了“保护模式(protected mode),防止redis-cli远程访问”,仅限redis-cli绑定到127.0.0.1才可以连接Redis server。

    为了完成添加新主节点,可以暂时性的关闭保护模式,使用redis-cli,不指定-h参数(但可以指定-p参数,或者-h参数值为127.0.0.1)进入操作界面:CONFIG SET protected-mode no。

    注意7006是新增的节点,而7000是已存在的节点(可为master或slave)。如果需要将7006变成某master的slave节点,执行命令:

    cluster replicate 3c3a0c74aae0b56170ccb03a76b60cfe7dc1912e

    新加入的master节点上没有任何数据(slots,运行redis命令cluster nodes可以看到这个情况)。当一个slave想成为master时,由于这个新的master节点不管理任何slots,它不参与选举。

    可以使用工具redis-trib.rb的resharding特性为这个新master节点分配slots,如:

    redis-trib.rb reshard 127.0.0.1:7000,其中7000为集群中任意一个节点即可,redis-trib.rb将自动发现其它节点。

    在reshard过程中,将会询问reshard多少slots:

    How many slots do you want to move (from 1 to 16384)?,取值范围为1~16384,其中16384为redis cluster的拥有的slots总数,比如想只移动100个,输入100即可。如果迁移的slots数量多,应当设置redis-trib.rb的超时参数--timeout值大一点。否则,迁移过程中易遇到超时错误“[ERR] Calling MIGRATE: IOERR error or timeout reading to target instance”,导致只完成部分,可能会造成数据丢失。

    接着,会提示“What is the receiving node ID?”,输入新加入的master节点ID。过程中如果遇到错误“Sorry, can't connect to node 10.225.168.253:6380”,则可能需要暂时先关闭相应的保护模式。

    如果在迁移过程遇到下面这样的错误:

    >>> Check for open slots...

    [WARNING] Node 192.168.0.3:6379 has slots in importing state (5461).

    [WARNING] Node 192.168.0.5:6380 has slots in migrating state (5461).

    [WARNING] The following slots are open: 5461

    可以考虑使用命令“redis-trib.rb fix 192.168.0.3:6379”尝试修复。需要显示有节点处于migrating或importing状态,可以登录到相应的节点,使用命令“cluster setslot 5461 stable”修改,参数5461为问题显示的slot的ID。

    12.2. 添加一个新从(slave)节点

    ./redis-trib.rb add-node --slave 127.0.0.1:7006 127.0.0.1:7000

    注意这种方式,如果添加了多个slave节点,可能导致master的slaves不均衡,比如一些有3个slave,其它只1个slave。可以在slave节点上执行redis命令“CLUSTER REPLICATE”进行调整,让它成为其它master的slave。“CLUSTER REPLICATE”带一个参数,即master ID,注意使用redis-cli -c登录到slave上执行。

    上面方法没有指定7006的master,而是随机指定。下面方法可以明确指定为哪个master的slave:

    ./redis-trib.rb add-node --slave --master-id 3c3a0c74aae0b56170ccb03a76b60cfe7dc1912e 127.0.0.1:7006 127.0.0.1:7000

    13. 删除节点

    从集群中删除一个节点:

    ./redis-trib del-node 127.0.0.1:7000 `<node-id>`

    第一个参数为集群中任意一个节点,第二个参数为需要删除节点的ID。

    CLUSTER FORGET <node-id>

    注意如果是删除一个master节点,则需要先将它管理的slots的迁走,然后才可以删除它。

    14. 检查节点状态

    redis-trib.rb check 127.0.0.1:6380

    如发现如下这样的错误:

    [WARNING] Node 192.168.0.11:6380 has slots in migrating state (5461).

    [WARNING] The following slots are open: 5461

    可以使用redis命令取消slots迁移(5461为slot的ID):

    cluster setslot 5461 stable

    需要注意,须登录到192.168.0.11:6380上执行redis的setslot子命令。

    15. slots相关命令

    CLUSTER ADDSLOTS slot1 [slot2] ... [slotN]

    CLUSTER DELSLOTS slot1 [slot2] ... [slotN]

    CLUSTER SETSLOT slot NODE node

    CLUSTER SETSLOT slot MIGRATING node

    CLUSTER SETSLOT slot IMPORTING node

    15.1. 迁移slosts

    示例:将slot8从节点A迁移到节点B,有如下两种方法:

    在节点B上执行:CLUSTER SETSLOT 8 IMPORTING A

    在节点A上执行:CLUSTER SETSLOT 8 MIGRATING B

    15.2. redis-trib.rb rebalance

    当有增减节点时,可以使用命令:

    redis-trib.rb rebalance 192.168.0.31:6379 --auto-weights

    做一次均衡,简单点可以只指定两个参数:“192.168.0.31:6379”为集群中已知的任何一个节点,参数“-auto-weights”表示自动权重。

    16. 人工主备切换

    在需要的slaves节点上执行命令:CLUSTER FAILOVER。

    17. 查看集群信息

    对应的redis命令为:cluster info,示例:

    127.0.0.1:6381> cluster info

    cluster_state:ok 所有slots正常则显示为OK,否则为error

    cluster_slots_assigned:16384 多少slots被分配了,即多少被master管理了,16384为全部slots

    cluster_slots_ok:16384 有多少slots是正常的

    cluster_slots_pfail:0 有多少slots可能处于异常状态,处于这个状态并不表示有问题,仍能继续提供服务

    cluster_slots_fail:0 有多少slots处于异常状态,需要修复才能服务

    cluster_known_nodes:10 集群中的节点数

    cluster_size:3 集群中master个数

    cluster_current_epoch:11 本地的当前时间变量,用于故障切换时生成独一无二的增量版本号

    cluster_my_epoch:0

    cluster_stats_messages_sent:4049 通过集群消息总线发送的消息总数

    cluster_stats_messages_received:4051 通过过集通过群消息总线收到的消息总数

    18. 问题排查

    1) 如果最后一条日志为“16367:M 08 Jun 14:48:15.560 # Server started, Redis version 3.2.0”,节点状态始终终于fail状态,则可能是aof文件损坏了,这时可以使用工具edis-check-aof --fix进行修改,如:

    ../../bin/redis-check-aof --fix appendonly-6380.aof 

    0x        a1492b9b: Expected prefix '

    AOF analyzed: size=2705928192, ok_up_to=2705927067, diff=1125

    This will shrink the AOF from 2705928192 bytes, with 1125 bytes, to 2705927067 bytes

    Continue? [y/N]: y

    FROM:  http://blog.csdn.net/aquester/article/details/50150163

  • 相关阅读:
    高级特性(4)- 数据库编程
    UVA Jin Ge Jin Qu hao 12563
    UVA 116 Unidirectional TSP
    HDU 2224 The shortest path
    poj 2677 Tour
    【算法学习】双调欧几里得旅行商问题(动态规划)
    南洋理工大学 ACM 在线评测系统 矩形嵌套
    UVA The Tower of Babylon
    uva A Spy in the Metro(洛谷 P2583 地铁间谍)
    洛谷 P1095 守望者的逃离
  • 原文地址:https://www.cnblogs.com/ExMan/p/11040600.html
Copyright © 2011-2022 走看看