欢迎来到福编程网,本站提供各种互联网专业知识!
您的位置:网站首页 > 数据库 > Mysql

为MySQL安装配置代理工具Kingshard的基本教程

发布时间:2015-12-24 作者:佚名 来源:转载
这篇文章主要介绍了为MySQL安装配置代理工具Kingshard的基本教程,Kingshard由Go语言写成,可以实现读写分离和客户端IP访问控制等功能,非常强大,需要的朋友可以参考下

环境说明

本文仅作为最小实验环境,因此不使用master, slave模式. 单机上使用mysql_mutil运行二个mysql实列

初始化数据目录

代码
  1. # mysql_install_db --datadir=/var/lib/mysql2/ --user=mysql
  2. # mysql_install_db --datadir=/var/lib/mysql3/ --user=mysql

生成配置文件

利用mysqld_multi工具生成配置文件

代码
  1. # mysqld_multi --example > mysqld_multi.conf

修改根据自己的需求修改mysqld_multi.conf

例:

代码
  1. [mysqld_multi]
  2. mysqld = /usr/bin/mysqld_safe
  3. mysqladmin = /usr/bin/mysqladmin
  4. user = multi_admin
  5. password = my_password
  6. [mysqld2]
  7. socket = /var/lib/mysql2/mysql.sock2
  8. port = 3307
  9. pid-file = /var/lib/mysql2/hostname.pid2
  10. datadir = /var/lib/mysql2
  11. #language = /usr/share/mysql/english
  12. user = unix_user1
  13. [mysqld3]
  14. socket = /var/lib/mysql3/mysql.sock3
  15. port = 3308
  16. pid-file = /var/lib/mysql3/hostname.pid3
  17. datadir = /var/lib/mysql3
  18. #language = /usr/share/mysql/swedish
  19. user = unix_user2

启动多个实例

代码
  1. # mysqld_multi --defaults-extra-file=./mysqld_multi.conf start

或者 mysqld_multi --defaults-extra-file=./mysqld_multi.conf start 2; mysqld_multi --defaults-extra-file=./mysqld_multi.conf start 3(分别启动)

注意这里的2、3对应conf配置文件 mysqld2、mysqld3,以此来区分。

查看实例状态

代码
  1. [root@testnode kingshard]# mysqld_multi --defaults-extra-file=./mysqld_multi.conf report
代码
  1. Reporting MySQL servers
  2. MySQL server from group: mysqld2 is running
  3. MySQL server from group: mysqld3 is running

说明2个实例都已经启动了。

安装Kingshard

1.安装Go语言环境,具体步骤请Google。

代码
  1. git clone https://github.com/flike/kingshard.git src/github.com/flike/kingshard
  2. cd src/github.com/flike/kingshard
  3. source ./dev.sh
  4. make

设置配置文件

运行kingshard。

代码
  1. ./bin/kingshard -config=etc/multi.yaml

2.配置文件说明

代码
  1. # kingshard的地址和端口
  2. addr : 127.0.0.1:9696
  3. # 连接kingshard的用户名和密码
  4. user : kingshard
  5. password : kingshard
  6. # log级别,[debug|info|warn|error],默认是error
  7. log_level : debug
  8. # 只允许下面的IP列表连接kingshard
  9. allow_ips: 127.0.0.1
  10. # 一个node节点表示mysql集群的一个数据分片,包括一主多从(可以不配置从库)
  11. nodes :
  12. #node节点名字
  13. name : node1
  14. # 连接池中默认的空闲连接数
  15. idle_conns : 16
  16. # kingshard连接该node中mysql的用户名和密码,master和slave的用户名和密码必须一致
  17. user : kingshard
  18. password : kingshard
  19. # master的地址和端口
  20. master : 127.0.0.1:3306
  21. # slave的地址和端口,可不配置
  22. slave :
  23. #kingshard在300秒内都连接不上mysql,则会下线该mysql
  24. down_after_noalive : 300
  25. -
  26. name : node2
  27. idle_conns : 16
  28. rw_split: true
  29. user : kingshard
  30. password : kingshard
  31. master : 192.168.59.103:3307
  32. slave :
  33. down_after_noalive: 100
  34. # 分表规则
  35. schemas :
  36. -
  37. db : kingshard
  38. nodes: [node1,node2]
  39. rules:
  40. default: node1
  41. shard:
  42. -
  43. table: test_shard_hash
  44. key: id
  45. nodes: [node1, node2]
  46. type: hash
  47. locations: [4,4]
  48. -
  49. table: test_shard_range
  50. key: id
  51. type: range
  52. nodes: [node1, node2]
  53. locations: [4,4]
  54. table_row_limit: 10000

3.Tips

kingshard采用的是yaml方式解析配置文件,需要注意的是yaml配置文件不允许出现tab键,且冒号后面需要跟一个空格。配置文件编写完成后,可以在yaml lint网站验证是否有格式错误。

