ArkDB集群部署

ArkDB集群部署

时间:2019-6-1 作者:极数云舟

ArkDB Server可以构建在主流的开源分布式存储Ceph和TiKV上,本文ArkDB集群是构建在Ceph上。

部署环境环境如下:

主机名 IP ArkDB Engine角色(Ceph) ArkDB Server 角色
arkdb01 10.0.0.185 admin、mon、mgr、osd ArkDB Master
arkdb02 10.0.0.186 mon、mgr、osd ArkDB Slave1
arkdb03 10.0.0.187 mon、mgr、osd ArkDB Slave2
操作系统 Linux version 3.10.0-693.el7.x86_64
arkdb版本 arkdb_3.10.0-957.5.1.el7.x86_64_2019-04-28.tar.gz
gcc版本 gcc version 4.8.5
glibc版本 (GNU libc) 2.17  (ldd -version)

ArkDB集群部署分为 基础环境配置 、 ArkDB Enginee(Ceph)部署 和ArkDB Server部署三个步骤。

提供手动部署和Ansible部署方式,其中admin节点作为中控机,可以是部署集群中的某一台。

ArkDB Engine 部署

ArkDB是构建在开源分布式存储系统Ceph之上,已有Ceph集群可跳过此步骤。手动部署Ceph集群详情如下,如下步骤无特殊说明均在 admin node执行。

  1. 集群中所有机器配置主机名,例如主机名 arkdb01如下操作:

执行hostnamectl set-hostname   arkdb01

vim /etc/hosts 新增如下内容:

10.0.0.185  arkdb01
10.0.0.186  arkdb02
10.0.0.187  arkdb03

  1. 集群中所有机器安装NTP和OpenSSH。

#安装NTP
shell>yum install ntp ntpdate ntp-doc wget -y

shell>systemctl enable ntpd.service  #设置开机自启动

shell>systemctl start ntpd.service #启动ntp服务
shell>systemctl status ntpd.service #查看ntp服务状态

shell>ntpdate 0.cn.pool.ntp.org  #校对系统时钟
#安装openssh

shell>yum install openssh-server  sshpass -y

shell>ssh -V #查看ssh版本
shell>systemctl status sshd.service

shell> systemctl start sshd.service

#关闭防火墙
shell> systemctl  stop firewalld.service

  1. admin机器节点,配置免密码登陆

ssh-keygen
ssh-copy-id root@arkdb02
ssh-copy-id root@arkdb03

  1. 在ArkDB Engine节点上配置Ceph EPEL仓库。配置yum源, cat /etc/yum.repos.d/ceph.repo

[Ceph]

name=Ceph packages for $basearch

baseurl=http://download.ceph.com/rpm-mimic/el7/$basearch

enabled=1

gpgcheck=1

type=rpm-md

gpgkey=https://download.ceph.com/keys/release.asc

priority=1

 

[Ceph-noarch]

name=Ceph noarch packages

baseurl=http://download.ceph.com/rpm-mimic/el7/noarch

enabled=1

gpgcheck=1

type=rpm-md

gpgkey=https://download.ceph.com/keys/release.asc

priority=1

 

[ceph-source]

name=Ceph source packages

baseurl=http://download.ceph.com/rpm-mimic/el7/SRPMS

enabled=1

gpgcheck=1

type=rpm-md

gpgkey=https://download.ceph.com/keys/release.asc

priority=1

 

配置epel, cat /etc/yum.repos.d/epel.repo

[epel]

name=Extra Packages for Enterprise Linux 7 – $basearch

baseurl=http://download.fedoraproject.org/pub/epel/7/$basearch

metalink=https://mirrors.fedoraproject.org/metalink?repo=epel-7&arch=$basearch

failovermethod=priority

enabled=1

gpgcheck=0

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7

[epel-debuginfo]

name=Extra Packages for Enterprise Linux 7 – $basearch – Debug

baseurl=http://download.fedoraproject.org/pub/epel/7/$basearch/debug

