1 物料清单

  1. 部署安装包
    • 包地址:
    • 包MD5:
  2. License授权文件:需基于客户合同申请License授权文件

2 系统确认

2.1 系统版本确认

EasyData支持x86版本 CentOS-7.9、RedHat-7.9、RedHat-8.6、KylinV10 操作系统,检查命令:

# centos7 redhat7 redhat8 
cat /etc/redhat-release
ansible all -m shell -a "cat /etc/redhat-release"

# kylinv10
cat /etc/os-release
ansible all -m shell -a "cat /etc/os-release"

2.2 FQDN设置

  1. EasyData强依赖主机名,因此须严格要求主机名设定,需与客户提前沟通确定FQDN,且确认后不可更改,若用户环境有所变动,需提前与网易方确认
  2. 若网络中存在DNS,则检查是否可以根据主机名ping通其他节点;若不存在DNS,集群直接以主机名互相通信,则需在每个节点/etc/hosts中添加集群IP与Hostname对应关系
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

10.0.0.1 bdms1.163.com
10.0.0.2 bdms2.163.com
10.0.0.3 bdms3.163.com
……

EasyData是从当前session中获取该配置,可以通过以下命令来进行检查和设置:

# 单台
hostnamectl set-hostname bdms1.163.com
hostname && hostname -f    # 显示主机名和全域名
ansible all -m shell -a "hostname && hostname -f"
# 多台
ansible all -m copy -b --become-user=root -a "src=/etc/hosts dest=/etc/hosts"
ansible all -m shell -a "hostname && hostname -f"

2.3 磁盘挂载

EasyData需多块数据盘以支撑平台运行,前期需将数据盘挂载至操作系统,CentOS7系列xfs为主。EasyOps需每个节点至少存在一块数据盘,建议:系统盘≥200GB,数据盘≥1TB

注:统一将数据盘挂载至 /mnt 目录下,格式要求 /mnt/data01、/mnt/data02 …

# 查看磁盘状态
fdisk -l
# 格式化磁盘(若存在多块磁盘,以分号分隔批量操作)
mkfs.xfs /dev/sdb
# 挂载磁盘到指定目录
mkdir -p /mnt/data01 && mount /dev/sdb /mnt/data01
# 修改/etc/fstab,增加如下配置,设置开机自动加载磁盘
/dev/vdb        /mnt/data01     xfs     defaults        0 0

2.4 包服务器设置

EasyData以HTTP方式将组件包发放至其他节点,需将组件包解压通告,运行命令:

tar zxvf EasyData-V7.0.tar.gz   # 解压安装包
yum -y install httpd            # 安装httpd服务
# 需要关闭包服务器firewalld
systemctl stop firewalld 
# 关闭selinux
setenforce 0
ln -s /mnt/data01/bdms/EasyData-V7.0 /var/www/html/bdms  # 创建软链
systemctl start httpd && systemctl enable httpd   # 启动并设置开机自启动
systemctl status httpd          # 检查httpd运行状态
# 正确返回:Active: active (running)

#若客户没有yum repo 不能安装httpd 情况下可使用二进制运行包服务器 二进制文件位于
# EasyData-V7.0/common/easyops/01-package-server.tar.gz

tar -xzvf 01-package-server.tar.gz 
#启动包服务器
cd  01-package-server && ./run.sh
ln -s /mnt/data01/bdms/EasyData-V7.0  bdms

通过浏览器检查是否可以在页面上显示该组件包,在浏览器中输入 http://<包服务器IP地址>/bdms,即可查看

2.5 时钟同步

若客户网络不存在时间服务器或不通外网,则需在某个服务器上安装搭建时间服务器,运行命令:

yum -y install ntp # 安装ntp服务

#服务器配置 /etc/ntp.conf 如下:
#server 0.debian.pool.ntp.org iburst
#server 1.debian.pool.ntp.org iburst
#server 2.debian.pool.ntp.org iburst
#server 3.debian.pool.ntp.org iburst
server 127.127.1.0
fudge 127.127.1.0 stratum 1

