Skip to content

Commit

Permalink
Merge pull request flike#130 from bigpyer/feature-config-reload
Browse files Browse the repository at this point in the history
Feature config reload
  • Loading branch information
Chen Fei committed Feb 18, 2016
2 parents 89bf87e + 2741a3d commit c18cef2
Show file tree
Hide file tree
Showing 8 changed files with 180 additions and 17 deletions.
4 changes: 0 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -36,10 +36,6 @@ kingshard is a high-performance proxy for MySQL powered by Go. Just like other m

[1.How to use kingshard building a MySQL cluster](./doc/KingDoc/how_to_use_kingshard_EN.md)

## Donate

https://github.com/flike/kingshard/blob/master/doc/KingDoc/support.md

## License

kingshard is under the Apache 2.0 license. See the [LICENSE](./doc/License) directory for details.
3 changes: 0 additions & 3 deletions README_ZH.md
Original file line number Diff line number Diff line change
Expand Up @@ -59,9 +59,6 @@ kingshard是一个由Go开发高性能MySQL Proxy项目,kingshard在满足基
- 感谢[bigpyer](https://github.com/bigpyer),他对kingshard做了详细的性能测试,并撰写了一份非常详细的测试报告。
- 感谢以下[开源爱好者](https://github.com/flike/kingshard/graphs/contributors)为kingshard做出的贡献。

## 打赏
https://github.com/flike/kingshard/blob/master/doc/KingDoc/support.md

## 反馈
kingshard开源以来,经过不断地迭代开发,功能较为完善,稳定性有较大提升。 **目前已有上十家公司在生产环境使用kingshard作为MySQL代理。** 如果您在使用kingshard的过程中发现BUG或者有新的功能需求,非常欢迎您发邮件至hiflike#gmail.com与作者取得联系,或者加入QQ群(147926796)交流。

Expand Down
4 changes: 2 additions & 2 deletions backend/db.go
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ func Open(addr string, user string, password string, dbName string, maxConnNum i
db.checkConn, err = db.newConn()
if err != nil {
db.Close()
return nil, errors.ErrDatabaseClose
return nil, err
}

db.idleConns = make(chan *Conn, db.maxConnNum)
Expand All @@ -85,7 +85,7 @@ func Open(addr string, user string, password string, dbName string, maxConnNum i
conn, err := db.newConn()
if err != nil {
db.Close()
return nil, errors.ErrDatabaseClose
return nil, err
}
conn.pushTimestamp = time.Now().Unix()
db.cacheConns <- conn
Expand Down
62 changes: 56 additions & 6 deletions doc/KingDoc/admin_command_introduce.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,22 +6,22 @@ kingshard的管理端口复用了工作端口,通过特定的关键字来标

```
#添加一个新的slave到node1
admin node(opt,node,k,v) values(add’,’node1’,’slave’,’127.0.0.1:3306)
admin node(opt,node,k,v) values('add','node1','slave','127.0.0.1:3306')
#删除node1上的一个slave。注意:只能删除slave,不能删除master
admin node(opt,node,k,v) values(del’,’node1’,’slave’,’127.0.0.1:3306)
admin node(opt,node,k,v) values('del','node1','slave','127.0.0.1:3306')
#将一个slave设置为下线状态
admin node(opt,node,k,v) values(down’,’node1’,’slave’,’127.0.0.1:3306)
admin node(opt,node,k,v) values('down','node1','slave','127.0.0.1:3306')
#将一个slave设置为上线状态
admin node(opt,node,k,v) values(‘up’,’node1’,’slave’,’127.0.0.1:3306)
admin node(opt,node,k,v) values('up','node1','slave','127.0.0.1:3306')
#将master设置为下线状态
admin node(opt,node,k,v) values(down’,’node1’,’master’,’127.0.0.1:3306)
admin node(opt,node,k,v) values('down','node1','master','127.0.0.1:3306')
#将master设置为上线状态
admin node(opt,node,k,v) values(‘up’,’node1’,’master’,’127.0.0.1:3306)
admin node(opt,node,k,v) values('up','node1','master','127.0.0.1:3306')
```

Expand Down Expand Up @@ -73,6 +73,56 @@ mysql> admin server(opt,k,v) values('show','schema','config');
| kingshard | test_shard_hash | hash | id | node1, node2 | 4, 4 | 0 |
| kingshard | test_shard_range | range | id | node1, node2 | 4, 4 | 10000 |
+-----------+------------------+---------+------+--------------+-----------+---------------+
3 rows in set (0.00 sec)
#查看白名单ip
mysql> admin server(opt,k,v) values('show','allow_ip','config');
+--------------+
| AllowIP |
+--------------+
| 127.0.0.1 |
| 192.168.10.1 |
+--------------+
2 rows in set (0.00 sec)
#查看黑名单sql
mysql> admin server(opt,k,v) values('show','black_sql','config');
+-------------------------------+
| BlackListSql |
+-------------------------------+
| select * from sbtest1 |
| select * from sbtest1 limit ? |
+-------------------------------+
2 rows in set (0.00 sec)
```

## 修改kingshard配置

```
#关闭sql日志打印
admin server(opt,k,v) values('change','log_sql','off')
#开启sql日志打印
admin server(opt,k,v) values('change','log_sql','on')
#修改慢sql日志时间, 单位ms
admin server(opt,k,v) values('change','slow_log_time','50');
#添加白名单IP
admin server(opt,k,v) values('add','allow_ip','127.0.0.1');
#删除白名单IP
admin server(opt,k,v) values('del','allow_ip','127.0.0.1');
#添加黑名单sql语句
admin server(opt,k,v) values('add','black_sql','select count(*) from sbtest1')
#删除黑名单sql语句
admin server(opt,k,v) values('del','black_sql','select count(*) from sbtest1')
#保存当前配置
admin server(opt,k,v) values('save','proxy','config')
```
4 changes: 2 additions & 2 deletions doc/KingDoc/how_to_use_kingshard.md
Original file line number Diff line number Diff line change
Expand Up @@ -325,7 +325,7 @@ mysql> select/*master*/ * from kingshard_test_conn;
```

### 3.4. 跨node的sum和count函数
在kingshard中,支持sum和count函数,kingshard会将相应的SQL发生到正确的DB,并将结果合并起来再返回给客户的。例如:
在kingshard中,支持sum和count函数,kingshard会将相应的SQL发送到正确的DB,并将结果合并起来再返回给客户的。例如:

```
mysql> select count(id) from test_shard_hash where id > 1;
Expand Down Expand Up @@ -420,7 +420,7 @@ ERROR 1105 (HY000): transaction in multi node
```

## 6. kingshard的管理端操作
kingshard的管理接口,目前还是命令行的方式。后续有时间打算将其改成web方式。管理端具体的命令可以参考[文档](./doc/KingDoc/admin_command_introduce.md)。管理端的命令格式,可以分为两类:
kingshard的管理接口,目前还是命令行的方式。后续有时间打算将其改成web方式。管理端具体的命令可以参考[文档](./admin_command_introduce.md)。管理端的命令格式,可以分为两类:

* ` admin server(opt,k,v) values(action,k1,v1)`。这种命令是操作整个kingshard的,其中opt表示这个操作的动作;k表示操作的对象,v表示给对象的赋值。
* `admin node(opt,node,k,v) values(action,nodeName,k1,v1)`,这类命令表示操作node。其中opt表示这个操作的动作;node表示操作哪个node;k表示操作的对象,v表示给对象的赋值。
Expand Down
48 changes: 48 additions & 0 deletions doc/KingDoc/how_to_use_kingshard_EN.md
Original file line number Diff line number Diff line change
Expand Up @@ -461,6 +461,54 @@ mysql> admin server(opt,k,v) values('show','schema','config');
+-----------+------------------+---------+------+--------------+-----------+---------------+
3 rows in set (0.00 sec)
#view the config of white list ip
mysql> admin server(opt,k,v) values('show','allow_ip','config');
+--------------+
| AllowIP |
+--------------+
| 127.0.0.1 |
| 192.168.10.1 |
+--------------+
2 rows in set (0.00 sec)
#view the config of black list sql
mysql> admin server(opt,k,v) values('show','black_sql','config');
+-------------------------------+
| BlackListSql |
+-------------------------------+
| select * from sbtest1 |
| select * from sbtest1 limit ? |
+-------------------------------+
2 rows in set (0.00 sec)
```

### 5.3 Change the config of kingshard

```
#turn off the sql log
admin server(opt,k,v) values('change','log_sql','off')
#turn on the sql log
admin server(opt,k,v) values('change','log_sql','on')
#change the threshold of slow log time
admin server(opt,k,v) values('change','slow_log_time','50');
#add white list ip
admin server(opt,k,v) values('add','allow_ip','127.0.0.1');
#delete white list ip
admin server(opt,k,v) values('del','allow_ip','127.0.0.1');
#add black list sql
admin server(opt,k,v) values('add','black_sql','select count(*) from sbtest1')
#delete black list sql
admin server(opt,k,v) values('del','black_sql','select count(*) from sbtest1')
#save config
admin server(opt,k,v) values('save','proxy','config')
```

## 6.Requirement and feedback
Expand Down
1 change: 1 addition & 0 deletions doc/KingDoc/kingshard_install_document.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ allow_ips: 127.0.0.1
# 一个node节点表示mysql集群的一个数据分片,包括一主多从(可以不配置从库)
nodes :
-
#node节点名字
name : node1
Expand Down
71 changes: 71 additions & 0 deletions proxy/server/conn_admin.go
Original file line number Diff line number Diff line change
Expand Up @@ -275,6 +275,14 @@ func (c *ClientConn) handleAdminShow(k, v string) (*mysql.Resultset, error) {
return c.handleShowSchemaConfig()
}

if k == ADMIN_ALLOW_IP && v == ADMIN_CONFIG {
return c.handleShowAllowIPConfig()
}

if k == ADMIN_BLACK_SQL && v == ADMIN_CONFIG {
return c.handleShowBlackSqlConfig()
}

return nil, errors.ErrCmdUnsupport
}

Expand Down Expand Up @@ -474,6 +482,69 @@ func (c *ClientConn) handleShowSchemaConfig() (*mysql.Resultset, error) {
return c.buildResultset(nil, names, values)
}

func (c *ClientConn) handleShowAllowIPConfig() (*mysql.Resultset, error) {
var Column = 1
var rows [][]string
var names []string = []string{
"AllowIP",
}

//allow ips
var allowips = c.proxy.allowips
if len(allowips) != 0 {
for _, v := range allowips {
if v == nil {
continue
}
rows = append(rows,
[]string{
v.String(),
})
}
}

if len(rows) == 0 {
rows = append(rows, []string{""})
}

var values [][]interface{} = make([][]interface{}, len(rows))
for i := range rows {
values[i] = make([]interface{}, Column)
for j := range rows[i] {
values[i][j] = rows[i][j]
}
}

return c.buildResultset(nil, names, values)
}

func (c *ClientConn) handleShowBlackSqlConfig() (*mysql.Resultset, error) {
var Column = 1
var rows [][]string
var names []string = []string{
"BlackListSql",
}

//black sql
var blackListSqls = c.proxy.blacklistSqls.sqls
for _, v := range blackListSqls {
rows = append(rows,
[]string{
v,
})
}

var values [][]interface{} = make([][]interface{}, len(rows))
for i := range rows {
values[i] = make([]interface{}, Column)
for j := range rows[i] {
values[i][j] = rows[i][j]
}
}

return c.buildResultset(nil, names, values)
}

func (c *ClientConn) handleChangeLogSql(v string) error {
return c.proxy.changeLogSql(v)
}
Expand Down

0 comments on commit c18cef2

Please sign in to comment.