The MySQL Cluster Autopilot Management with GTID and Raft

Overview

Github Actions Status Github Actions Status Github Actions Status Go Report Card codecov.io

Xenon

Overview

Xenon is a MySQL HA and Replication Management tool using Raft protocol.

Xenon has many cool features, such as:

  • Fast Failover with no lost transactions
  • Streaming & Speed-Unmatched backup/restore
  • MySQL Operation and Maintenance
  • No central control and easy-to-deploy
  • As a Cloud App

Architecture

Documentation

Use case

Xenon is production ready, it has been used in production like:

  • MySQL Plus - A Highly Available MySQL Clusters
  • RadonDB - A cloud-native MySQL database for building global, scalable cloud services

Issues

The integrated github issue tracker is used for this project.

License

Xenon is released under the GPLv3. See LICENSE

Comments
  • *: add http api for adapt kubernetes

    *: add http api for adapt kubernetes

    [summary] By using api can fix the kubernetes container memory increase unexpected bug.

    https://github.com/zhyass/mysql-operator/issues/17

    Before: https://github.com/zhyass/mysql-operator/blob/master/cluster/syncer/status.go#L270

    memory: 230+ M

    After:

    https://github.com/zhyass/radondb-mysql-kubernetes/blob/meg/cluster/syncer/status.go#L281

    memory: 17M

    opened by zhyass 8
  • [question] 基于xenon的mysql集群vip没有指定主库

    [question] 基于xenon的mysql集群vip没有指定主库

    拓扑描述: 192.168.36.115 master(主机名)----(主库) 192.168.36.116 slave (主机名)----(从库1) 192.168.36.117 normal(主机名)----(从库2)

    vip:192.168.36.200

    下面是3节点的配置文件: xenon1.txt xenon2.txt xenon3.txt

    下面是keepalived配置文件: keepalived1.txt keepalived2.txt

    集群状态 : 1111

    问题描述: 1111 因为每次通过VIPvip打开一个新的连接,mysql主机都改变,没有办法确通过VIP连接的一定是主库,而且后期我想通过proxysql做读写分离,proxysql是基于端口或者sql语句进行读写分离。但是我的mysql集群都基于xenon的搭建的,只有一个VIP和一个端口进行连接的,而且是访问后端mysql是轮询模式,怎么实现读写分离?

    请研发氙的同学帮忙解决一下。 thanks

    type: question 
    opened by deep-cds 7
  • server: add -r option on startup to specify the initial role

    server: add -r option on startup to specify the initial role

    We don't want to affect MySQL services when we upgrade xenon, so after the upgrade need to let the old LEADER continue to run as the LEADER and skip leaderStartShellCommand.

    type: feature 
    opened by dbkernel 6
  • 请教一个Failover问题

    请教一个Failover问题

    1

         Master(A)
    -----/------\----------网络分区----
    Slave1(B)  Slave2(C)
    

    如果出现网络分区, Master仍然存活, 但是Master无法和Slave1,2通信, A无法和B,C通信. 但是应用仍然可以访问Master, 但由于不满足半同步最小从库数, 所有写入都被阻塞等待ack, 此时Xenon会如何处理?

    2

         Master(A)
    -----/------\----------网络分区----
    Slave1(B)  Slave2(C)
    

    如果出现网络分区, Master hang(可能由于内核bug, 任何请求都无法响应), 且Master无法和Slave1,2通信, A无法和B,C通信. 应用也不能访问Master, 此时Xenon会如何处理?

    3

                  Master(A) ---> Slave4(E)
    -------/------|------\----------网络分区----
    Slave1(B)  Slave2(C)  Slave3(D)
    

    如果出现网络分区, Master和Slave4仍然存活, 但无法和Slave1,2,3通信, A,E无法和B,C,D通信, 应用仍然可以访问Master, 满足半同步最小从库数, 写入数据可以提交, 此时Xenon会如何处理?

    opened by Fanduzi 5
  • patch: increase Leader GetGTID timeout

    patch: increase Leader GetGTID timeout

    When mysqld is under high pressure, the value of timeout that the leader execute GetGTID each time should be different.

    The value of timeout needs to increase as the number of raft vote count. This case has no effect on the leader when the pressure is normal.

    If raft role is follower or candidate, it's no need to change the timeout.

    opened by TCeason 5
  • Xenon集群除了Master以外,另外两个节点log-bin无法备份

    Xenon集群除了Master以外,另外两个节点log-bin无法备份

    查看集群状态

    ./xenoncli cluster mysql +-------------------+----------+-------+-----------+------------------------+----------------+ | ID | Raft | Mysql | Option | Master_Log_File/Pos | IO/SQL_Running | Seconds_Behind | +-------------------+----------+-------+-----------+------------------------+----------------+ | 168.5.80.101:8801 | LEADER | ALIVE | READWRITE | [mysql-bin.000012/194] | [true/true] |
    +-------------------+----------+-------+-----------+------------------------+----------------+ | 168.5.80.110:8801 | FOLLOWER | ALIVE | READONLY | [/4] | [false/true] | +-------------------+----------+-------+-----------+------------------------+----------------+ | 168.5.80.94:8801 | FOLLOWER | ALIVE | READONLY | [/4] | [false/true] |
    +-------------------+----------+-------+-----------+------------------------+----------------+

    无法同步Slave节点日志

    2018/08/30 09:21:47.256256 [INFO] server.mysql.wait.for.work[maxwait:60s] 2018/08/30 09:21:47.259514 [INFO] mysql.slave.status:&{ 4 false No false No befc84a7-ab60-11e8-bf7c-005056896b97:1-8 } 2018/08/30 09:21:47.259545 [INFO] server.mysql.gtid:{Master_Log_File: Read_Master_Log_Pos:4 Relay_Master_Log_File: Slave_IO_Running:false Slave_IO_Running_Str:No Slave_SQL_Running:false Slave_SQL_Running_Str:No Retrieved_GTID_Set: Executed_GTID_Set:befc84a7-ab60-11e8-bf7c-005056896b97:1-8 Seconds_Behind_Master: Slave_SQL_Running_State: Last_Error: Last_IO_Error: Last_SQL_Error:} 2018/08/30 09:21:47.259549 [INFO] server.mysql.set.to.READONLY 2018/08/30 09:21:47.259802 [INFO] server.mysql.start.slave 2018/08/30 09:21:47.410705 [INFO] server.mysql.check.replication.user... 2018/08/30 09:21:47.410993 [INFO] server.mysql.setup.done 2018/08/30 09:21:47.410999 [INFO] server.prepare.setup.RPC 2018/08/30 09:21:47.411180 [INFO] server.RPC.setup.done 2018/08/30 09:21:47.411209 [INFO] mysqld[/etc/my.cnf].monitor.start... 2018/08/30 09:21:47.411216 [INFO] mysql[localhost:3306].startping... 2018/08/30 09:21:47.411224 [INFO] FOLLOWER[ID:168.5.80.94:8801, V:0, E:0].raft.start... 2018/08/30 09:21:47.411277 [WARNING] xrpc.Start.listening.on[168.5.80.94:8801] 2018/08/30 09:21:47.411280 [INFO] server.start.success... 2018/08/30 09:21:47.411283 [INFO] xenon.start.success...

    配置

    三个节点xenon配置几乎一样

        "replication":
        {
                "user":"root",
                "passwd":"123456"
        },
        "backup":
        {
                "ssh-host":"168.5.80.94",
                "ssh-user":"root",
                "ssh-passwd":"",
                "basedir":"/usr/local/mysql",
                "backupdir":"/opt/xenon/data/mysql",
                "xtrabackup-bindir":"/opt/xenon",
                "backup-iops-limits":100000,
                "backup-use-memory": "2GB",
                "backup-parallel": 2
        },
    

    其他

    不知道怎么排查问题,以及提供什么信息才能表述清楚。

    opened by peniridis 5
  • xbase: add retry times for set listener #124

    xbase: add retry times for set listener #124

    [summary] We want to use the publishNotReadyAddresses parameter in kubernetes to be able to access pods even if the pod is not ready. But even if this parameter is used, we may still need to wait 30s after pod creation. So we add retrys 30s for set the listener.

    Just merge into the branch feature_adapt_k8s

    opened by zhyass 4
  • raft: candidate with newer data quickly keep up with newer viewid

    raft: candidate with newer data quickly keep up with newer viewid

    In extreme cases, the situation used to recur within some minutes: Node1(more data), Node2(bigger viewid), Node3(less data & smaller viewid) InvalidViewID Node1: F --------------> C --------------> F -> ... -> C InvalidGITD Node2: C --------------> F --------------> C -> ... -> F The candidate with newer data has no chance to update viewid.

    opened by dbkernel 4
  • xlog: update xlog module, output log with filename info #113

    xlog: update xlog module, output log with filename info #113

    [summary] add short filename when output log info.

    [test case] src/xbase/xlog/options.go src/xbase/xlog/xlog.go

    [patch codecov] xbase/xlog 0.052s coverage: 70.9% of statements

    opened by hustjieke 3
  • [feature] Add invalid state

    [feature] Add invalid state

    Summary

    MySQL ueses Engine commit(If MySQL trx prepare and flush to data, it will be committed. ) to protect data security. But it may not be suite for MySQL Cluster.

    Fix

    1. Add invalid state (Invalid should not send a agree vote)
    2. If check Engine commit , set the node status to invalid(use gtid_sub function, so we also need check gtid when raft election)

    Question

    1. If xenon dead, the state may be confusion, so we should record all state into a file.
    type: feature P0 
    opened by TCeason 3
  • xenon -c /etc/xenon/xenon.json启动报错

    xenon -c /etc/xenon/xenon.json启动报错

    用/usr/local/xenon/bin/xenon -c /etc/xenon/xenon.json > /etc/xenon/log/xenon.log 2>&1 & 启动时报错: cat /etc/xenon/log/xenon.log xenon:[{Tag: Time:2022/08/04 04:48:36 Git: GoVersion:go1.12.4 Platform:linux amd64}] panic: runtime error: invalid memory address or nil pointer dereference [signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0x776ef6]

    goroutine 1 [running]: xbase/xlog.(*Log).Panic(0x0, 0x931a74, 0x1a, 0xc0000c9e28, 0x1, 0x1) /usr/local/xenon/src/xbase/xlog/xlog.go:137 +0x26 main.main() /usr/local/xenon/src/xenon/xenon.go:54 +0x3de

    xenon版本是1.1.4,go版本是1.12.4(换成go1.18.1问题依旧)

    opened by Myshiner 2
  • xenon mysql rebuildme 报错

    xenon mysql rebuildme 报错

    环境信息: centos7.6 perconna mysql 5.7.39

    xenon版本信息: 最新版 [mysql@Xenon-3 bin]$ ./xenoncli version xenoncli:[{Tag: Time:2022/11/22 08:04:45 Git: GoVersion:go1.17.12 Platform:linux amd64}]

    xenon mysql集群状态: image

    报错信息如下image

    [mysql@Xenon-3 bin]$ /boss/soft/xenon/bin/xenoncli mysql backup --to=/u01/backup 2022/12/08 15:55:14.144046 [WARNING] rebuildme.found.best.slave[192.168.100.102:8801].leader[192.168.100.101:8801] 2022/12/08 15:55:14.144107 [WARNING] S1-->found.the.best.backup.host[192.168.100.102:8801].... 2022/12/08 15:55:14.148955 [WARNING] S2-->rm.and.mkdir.backupdir[/u01/backup] 2022/12/08 15:55:14.148971 [WARNING] S3-->xtrabackup.begin.... 2022/12/08 15:55:14.149458 [WARNING] rebuildme.backup.req[&{From: BackupDir:/u01/backup SSHHost:192.168.100.103 SSHUser:mysql SSHPasswd:mysql SSHPort:22 IOPSLimits:100000 XtrabackupBinDir:/usr/bin}].from[192.168.100.102:8801] 2022/12/08 15:55:33.293809 [WARNING] S3-->xtrabackup.end.... 2022/12/08 15:55:33.293827 [WARNING] S4-->apply-log.begin.... 2022/12/08 15:55:46.412498 [WARNING] S4-->apply-log.end.... 2022/12/08 15:55:46.412509 [WARNING] completed OK! 2022/12/08 15:55:46.412512 [WARNING] backup.all.done.... [mysql@Xenon-3 bin]$ /boss/soft/xenon/bin/xenoncli mysql rebuildme --from=192.168.100.102:8801 2022/12/08 15:56:07.973953 [WARNING] =====prepare.to.rebuildme===== IMPORTANT: Please check that the backup run completes successfully. At the end of a successful backup run innobackupex prints "completed OK!".

    2022/12/08 15:56:07.974236 [WARNING] S1-->check.raft.leader 2022/12/08 15:56:07.996902 [WARNING] S2-->prepare.rebuild.from[192.168.100.102:8801].... 2022/12/08 15:56:08.044707 [WARNING] S3-->check.bestone[192.168.100.102:8801].is.OK.... 2022/12/08 15:56:08.044725 [WARNING] S4-->set.learner 2022/12/08 15:56:08.045802 [WARNING] S5-->stop.monitor 2022/12/08 15:56:08.046748 [WARNING] S6-->kill.mysql 2022/12/08 15:56:08.110453 [WARNING] S7-->check.bestone[192.168.100.102:8801].is.OK.... 2022/12/08 15:56:08.227050 [WARNING] S8-->clear.datadir[/u01/backup] 2022/12/08 15:56:08.237190 [WARNING] S9-->xtrabackup.begin.... 2022/12/08 15:56:08.237788 [WARNING] rebuildme.backup.req[&{From: BackupDir:/u01/backup SSHHost:192.168.100.103 SSHUser:mysql SSHPasswd:mysql SSHPort:22 IOPSLimits:100000 XtrabackupBinDir:/usr/bin}].from[192.168.100.102:8801] 2022/12/08 15:56:22.364753 [WARNING] S9-->xtrabackup.end.... 2022/12/08 15:56:22.364771 [WARNING] S10-->apply-log.begin.... 2022/12/08 15:56:31.849770 [WARNING] S10-->apply-log.end.... 2022/12/08 15:56:31.849780 [WARNING] S11-->start.mysql.begin... 2022/12/08 15:56:31.850831 [WARNING] S11-->start.mysql.end... 2022/12/08 15:56:31.850843 [WARNING] S12-->wait.mysqld.running.begin.... 2022/12/08 15:56:34.878475 [WARNING] wait.mysqld.running... 2022/12/08 15:56:37.893701 [WARNING] wait.mysqld.running... 2022/12/08 15:56:37.906427 [WARNING] S12-->wait.mysqld.running.end.... 2022/12/08 15:56:37.906441 [WARNING] S13-->wait.mysql.working.begin.... 2022/12/08 15:56:40.917830 [WARNING] wait.mysql.working... 2022/12/08 15:56:40.918250 [WARNING] S13-->wait.mysql.working.end.... 2022/12/08 15:56:40.918259 [WARNING] S14-->stop.and.reset.slave.begin.... 2022/12/08 15:56:41.024755 [WARNING] S14-->stop.and.reset.slave.end.... 2022/12/08 15:56:41.024768 [WARNING] S15-->reset.master.begin.... 2022/12/08 15:56:41.028661 [WARNING] S15-->reset.master.end.... mysql.go:482: unexpected error: info.file.content.invalid[mysql_binlog.000002 3581 ]

    2022/12/08 15:56:41.036228 [PANIC] info.file.content.invalid[mysql_binlog.000002 3581 ] panic: [PANIC] info.file.content.invalid[mysql_binlog.000002 3581 ]

    goroutine 1 [running]: xbase/xlog.(*Log).Panic(0xc0000e81d0, {0x7989c3, 0x7aa7b7}, {0xc0000d9ad0, 0xc0000d9ae0, 0x3}) /boss/soft/xenon/src/xbase/xlog/xlog.go:142 +0xc8 cli/cmd.ErrorOK({0x8130a0, 0xc000198650}) /boss/soft/xenon/src/cli/cmd/common.go:35 +0x1af cli/cmd.mysqlRebuildMeCommandFn(0xc0000fbd40, {0xc0000e8260, 0x1, 0x1}) /boss/soft/xenon/src/cli/cmd/mysql.go:482 +0x15df vendor/github.com/spf13/cobra.(*Command).execute(0xc0000fbd40, {0xc0000e8240, 0x1, 0x1}) /boss/soft/xenon/src/vendor/github.com/spf13/cobra/command.go:603 +0x3a7 vendor/github.com/spf13/cobra.(*Command).ExecuteC(0xa5c740) /boss/soft/xenon/src/vendor/github.com/spf13/cobra/command.go:689 +0x24b vendor/github.com/spf13/cobra.(*Command).Execute(...) /boss/soft/xenon/src/vendor/github.com/spf13/cobra/command.go:648 main.main() /boss/soft/xenon/src/cli/cli.go:43 +0x25

    opened by zhangwx0794 1
  • 日志报错

    日志报错

    主节点xenon启动之后日志报错:

    2022/08/04 20:55:44.287645 [ERROR] server.mysql.start.slave.error[Error 1200: The server is not configured as slave; fix in config file or with CHANGE MASTER TO] 2022/08/04 20:55:44.287653 [INFO] server.mysql.check.replication.user... 2022/08/04 20:55:44.287816 [INFO] server.mysql.setup.done 2022/08/04 20:55:44.287821 [INFO] server.prepare.setup.RPC 2022/08/04 20:55:44.288128 [INFO] server.RPC.setup.done 2022/08/04 20:55:44.288148 [INFO] mysqld[/data/etc/my3306.cnf].monitor.start... 2022/08/04 20:55:44.288163 [INFO] mysql[127.0.0.1:3306].startping... 2022/08/04 20:55:44.288168 [INFO] FOLLOWER[ID:192.168.248.134:8801, V:0, E:0].raft.start... 2022/08/04 20:55:44.288213 [WARNING] xrpc.Start.listening.on[192.168.248.134:8801] 2022/08/04 20:55:44.288217 [INFO] server.start.success... 2022/08/04 20:55:44.288219 [INFO] xenon.start.success... 2022/08/04 20:55:44.288392 [INFO] FOLLOWER[ID:192.168.248.134:8801, V:0, E:0].start.CheckBrainSplit 2022/08/04 20:55:44.288482 [WARNING] FOLLOWER[ID:192.168.248.134:8801, V:0, E:0].state.init 2022/08/04 20:55:44.295962 [ERROR] FOLLOWER[ID:192.168.248.134:8801, V:0, E:0].leaderStopShellCommand[[-c sudo /usr/sbin/ip a d 192.168.248.100/ 24 dev ens33]].out[bash -c sudo /usr/sbin/ip a d 192.168.248.100/24 dev ens33RTNETLINK answers: Cannot assign requested address ].error[exit status 2] 2022/08/04 20:55:44.295975 [ERROR] FOLLOWER[ID:192.168.248.134:8801, V:0, E:0].stopShellCommand.error[exit status 2]

    注:启动顺序是挨个节点启动的,然后用xenoncli cluster add 192.168.248.134:8801,192.168.248.135:8801,192.168.248.136:8801添加集群 image 但是就是因为vip没挂载起来,所有节点都为readonly状态 根据报错提示,vip为啥挂载不起来呢?

    opened by Myshiner 7
  • xenoncli cluster status报错

    xenoncli cluster status报错

    xenoncli cluster status查看集群状态时报错: cluster.go:224: unexpected error: open /home/mysql/config.path: no such file or directory

    2022/08/04 17:45:11.955666 [PANIC] open /home/mysql/config.path: no such file or directory panic: [PANIC] open /home/mysql/config.path: no such file or directory

    goroutine 1 [running]: xbase/xlog.(*Log).Panic(0xc0000f82d0, 0x8d17ba, 0x2, 0xc0000b3b18, 0x1, 0x1) /usr/local/xenon/src/xbase/xlog/xlog.go:142 +0x153 cli/cmd.ErrorOK(0x9711c0, 0xc0000fe990) /usr/local/xenon/src/cli/cmd/common.go:35 +0x246 cli/cmd.clusterStatusCommandFn(0xc000154fc0, 0xcb1a20, 0x0, 0x0) /usr/local/xenon/src/cli/cmd/cluster.go:224 +0x5b vendor/github.com/spf13/cobra.(*Command).execute(0xc000154fc0, 0xcb1a20, 0x0, 0x0, 0xc000154fc0, 0xcb1a20) /usr/local/xenon/src/vendor/github.com/spf13/cobra/command.go:603 +0x23e vendor/github.com/spf13/cobra.(*Command).ExecuteC(0xc8c740, 0xc0000b3f78, 0xc0000b3f88, 0x4073af) /usr/local/xenon/src/vendor/github.com/spf13/cobra/command.go:689 +0x2be vendor/github.com/spf13/cobra.(*Command).Execute(...) /usr/local/xenon/src/vendor/github.com/spf13/cobra/command.go:648 main.main() /usr/local/xenon/src/cli/cli.go:43 +0x32 我明明是echo "/etc/xenon/xenon.json" > /usr/local/xenon/bin/config.path,为什么要去找/home/mysql/config.path呢?

    opened by Myshiner 1