systemctl restart ntpd && systemctl enable ntpd   # 重启及设置开启自启动

本地时间服务器已搭建完成,其他节点需同步该服务器时间,运行命令:

yum -y install ntpdate     # 安装ntp服务客户端
ntpdate <ntp服务器的IP地址>  # 设置同步
timedatectl status         # 检查时间是否同步
ansible all -m shell -a "date"

Crontab中添加如下配置:
    0 */1 * * * /usr/sbin/ntpdate <ntp服务器的IP地址> >/dev/null 2>&1
添加配置至 /etc/rc.local: 
    /usr/sbin/ntpdate <ntp服务器的IP地址>
    chmod +x /etc/rc.d/rc.local
(附)若时区不是 CST ,则需要修改时区
    timedatectl set-timezone "Asia/Shanghai"

2.6 umask 设置

检查默认系统账号及easyops账号的umask是否为022

cat -n /etc/bashrc | grep -2 'umask'    # 71行是普通用户的更改,默认002;73是超级用户的更改,默认022
cat -n /etc/profile | grep -2 'umask'   # 60行是普通用户的更改,默认002;62是超级用户的更改,默认022

source /etc/bashrc      # 若修改则刷新bash配置
source /etc/profile     # 若修改则刷新系统配置
# 其他umask统一修改为02
cat -n /etc/login.defs | grep UMASK
# 设置大写 UMASK=022
ansible all -m shell -b --become-user=root -a 'sed -i "s/077/022/g" /etc/login.defs'

2.7 预置用户及免密

在部署EasyOps的节点上需要创建easyops账号(有sudo权限),并设置免密其他服务器节点

注:若部分用户不能大规模创建easyops账号的话,easyops服务器必须创建此账号,其他节点可以使用具有sudo权限的其他账号

#(必做)创建easyops账号,其他节点也使用此账号
groupadd easyops
useradd easyops -g easyops -s /bin/bash -d /home/easyops

#(必做)easyops节点配置免密
su - easyops
ssh-keygen -t rsa -N '' -f ~/.ssh/id_rsa -q

#(必做)其他节点需要创建相关的目录和文件
    mkdir -p -m 700 /home/<远程节点用户名>/.ssh
    vi /home/<远程节点用户名>/.ssh/authorized_keys
    chmod 600 .ssh/authorized_keys
#(必做)将easyops节点上的公钥复制到其他节点authorized_keys文件内

#(必做)使用root添加easyops账号的sudo权限
echo "easyops ALL=(ALL:ALL) NOPASSWD:ALL" >> /etc/sudoers

2.8 检查是否为字符界面

使用如下命令查看系统默认启动界面

systemctl get-default

#若显示graphical.target则表示图形化界面
#multi-user.target则表示字符界面

以root身份在终端或字符界面运行以下命令: 将系统默认启动界面改为字符界面

systemctl set-default multi-user.target

输入init 3 将图形页面转换为字符页面

init 3

2.9 检查sudoers文件

检查/etc/sudoers文件中是否存在

Defaults requiretty

