跳至主要內容

END

Klustron大约 7 分钟

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.com ubuntu可以参考:ubuntu 登录自动验证; centos可以参考: centos 登录自动验证; 如果在该步骤提示 sudo:需要密码 ,可以参考 : sudo nopasswd .

4 KlustronDB 安装过程

  1. 选择一台服务器,登录该服务器下载KlustronDB集群安装程序

通过 git clone 方式在 gitee 上拉 kunlun-scripts 程序包:

git clone https://github.com/zettadb/cloudnative.git
  1. 获取最新的版本的安装程序

切换当前目录进入 cloudnative/cluster下: cd cloudnative/cluster,此处命令以 1.3.3 为例(如有其它最新版本请用最新版本):git checkout -f 1.3.3

  1. 进入KlustronDB下载站点open in new window 下载离线安装包

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

END