Blog

  • rediscluster缩容和扩容

    rediscluster 配置的过量,浪费了资源。不够时又加加资源

    查看当前 rediscluster 的主从关系,并记下来 hash 值。

    redis-cli -c cluster nodes

    现在先进行扩容,192.168.11.3:6379 是当前 cluster 的一个 master 节点。

    添加 192.168.22.3:6379,从节点 192.168.22.4:6379

    查看 cluster 状态

    redis-trib.rb info 192.168.11.3:6379

    添加,默认为 master

    redis-trib.rb add-node 192.168.22.3:6379 192.168.11.3:6379

    添加 –slave, 主动找没有 slave 的 master 节点

    redis-trib.rb add-node --slave 192.168.22.4:6379 192.168.11.3:6379

    查看 cluster nodes

    redis-cli -c cluster nodes

    接下来确定哪些 master 的 slots 迁到新加的实例,找到新加的 master hash 值为 e0d88661607192a4ffac1b74412c6cd6d0932067

    从已有 slot 里分配 100 个 slots 到 e0d88661607192a4ffac1b74412c6cd6d0932067

    redis-trib.rb reshard --from 32f38c9e5e42f6a66e67abdd540cce72e4bf399c --to e0d88661607192a4ffac1b74412c6cd6d0932067 --slots 100 --yes 192.168.11.3:6379

    如果遇到失败,进行 fix

    redis-trib.rb fix 192.168.11.3:6379

    反复几次,并查看可以达到迁移目的。

    总是 fix 特别烦,写个有限循环搞定。

    for i in $(seq 20); do redis-trib.rb reshard --from 32f38c9e5e42f6a66e67abdd540cce72e4bf399c --to e0d88661607192a4ffac1b74412c6cd6d0932067 --slots 100 --yes 192.168.11.3:6379 || redis-trib.rb fix 192.168.11.3:6379; done
    

    缩容即是把里面的 slots 移到其他实例里,然后删除 node 对应的 hash

    redis-trib.rb del-node 192.168.11.3:6379 e0d88661607192a4ffac1b74412c6cd6d0932067

    查看当前实例是否还在提供服务

    redis-cli monitor

    当缩容或扩容完之后,如果 slots 的数量差的多的话, 可以对整个集群 rebalance

    redis-trib.rb rebalance 192.168.11.3:6379

    同样的如果中间中断,就 fix

    redis-trib.rb fix 192.168.11.3:6379

    到最后会提示

    *** No rebalancing needed! All nodes are within the 2.0% threshold.

    查看整个集群的情况

    #redis-cli -c cluster info
    
    cluster_state:ok
    cluster_slots_assigned:16384
    cluster_slots_ok:16384
    cluster_slots_pfail:0
    cluster_slots_fail:0
    cluster_known_nodes:12
    cluster_size:6
    cluster_current_epoch:46
    cluster_my_epoch:40
    cluster_stats_messages_sent:912305
    cluster_stats_messages_received:912227
    
    

    ok,到这里结束。

  • pidstat查看进程I/O读写

    查看一个进程的 io 读写

    每秒钟输出一次

    -d 参数:

    打印 I/O 信息,2.6.20及以后内核才支持。kB_rd/s 每秒读的 kB 数,kB_wr/s 每秒写的 kB 数,kB_ccwr/s 每秒取消写入磁盘的 kB 数。

    -l 参数:

    打印详细信息

    pidstat -dl 1 -p 29866
  • seq使用方法

    seq 5 会打印 1-5 的数字,一个数字一行

    1
    2
    3
    4
    5
    

    seq 22 27 打印 22-27 数字

    22
    23
    24
    25
    26
    27
    

    seq -w 00 05 打印 00-05

    00
    01
    02
    03
    04
    05
    

    同理
    seq -w 000 005 打印 000-005

    000
    001
    002
    003
    004
    005
    
  • 记录指定状态码的 nginx log

    在 server 里配置,记录 403 的日志

    server {
        server_name example.com;
        access_log /var/log/nginx_access_403.log combined;
        include block_inject.conf;
        location / {
            if ($status != "403") {
                access_log off;
            }
            #......
        }
    }
    
  • git 在每一次 commit 中清理文件

    有两个很大的二进制文件,在版本库中没有一点用处。
    使用核武器 filter-branch ,将每一次提交中出现这两个文件的时候删掉,然后重新提交,所以 commit 的 hash 值都会变掉。

    git filter-branch -f --tree-filter 'rm -f nginx/files/GeoLiteCity.dat nginx/files/GeoIP.dat' HEAD

    强制 push 到 origin

    git push origin --force

    你的合作者现在混乱了。需要将远端的 master rebase 过来

    git rebase --onto origin/master master master
    git fetch
    git reset --hard origin/master

    强制 pull 下来

    git pull --force
  • kvm 模板配置

    装好系统之后,在关机前,需要把网卡信息清理掉

    http://www.andrewklau.com/device-eth0-does-not-seem-to-be-present-delaying-initialization/

    关机后,压缩模板,使发布过程更快

    qemu-img convert -c g97m01st.img -O qcow2 centos.img