若存在,将其注释(行首加#)或删除。

2.10 安装python 2(redhat 8 操作系统 easyops 节点需要安装)

  1. 配置yum repo 需替换成对应的包服务器url及对应操作系统
  • RedHat8 —>redhat8
    export PACKAGE_URL="http://repo.bdms.service.163.org/EasyData-V7.0"
    export OS="redhat8"
    curl ${PACKAGE_URL}/common/easyops/init-scripts/add-yum-repo.sh |bash -x -s ${PACKAGE_URL}/$OS/os/x86_64/
  1. 安装python2
    yum install python2

3 数据库准备

本节的目的,是让用户提供一个符合条件的数据库实例,万象可以作为兜底的数据库。万象的安装部署过程,不在本节体现。关于数据库的权限、参数等问题,都在本节描述。

用户需提供用来存储easyops数据以及组件数据的外置数据库,目前支持的数据库是MySQL 5.7。支持MySQL、阿里云RDS、万象等,且需要通过EasyOps上的万象服务组件导入使用。由于用户场景各不相同,提供的数据库也不同,此处不做数据库具体安装过程的介绍。

3.1 确认参数

注意:阿里云RDS修改参数需通过界面修改,不支持命令行修改,如event_scheduler、innodb_large_prefix改为ON、interactive_timeout改为28800

参数名称 参数配置
log_bin_trust_function_creators on
event_scheduler on
character_set_server utf8mb4 或 utf8
sql_mode
innodb_large_prefix on
explicit_defaults_for_timestamp off
interactive_timeout 28800
max_connections >=2000

查询命令:

show variables like '%log_bin_trust_function_creators%';
show variables like '%event_scheduler%';
show variables like '%character_set_server%';
show variables like '%sql_mode%';
show variables like '%innodb_large_prefix%';
show variables like '%explicit_defaults_for_timestamp%';
show variables like 'interactive_timeout';
show variables like 'max_connections';

若与表格参数不一致,则使用root权限账号修改:

SET GLOBAL log_bin_trust_function_creators = 1;
SET GLOBAL event_scheduler = 1;
set character_set_server="utf8mb4";
set sql_mode = '';
SET GLOBAL innodb_large_prefix=on;
set GLOBAL explicit_defaults_for_timestamp=off;
set GLOBAL interactive_timeout=28800;
set GLOBAL max_connections=2000;

参数确认和修改参数的sql路径如下(方便交付运维在不能复制文档内容的场景操作):

{包路径}/common/easyops/variables.sql

3.2 准备用户

数据库用户一般由客户提供,所提供的数据库用户XX(导入万象时填用户名、密码、disable_ddl时使用)可能是仅拥有普通权限的用户、或拥有root权限/高权限的用户。可通过以下命令查看用户权限:

默认root权限的结果:

前置准备 - 图1

若客户希望使用普通用户,但没有提供普通用户,可使用root权限用户创建一个普通用户:

CREATE USER 'xx'@'%' IDENTIFIED BY '密码';

以下针对用户提供的普通用户root用户/高权限用户分别做处理。

注意:阿里云RDS只提供高权限用户,不提供root用户,拥有创建用户、创建DB的权限,但不能通过命令行直接修改数据库参数>阿里云RDS只提供高权限用户,不提供root用户,拥有创建用户、创建DB的权限,但不能通过命令行直接修改数据库参数**

3.3 建库赋权

场景1:root用户/高权限用户

只需提前创建easyops库

CREATE DATABASE `easyops` /*!40100 DEFAULT CHARACTER SET utf8mb4 */;

场景2:普通用户

Step1:用户赋权

给提供的普通用户赋权,此用户需拥有metastore库、easyranger库、easycoop库、smilodon库以及easyops库的操作权限:

  1. 修改grant.sql文件的用户名xx和密码修改为实际的用户名和密码
  2. 使用root权限用户登录到mysql,执行授权语句
    wget {包路径}/common/easyops/grant.sql
    source {本地路径}/grant.sql

Step2:创建服务组件的用户、库,并授权

普通用户需提前去创建服务组件的数据库账号以及数据库,创建的数据库账号得拥有对应库的读写、操作、GRANT权限。使用root权限用户登录mysql并执行:

wget {包路径}/common/easyops/create_db.sql
source {本地路径}/create_db.sql

Step3:沙箱场景(可选)

如果后续需要安装沙箱,并与原集群共用数据库,需提前创建好沙箱集群hive的用户和表,并在一键部署yml的配置项中与之保持一致。使用root权限用户登录mysql并执行:

wget {包路径}/common/easyops/create_db.sql
source {本地路径}/sandbox.sql

Step4:多集群场景(可选)

如果后续需要安装多集群,并与原集群共用数据库,需提前创建好多集群hive和azkaban的用户和表,并在一键部署yml的配置项中与之保持一致。使用root权限用户登录mysql并执行:

wget {包路径}/common/easyops/cluster.sql
source {本地路径}/cluster.sql