[集群分配]
ipaddr hostname ram vhd role
192.168.31.135 cluster1 8G 50G cdh-master ntp-server ansible mysql
192.168.31.136 cluster2 4G 50G cdh-monitor mysql
192.168.31.137 cluster3 4G 50G cdh-slave1 es-node
192.168.31.138 cluster4 4G 50G cdh-slave2 es-node
192.168.31.139 cluster5 4G 50G cdh-slave3 es-node
[参考]
https://www.cnblogs.com/swordfall/p/10816797.html#auto_id_11
[环境准备]
免密登录
NTP时间同步
[可选]Ansible批量工具
修改Linux swappiness参数(所有节点)
为了避免服务器使用swap功能而影响服务器性能,一般都会把vm.swappiness修改为0(cloudera建议10以下)
#ansible cdh-cluster -m shell -a "echo 0 > /proc/sys/vm/swappiness"
修改配置文件
#ansible cdh-cluster -m shell -a "echo 'vm.swappiness=0' >> /etc/sysctl.conf"
*上述方法rhel6有效,rhel7.2中:tuned服务会动态调整系统参数
#cd /usr/lib/tuned/
#grep "vm.swappiness" * -R
latency-performance/tuned.conf:vm.swappiness=10
throughput-performance/tuned.conf:vm.swappiness=10
virtual-guest/tuned.conf:vm.swappiness = 30
vi修改列出的所有文件对应参数
将配置文件发送至其他节点
#for i in {2..5};do scp latency-performance/tuned.conf cluster$i:$PWD/latency-performance/;done
#for i in {2..5};do scp throughput-performance/tuned.conf cluster$i:$PWD/throughput-performance/;done
#for i in {2..5};do scp virtual-guest/tuned.conf cluster$i:$PWD/virtual-guest/;done
检查是否已全部修改
#ansible cdh-cluster -m shell -a "grep 'vm.swappiness' /usr/lib/tuned/* -R"
禁用透明页(所有节点)
临时生效
#echo never > /sys/kernel/mm/transparent_hugepage/defrag
#echo never > /sys/kernel/mm/transparent_hugepage/enabled
永久生效 在/etc/rc.local 添加上面命令
#cat << EOF >> /etc/rc.local
>echo never > /sys/kernel/mm/transparent_hugepage/defrag
>echo never > /sys/kernel/mm/transparent_hugepage/enabled
>EOF
配置文件发送至各节点
#for i in {2..5};do scp /etc/rc.local cluster$i:/etc/;done
添加可执行权限
#ansible cdh-cluster -m shell -a "chmod +x /etc/rc.d/rc.local"
MySQL安装包
官网下载mysql-8.0.17-1.el7.x86_64.rpm-bundle.tar
官网下载mysql-connector-java-8.0.17.tar.gz
在可连外网的机器上准备mysqlPacks.tar.gz
#mkdir /opt/repo/MySQL8.0.17/RPMS/packs
#yum install -y net-tools perl openssl openssl-devel --downloadonly --downloaddir=/opt/repo/MySQL8.0.17/RPMS/packs
打包packs
#tar -cvf mysqlPacks.tar.gz /opt/repo/MySQL8.0.17/RPMS/packs
Httpd安装包
创建本地存储目录
#mkdir /opt/repo/httpd
在可连外网的机器上下载httpd安装包
#yum install -y httpd --downloadonly --downloaddir=/opt/repo/httpd
打包
#tar -cvf httpd.tar.gz /opt/repo/httpd
Createrepo安装包(CDH依赖)
官网allkeys.asc下载
https://archive.cloudera.com/cm6/6.2.0/
allkeys.asc
官网rpm包下载
https://archive.cloudera.com/cm6/6.2.0/redhat7/yum/
RPM-GPG-KEY-cloudera
cloudera-manager.repo
https://archive.cloudera.com/cm6/6.2.0/redhat7/yum/RPMS/x86_64/
cloudera-manager-agent-6.2.0-968826.el7.x86_64.rpm
cloudera-manager-daemons-6.2.0-968826.el7.x86_64.rpm
cloudera-manager-server-6.2.0-968826.el7.x86_64.rpm
cloudera-manager-server-db-2-6.2.0-968826.el7.x86_64.rpm
enterprise-debuginfo-6.2.0-968826.el7.x86_64.rpm
oracle-j2sdk1.8-1.8.0+update181-1.x86_64.rpm
官网parcels下载
https://archive.cloudera.com/cdh6/6.2.0/parcels/
CDH-6.2.0-1.cdh6.2.0.p0.967373-el7.parcel
CDH-6.2.0-1.cdh6.2.0.p0.967373-el7.parcel.sha1
CDH-6.2.0-1.cdh6.2.0.p0.967373-el7.parcel.sha256
创建本地存储目录
#mkdir /opt/repo/createrepo
在可连外网的机器上下载createrepo安装包
#yum install -y yum-utils createrepo --downloadonly --downloaddir=/opt/repo/createrepo
打包
#tar -cvf createrepo.tar.gz /opt/repo/createrepo
添加cdh官方yum源cloudera-manager.repo
#cp cloudera-manager.repo /etc/yum.repos.d/
导入GPGkey
$rpm --import /opt/repo/cdh6.2.0/RPM-GPG-KEY-cloudera
创建本地存储目录
#mkdir /opt/repo/cdh6.2.0/RPMS/packs
在可连外网的机器上下载cdh依赖安装包
#yum install -y cloudera-manager-daemons cloudera-manager-agent cloudera-manager-server --downloadonly --downloaddir=/opt/repo/cdh6.2.0/RPMS/packs
packs文件夹和cdh一起打包即可
[安装部署]
[JDK]
所有节点安装JDK
#ansible cdh-cluster -a "rpm -ivh /opt/repo/cdh6.2.0/RPMS/oracle-j2sdk1.8-1.8.0+update181-1.x86_64.rpm"
修改主节点环境配置文件,添加环境变量
#cat << EOF >> /etc/profile
>
> #JAVA
> export JAVA_HOME=/usr/java/jdk1.8.0_181-cloudera
> export CLASSPATH=.:\$CLASSPATH:\$JAVA_HOME/lib
> export PATH=\$PATH:\$JAVA_HOME/bin
> EOF
将配置文件发送至其他节点
#for i in {2..5};do scp /etc/profile cluster$i:/etc/;done
所有节点重新加载环境变量(由于ansible执行的是non-login shell,因此ansible操作只刷新/etc/bashrc和~/.bashrc, 若将环境变量写在/etc/profile时则不能用ansible加载,只能执行重启让系统自动加载)
#ansible cdh-cluster -a "reboot"
添加java命令软链接至/usr/bin/
ansible cdh-cluster -m shell -a "ln -s /usr/java/jdk1.8.0_181-cloudera/bin/java /usr/bin/java"
检查安装是否成功
#ansible cdh-cluster -m shell -a "java -version"
[MySQL8]主节点+监控节点(视集群资源而定)
卸载系统自带的mariadb
#rpm -qa | grep mariadb
#rpm -e --nodeps mariadb-libs-5.5.60-1.el7_5.x86_64
解压安装包
#cd /opt/repo/MySQL8.0.17
#mkdir RPMS
#tar -xvf mysql-8.0.17-1.el7.x86_64.rpm-bundle.tar -C RPMS
#tar -xvf mysqlPacks.tar.gz -C RPMS
文件安装顺序:common --> libs --> client --> server --> devel。
其中server需要perl和net-tools依赖,devel需要openssl-devel依赖
rpm -ivh mysql-community-common-8.0.17-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-8.0.17-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-compat-8.0.17-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-8.0.17-1.el7.x86_64.rpm
rpm -ivh packs/perl*.rpm
rpm -ivh packs/net-tools*.rpm
rpm -ivh mysql-community-server-8.0.17-1.el7.x86_64.rpm
rpm -ivh packs/keyutils-libs-devel-1.5.8-3.el7.x86_64.rpm
rpm -ivh packs/libcom_err-devel-1.42.9-13.el7.x86_64.rpm
rpm -Uvh packs/libkadm5-1.15.1-37.el7_6.x86_64.rpm
rpm -ivh packs/libsepol-devel-2.5-10.el7.x86_64.rpm
rpm -ivh packs/pcre-devel-8.32-17.el7.x86_64.rpm
rpm -Uvh packs/libselinux-devel-2.5-14.1.el7.x86_64.rpm
rpm -ivh packs/libverto-devel-0.2.5-4.el7.x86_64.rpm
rpm -Uvh packs/krb5-libs-1.15.1-37.el7_6.x86_64.rpm
rpm -ivh packs/krb5-devel-1.15.1-37.el7_6.x86_64.rpm
rpm -ivh packs/zlib-devel-1.2.7-18.el7.x86_64.rpm
rpm -Uvh packs/openssl-libs-1.0.2k-16.el7_6.1.x86_64.rpm packs/openssl-1.0.2k-16.el7_6.1.x86_64.rpm
rpm -ivh packs/openssl-devel-1.0.2k-16.el7_6.1.x86_64.rpm
rpm -ivh mysql-community-devel-8.0.17-1.el7.x86_64.rpm
MySQL初始化安装 初始化mysql,使MySQL目录的拥有者为mysql用户
#mysqld --initialize --user=mysql
开启mysql服务
#systemctl enable mysqld
#systemctl start mysqld
查看自动生成的初始密码
#grep "temporary password" /var/log/mysqld.log
使用初始密码登录mysql并修改mysql密码
#mysql -uroot -p
>ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '新密码';
开启远程连接权限
>CREATE USER 'root'@'%' IDENTIFIED BY 'root';
>ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root';
>FLUSH PRIVILEGES;
>quit
基于以上命令写了两个脚本
mysqlInstall.sh 脚本执行路径为/opt/repo/MySQL8.0.17/RPMS文件夹下,即可自动完成安装
#/bin/sh
rpm -ivh mysql-community-common-8.0.17-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-8.0.17-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-compat-8.0.17-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-8.0.17-1.el7.x86_64.rpm
rpm -ivh packs/perl*.rpm
rpm -ivh packs/net-tools*.rpm
rpm -ivh mysql-community-server-8.0.17-1.el7.x86_64.rpm
rpm -ivh packs/keyutils-libs-devel-1.5.8-3.el7.x86_64.rpm
rpm -ivh packs/libcom_err-devel-1.42.9-13.el7.x86_64.rpm
rpm -ivh packs/libkadm5-1.15.1-37.el7_6.x86_64.rpm
rpm -ivh packs/libsepol-devel-2.5-10.el7.x86_64.rpm
rpm -ivh packs/pcre-devel-8.32-17.el7.x86_64.rpm
rpm -Uvh packs/libselinux-devel-2.5-14.1.el7.x86_64.rpm
rpm -ivh packs/libverto-devel-0.2.5-4.el7.x86_64.rpm
rpm -ivh packs/krb5-libs-1.15.1-37.el7_6.x86_64.rpm
rpm -ivh packs/krb5-devel-1.15.1-37.el7_6.x86_64.rpm
rpm -ivh packs/zlib-devel-1.2.7-18.el7.x86_64.rpm
rpm -Uvh packs/openssl-libs-1.0.2k-16.el7_6.1.x86_64.rpm packs/openssl-1.0.2k-16.el7_6.1.x86_64.rpm
rpm -ivh packs/openssl-devel-1.0.2k-16.el7_6.1.x86_64.rpm
rpm -ivh mysql-community-devel-8.0.17-1.el7.x86_64.rpm
mysqld --initialize --user=mysql
mysqlInit.sh 脚本路径不影响,可以自定义修改新密码
#!/bin/sh
NEW_PASSWORD=root
systemctl enable mysqld
systemctl start mysqld
line=`grep "temporary password" /var/log/mysqld.log`
INIT_PASSWORD=${line##*root@localhost\: }
echo "MySQL temporary password is: $INIT_PASSWORD"
cat > ~/.my.cnf << EOF
[mysql]
user=root
password="$INIT_PASSWORD"
EOF
mysql --connect-expired-password -e "
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '$NEW_PASSWORD';
CREATE USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '$NEW_PASSWORD';
FLUSH PRIVILEGES;
quit
"
cat > ~/.my.cnf << EOF
[mysql]
user=root
password="$NEW_PASSWORD"
EOF
echo "MySQL new password is: root"
echo "Enable remote access success."
CDH数据库初始化,为每个服务创建用户,设置权限(后续安装服务时使用)
库 用户 密码
cmserver cmserveruser root
metastore hiveuser root
amon amonuser root
rman rmanuser root
oozie oozieuser root
hue hueuser root
建库语句: CREATE DATABASE IF NOT EXISTS 库名 DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
建用户语句: CREATE USER '用户名'@'%' IDENTIFIED WITH mysql_native_password BY '密码';
设置权限语句: GRANT ALL ON 库名.* TO '用户名'@'%';
基于以上编写脚本mysqlCDHInit.sh
#/bin/sh
DB_LIST=(cmserver metastore amon rman oozie hue)
USER_LIST=(cmserveruser hiveuser amonuser rmanuser oozieuser hueuser)
PASSWORD_LIST=(root root root root root root)
for ((i=0; i<${#DB_LIST[@]}; i++))
do
mysql --connect-expired-password -e "
CREATE DATABASE IF NOT EXISTS ${DB_LIST[i]} DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
CREATE USER '${USER_LIST[i]}'@'%' IDENTIFIED WITH mysql_native_password BY '${PASSWORD_LIST[i]}';
GRANT ALL ON ${DB_LIST[i]}.* TO '${USER_LIST[i]}'@'%';
FLUSH PRIVILEGES;
"
done
[MySQL8 JDBC-conector]所有节点放置mysql-connector-java-8.0.17.jar
主上解压mysql-connector
#cd /opt/repo/MySQL8.0.17/
#tar -xvf mysql-connector-java-8.0.17.tar.gz
提取mysql-connector-java-8.0.17.jar
#mv mysql-connector-java-8.0.17/mysql-connector-java-8.0.17.jar ./
删除解压的其他文件(仅需要jar包)
#rm -rf mysql-connector-java-8.0.17
所有节点建立目录
#ansible cdh-cluster -a "mkdir /usr/share/java"
传输jar包至所有节点对应目录,并重命名(不然cdh脚本无法识别)
for i in {1..5};do scp mysql-connector-java-8.0.17.jar cluster$i:/usr/share/java/mysql-connector-java.jar;done
[HTTP]所有点安装Httpd服务
上传压缩包至路径并解压
#tar -xvf httpd
发送文件至个节点
#for i in {2..5};do scp -r /opt/repo/httpd cluster$i:/opt/repo/;done
所有安装httpd
#ansible cdh-cluster -a "rpm -ivh /opt/repo/httpd/*"
修改配置文件
#vi /etc/httpd/conf/httpd.conf
<Directory "/var/www/cgi-bin">
AllowOverride None
#Options None
#Require all granted
Options FollowSymLinks
Order deny,allow
allow from all
</Directory>
配置文件发送至各节点
#for i in {2..5};do scp /etc/httpd/conf/httpd.conf cluster$i:/etc/httpd/conf/;done
启动服务
#ansible cdh-cluster -a "systemctl start httpd"
#ansible cdh-cluster -a "systemctl enable httpd"
[CDH RPM包安装]防止出现莫名错误,所有节点事先安装依赖包
[主节点设置本地yum源]
解压createrepo
#tar -xvf createrepo.tar.gz
安装createrepo
#rpm -Uvh /opt/repo/createrepo/*.rpm
创建本地源地址
#mkdir -p /var/www/html/cloudera-repos/cdh6.2.6
复制rpm包到本地源目录
#cp /opt/repo/cdh6.2.0/RPMS/*.rpm /var/www/html/cloudera-repos/cdh6.2.0/
#cd /var/www/html/cloudera-repos/cdh6.2.6/
创建repodata
#createrepo .
成功显示如下
Spawning worker 0 with 6 pkgs
Workers Finished
Saving Primary metadata
Saving file lists metadata
Saving other metadata
Generating sqlite DBs
Sqlite DBs complete
导入GPGkey
#ansible cdh-cluster -a "rpm --import /opt/repo/cdh6.2.0/RPM-GPG-KEY-cloudera"
复制allkeys.asc
$cp /opt/repo/cdh6.2.0/allkeys.asc /var/www/html/cloudera-repos/cdh6.2.0/
复制manifest.json
#cp /opt/repo/cdh6.2.0/RPMS/manifest.json /var/www/html/cloudera-repos/cdh6.2.0/
此时检查文件是否齐全
#ls /var/www/html/cloudera-repos/cdh6.2.0/
allkeys.asc
cloudera-manager-agent-6.2.0-968826.el7.x86_64.rpm
cloudera-manager-daemons-6.2.0-968826.el7.x86_64.rpm
cloudera-manager-server-6.2.0-968826.el7.x86_64.rpm
cloudera-manager-server-db-2-6.2.0-968826.el7.x86_64.rpm
enterprise-debuginfo-6.2.0-968826.el7.x86_64.rpm
manifest.json
oracle-j2sdk1.8-1.8.0+update181-1.x86_64.rpm
repodata
安装依赖包
#ansible cdh-cluster -a "rpm -ivh /opt/repo/cdh6.2.0/RPMS/cloudera-manager-daemons-6.2.0-968826.el7.x86_64.rpm"
#ansible cdh-cluster -a "rpm -Uvh /opt/repo/cdh6.2.0/RPMS/packs/*"
将parcels移动至安装好的cloudera目录下
#ansible cdh-cluster -m shell -a "mv /opt/repo/cdh6.2.0/parcels/* /opt/cloudera/parcel-repo/"
验证parcel文件完整性
#ansible cdh-cluster -m shell -a "cd /opt/cloudera/parcel-repo/ && sha1sum CDH-6.2.0-1.cdh6.2.0.p0.967373-el7.parcel | awk '{ print $1 }' > CDH-6.2.0-1.cdh6.2.0.p0.967373-el7.parcel.sha"
修改parcel文件所属用户
#ansible cdh-cluster -m shell -a "chown cloudera-scm:cloudera-scm /opt/cloudera/parcel-repo/*"
主节点初始化安装脚本(password替换为之前设置的mysql中cmserveruser的密码,本文是root)
#/opt/cloudera/cm/schema/scm_prepare_database.sh mysql cmserver cmserveruser password
成功显示如下
All done, your SCM database is configured correctly!
打开cloudera-scm-server服务
#systemctl start cloudera-scm-server
*自选 开启开机自动启用cloudera-scm-server服务
#systemctl enable cloudera-scm-server
静候几分钟,浏览器打开 http://cluster1:7180 若本机没配置hosts文件的集群地址映射最好配上,不然后续cdh组件服务切换节点时无法访问
Windows系统hosts文件路径:C:\Windows\System32\drivers\etc
Linux系统hosts文件路径:/etc/hosts
文件末尾添加集群主机名信息,如:
192.168.31.135 cluster1
192.168.31.136 cluster2
192.168.31.137 cluster3
192.168.31.138 cluster4
192.168.31.139 cluster5
[CM GUI建立集群]
http://cluster1:7180登录页面初始超管用户为admin 密码admin