Releases(v1.1.4)
  • v1.1.4(Feb 1, 2021)

    • mysql: fix rebuild node with small amounts of data failed
    • raft: optimize high availability logic
    • cli: check gtid before rebuildme
    • server: add -r option on startup to specify the initial role
    Source code(tar.gz)
    Source code(zip)
  • v1.0.9(Apr 9, 2020)

  • v1.0.8(Dec 6, 2019)

    • feature: adjust the logic about split brain (@prettyshuang )
    • feature: cli: support to change user password by host (@prettyshuang )
    • feature: cli: support to change user password by host (@prettyshuang )
    • feature: cli: support create super SSL user (@prettyshuang )
    • feature: cli: getuser command can get Super_priv (@prettyshuang )
    • feature: raft: add learner state for rebuildme (@prettyshuang )
    • bugfix: cli: fix cluster raft failed when the first node in list fails #74 (@prettyshuang )
    • bugfix: cli: the cmd cluster gtid finally gets the gtid of the leader (@prettyshuang )
    Source code(tar.gz)
    Source code(zip)
  • v1.0.7(Jul 31, 2019)

  • v1.0.5(Mar 7, 2019)

    • feature: add SuperIDLE config, IDLE node can't change to FOLLOER when EnableRaft(#56 )
    • fetaure: adaptation MySQL 5.6(#43 )
    • feature: update go-sql-driver to v1.4.1(#58 )
    Source code(tar.gz)
    Source code(zip)
  • v1.0.4(Jan 3, 2019)

Owner
RadonDB
RadonDB = NewSQL + MySQL
RadonDB
Beerus-DB: a database operation framework, currently only supports Mysql, Use [go-sql-driver/mysql] to do database connection and basic operations

Beerus-DB · Beerus-DB is a database operation framework, currently only supports Mysql, Use [go-sql-driver/mysql] to do database connection and basic

Beerus 7 Oct 29, 2022
IceFireDB - Distributed disk storage system based on Raft and RESP protocol.

Distributed disk storage database based on Raft and Redis protocol.

GITSRC 947 Dec 27, 2022
Virsas-mod-db - Quick way to init mysql, postgres and redis connection from multiple services without duplicating the code

Quick way to init mysql, postgres and redis connection from multiple services without duplicating the code.

Stefan Moravcik 0 Jan 23, 2022
TiDB is an open source distributed HTAP database compatible with the MySQL protocol

Slack Channel Twitter: @PingCAP Reddit Mailing list: lists.tidb.io For support, please contact PingCAP What is TiDB? TiDB ("Ti" stands for Titanium) i

PingCAP 33.1k Jan 9, 2023
A MySQL-compatible relational database with a storage agnostic query engine. Implemented in pure Go.

go-mysql-server is a SQL engine which parses standard SQL (based on MySQL syntax) and executes queries on data sources of your choice. A simple in-memory database and table implementation are provided, and you can query any data source you want by implementing a few interfaces.

DoltHub 947 Dec 27, 2022
RadonDB is an open source, cloud-native MySQL database for building global, scalable cloud services

OverView RadonDB is an open source, Cloud-native MySQL database for unlimited scalability and performance. What is RadonDB? RadonDB is a cloud-native

RadonDB 1.7k Dec 31, 2022
Vitess is a database clustering system for horizontal scaling of MySQL through generalized sharding.

Vitess is a database clustering system for horizontal scaling of MySQL through generalized sharding.

Vitess 15.3k Jan 4, 2023
Run MySQL Database on Docker

Run MySQL Database on Docker cd <path>/resources/docker sudo docker-compose up (sudo for linux) This will start a container MySQL Database running on

null 0 Jan 1, 2022
Nipo is a powerful, fast, multi-thread, clustered and in-memory key-value database, with ability to configure token and acl on commands and key-regexes written by GO

Welcome to NIPO Nipo is a powerful, fast, multi-thread, clustered and in-memory key-value database, with ability to configure token and acl on command

Morteza Bashsiz 17 Dec 28, 2022
Owl is a db manager platform,committed to standardizing the data, index in the database and operations to the database, to avoid risks and failures.

Owl is a db manager platform,committed to standardizing the data, index in the database and operations to the database, to avoid risks and failures. capabilities which owl provides include Process approval、sql Audit、sql execute and execute as crontab、data backup and recover .

null 34 Nov 9, 2022
Being played at The Coffee House and try to find and play it on Spotify

The Coffee House Muzik Follow the music that is being played at The Coffee House and try to find and play it on Spotify. Installation Clone this proje

SangND 4 May 25, 2022
Walrus - Fast, Secure and Reliable System Backup, Set up in Minutes.

Walrus is a fast, secure and reliable backup system suitable for modern infrastructure. With walrus, you can backup services like MySQL, PostgreSQL, Redis, etcd or a complete directory with a short interval and low overhead. It supports AWS S3, digitalocean spaces and any S3-compatible object storage service.

Ahmed 452 Jan 5, 2023
🔑A high performance Key/Value store written in Go with a predictable read/write performance and high throughput. Uses a Bitcask on-disk layout (LSM+WAL) similar to Riak.

bitcask A high performance Key/Value store written in Go with a predictable read/write performance and high throughput. Uses a Bitcask on-disk layout

James Mills 10 Sep 26, 2022
BuntDB is an embeddable, in-memory key/value database for Go with custom indexing and geospatial support

BuntDB is a low-level, in-memory, key/value store in pure Go. It persists to disk, is ACID compliant, and uses locking for multiple readers and a sing

Josh Baker 4k Dec 30, 2022
Concurrency-safe Go caching library with expiration capabilities and access counters

cache2go Concurrency-safe golang caching library with expiration capabilities. Installation Make sure you have a working Go environment (Go 1.2 or hig

Christian Muehlhaeuser 1.9k Dec 31, 2022
groupcache is a caching and cache-filling library, intended as a replacement for memcached in many cases.

groupcache Summary groupcache is a distributed caching and cache-filling library, intended as a replacement for a pool of memcached nodes in many case

Go 11.9k Dec 29, 2022
Scalable datastore for metrics, events, and real-time analytics

InfluxDB InfluxDB is an open source time series platform. This includes APIs for storing and querying data, processing it in the background for ETL or

InfluxData 24.7k Jan 5, 2023
Kivik provides a common interface to CouchDB or CouchDB-like databases for Go and GopherJS.

Kivik Package kivik provides a common interface to CouchDB or CouchDB-like databases. The kivik package must be used in conjunction with a database dr

Kivik 252 Dec 29, 2022
A simple, fast, embeddable, persistent key/value store written in pure Go. It supports fully serializable transactions and many data structures such as list, set, sorted set.

NutsDB English | 简体中文 NutsDB is a simple, fast, embeddable and persistent key/value store written in pure Go. It supports fully serializable transacti

徐佳军 2.7k Jan 1, 2023