END
KlustronDB单shard 集群部署指南
1 单 shard 架构
对于中小规模的应用, 可以使用 KlustronDB的 单 shard 架构,降低系统软件和硬件的成本,相对与MySQL主从的架构,KlustronDB 单 shard 架构不但可以提高系统的可靠性,而且还可以利用 KlustronDB 强大的计算分析能力, 在一个系统内同时满足 OLTP&OLAP 负载的需求。
_
组件说明
Klustron-server : OLAP&OLTP 操作。
KunlunProxySQL :OLTP 应用访问数据库路由, 支持负载均衡,故障转移,读写分离。
Klustron-storage : 存储节点,组成尊出shard。
Cluster manager : 集群管理,状态监测。
MetaShard : 元数据集群。
XPanel : 图形管理控制台
2 安装规划
以部署含三台服务器的单 shard 架构为例,资源计划照下面表格

3 准备环境
3.1 安装环境&配置需求
3.1.1 硬件配置
开发及测试环境(最低要求)

3.1.2 Linux 操作系统版本要求

3.2 安装环境准备
安装之前,要确保服务器操作系统环境满足以下要求:
所有节点所在机器须为 Linux, 安装了 bash, sed, gzip, python2, python2-dev 等工具或者库。python 2 可执行程序设置为python2。
所有集群节点所在机器已经正确设置好用户,节点将以该用户启动,该用户能够运行 sudo 而不需要密码。
配置防火墙,开发所有 install.json 配置文件涉及的端口。
对于安装存储节点的机器,需要预先安装以下库(此处为 ubuntu 20.04): libncurses5 libaio-dev。
对于安装计算节点的机器,需要预先安装以下库(此处为 ubuntu 20.04): libncurses5 libicu66 python-setuptools gcc。
在 centos 上安装, 参考附录2。
对于安装动作,需要预先将二进制发布包 ( kunlun-cluster-manager-0.9.1.tgz,Klustron-server-0.9.1.tgz, Klustron-storage-0.9.1.tgz) 放入当前目录. 此外,工具运行机器和节点所在机器间网络不能太慢,因为需要将发布包传递到这些机器上。
对于安装的所有机器, 需要设置安装用户及 root 用户的自动登录验证。 设置完毕后执行
ssh username@host.comubuntu可以参考:ubuntu 登录自动验证; centos可以参考: centos 登录自动验证; 如果在该步骤提示 sudo:需要密码 ,可以参考 :sudo nopasswd.
4 KlustronDB 安装过程
- 选择一台服务器,登录该服务器下载KlustronDB集群安装程序
通过 git clone 方式在 gitee 上拉 kunlun-scripts 程序包:
git clone https://github.com/zettadb/cloudnative.git
- 获取最新的版本的安装程序
切换当前目录进入 cloudnative/cluster下: cd cloudnative/cluster,此处命令以 1.3.3 为例(如有其它最新版本请用最新版本):git checkout -f 1.3.3
- 进入KlustronDB下载站点 下载离线安装包

