Redis Codis 部署安装
发布日期:2021-05-09 09:26:05 浏览次数:12 分类:博客文章

本文共 49031 字,大约阅读时间需要 163 分钟。

������

������Redis������������������������������������������������������������������������������������������Redis������������������Codis������������������Codis���������������������������������������������������������������

Codis ������������������ Redis ������������, ���������������������������, ��������� Codis Proxy ������������������ Redis Server ������������������ (), ������������������������������������ Redis ������������, Codis ������������������������������, ���������������������������������, ���������������������������, ������������������������������������������, ��������������������������������������������������������������� Redis ������������ ��� Redis Cluster ��������� 

  Codis Twemproxy Redis Cluster
resharding without restarting cluster Yes No Yes
pipeline Yes Yes No
hash tags for multi-key operations Yes Yes Yes
multi-key operations while resharding Yes - No()
Redis clients supporting Any clients Any clients Clients have to support cluster protocol

������

������

������

������

������������

������

192.168.163.131/132/133(Ubuntu 16.04)

Codis

7021/7022

server������:���/���������������

GO

11080

proxy������������������������

18080

dashboard������������������������

10890

fe������������������������

192.168.163.131/132/133(Ubuntu 16.04)

zookeeper

2181

zk���������������������������������

JDK

2888

zk������������������������������

3888

zk������������������������

Codis ������������

  • Codis Server��������� redis-3.2.8 ��������������������������������������������������������� slot ��������������������������������������������������������������������������� ���

  • Codis Proxy��������������������� Redis ������������, ��������� Redis ��������� ������������������������������������������������������ Redis ��������������������� Twemproxy������

    • ������������������������������������������������������������ codis-proxy ���������
    • ������ codis-proxy ��������� codis-dashboard ���������������������
  • Codis Dashboard������������������������������ codis-proxy���codis-server ���������������������������������������������������������������������������������codis-dashboard ��������������������� codis-proxy ������������������������

    • ��������������������������������������������������� codis-dashboard ��������� 0���������1������(������������
    • ��������������������������������������� codis-dashboard ���������
  • Codis Admin������������������������������������

    • ��������������� codis-proxy���codis-dashboard ���������������������������������
  • Codis FE������������������������

    • ������������������������������������������������������������������
    • ������������������������������ codis-dashboard ���������������������������������������
  • Storage���������������������������������������

    • ������ Namespace ��������������������������������������� product name ���������������
    • ������������������ Zookeeper���Etcd���Fs ��������������������������������������� interface ������������������

 ������������������������������

���������������zk���������������������Proxy���Proxy���������������������������������������������������������Proxy������������Group���Server������Server���HA������Sentinel������������������������������������������

Codis���������������������

  • ���������������������codis���������������������
  • ���������������������������
  • ���������������������������������������������������codis
  • ���������������CPU���twemproxy������������
  • codis���������������proxy���������������������������������������������������proxy
  • ������������������������������������keys *���
  • ������group������������������������������������������������������sentinel ������redis���������������down���������������������������
  • ������������������������������CPU������������������������CPU������������
  • ������������zookeeper������������������key���redis���������������������zookeeper���������������
  • ���������������������������dashboard

������������

������������������

GO���

#go���wget https://dl.google.com/go/go1.10.3.linux-amd64.tar.gz#zookeeper���wget http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.4.12/zookeeper-3.4.12.tar.gz#codis���git clone https://github.com/CodisLabs/codis.git -b release3.2

���������

������������������apt-get install gcc make autoconf libtool automake

1������

zookeeper������JDK������������������JDK���

#jdk���sudo add-apt-repository ppa:webupd8team/javasudo apt-get updatesudo apt-get install oracle-java8-installer
1������������tar -xf zookeeper-3.4.12.tar.gz mv zookeeper-3.4.12 /usr/local/zookeeper2������������������������cd /usr/local/zookeeper/confcp zoo_sample.cfg zoo.cfg������������(zoo.cfg)���������

zoo.cfg���

# The number of milliseconds of each ticktickTime=2000# The number of ticks that the initial # synchronization phase can takeinitLimit=10# The number of ticks that can pass between # sending a request and getting an acknowledgementsyncLimit=5# the directory where the snapshot is stored.# do not use /tmp for storage, /tmp here is just # example sakes.dataDir=/tmp/zookeeper# the port at which the clients will connectclientPort=2181# the maximum number of client connections.# increase this if you need to handle more clients#maxClientCnxns=60## Be sure to read the maintenance section of the # administrator guide before turning on autopurge.## http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance## The number of snapshots to retain in dataDir#autopurge.snapRetainCount=3# Purge task interval in hours# Set to "0" to disable auto purge feature#autopurge.purgeInterval=1
View Code

���������������������

  • tickTime: ZooKeeper ������������������������������, ������������������, ������������ 2000������������������������������������������, ��������������������������������������� tickTime���
  • initLimit: ������������ 10, ��� tickTime ������������ 10 ��������������������������� followers ������������������ leader ������������������������ ZooKeeper ������������������������������������������������������
  • syncLimit: ������������ 5, ��� tickTime ������������ 5 ���������������������leader ��� followers ������������������������������������������������������������������������ followers ��������� leader ������������, ������ followers ������������������
  • dataDir: ZooKeeper ������������������������������������������, ������������������������������, ��������������������������������������������������������������������������������� dataLogDir ��������������� ZooKeeper ������������������������������
  • dataLogDir���log������������������������������������������������
  • clientPort: ���������������������������������������, ������������������������������������, ������������ 2181���
  • maxClientCnxns: ��� socket ������������������������������������������������������������������������, ������������ IP ������������������������������������������������������������������ DoS ������, ������������������������������������������ 60������������������ 0 ������������������������������������������
  • autopurge.snapRetainCount: ������ ZooKeeper ������������������������������������������������������������������������������������������������, ������������ 3���
  • autopurge.purgeInterval: ��������� autopurge.snapRetainCount ������������, ������������ ZooKeeper ���������������������������, ������������ 1, ���������������������������������, ��������� 0 ������������������������������������

������������������������

mkdir -p /data/zookeeper/datamkdir -p /data/zookeeper/log

���������������������

vim /etc/profile#������# ZooKeeper Envexport ZOOKEEPER_HOME=/usr/local/zookeeperexport PATH=$PATH:$ZOOKEEPER_HOME/bin#������������������source /etc/profile

��� ������������

zoo.cfg���������������

tickTime=2000initLimit=10syncLimit=5dataDir=/data/zookeeper/datadataLogDir=/data/zookeeper/logclientPort=2181

���������zkServer.sh start

root@test1:~# zkServer.sh startZooKeeper JMX enabled by defaultUsing config: /usr/local/zookeeper/bin/../conf/zoo.cfgStarting zookeeper ... STARTED

���������������zkServer.sh status

root@test1:~# zkServer.sh statusZooKeeper JMX enabled by defaultUsing config: /usr/local/zookeeper/bin/../conf/zoo.cfgMode: standalone

���������zkServer.sh stop

root@test1:~# zkServer.sh stopZooKeeper JMX enabled by defaultUsing config: /usr/local/zookeeper/bin/../conf/zoo.cfgStopping zookeeper ... STOPPED

���������������������������, Mode ��������� "standalone"���

��� ������������(3������

zoo.cfg���������������������������������������server.ID

tickTime=2000initLimit=10syncLimit=5dataDir=/data/zookeeper/datadataLogDir=/data/zookeeper/logclientPort=2181
#���������������������zk������������������������������192.168.163.131:2887:3887/192.168.163.132:2887:3887/192.168.163.133:2887:3887server.1=192.168.163.131:2888:3888server.2=192.168.163.132:2888:3888server.3=192.168.163.133:2888:3888

���������2888������zookeeper���������������3888������zookeeper���������������������������server.1 server.2 server.3���������������������zookeeper���zoo.cfg���������

���������������

  • ���������������, ���������������������������������������������������, ��� zoo.cfg ���������������, ������������������������������������, ������������������������������������: server.id=host:port:port

    id ��������� Server ID, ��������������������������������������������������������� ZooKeeper ������������, ������������������������(��� dataDir ���������������) ��������������� myid ������, ���������������������������, ������������������������������Server ID���

  • ZooKeeper ���������, ��������������������� zoo.cfg ���������������������������

  • server.1 ��� myid ������������������ "1"��������������������� myid ���������������, ��������������������������� zoo.cfg ��������������� "server.id=host:port:port" ��� id ������������

  • id ������������ 1 ~ 255���

������myid���������������zookeeper���id������server.ID���������

��� dataDir ������������������ (��� /data/zookeeper/data ������) ������������ myid ���������, ��������������� zoo.cfg ������������������ id ���������������������������, master ��� myid ��������������� 1���

������������������, ��� 132 ��� 133 ������ zoo.cfg ��� myid ���������zoo.cfg������������������, 132 ��� myid ��������������� 2, 133 ��� myid ��������������� 3���

#������1���zookeeper���192.168.163.131������������id=1echo "1" >/data/zookeeper/data/myid#������2���zookeeper���192.168.163.132������������id=2 echo "2" >/data/zookeeper/data/myid#������3���zookeeper���192.168.163.133������������id=3echo "3" >/data/zookeeper/data/myid

���������������zkServer.sh start

root@test1:~# zkServer.sh startZooKeeper JMX enabled by defaultUsing config: /usr/local/zookeeper/bin/../conf/zoo.cfgStarting zookeeper ... STARTED

���������������������zkServer.sh status

root@test1:~# zkServer.sh statusZooKeeper JMX enabled by defaultUsing config: /usr/local/zookeeper/bin/../conf/zoo.cfgMode: leaderroot@test2:~# zkServer.sh statusZooKeeper JMX enabled by defaultUsing config: /usr/local/zookeeper/bin/../conf/zoo.cfgMode: followerroot@test3:~# zkServer.sh statusZooKeeper JMX enabled by defaultUsing config: /usr/local/zookeeper/bin/../conf/zoo.cfgMode: follower

���������zkServer.sh stop

root@test2:~# zkServer.sh stopZooKeeper JMX enabled by defaultUsing config: /usr/local/zookeeper/bin/../conf/zoo.cfgStopping zookeeper ... STOPPED

������Zookeeper���������������

2���Codis���������

������go���������codis������go���������

#���������sudo tar -C /usr/local -xzf go1.10.3.linux-amd64.tar.gz ���������������������vim /etc/profile���������##goexport GOROOT=/usr/local/goexport PATH=$PATH:$GOROOT/bin#������������codis���������export GOPATH=/opt/gowork ##mkdir -p /opt/gowork���������������������source /etc/profile���������root@test2:~# go versiongo version go1.10.3 linux/amd64

������������������������

mkdir /opt/gowork

������go������������������������������������������������Codis���

#������������mkdir -p /opt/gowork/src/github.com/CodisLabs#git clone������mv codis /opt/gowork/src/github.com/CodisLabs/#������������cd /opt/gowork/src/github.com/CodisLabs/codis#������makemake gotest

���������������������������������������������������

ln -s /opt/gowork/src/github.com/CodisLabs/codis/ /usr/local/codis

������������������������

vim /etc/profile#������# Codisexport CODIS_HOME=/usr/local/codisexport PATH=$PATH:$CODIS_HOME/bin#������������������source /etc/profile

������������Codis

��� ������������������������codis���������������������������������������131���dashboard���proxy���fe���������������������������������

mkdir -p /etc/codis/codis-dashboardmkdir -p /etc/codis/codis-proxy ������������mkdir -p /etc/codis/codis-server ������������mkdir -p /etc/codis/codis-femkdir ���p /etc/codis/codis-ha

��� ������codis-server���redis������������������������

cp /usr/local/codis/extern/redis-3.2.11/redis.conf /etc/codis/codis-server/redis7021.conf

������redis7021.conf���

# bind 127.0.0.1 protected-mode noport 7021daemonize yespidfile /var/lib/redis_7021/redis_7021.pidlogfile "/var/lib/redis_7021/redis_7021.log"dbfilename 7021dump.rdbdir /var/lib/redis_7021/appendfilename "7021appendonly.aof"

���������������������������������������

mkdir /var/lib/redis_7021

���������������codis-server���

cd /etc/codis/codis-servercp redis7021.conf redis7022.conf sed -i "s/7021/7022/g" redis7022.conf mkdir /var/lib/redis_7022

������codis-server���

codis-server /etc/codis/codis-server/redis7021.conf codis-server /etc/codis/codis-server/redis7022.conf

���������������������������2���codis-server���������������������7021���7022���������������������������������������������������������������������������������������������������������������codis-server������������

Group ��� ���
1 192.168.163.131:7021 192.168.163.132:7022
2 192.168.163.132:7021 192.168.163.133:7022
3 192.168.163.133:7021 192.168.163.131:7022

 

 

 

 

������codis-fe������������Group������������������������codis-dashboard���codis-fe������������������������

��� ������������������

cd /etc/codis/codis-dashboard/cp /usr/local/codis/config/dashboard.toml /etc/codis/codis-dashboard/

���������������vim /etc/codis/codis-dashboard/dashboard.toml

###################################################                                                ##                  Codis-Dashboard               ##                                                #################################################### Set Coordinator, only accept "zookeeper" & "etcd" & "filesystem".# for zookeeper/etcd, coorinator_auth accept "user:password" # Quick Start#coordinator_name = "filesystem"#coordinator_addr = "/tmp/codis"coordinator_name = "zookeeper"coordinator_addr = "192.168.163.131:2181,192.168.163.132:2181,192.168.163.133:2181"  #zk���������������������������#coordinator_auth = ""# Set Codis Product Name/Auth.product_name = "codis-testX" #������������product_auth = ""  #������������# Set bind address for admin(rpc), tcp only.admin_addr = "192.168.163.131:18080" restful api���������# Set arguments for data migration (only accept 'sync' & 'semi-async').migration_method = "semi-async"migration_parallel_slots = 100migration_async_maxbulks = 200migration_async_maxbytes = "32mb"migration_async_numkeys = 500migration_timeout = "30s"# Set configs for redis sentinel.sentinel_client_timeout = "10s"sentinel_quorum = 2sentinel_parallel_syncs = 1sentinel_down_after = "30s"sentinel_failover_timeout = "5m"sentinel_notification_script = ""sentinel_client_reconfig_script = ""

���

������ ������
coordinator_name ��������������������������� zookeeper/etcd
coordinator_addr ������������������
product_name ��������������������������� \w[\w\.\-]*
product_auth ���������������������������
admin_addr RESTful API ������

������codis���������������������codis������log������

mkdir /usr/local/codis/logs

codis-dashboard���������������������

codis-dashboard --ncpu=1 --config=/etc/codis/codis-dashboard/dashboard.toml --log=/usr/local/codis/logs/dashboard.log --log-level=warn &##--ncpu=N ������������ CPU ������;##-c  CONF, --config=CONF ������������������������;##-l   FILE, --log=FILE ������ log ������������;##--log-level=LEVEL ������ log ���������������INFO,WARN,DEBUG,ERROR���������INFO���������WARN;##������������������������������������������������������������codis-proxy ������;##������ codis-proxy ��������� codis-dashboard ���������������������

������codis-dashboard���������

codis-admin --dashboard=192.168.163.131:18080 --shutdown

���������������������������������������������Proxy������������������������������Proxy���

���������������proxy_max_clients

cd /etc/codis/codis-proxy/cp /usr/local/codis/config/proxy.toml /etc/codis/codis-proxy/

���������������vim /etc/codis/codis-proxy/proxy.toml

###################################################                                                ##                  Codis-Proxy                   ##                                                #################################################### Set Codis Product Name/Auth.product_name = "codis-testX"  #���dashboard������product_auth = ""# Set auth for client session#   1. product_auth is used for auth validation among codis-dashboard,#      codis-proxy and codis-server.#   2. session_auth is different from product_auth, it requires clients#      to issue AUTH 
before processing any other commands.session_auth = ""# Set bind address for admin(rpc), tcp only.admin_addr = "192.168.163.131:11080" #������������������������������������������������Proxy# Set bind address for proxy, proto_type can be "tcp", "tcp4", "tcp6", "unix" or "unixpacket".proto_type = "tcp4"proxy_addr = "192.168.163.131:19000" #������������������������������������������������Proxy# Set jodis address & session timeout# 1. jodis_name is short for jodis_coordinator_name, only accept "zookeeper" & "etcd".# 2. jodis_addr is short for jodis_coordinator_addr# 3. jodis_auth is short for jodis_coordinator_auth, for zookeeper/etcd, "user:password" is accepted.# 4. proxy will be registered as node:# if jodis_compatible = true (not suggested):# /zk/codis/db_{PRODUCT_NAME}/proxy-{HASHID} (compatible with Codis2.0)# or else# /jodis/{PRODUCT_NAME}/proxy-{HASHID}jodis_name = "zookeeper"jodis_addr = "192.168.163.131:2181,192.168.163.132:2181,192.168.163.133:2181"jodis_auth = ""jodis_timeout = "20s"jodis_compatible = false......

���������������

������ ������
product_name ��������������������� dashboard ������������
product_auth ���������������������������
admin_addr RESTful API ������
proto_type Redis ��������������������� tcp/tcp4/tcp6/unix/unixpacket
proxy_addr Redis ������������������������
jodis_addr Jodis ������ zookeeper ������
jodis_timeout Jodis ������ session timeout ��������������� second
jodis_compatible Jodis ������ zookeeper ���������
backend_ping_period ��� codis-server ��������������������� second���0 ������������
session_max_timeout ��� client ������������������������������ second���0 ������������
session_max_bufsize ��� client ������������������������������������ byte
session_max_pipeline ��� client ��������������� pipeline ������
session_keepalive_period ��� client ��� tcp keepalive ������������ tcp ���������0 ������������

codis-proxy���������������������

codis-proxy --ncpu=1 --config=/etc/codis/codis-proxy/proxy.toml --log=/usr/local/codis/logs/proxy.log --log-level=warn &

codis-proxy ������������������ waiting online ������(������������)��������� proxy_addr ��������������������� accept ������������������������������������������������������������������������������ online������������������������������������

  • ������ codis-fe ��������������� Add Proxy ������������ admin_addr ���������������������������������
  • ������ codis-admin ���������������������������������������
    codis-admin --dashboard=192.168.163.131:18080 --create-proxy -x 192.168.163.131:11080

������ 192.168.163.131:18080 ������ 192.168.163.131:11080 ��������� dashboard ��� proxy ��� admin_addr ���������������������������codis-fe���������

������������������dashboard ���������������������������������

  • ������ proxy ������������������ name ������ auth ���������������������������������������������������������zookeeper������
  • ������ slots ���������
  • ������ proxy ��������� online��������� proxy ������ accept ������������������������������

������codis-proxy���������

codis-admin --proxy=192.168.163.131:11080 --shutdown

���������������kill Proxy������zk���codis3������������������������������codis-admin���������codis-proxy������ 

������������������������

������������ codis.json ������������������������������������ codis-admin ���������������������������

cd /etc/codis/codis-fe/codis-admin --dashboard-list --zookeeper=192.168.163.131:2181 | tee codis.json

codis-fe���

codis-fe --ncpu=1 --dashboard-list=/etc/codis/codis-fe/codis.json --listen=192.168.163.131:18090 --log=/usr/local/codis/logs/fe.log --log-level=warn --assets-dir=/usr/local/codis/bin/assets/ &

������codis-fe���

ps -ef|grep codis-fe|grep -v grep|awk '{print $2}'|xargs kill

������codis-fe������web������������������������fe���������������������������������������������������fe���������������������������������������������������������������������

1���������proxy������������������������������������admin_addr������������������������codis-proxy���������waiting online������

������SYNC���������������������Proxy������Slots������������������������ 

fill slot 0000, backend.addr = 192.168.163.133:7021, locked = falsefill slot 0001, backend.addr = 192.168.163.133:7021, locked = falsefill slot 0002, backend.addr = 192.168.163.133:7021, locked = falsefill slot 0003, backend.addr = 192.168.163.133:7021, locked = false......

 2���������Group������������������Group���������������������������������������������������������������������������codis-server������������������������������������������������������������������codis-fe���������������������������������������group���

Group ��� ���
1 192.168.163.131:7021 192.168.163.132:7022

 

 

���������������������fe���������������������������������Server���master���

���������������PROMOTE���������slave���������������master���������������master���������������������������������������������

������������������������GROUP 2���3���������������������������

������codis-fe���������codis-server���redis���������������������������������������������

3������������Slots���������������������������������codis���������������������������������������������Slots���������������������������������������

���0~300���slots���������Group1���301~800���slots���������Group2���801~1023���slots���������Group3���������������������������

������������������������slots���������������������������������condis-admin���������������

codis-admin --dashboard=192.168.163.131:18080 --slots-status

������Slots���

���Group1������10���slots���Group3���������������������������������

���������Slots���������zk������������������������

2018/07/03 12:54:09 zkclient.go:272: [DEBUG] zkclient update node /codis3/codis-testX/slots/slot-00082018/07/03 12:54:09 zkclient.go:280: [DEBUG] zkclient update OK

������������codis���������������������������������������������������������������������������������������������������������Codis-Server���������

������Group1���������������������Proxy������������������������������Group���Slots���������������

root@test1:~# redis-cli -h 192.168.163.132 -p 19000 #���������������Proxy192.168.163.133:19000> get age(error) ERR handle response, backend conn reset

HA���������������������������HA������������������

������������������codis-ha

codis-ha --log=/usr/local/codis/logs/ha.log --log-level=warn --dashboard=192.168.163.131:18080&

���������codis-ha���������������������������������������������������������������������������������������codis-ha������������������������������������codis-ha���������������codis-ha���������������������������codis-fe������������������������������������������������������������������������������������������������������Sentinel���������codis-ha���

������������Sentinel 3������������������������������������������codis-ha���sentinel���������������������

���������codis���������sentinel���������������group������Redis���������������������������codis-fe������������Sentinel���������������������������������������������������������������codis������������������������

������������������������

mkdir -p /var/lib/sentinel

���������������������cp /usr/local/codis/extern/redis-3.2.11/sentinel.conf /etc/codis/codis-server/

vim /etc/codis/codis-server/sentinel.conf

port 10086dir "/var/lib/sentinel"logfile "/var/lib/sentinel/sentinel.log"daemonize yesprotected-mode no

������������������������Sentinel������������������������codis-fe������������������������

������Sentinel������������������������������

codis-server /etc/codis/codis-server/sentinel.conf --sentinel

������������������dashboard���������������������

codis-admin --dashboard=192.168.163.131:18080 --sentinel-add --addr=192.168.163.131:10086codis-admin --dashboard=192.168.163.131:18080 --sentinel-add --addr=192.168.163.132:10086codis-admin --dashboard=192.168.163.131:18080 --sentinel-add --addr=192.168.163.133:10086

������codis-fe���������

���3������������Sentinel������������������Group������������������������������������������codis-fe������������������������������������codis-fe������Group���������������������������������������������������������[HA]���������

������Group1���������������������Proxy������������������������������Group���Slots���������������

192.168.163.131:19000> get age(error) ERR handle response, backend conn reset192.168.163.131:19000> get age"1233"

������������Group1���������shutdown���������Sentinel������������������������������������������������������������������������������������Group���������������������������������Sentinel���������������������slaveof ������������������������������������codis-fe���������������������������������������������������OUT OF SYNC������������������������������SYNC������������������������������������������codis-server������������������������������codis���������������������������������auth������������������������������

���������������Group1���������������������������������������������������Group2���������������������������slots���������������������������

���������������������������������key���������������������Proxy������������������������������������������

Codis-admin���������

���������������������������fe���web���������������������������������������������������������������������������������Codis-admin���������������������

root@test1:~# codis-admin --helpUsage:    codis-admin [-v] --proxy=ADDR [--auth=AUTH] [config|model|stats|slots]    codis-admin [-v] --proxy=ADDR [--auth=AUTH]  --start    codis-admin [-v] --proxy=ADDR [--auth=AUTH]  --shutdown    codis-admin [-v] --proxy=ADDR [--auth=AUTH]  --log-level=LEVEL    codis-admin [-v] --proxy=ADDR [--auth=AUTH]  --fillslots=FILE [--locked]    codis-admin [-v] --proxy=ADDR [--auth=AUTH]  --reset-stats    codis-admin [-v] --proxy=ADDR [--auth=AUTH]  --forcegc    codis-admin [-v] --dashboard=ADDR           [config|model|stats|slots|group|proxy]    codis-admin [-v] --dashboard=ADDR            --shutdown    codis-admin [-v] --dashboard=ADDR            --reload    codis-admin [-v] --dashboard=ADDR            --log-level=LEVEL    codis-admin [-v] --dashboard=ADDR            --slots-assign   --beg=ID --end=ID (--gid=ID|--offline) [--confirm]    codis-admin [-v] --dashboard=ADDR            --slots-status    codis-admin [-v] --dashboard=ADDR            --list-proxy    codis-admin [-v] --dashboard=ADDR            --create-proxy   --addr=ADDR    codis-admin [-v] --dashboard=ADDR            --online-proxy   --addr=ADDR    codis-admin [-v] --dashboard=ADDR            --remove-proxy  (--addr=ADDR|--token=TOKEN|--pid=ID)       [--force]    codis-admin [-v] --dashboard=ADDR            --reinit-proxy  (--addr=ADDR|--token=TOKEN|--pid=ID|--all) [--force]    codis-admin [-v] --dashboard=ADDR            --proxy-status    codis-admin [-v] --dashboard=ADDR            --list-group    codis-admin [-v] --dashboard=ADDR            --create-group   --gid=ID    codis-admin [-v] --dashboard=ADDR            --remove-group   --gid=ID    codis-admin [-v] --dashboard=ADDR            --resync-group  [--gid=ID | --all]    codis-admin [-v] --dashboard=ADDR            --group-add      --gid=ID --addr=ADDR [--datacenter=DATACENTER]    codis-admin [-v] --dashboard=ADDR            --group-del      --gid=ID --addr=ADDR    codis-admin [-v] --dashboard=ADDR            --group-status    codis-admin [-v] --dashboard=ADDR            --replica-groups --gid=ID --addr=ADDR (--enable|--disable)    codis-admin [-v] --dashboard=ADDR            --promote-server --gid=ID --addr=ADDR    codis-admin [-v] --dashboard=ADDR            --sync-action    --create --addr=ADDR    codis-admin [-v] --dashboard=ADDR            --sync-action    --remove --addr=ADDR    codis-admin [-v] --dashboard=ADDR            --slot-action    --create --sid=ID --gid=ID    codis-admin [-v] --dashboard=ADDR            --slot-action    --remove --sid=ID    codis-admin [-v] --dashboard=ADDR            --slot-action    --create-some  --gid-from=ID --gid-to=ID --num-slots=N    codis-admin [-v] --dashboard=ADDR            --slot-action    --create-range --beg=ID --end=ID --gid=ID    codis-admin [-v] --dashboard=ADDR            --slot-action    --interval=VALUE    codis-admin [-v] --dashboard=ADDR            --slot-action    --disabled=VALUE    codis-admin [-v] --dashboard=ADDR            --rebalance     [--confirm]    codis-admin [-v] --dashboard=ADDR            --sentinel-add   --addr=ADDR    codis-admin [-v] --dashboard=ADDR            --sentinel-del   --addr=ADDR [--force]    codis-admin [-v] --dashboard=ADDR            --sentinel-resync    codis-admin [-v] --remove-lock               --product=NAME (--zookeeper=ADDR [--zookeeper-auth=USR:PWD]|--etcd=ADDR [--etcd-auth=USR:PWD]|--filesystem=ROOT)    codis-admin [-v] --config-dump               --product=NAME (--zookeeper=ADDR [--zookeeper-auth=USR:PWD]|--etcd=ADDR [--etcd-auth=USR:PWD]|--filesystem=ROOT) [-1]    codis-admin [-v] --config-convert=FILE    codis-admin [-v] --config-restore=FILE       --product=NAME (--zookeeper=ADDR [--zookeeper-auth=USR:PWD]|--etcd=ADDR [--etcd-auth=USR:PWD]|--filesystem=ROOT) [--confirm]    codis-admin [-v] --dashboard-list                           (--zookeeper=ADDR [--zookeeper-auth=USR:PWD]|--etcd=ADDR [--etcd-auth=USR:PWD]|--filesystem=ROOT)Options:    -a AUTH, --auth=AUTH    -x ADDR, --addr=ADDR    -t TOKEN, --token=TOKEN    -g ID, --gid=ID
View Code

���������������������codis-admin������������������

1. ������Proxy������������model������������slots���������������������������������������������
codis-admin [-v] --proxy=ADDR [--auth=AUTH] [config|model|stats|slots]
# codis-admin --proxy=192.168.163.132:11080 config���������proxy.toml������������������proxy���zk������������������# codis-admin --proxy=192.168.163.132:11080 model���������������ZK������������Proxy������������������������������������������# codis-admin --proxy=192.168.163.132:11080 stats������Proxy���������������sentinel���������ops���qps���������������������# codis-admin --proxy=192.168.163.132:11080 slots������Slots���������slot���������group���������Redis Server������

2. ������������Proxy������������������������������online���������������������������������������codis-proxy ������������������ waiting online ������������������������online������������zk���jodis���

codis-admin [-v] --proxy=ADDR [--auth=AUTH] --start/--shutdown

# codis-admin --proxy=192.168.163.132:11080 --start ��������� proxy waiting online ... ��������� proxy is working ...���������������zk���jodis������������API call /api/proxy/start/003acf3b450ebe66f56b8af4cc9c7d2d from 192.168.163.132:52426 []jodis create node /jodis/codis-testX/proxy-1d24e313bee99f26174110c009714530# codis-admin --proxy=192.168.163.132:11080 --shutdown���������������������Proxy���������������zk������������������������������API call /api/proxy/shutdown/003acf3b450ebe66f56b8af4cc9c7d2d from 192.168.163.132:52428 []admin shutdownproxy shutdownjodis remove node /jodis/codis-testX/proxy-1d24e313bee99f26174110c009714530proxy is exiting ...

3. proxy ������������������������

codis-admin [-v] --proxy=ADDR [--auth=AUTH] --log-level=LEVEL

# codis-admin --proxy=192.168.163.132:11080 --log-level=info������������������API call /api/proxy/loglevel/003acf3b450ebe66f56b8af4cc9c7d2d/INFO from 192.168.163.132:52432 []set loglevel to INFO

4. ������Proxy������

codis-admin [-v] --proxy=ADDR [--auth=AUTH] --reset-stats

# codis-admin --proxy=192.168.163.132:11080 --reset-stats API call /api/proxy/stats/reset/003acf3b450ebe66f56b8af4cc9c7d2d from 192.168.163.133:57436 []������Proxy���QPS���OPS���Fail���Errors���Commands������

5. ������������Proxy������

codis-admin [-v] --proxy=ADDR [--auth=AUTH] --forcegc

# codis-admin --proxy=192.168.163.132:11080 --forcegc API call /api/proxy/forcegc/003acf3b450ebe66f56b8af4cc9c7d2d from 192.168.163.133:57437 []������Proxy���������������

6. ������dashboard������������model������������slots���������proxy���������

codis-admin [-v] --dashboard=ADDR [config|model|stats|slots|group|proxy]

# codis-admin --dashboard=192.168.163.131:18080 config������dashboard���������������dashboard.toml���������������# codis-admin --dashboard=192.168.163.131:18080 model������model������    # codis-admin --dashboard=192.168.163.131:18080 stats������slot���group������������������group���������group���������server������server���������������proxy���������sentinel���������server���������server���������������proxy CPU��������������������������� slots������������������������������������������sentine���������������������������������server������# codis-admin --dashboard=192.168.163.131:18080 slotsslot���group���������������# codis-admin --dashboard=192.168.163.131:18080 group������������������server���������������# codis-admin --dashboard=192.168.163.131:18080 proxyproxy���������������sentinel���server������������proxy cpu������������������������ops���qps���commands���������������������session������

7. ���������������������dashboard

codis-admin [-v] --dashboard=ADDR --shutdown/--reload
# codis-admin --dashboard=192.168.163.131:18080 --shutdown������dashboard���������zk������topomAPI call /api/topom/shutdown/4c0ca749efb5aad2b20b8d84b1bb6905 from 192.168.163.132:42772 []admin exit on error# codis-admin --dashboard=192.168.163.131:18080 --reload������dashboard���������������������������API call /api/topom/reload/4c0ca749efb5aad2b20b8d84b1bb6905 from 192.168.163.132:42778 []

8. dashboard������������������������

codis-admin [-v] --dashboard=ADDR --log-level=LEVEL

# codis-admin --dashboard=192.168.163.131:18080 --log-level=infoAPI call /api/topom/loglevel/4c0ca749efb5aad2b20b8d84b1bb6905/INFO from 192.168.163.132:42780 []set loglevel to INFO

9. proxy���������dashboard������online

codis-admin [-v] --dashboard=ADDR --create-proxy --addr=ADDR
# codis-admin --dashboard=192.168.163.131:18080 --create-proxy --addr=192.168.163.131:11080proxy���������dashboard���[WARN] [0xc4202d17a0]  API call /api/topom/proxy/create/4c0ca749efb5aad2b20b8d84b1bb6905/192.168.163.131:11080 from 192.168.163.132:42824 [][WARN] create proxy-[1d24e313bee99f26174110c009714530]...

10. proxy online���������1024���������codis-admin [-v] --dashboard=ADDR --online-proxy --addr=ADDR

# codis-admin --dashboard=192.168.163.131:18080 --online-proxy --addr=192.168.163.133:11080#proxy online[WARN] [0xc4200be790] API call /api/proxy/start/f6eadfec468df5b262af66e292a27699 from 192.168.163.131:57976 [][WARN] [0xc4200be790] API call /api/proxy/sentinels/f6eadfec468df5b262af66e292a27699 from 192.168.163.131:57976 [][WARN] [0xc4200be790] set sentinels = []

11. ������proxy ���������codis-admin [-v] --dashboard=ADDR --list-proxy

# codis-admin --dashboard=192.168.163.131:18080  --list-proxy���������dashboard������proxy���������������

12. ������proxy���codis-admin [-v] --dashboard=ADDR --remove-proxy (--addr=ADDR|--token=TOKEN|--pid=ID) [--force]

# codis-admin --dashboard=192.168.163.131:18080 --remove-proxy --addr=192.168.163.133:11081 ���������������������ip���token���pid���������proxy[WARN] [0xc4200be790] API call /api/proxy/shutdown/f6eadfec468df5b262af66e292a27699 from 192.168.163.131:58144 [][WARN] [0xc4200be790] proxy shutdown[WARN] [0xc4200be790] admin shutdown[WARN] jodis remove node /jodis/codis-testX/proxy-697e01c6c8b8aaf399599992e7108d35[WARN] [0xc4200be790] proxy is exiting ...

13. reinit proxy���codis-admin [-v] --dashboard=ADDR --reinit-proxy (--addr=ADDR|--token=TOKEN|--pid=ID|--all) [--force]

# codis-admin --dashboard=192.168.163.131:18080 --reinit-proxy --addr=192.168.163.132:11080���������slots(1024)[WARN] [0xc4200c68f0] API call /api/proxy/start/00d4e51e15eb811441ad228e44550b81 from 192.168.163.131:59242 [][WARN] [0xc4200c68f0] API call /api/proxy/sentinels/00d4e51e15eb811441ad228e44550b81 from 192.168.163.131:59242 [][WARN] [0xc4200c68f0] set sentinels = []

14 .������proxy������������������������������������

# codis-admin --dashboard=192.168.163.131:18080 --proxy-status[ ] proxy-1 [T] 4f07158ae347d67b1af825fd8e84b2f9 [A] 192.168.163.131:11080 [P] 192.168.163.131:19000[ ] proxy-2 [T] 1d24e313bee99f26174110c009714530 [A] 192.168.163.132:11080 [P] 192.168.163.132:19000[ ] proxy-3 [T] cfa02d4002da74e6b1f3b51f1416aa1d [A] 192.168.163.133:11080 [P] 192.168.163.133:19000

15. ������group���������codis-admin [-v] --dashboard=ADDR --list-group

# codis-admin --dashboard=192.168.163.131:18080 --list-group������group������

16. ������group���codis-admin [-v] --dashboard=ADDR --create-group --gid=ID

# codis-admin --dashboard=192.168.163.131:18080 --create-group --gid=1������������group[WARN] [0xc4202d17a0] API call /api/topom/group/create/4c0ca749efb5aad2b20b8d84b1bb6905/1 from 192.168.163.132:43114 [][WARN] create group-[1]:{    "id": 1,    "servers": [],    "promoting": {},    "out_of_sync": false}

17. ������group���codis-admin [-v] --dashboard=ADDR --remove-group --gid=ID

# codis-admin --dashboard=192.168.163.131:18080 --remove-group --gid=1������������group[WARN] [0xc4202d17a0] API call /api/topom/group/remove/4c0ca749efb5aad2b20b8d84b1bb6905/1 from 192.168.163.132:43116 [][WARN] remove group-[1]:{    "id": 1,    "servers": [],    "promoting": {},    "out_of_sync": false}

18. group���������server���codis-admin [-v] --dashboard=ADDR --group-add --gid=ID --addr=ADDR [--datacenter=DATACENTER]

# codis-admin --dashboard=192.168.163.131:18080 --group-add --gid=1 --addr=192.168.163.131:7021group1���������������redis-server[WARN] [0xc4202d17a0] API call /api/topom/group/add/4c0ca749efb5aad2b20b8d84b1bb6905/1/192.168.163.131:7021 from 192.168.163.132:43130 [][WARN] update group-[1]:{    "id": 1,    "servers": [        {            "server": "192.168.163.131:7021",            "datacenter": "",            "action": {},            "replica_group": false        }    ],    "promoting": {},    "out_of_sync": false}

19.  group���������server���codis-admin [-v] --dashboard=ADDR --group-del --gid=ID --addr=ADDR [--datacenter=DATACENTER]

# codis-admin --dashboard=192.168.163.131:18080 --group-del --gid=1 --addr=192.168.163.132:7021������group������server[WARN] [0xc4202d17a0] API call /api/topom/group/del/4c0ca749efb5aad2b20b8d84b1bb6905/1/192.168.163.132:7021 from 192.168.163.132:43140 [][WARN] update group-[1]:{    "id": 1,    "servers": [        {            "server": "192.168.163.131:7021",            "datacenter": "",            "action": {},            "replica_group": false        }    ],    "promoting": {},    "out_of_sync": false}

20. ������group���������M-S������������������������������group������������������codis-admin [-v] --dashboard=ADDR --replica-groups --gid=ID --addr=ADDR (--enable|--disable)

# codis-admin --dashboard=192.168.163.131:18080 --replica-groups --gid=13 --addr=192.168.163.133:7021 --enable# codis-admin --dashboard=192.168.163.131:18080 --replica-groups --gid=13 --addr=192.168.163.133:7022 --enable���������group���2���sever���������������������[WARN] [0xc4202d17a0] API call /api/topom/group/replica-groups/4c0ca749efb5aad2b20b8d84b1bb6905/13/192.168.163.133:7022/1 from 192.168.163.132:43440 [][WARN] update group-[13]:{    "id": 13,    "servers": [        {            "server": "192.168.163.133:7021",            "datacenter": "",            "action": {},            "replica_group": true        },        {            "server": "192.168.163.133:7022",            "datacenter": "",            "action": {},            "replica_group": true        }    ],    "promoting": {},    "out_of_sync": false}

21. ������������������2���server���������������������������������codis-admin [-v] --dashboard=ADDR --sync-action --create --addr=ADDR

# codis-admin --dashboard=192.168.163.131:18080 --sync-action --create --addr=192.168.163.133:7022���������������2���server���������[WARN] [0xc4202d17a0] API call /api/topom/group/replica-groups/4c0ca749efb5aad2b20b8d84b1bb6905/13/192.168.163.133:7021/0 from 192.168.163.131:41954 [192.168.163.1][WARN] update group-[13]:{    "id": 13,    "servers": [        {            "server": "192.168.163.133:7021",            "datacenter": "",            "action": {},            "replica_group": false        },        {            "server": "192.168.163.133:7022",            "datacenter": "",            "action": {                "state": "synced"            },            "replica_group": true        }    ],    "promoting": {},    "out_of_sync": false}

22. ������group���������codis-admin [-v] --dashboard=ADDR --group-status

# codis-admin --dashboard=192.168.163.131:18080 --group-status���������������������������[ ] group-11 [0] 192.168.163.131:7022      ==> NO:ONE[ ] group-11 [1] 192.168.163.131:7021      ==> 192.168.163.131:7022:up[ ] group-12 [0] 192.168.163.132:7021      ==> NO:ONE[ ] group-12 [1] 192.168.163.132:7022      ==> 192.168.163.132:7021:up[ ] group-13 [0] 192.168.163.133:7021      ==> NO:ONE[ ] group-13 [1] 192.168.163.133:7022      ==> 192.168.163.133:7021:up

23. ������������������������������������codis-admin [-v] --dashboard=ADDR --promote-server --gid=ID --addr=ADDR

# codis-admin --dashboard=192.168.163.131:18080 --promote-server --gid=13 --addr=192.168.163.133:7022������13������������������������������# codis-admin --dashboard=192.168.163.131:18080 --group-status[ ] group-11 [0] 192.168.163.131:7022      ==> NO:ONE[ ] group-11 [1] 192.168.163.131:7021      ==> 192.168.163.131:7022:up[ ] group-12 [0] 192.168.163.132:7021      ==> NO:ONE[ ] group-12 [1] 192.168.163.132:7022      ==> 192.168.163.132:7021:up[ ] group-13 [0] 192.168.163.133:7022      ==> NO:ONE[X] group-13 [1] 192.168.163.133:7021      ==> NO:ONE[WARN] group-[13] resync to prepared������������������������������������������������������������21���������--sync-action --create

24. ������slot���������slot������codis-admin [-v] --dashboard=ADDR --slot-action --create --sid=ID --gid=ID

# codis-admin --dashboard=192.168.163.131:18080 --slot-action --create --sid=0 --gid=11������slot0 ���group11���[WARN] [0xc4202d17a0] API call /api/topom/slots/action/create/4c0ca749efb5aad2b20b8d84b1bb6905/0/11 from 192.168.163.132:43524 [][WARN] update slot-[0]:pending -> preparing ->prepared ->migrating -> finished

25. ������slot���������slot������codis-admin [-v] --dashboard=ADDR --slot-action --remove --sid=ID

# codis-admin --dashboard=192.168.163.131:18080 --slot-action --remove --sid=1

26. ������������������������slots������������group���codis-admin [-v] --dashboard=ADDR --slot-action --create-range --beg=ID --end=ID --gid=ID

# codis-admin --dashboard=192.168.163.131:18080 --slot-action --create-range --beg=5 --end=100 --gid=11

27. ������������slots���������codis-admin [-v] --dashboard=ADDR --slot-action --disabled=VALUE

# codis-admin --dashboard=192.168.163.131:18080 --slot-action --disabled=0������slots������[WARN] [0xc4202d17a0] API call /api/topom/slots/action/disabled/4c0ca749efb5aad2b20b8d84b1bb6905/0 from 192.168.163.132:43936 [][WARN] set action disabled = false������slots������[WARN] [0xc4202d17a0] API call /api/topom/slots/action/disabled/4c0ca749efb5aad2b20b8d84b1bb6905/1 from 192.168.163.132:43938 [][WARN] set action disabled = true

28. ������slots������group������slots���codis-admin [-v] --dashboard=ADDR --rebalance [--confirm]

# codis-admin --dashboard=192.168.163.131:18080 --rebalance[0517,1023] => 12done# codis-admin --dashboard=192.168.163.131:18080 --rebalancenothing changes

29. ������sentinel���������������������codis-admin [-v] --dashboard=ADDR --sentinel-add --addr=ADDR

# codis-admin --dashboard=192.168.163.131:18080 --sentinel-add --addr=192.168.163.131:10086������������sentinel[WARN] [0xc4202d17a0] API call /api/topom/sentinels/add/4c0ca749efb5aad2b20b8d84b1bb6905/192.168.163.131:10086 from 192.168.163.132:43950 [][WARN] update sentinel:{    "servers": [        "192.168.163.131:10086"    ],    "out_of_sync": true}

30. ������sentinel���codis-admin [-v] --dashboard=ADDR --sentinel-del --addr=ADDR [--force]

# codis-admin --dashboard=192.168.163.131:18080 --sentinel-del --addr=192.168.163.133:10086[WARN] [0xc4202d17a0] API call /api/topom/sentinels/del/4c0ca749efb5aad2b20b8d84b1bb6905/192.168.163.133:10086/0 from 192.168.163.132:43956 [][WARN] update sentinel:{    "servers": [        "192.168.163.131:10086",        "192.168.163.132:10086",        "192.168.163.133:10086"    ],    "out_of_sync": true}[WARN] update sentinel:{    "servers": [        "192.168.163.131:10086",        "192.168.163.132:10086"    ],    "out_of_sync": true}

31. ���������������codis-admin [-v] --dashboard=ADDR --sentinel-resync

# codis-admin --dashboard=192.168.163.131:18080 --sentinel-resync���������������������������������resync[WARN] [0xc4202d17a0] API call /api/topom/sentinels/resync-all/4c0ca749efb5aad2b20b8d84b1bb6905 from 192.168.163.132:43988 [][WARN] update sentinel:{    "servers": [        "192.168.163.131:10086",        "192.168.163.132:10086"    ],    "out_of_sync": true}[WARN] rewatch sentinels = [192.168.163.131:10086 192.168.163.132:10086][WARN] update sentinel:{    "servers": [        "192.168.163.131:10086",        "192.168.163.132:10086"    ],    "out_of_sync": false}

32. ���ZooKeeper������������������������������������dashboard���������codis-admin [-v] --dashboard-list (--zookeeper=ADDR [--zookeeper-auth=USR:PWD]|--etcd=ADDR [--etcd-auth=USR:PWD]|--filesystem=ROOT)

# codis-admin --dashboard-list --zookeeper=127.0.0.1:21812018/11/12 17:36:14 zkclient.go:23: [INFO] zookeeper - zkclient setup new connection to 127.0.0.1:21812018/11/12 17:36:14 zkclient.go:23: [INFO] zookeeper - Connected to 127.0.0.1:21812018/11/12 17:36:14 zkclient.go:23: [INFO] zookeeper - Authenticated: id=144120780119670793, timeout=400002018/11/12 17:36:14 zkclient.go:23: [INFO] zookeeper - Re-submitting `0` credentials after reconnect[    {        "name": "codis-testX",        "dashboard": "192.168.163.131:18080"    }]2018/11/12 17:36:15 zkclient.go:23: [INFO] zookeeper - Recv loop terminated: err=EOF

33. ���ZooKeeper���������������������������������������������slots���proxy���group������codis-admin [-v] --config-dump --product=NAME (--zookeeper=ADDR [--zookeeper-auth=USR:PWD]|--etcd=ADDR [--etcd-auth=USR:PWD]|--filesystem=ROOT) [-1]

# codis-admin --config-dump --product=codis-testX --zookeeper=127.0.0.1:21812018/11/12 17:40:34 zkclient.go:23: [INFO] zookeeper - zkclient setup new connection to 127.0.0.1:21812018/11/12 17:40:34 zkclient.go:23: [INFO] zookeeper - Connected to 127.0.0.1:21812018/11/12 17:40:34 zkclient.go:23: [INFO] zookeeper - Authenticated: id=144120780119670794, timeout=400002018/11/12 17:40:34 zkclient.go:23: [INFO] zookeeper - Re-submitting `0` credentials after reconnect{slots:proxy:groups:}

34. ���������������������codis-admin [-v] --config-convert=FILE

# codis-admin --config-convert codis_v2.0.json | tee codis_v3.0.json��������������� Codis 2.x ������������������������������������������������������������ Codis 3.x ������������������������������

35. ���������������������codis-admin [-v] --config-restore=FILE --product=NAME (--zookeeper=ADDR [--zookeeper-auth=USR:PWD]|--etcd=ADDR [--etcd-auth=USR:PWD]|--filesystem=ROOT) [--confirm]

codis-admin --config-restore=codis_v3.0.json --product=codis_v3.0 --zookeeper=127.0.0.1:2181 --confirm��������������� Codis 3.x ������������������������������ /codis3/codis_v3.0 ������������������ --confirm ������������������������������������������������������������������������������������

36. ���������������������dashboard���proxy���������������������������������������������������������������--remove-lock������zk���lock������������������������������

codis-admin [-v] --remove-lock --product=NAME (--zookeeper=ADDR [--zookeeper-auth=USR:PWD]|--etcd=ADDR [--etcd-auth=USR:PWD]|--filesystem=ROOT)

# codis-admin --remove-lock --product=codis-testX --zookeeper=127.0.0.1:21812018/11/12 18:00:25 zkclient.go:23: [INFO] zookeeper - zkclient setup new connection to 127.0.0.1:21812018/11/12 18:00:25 zkclient.go:23: [INFO] zookeeper - Connected to 127.0.0.1:21812018/11/12 18:00:25 zkclient.go:23: [INFO] zookeeper - Authenticated: id=216173149807312897, timeout=400002018/11/12 18:00:25 zkclient.go:23: [INFO] zookeeper - Re-submitting `0` credentials after reconnect2018/11/12 18:00:25 zkclient.go:23: [INFO] zookeeper - Recv loop terminated: err=EOF 

������

������������redis codis ������������������������������������������������������������������������Codis���������Redis���������������������������������������������������������������������������Codis���������������������������������������������������������������������

上一篇:percona-toolkit 之 【pt-archiver】
下一篇:GitHub 开源的 MySQL 在线更改 Schema 工具【转】

发表评论

最新留言

做的很好,不错不错
[***.243.131.199]2025年04月28日 06时42分51秒