配置Kingshard

修改/etc/hosts文件, 添加如下二行

代码
  1. 127.0.0.1 node1
  2. 127.0.0.1 node2

配置如下

代码
  1. # server listen addr
  2. addr : 127.0.0.1:9696
  3. # server user and password
  4. user : kingshard
  5. password : kingshard
  6. # log level[debug|info|warn|error],default error
  7. log_level : debug
  8. # only allow this ip list ip to connect kingshard
  9. #allow_ips: 127.0.0.1
  10. # node is an agenda for real remote mysql server.
  11. nodes :
  12. -
  13. name : node1
  14. # default max idle conns for mysql server
  15. idle_conns : 16
  16. # if rw_split is true, select will use slave server
  17. rw_split: true
  18. # all mysql in a node must have the same user and password
  19. user : root
  20. password : root
  21. # master represents a real mysql master server
  22. master : 127.0.0.1:3307
  23. # slave represents a real mysql salve server,and the number after '@' is
  24. #read load weight of this slave.
  25. #slave : 192.168.0.11:3307@2,192.168.0.12:3307@5
  26. slave :
  27. #down_after_noalive : 300
  28. -
  29. name : node2
  30. # default max idle conns for mysql server
  31. idle_conns : 16
  32. # if rw_split is true, select will use slave server
  33. rw_split: true
  34. # all mysql in a node must have the same user and password
  35. user : root
  36. password : root
  37. # master represents a real mysql master server
  38. master : 127.0.0.1:3308
  39. # slave represents a real mysql salve server
  40. slave :
  41. # down mysql after N seconds noalive
  42. # 0 will no down
  43. down_after_noalive: 100
  44. # schema defines which db can be used by client and this db's sql will be executed in which nodes
  45. schemas :
  46. -
  47. db : kingshard
  48. nodes: [node1,node2]
  49. rules:
  50. default: node1
  51. shard:
  52. -
  53. table: test_shard_hash
  54. key: id
  55. nodes: [node1, node2]
  56. type: hash
  57. locations: [4,4]
  58. -
  59. table: test_shard_range
  60. key: id
  61. type: range
  62. nodes: [node1, node2]
  63. locations: [4,4]
  64. table_row_limit: 10000

设置mysql实例信息

设置用户

分类登陆mysqld2, mysqld3, 创建root用户(该用户是给kingshard管理的,测试为了方便所以直接使用root) 若用户存在,跳过此步

代码
  1. /usr/bin/mysqladmin -h 127.0.0.1 -P 3307 -u root password 'root'
  2. /usr/bin/mysqladmin -h 127.0.0.1 -P 3308 -u root password 'root'

建数据库

分类登陆mysqld2, mysqld2,创建kingshard数据库

代码
  1. /usr/bin/mysql -h 127.0.0.1 -P 3307 -u root -proot -e "create database kingshard;"
  2. /usr/bin/mysql -h 127.0.0.1 -P 3308 -u root -proot -e "create database kingshard;"

启动Kingshard

代码
  1. # ./bin/kingshard -config=etc/multi.yaml

测试shard功能

使用test_shard_hash测试 shardhash分表功能.

创建分表

创建test_shard_hash分表(_0000~_0007), _0001~_0003在node1(mysqld2)上创建, _0004~_0007在node2(mysqld3)上创建。

代码
  1. for i in `seq 0 3`;do /usr/bin/mysql -h 127.0.0.1 -P 3307 -u root -proot kingshard -e "CREATE TABLE IF NOT EXISTS test_shard_hash_000"${i}" ( id BIGINT(64) UNSIGNED NOT NULL, str VARCHAR(256), f DOUBLE, e enum('test1', 'test2'), u tinyint unsigned, i tinyint, ni tinyint, PRIMARY KEY (id)) ENGINE=InnoDB DEFAULT CHARSET=utf8;";done
  2. for i in `seq 4 7`;do /usr/bin/mysql -h 127.0.0.1 -P 3308 -u root -proot kingshard -e "CREATE TABLE IF NOT EXISTS test_shard_hash_000"${i}" ( id BIGINT(64) UNSIGNED NOT NULL, str VARCHAR(256), f DOUBLE, e enum('test1', 'test2'), u tinyint unsigned, i tinyint, ni tinyint, PRIMARY KEY (id)) ENGINE=InnoDB DEFAULT CHARSET=utf8;";done

插入数据

mysql连接到kingshard插入数据

代码
  1. for i in `seq 1 10`;do mysql -h 127.0.0.1 -P 9696 -u kingshard -pkingshard -e "insert into test_shard_hash (id, str, f, e, u, i) values(${i}, 'abc$i', 3.14, 'test$i', 255, -127)";done

kingshard日志如下:

代码
  1. 2015/07/29 07:39:15 - INFO - 127.0.0.1:40135->127.0.0.1:3307:select @@version_comment limit 1
  2. 2015/07/29 07:39:15 - INFO - 127.0.0.1:40135->127.0.0.1:3307:insert into test_shard_hash_0001(id, str, f, e, u, i) values (1, 'abc1', 3.14, 'test1', 255, -127)
  3. 2015/07/29 07:39:15 - INFO - 127.0.0.1:40136->127.0.0.1:3307:select @@version_comment limit 1
  4. 2015/07/29 07:39:15 - INFO - 127.0.0.1:40136->127.0.0.1:3307:insert into test_shard_hash_0002(id, str, f, e, u, i) values (2, 'abc2', 3.14, 'test2', 255, -127)
  5. 2015/07/29 07:39:15 - INFO - 127.0.0.1:40137->127.0.0.1:3307:select @@version_comment limit 1
  6. 2015/07/29 07:39:15 - INFO - 127.0.0.1:40137->127.0.0.1:3307:insert into test_shard_hash_0003(id, str, f, e, u, i) values (3, 'abc3', 3.14, 'test3', 255, -127)
  7. 2015/07/29 07:39:15 - INFO - 127.0.0.1:40138->127.0.0.1:3307:select @@version_comment limit 1
  8. 2015/07/29 07:39:15 - INFO - 127.0.0.1:40138->127.0.0.1:3308:insert into test_shard_hash_0004(id, str, f, e, u, i) values (4, 'abc4', 3.14, 'test4', 255, -127)
  9. 2015/07/29 07:39:15 - INFO - 127.0.0.1:40139->127.0.0.1:3307:select @@version_comment limit 1
  10. 2015/07/29 07:39:15 - INFO - 127.0.0.1:40139->127.0.0.1:3308:insert into test_shard_hash_0005(id, str, f, e, u, i) values (5, 'abc5', 3.14, 'test5', 255, -127)
  11. 2015/07/29 07:39:15 - INFO - 127.0.0.1:40140->127.0.0.1:3307:select @@version_comment limit 1
  12. 2015/07/29 07:39:15 - INFO - 127.0.0.1:40140->127.0.0.1:3308:insert into test_shard_hash_0006(id, str, f, e, u, i) values (6, 'abc6', 3.14, 'test6', 255, -127)
  13. 2015/07/29 07:39:15 - INFO - 127.0.0.1:40141->127.0.0.1:3307:select @@version_comment limit 1
  14. 2015/07/29 07:39:15 - INFO - 127.0.0.1:40141->127.0.0.1:3308:insert into test_shard_hash_0007(id, str, f, e, u, i) values (7, 'abc7', 3.14, 'test7', 255, -127)
  15. 2015/07/29 07:39:15 - INFO - 127.0.0.1:40142->127.0.0.1:3307:select @@version_comment limit 1
  16. 2015/07/29 07:39:15 - INFO - 127.0.0.1:40142->127.0.0.1:3307:insert into test_shard_hash_0000(id, str, f, e, u, i) values (8, 'abc8', 3.14, 'test8', 255, -127)
  17. 2015/07/29 07:39:15 - INFO - 127.0.0.1:40143->127.0.0.1:3307:select @@version_comment limit 1
  18. 2015/07/29 07:39:15 - INFO - 127.0.0.1:40143->127.0.0.1:3307:insert into test_shard_hash_0001(id, str, f, e, u, i) values (9, 'abc9', 3.14, 'test9', 255, -127)
  19. 2015/07/29 07:39:15 - INFO - 127.0.0.1:40144->127.0.0.1:3307:select @@version_comment limit 1
  20. 2015/07/29 07:39:15 - INFO - 127.0.0.1:40144->127.0.0.1:3307:insert into test_shard_hash_0002(id, str, f, e, u, i) values (10, 'abc10', 3.14, 'test10', 255, -127)

通过kingshard的日志可以看到数据插入时根据不同的hash值,插入到不同的子表里面去了。

查看数据

代码
  1. [root@testnode kingshard]# mysql -h 127.0.0.1 -P 9696 -u kingshard -pkingshard -e "select * from test_shard_hash where id in (2, 3, 4, 5)"
代码
  1. +----+------+------+-------+------+------+------+
  2. | id | str | f | e | u | i | ni |
  3. +----+------+------+-------+------+------+------+
  4. | 2 | abc2 | 3.14 | test2 | 255 | -127 | NULL |
  5. | 3 | abc3 | 3.14 | | 255 | -127 | NULL |
  6. | 4 | abc4 | 3.14 | | 255 | -127 | NULL |
  7. | 5 | abc5 | 3.14 | | 255 | -127 | NULL |
  8. +----+------+------+-------+------+------+------+

注意kingshard不支持 select * from test_hard_hash查询, 只支持带条件的查询。

相关推荐

返回顶部