metalink=https://mirrors.fedoraproject.org/metalink?repo=epel-debug-7&arch=$basearch

failovermethod=priority

enabled=0

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7

gpgcheck=0

[epel-source]

name=Extra Packages for Enterprise Linux 7 – $basearch – Source

baseurl=http://download.fedoraproject.org/pub/epel/7/SRPMS

metalink=https://mirrors.fedoraproject.org/metalink?repo=epel-source-7&arch=$basearch

failovermethod=priority

enabled=0

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7

gpgcheck=0

 

5.安装相关yum包

cd /etc/pki/rpm-gpg/ && wget https://archive.fedoraproject.org/pub/epel/RPM-GPG-KEY-EPEL-7

yum install snappy leveldb gdisk python-argparse gperftools-libs -y

 

6.在admin节点安装ceph-deploy工具

yum install -y ceph ceph-deploy

mkdir -p ~/ceph‐cluster && cd ~/ceph‐cluster

ceph-deploy new arkdb01

cp ceph.conf  /etc/ceph/ceph.conf

 

7.admin节点开始部署ceph集群

ceph-deploy install arkdb01 arkdb02 arkdb03

admin节点修改配置文件 cat /etc/ceph/ceph.conf

[global]

fsid = acb5d01a-fd33-44ec-bc05-9397ac5ef465

mon_initial_members = arkdb01

mon_host = 10.0.0.185,10.0.0.186,10.0.0.187

auth_cluster_required = cephx

auth_service_required = cephx

auth_client_required = cephx

osd pool default size = 3

osd max object name len = 256

osd max object namespace len = 64

filestore_fd_cache_size = 3276800000

osd max object size = 4096M

mon clock drift allowed = 2

mon clock drift warn backoff = 30

[mon]

mon allow pool delete = true

[mgr]

mgr modules = dashboard

admin节点拷贝配置文件

ceph-deploy –overwrite-conf mon create-initial

ceph-deploy –overwrite-conf admin arkdb01 arkdb02 arkdb03

sudo chmod 644 /etc/ceph/ceph.client.admin.keyring

admin节点开始配置osd,确保硬盘未被挂载且可格式化数据,例如为 /dev/sdb

ceph-deploy osd create –data /dev/sdb arkdb01

ceph-deploy osd create –data /dev/sdb arkdb02

ceph-deploy osd create –data /dev/sdb arkdb03

ceph-deploy mgr create arkdb01 arkdb02 arkdb03

ceph mgr module enable dashboard

ceph dashboard create-self-signed-cert

ceph config-key put mgr/dashboard/server_addr 10.0.0.185

ceph config-key put mgr/dashboard/server_port 7000

sudo systemctl restart ceph-mgr@arkdb01

ceph mgr services

 

注意创建osd事项:

1)此处如果报错mkfs.xfs: cannot open /dev/sdb: Device or resource busy , 通过通过`dmsetup ls`查看谁在占用,找到ceph ‐‐**字样ceph‐‐**为lsblk显示的块设备具体信息,

使用`dmsetup remove ceph‐**`s删除 后重新执行mkfs.xfs -f /dev/sdb。

2) 报错[arkdb01][DEBUG ]  stderr: Can’t open /dev/sdb exclusively.  Mounted filesystem? , 需要执行umount /dev/sdb

3) umount  /dev/sdb 报错 设备忙,可以执行  fuser -k /dev/sdb &&  umount -f /dev/sdb , 然后执行mkfs.xfs -f /dev/sdb

 

各个ArkDB Engine节点添加授权

ceph auth get-or-create client.mysql mon ‘allow *’ osd ‘allow *’ |sudo tee “/etc/ceph/ceph.client.mysql.keyring” && sudo touch /etc/ceph/ceph.keyring && sudo ceph-authtool /etc/ceph/ceph.keyring –import-keyring /etc/ceph/ceph.client.mysql.keyring