4.1 填写一键安装程序的配置文件
前提: 三台服务器创建 用户名为 kunlun 的用户,配置好三台主机间的信任关系。如果数据库用户名为其他用户名,则相应修改配置文件。
登录服务器Server1上操作, 以 kunlun 用户登录, 进入 cluster 目录,可见其中的 install.json 文件: 
编辑 install.json 文件,填写服务器IP,用户名等信息。附录的 example文件是根据上面的表格 1-1 的规划做的配置,可以根据实际情况修改。
4.2 执行安装
安装过程将用到 generate_scripts.py 生成脚本,其参数说明:
- 执行该脚本的
action参数为install; config参数为集群配置文件install.json(可基于安装目录中的install_rbr.json文件修改生成此配置文件);defuser参数设置为Klustron集群的默认工作用户。 大部分或者全部机器都可以使用该用户,如无该默认用户则使用配置文件里machines用户指定的user。defbase大部分或者全部机器都可以创建该默认工作目录,如无法创建默认工作目录则使用配置文件里machines用户指定的basedir。
_
第一步: $python2 generate_scripts.py --action=install --config=install.json --defuser=kunlun --defbase=/kunlun
第二步: $bash install/commands.sh
耐心等待10分钟左右分钟,只要不出现 !!!FAILURES!!! 或者其它错误就代表安装成功了。
其他指令:
一键停止集群 stop:defbase 为默认工作目录,Action为stop
$python2 generate_scripts.py --action=stop --config=install.json --defbase=/kunlun
$bash stop/commands.sh
一键启动集群 start:action为start
$python2 generate_scripts.py --action=start --config=install.json --defbase=/kunlun
$bash start/commands.sh
一键清除集群 clean:action为clean
$python2 generate_scripts.py --action=clean --config=install.json --defbase=/kunlun --sudo
$bash clean/commands.sh
使用该命令前,工作目录不可以先清除,否则脚本无法找到工作目录,无法执行该命令,使用完毕后再消除工作目录
5 安装配置 KunlunProxySQL
5.1 根据 KunlunProxySQL
必须使用Klustron自带的KunlunProxySQL,该软件会与KlustronDB的其他模块配合工作,确保存储shard的主节点故障时,可以快速切换使用新选举的主节点继续工作。
5.2 安装完成后, 配置资源 KunlunProxySQL
5.2.1 配置 KunlunProxySQL 所需账户
-- proxysql 的监控账户 (在kunlun-storage 里执行)
create user 'monitor'@'%' identified by 'kunlunbasepwd';
grant all privileges on *.* to 'monitor'@'%' with grant option;
-- proxysql 的对外访问账户(在kunlun-storage 里执行)
create user 'proxysql'@'%' identified by 'kunlunbasepwd';
grant all privileges on *.* to 'proxysql'@'%' with grant option;
flush privileges;
5.2.2 配置 KunlunProxySQL 主从分组信息
登录 KunlunProxySQL 管理端口, 执行如下语句:
insert into mysql_replication_hostgroups ( writer_hostgroup, reader_hostgroup, comment) values (10,20,'proxy');
load mysql servers to runtime;
save mysql servers to disk;
添加主从服务器节点:
insert into mysql_servers(hostgroup_id,hostname,port) values (10,'192.168.0.11',6004);
insert into mysql_servers(hostgroup_id,hostname,port) values (20,'192.168.0.12',6005);
insert into mysql_servers(hostgroup_id,hostname,port) values (20,'192.168.0.13',6006);
load mysql servers to runtime;
save mysql servers to disk;
5.2.3 KunlunProxySQL 监控 MySQL 后端节点
admin@127.0.0.1 [monitor]>set mysql-monitor_username='monitor';
Query OK, 1 row affected (0.00 sec)
admin@127.0.0.1 [monitor]>set mysql-monitor_password='kunlunbasepwd';
Query OK, 1 row affected (0.00 sec)
5.2.4 为 KunlunProxySQL 配置对外访问账号:
insert into mysql_users (username,password,default_hostgroup) values ('proxysql','kunlunbasepwd',10);
load mysql users to runtime;
save mysql users to disk;
5.2.5 配置读写分离策略:路由规则
insert into mysql_query_rules(rule_id,active,match_pattern,destination_hostgroup,apply) values (1,1,'^select.*for update$',10,1);
insert into mysql_query_rules(rule_id,active,match_pattern,destination_hostgroup,apply) values (2,1,'^select',20,1);
load mysql query rules to runtime;
save mysql query rules to disk;
6 附录一: install.json
{
"machines":[
{
"ip":"192.168.0.11",
"basedir":"/kunlun",
"user":"kunlun"
},
{
"ip":"192.168.0.12",
"basedir":"/kunlun",
"user":"kunlun"
},
{
"ip":"192.168.0.13",
"basedir":"/kunlun",
"user":"kunlun"
}
],
"cluster":{
"name":"clust1",
"ha_mode": "rbr",
"meta":{
"nodes":[
{
"is_primary":true,
"ip":"192.168.0.11",
"port":6001,
"xport":60010,
"mgr_port":60011,
"innodb_buffer_pool_size":"64MB",
"data_dir_path":"/data1",
"log_dir_path":"/data1/log",
"user":"kunlun",
"election_weight":50
},
{
"is_primary":false,
"ip":"192.168.0.12",
"port":6002,
"xport":60020,
"mgr_port":60021,
"innodb_buffer_pool_size":"64MB",
"data_dir_path":"/data2",
"log_dir_path":"/data2/log",
"user":"kunlun",
"election_weight":50
},
{
"is_primary":false,
"ip":"192.168.0.13",
"port":6003,
"xport":60030,
"mgr_port":60031,
"innodb_buffer_pool_size":"64MB",
"data_dir_path":"/data3",
"log_dir_path":"/data3/log",
"user":"kunlun",
"election_weight":50
}
]
},
"comp":{
"nodes":[
{
"id":1,
"name":"comp1",
"ip":"192.168.0.11",
"port":5401,
"user":"abc",
"password":"abc",
"datadir":"/pgdatadir"
}
]
},
"data":[
{
"nodes":[
{
"is_primary":true,
"ip":"192.168.0.11",
"port":6004,
"xport":60040,
"mgr_port":60041,
"innodb_buffer_pool_size":"4000MB",
"data_dir_path":"/data4",
"log_dir_path":"/data4/log",
"user":"kunlun",
"election_weight":50
},
{
"is_primary":false,
"ip":"192.168.0.12",
"port":6005,
"xport":60050,
"mgr_port":60051,
"innodb_buffer_pool_size":"3000MB",
"data_dir_path":"/data5",
"log_dir_path":"/data5/log",
"user":"kunlun",
"election_weight":50
},
{
"is_primary":false,
"ip":"192.168.0.13",
"port":6006,
"xport":60060,
"mgr_port":60061,
"innodb_buffer_pool_size":"3000MB",
"data_dir_path":"/data6",
"log_dir_path":"/data6/log",
"user":"kunlun",
"election_weight":50
}
]
}
],
"clustermgr":{
"ip":"192.168.0.11"
}
}
}
7 附录2 CentOS 补充指南
7.1 安装必要软件包及依赖 (所有主机)
yum install -y python-setuptools ncurses-libs icu libicu libaio readline python-psycopg2
wget --no-check-certificate https://zettatech.tpddns.cn:14443/thirdparty/mysql-connector-python.el7.x86_64.rpm
yum localinstall -y mysql-connector-python.el7.x86_64.rpm
7.2 用户环境&网络配置
7.2.1 kunlun 用户 SUDO 免密 (所有主机)
执行shell命令 chmod u+w /etc/sudoers 为sudoers文件添加写权限。
然后用 vi 打开这一文件
vi /etc/sudoers , 找到如下两行并增加 kunlun 用户及组
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
kunlun ALL=(ALL) NOPASSWD:ALL
## Allows people in group wheel to run all commands
%wheel ALL=(ALL) ALL
kunlun ALL=(ALL) NOPASSWD:ALL
然后执行命令chmod u-w /etc/sudoers,撤销write权限。
7.2.2 SSH 免密登录
7.2.2.1各台主机配置主机名 (根据情况修改):
/etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.0.130 centos7b
192.168.0.139 centos7c
192.168.0.142 centos7d
192.168.0.130 localhost
7.2.2.2 配置远程 SSH 免密 (远程)
对集群的每台服务器执行以下操作:
chmod 755 ~/.ssh
cd /home/kunlun/.ssh
如果“.ssh”目录不存在,请在/home/hadoop目录执行 mkdir ~/.ssh 命令创建。
执行以下命令后,如果提示,就一直按“Enter”键,直至生成公钥。
ssh-keygen -t rsa
拷贝公钥到服务器(要登录上去的那台服务器)
scp id_rsa.pub kunlun@centos7c:/home/kunlun/.ssh/authorized_keys_from_centos7b
登录到要被登录的服务器,进入./ssh目录cd ~/.ssh
7.3 将客户端发送来的公钥文件进行合并
cat authorized_keys_from_centos7b >> authorized_keys
修改目录权限:
chown kunlun: .ssh
chown kunlun: .ssh/*
chmod 700 .ssh
chmod 600 .ssh/*
7.3.1 配置本机SSH 免密 (本机-第一台安装的服务器)
ssh-keygen -t dsa -P '' -f .ssh/id_dsa
cat .ssh/id_dsa.pub >> .ssh/authorized_keys
chmod 0600 .ssh/authorized_keys