执行ceph -s 查看ceph集群状态,显示HEALTH_OK则表示ceph安装成功。

ArkDB Engine 健康检查

ArkDB Engine要求:

  1. pool中的对象个数没有限制
  2. 每个对象最大为4G

可以使用如下python脚本进行检查:

import rados
try:
cluster = rados.Rados(conffile=’/etc/ceph/ceph.conf’)
except TypeError as e:
print ‘Argument validation error: ‘, e
raise e
print “Created cluster handle.”

try:
cluster.connect()
except Exception as e:
print “connection error: “, e
raise e
finally:
print “Connected to the cluster.”

print “\nCreate ‘test’ Pool”
print “——————”
cluster.create_pool(‘test’)
ioctx = cluster.open_ioctx(‘test’)
ioctx.write(“hw”, “!”*1024,0)

for i in range(1024*1024*4 – 1):
ioctx.append(“hw”, “!”*1024)
print ioctx.stat(“hw”)
ioctx.remove_object(“hw”)
cluster.delete_pool(‘test’)

脚本用来检测是否能写入4G大小一个对象,也可以通过检查ceph配置文件来确定是否满足上述要求。

3. 检查权限

检查mysql用户下,是否有权限访问ceph,可以使用如下python脚本:

import os
import pwd
user = pwd.getpwnam(‘mysql’)
os.setuid(user.pw_uid)
print os.system(‘whoami’)
import rados
cluster = rados.Rados(conffile=’/etc/ceph/ceph.conf’)
print cluster

如果脚本没有报错,则说明mysql用户下可以访问ceph,前提mysql用户以及用户组必须存在。

 

 ArkDB Server 部署

  1. ArkDB Server节点分别创建mysql组和mysql用户

 groupadd mysql && useradd -g mysql -s /sbin/nologin -d /home/mysql mysql

  1. ArkDB Server节点分别创建部署目录及解压arkdb 安装包

mkdir -p /data/arkdb
tar -zxvf  arkdb_3.10.0-957.5.1.el7.x86_64_2019-04-28.tar.gz  -C /data/arkdb    (其中arkdb_3.10.0-957.5.1.el7.x86_64_2019-04-28.tar.gz为官方提供的arkdb安装包)

初始化端口为3306,则 mv /data/arkdb/arkdb /data/arkdb/3306
# pwd
/data/arkdb/3306

# tree -CL 1
.

├── bin
├── binlog
├── etc

├── lock
├── log
├── mysqldata
├── pid
├── private

├── share

├── socket
└── tmp

3.修改权限

cd  /data/arkdb/3306 && chmod 750 . && chown -R mysql:mysql .

执行ceph auth list|grep mysql  确保 mysql用户可以访问Ceph,否则添加ceph.client.mysql.keyring。

  1. 主库Master arkdb01 修改配置文件,确保如下参数正确配置:

default_authentication_plugin = mysql_native_password
arkdb_cluster_namespace =  arkdb_test
arkdb_backend_config_file = /etc/ceph/ceph.conf

arkdb_enabled = true
arkdb_debug_enabled = 2
arkdb_slave_username=root
arkdb_slave_password=root
arkdb_apply_thread_queue_size=100000
arkdb_apply_logic_queue_size=100000
arkdb_apply_thread_count=40

其中arkdb_cluster_namespace指的是数据库在ceph中的pool的名称,不要与ceph其他pool名称重名,从库要与主库保持一致,default_authentication_plugin, arkdb_enabled必须开启。arkdb_slave_username和arkdb_slave_password为从库的用户名和密码。如果是ArkDB单实例,从库的这两个参数不需要加。

主实例初始化数据库,确保Ceph的没有与my.cnf中arkdb_cluster_namespace同名的pool名称。可以登录到ceph服务器,使用rados lspools查看,示例如下:

rados lspools|grep arkdb_test

删除废弃的pool

ceph osd pool delete arkdb_test arkdb_test –yes-i-really-really-mean-it

  1. 从库配置文件 Slave 修改配置文件,确保如下参数正确配置:

default_authentication_plugin = mysql_native_password
arkdb_cluster_namespace =  arkdb_test
arkdb_backend_config_file = /etc/ceph/ceph.conf
arkdb_enabled = true
arkdb_debug_enabled = 2
arkdb_master_username=root  # 访问Master的用户名
arkdb_master_password=root  # 访问Master的密码
arkdb_master_hostname=10.0.0.98  #访问Master的地址
arkdb_master_port=3306            #访问Master的端口
arkdb_server_mode=slave
arkdb_apply_thread_queue_size=100000
arkdb_apply_logic_queue_size=100000
arkdb_apply_thread_count=40

其中arkdb_master_username和arkdb_master_password为主库的用户名和密码,arkdb_master_hostname、arkdb_master_port为主库的ip地址和端口号,

arkdb_server_mode=slave表示arkdb节点为从库。

  1. 主库初始化并启动ArkDB Server。

/data/arkdb/3306/bin/mysqld –defaults-file=/data/arkdb/3306/etc/my.cnf –user=mysql –datadir=/data/arkdb/3306/mysqldata  –initialize

获取临时密码

grep password log/mysql-error.log

启动mysql server

/data/arkdb/3306/bin/mysqld –defaults-file=/data/arkdb/3306/etc/my.cnf –datadir=/data/arkdb/3306/mysqldata –arkdb_confirm_single_write=1 &

/data/arkdb/3306/bin/mysql.server  -P 3306 start

利用临时密码登陆数据库

/data/arkdb/3306/bin/mysql -uroot -p –socket=/data/arkdb/3306/socket/mysql.sock

进行账号授权

ALTER USER USER() IDENTIFIED BY ‘root’;
CREATE USER ‘root’@’%’ IDENTIFIED BY ‘root’;
GRANT ALL PRIVILEGES ON *.* TO ‘root’@’%’ WITH GRANT OPTION;
FLUSH PRIVILEGES;

复制主库文件夹目录到从实例并修改文件夹所有权为mysql

scp -rp  /data/arkdb/3306/mysqldata/*  root@arkdb02: /data/arkdb/3306/mysqldata/*
chown -R mysq.mysql  /data/arkdb/3306/mysqldata

7.启动ArkDB Server Slave。

/data/arkdb/3306/bin/mysqld –defaults-file=/data/arkdb/3306/etc/my.cnf –datadir=/data/arkdb/3306/mysqldata –arkdb_confirm_single_write=1 &

/data/arkdb/3306/bin/mysql.server  -P 3306 start

 

从实例启动之后,首先会进入startup状态,再进入running状态。可以通过如下命令查询:

/data/arkdb/3306/bin/mysql -uroot -proot -h127.0.0.1 -P3306
mysql> select @@arkdb_server_mode, @@arkdb_server_status;
*************************** 1. row ***************************
@@arkdb_server_mode: slave

@@arkdb_server_status: startup
1 row in set (0.00 sec)

mysql>select @@arkdb_master_hostname,@@arkdb_master_port,@@arkdb_master_username,@@arkdb_master_password\G;
*************************** 1. row ***************************

@@arkdb_master_hostname: 10.0.0.185
@@arkdb_master_port: 3306

@@arkdb_master_username: root

@@arkdb_master_password: root
1 row in set (0.00 sec)

如果从实例处于running状态,跳过该步骤。

执行如下命令,启动从实例复制:

mysql> set global arkdb_start_slave = 1;
Query OK, 0 rows affected (1.31 sec)

检查从节点状态:

mysql> select @@arkdb_slave_replication_running, @@arkdb_server_status;
+———————————–+———————–+
| @@arkdb_slave_replication_running | @@arkdb_server_status |
+———————————–+———————–+

|                     1 | running        |
+———————————–+———————–+

查询得如上结果,说明从节点启动成功。

 

010-82833306 发送短信