常用软件部署
- 1、部署
-
- 1.1基本命令安装
- 1.2 部署的服务(Hadoop)
-
- 1.2.1 安装 Docker
- 1.2.2 问题
- 1.2.3 docker 启动报错
- 1.2.4 docker pull 慢的问题
- 1.2.5 docker基础容器中bash: vi: command not found问题解决
- 1.2.6docker基础容器中bash: vi: command not found问题解决
- 1.2.7 Docker启动容器报错: connect: no route to host
- 1.2.8 容错运行报错:iptables: No chain/target/match by that name
- 1.2.9 docker容器内使用apt报错 E: List directory /var/lib/apt/lists/partial is missing. – Acquire (13: Permission
- 1.3 部署服务器
- 2 其他软件安装
- 3 项目初始化
- 4 其他
- 注意:
1、部署
1.1基本命令安装
netstat: yum -y install net-tools
vim: yum -y install vim*
yum -y install wget
yum install nc -y
yum install telnet* -y
# docker 内安装ping命令
apt-get update
apt install iputils-ping
# docker: bash: ip: command not found
apt-get update & apt-get install -y iproute2
#
apt-get install yum
1.2 部署的服务(Hadoop)
需要安装的:
MySQL、RabbitMQ、HBase、Redis、Hadoop、ES
服务器 | 用户名/密码 | 备注 | 版本 |
---|---|---|---|
192.168.10.50:3306 | root/developer@admin | mysql | 5.6 |
192.168.10.50:15672 | admin/developer@admin | rabbitMq | 3.8 |
192.168.10.50:6379 | /admin@redis | redis | 5.0 |
http://192.168.10.50:16010/master-status | Hbase | 2.1 | |
192.168.10.49:50070 (nameNode) http://192.168.10.49:8088/cluster (YARN 计算) http://192.168.10.49:19888/jobhistory(历史) | Hadoop 环境 | 2.8.3 | |
http://localhost:81 | sxdx/sxdx@admin admin/sanduo@305 | vue |
1.2.1 安装 Docker
Docker 要求 CentOS 系统的内核版本高于 3.10 ,查看本页面的前提条件来验证你的CentOS 版本是否支持 Docker 。
通过 uname -r 命令查看你当前的内核版本
$ uname -r
2、使用 root
权限登录 Centos。确保 yum 包更新到最新。
$ sudo yum update -y
3、卸载旧版本(如果安装过旧版本的话)
$ sudo yum remove docker docker-common docker-selinux docker-engine
# 或者
$ yum remove docker docker-* -y
4、安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的
$ sudo yum install -y yum-utils device-mapper-persistent-data lvm2
5、设置yum源
$ sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
6、可以查看所有仓库中所有docker版本,并选择特定版本安装
$ yum list docker-ce --showduplicates | sort -r
7、安装docker
$ sudo yum install docker-ce -y #由于repo中默认只开启stable仓库,故这里安装的是最新稳定版17.12.0
$ sudo yum install <FQPN> # 例如:sudo yum install docker-ce-17.12.0.ce -y
# 例如:yum install docker-ce-17.12.1.ce -y
8、启动并加入开机启动
$ sudo systemctl start docker
$ sudo systemctl enable docker
9、验证安装是否成功(有client和service两部分表示docker安装启动都成功了)
$ docker version
1.2.2 问题
1、因为之前已经安装过旧版本的docker,在安装的时候报错如下:
Transaction check error:
file /usr/bin/docker from install of docker-ce-17.12.0.ce-1.el7.centos.x86_64 conflicts with file from package docker-common-2:1.12.6-68.gitec8512b.el7.centos.x86_64
file /usr/bin/docker-containerd from install of docker-ce-17.12.0.ce-1.el7.centos.x86_64 conflicts with file from package docker-common-2:1.12.6-68.gitec8512b.el7.centos.x86_64
file /usr/bin/docker-containerd-shim from install of docker-ce-17.12.0.ce-1.el7.centos.x86_64 conflicts with file from package docker-common-2:1.12.6-68.gitec8512b.el7.centos.x86_64
file /usr/bin/dockerd from install of docker-ce-17.12.0.ce-1.el7.centos.x86_64 conflicts with file from package docker-common-2:1.12.6-68.gitec8512b.el7.centos.x86_64
2、卸载旧版本的包
$ sudo yum erase docker-common-2:1.12.6-68.gitec8512b.el7.centos.x86_64
3、再次安装docker
$ sudo yum install docker-ce
1.2.3 docker 启动报错
启动docker容器时报错:
$ iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 5000 -j DNAT --to-destination 172.18.0.4:5000 ! -i br-ff45d935188b: iptables: No chain/target/match by that name. (exit status 1)
解决方案:重启docker
$ systemctl restart docker
1.2.4 docker pull 慢的问题
1、在 /etc/docker/daemon.json 文件中添加以下参数(没有该文件则新建):
{
"registry-mirrors": ["https://9cpn8tt6.mirror.aliyuncs.com","https://registry.docker-cn.com"]
}
2、服务重启:
systemctl daemon-reload
systemctl restart docker
1.2.5 docker基础容器中bash: vi: command not found问题解决
# 这是因为vim没有安装。
# 解决
# 使用如下命令安装:
$ apt-get update
$ apt-get install vim
1.2.6docker基础容器中bash: vi: command not found问题解决
这是因为vim没有安装。
apt-get update
apt-get install vim -y
1.2.7 Docker启动容器报错: connect: no route to host
$ vim /etc/firewalld/zones/public.xml
<?xml version="1.0" encoding="utf-8"?>
<zone>
<short>Public</short>
<description>For use in public areas. You do not trust the other computers on networks to not harm your computer. Only selected inco
ming connections are accepted.</description>
<service name="dhcpv6-client"/>
<service name="ssh"/>
<rule family="ipv4">
<source address="172.17.0.1/16"/>
<accept/>
</rule>
</zone>
#添加 :
<rule family="ipv4">
<source address="172.17.0.1/16"/>
<accept/>
</rule>
# 重启防火墙
systemctl restart firewalld.service
然后该容器就可以正常启动了,问题解决。
注意,如果防火墙会影响api服务的访问,做完这些操作时请记得停止防火墙服务;笔者在这里就给自己挖了一个坑,导致后台无法访问api,把防火墙停掉即可。
参考:https://blog.csdn.net/bacteriumX/article/details/83589126?utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.control&dist_request_id=1332042.360.16191777167005937&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.control
1.2.8 容错运行报错:iptables: No chain/target/match by that name
产生原因:
docker服务启动时定义的自定义链
DOCKER由于某种原因被清掉重启docker服务及可重新生成自定义链DOCKER
解决方法:
iptables -t filter -F
iptables -t filter -X
systemctl restart docker
1.2.9 docker容器内使用apt报错 E: List directory /var/lib/apt/lists/partial is missing. – Acquire (13: Permission
# 权限不够,用root 登录容器
docker exec -u 0 -it 容器名 bash # 0 表示root
1.3 部署服务器
1.3.1 安装MySQL
mysql主备需要几台设备_Mysql双主互备+keeplived高可用架构
Docker官方Mysql镜像文档
#查找Docker Hub上的mysql镜像 # https://hub.docker.com/_/mysql?tab=tags&page=1&ordering=last_updated
$ docker search mysql
#拉取官方的镜像,标签为5.6
$ docker pull mysql:5.7.34
# 等待下载完成后,我们就可以在本地镜像列表里查到REPOSITORY为mysql,标签为5.7.34的镜像。
$ docker images |grep mysql
# 创建mysql文件夹
$ mkdir -p /roor/mysql
# 运行容器
#-p 3306:3306:将容器的 3306 端口映射到主机的 3306 端口。
#-v $PWD/conf:/etc/mysql/conf.d:将主机当前目录下的 conf/my.cnf 挂载到容器的 /etc/mysql/my.cnf。
#-v $PWD/logs:/logs:将主机当前目录下的 logs 目录挂载到容器的 /logs。
#-v $PWD/data:/var/lib/mysql :将主机当前目录下的data目录挂载到容器的 /var/lib/mysql 。
#-e MYSQL_ROOT_PASSWORD=123456:初始化 root 用户的密码。
#-e TZ=Asia/Shanghai 时区修改为中国时区
# 1. 报错,选第二个
$ docker run -p 3306:3306 --name mysql-5.6 -v $PWD/conf:/etc/mysql/conf.d -v $PWD/logs:/logs -v $PWD/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=developer@admin -d mysql:5.6
# 2. 不报错,选第一个
$ docker run -p 3306:3306 --name mysql-5.6 -e MYSQL_ROOT_PASSWORD=developer@admin -e TZ=Asia/Shanghai -d --restart=always mysql:5.6 --character-set-server=utf8 --collation-server=utf8_unicode_ci
#进入容器
$ docker exec -it mysql-5.6 bash
#设置远程登陆
#登录mysql
$ mysql -u root -p
#Mysql8 以上版本
$ ALTER USER '[账号名]'@'%' IDENTIFIED WITH mysql_native_password BY '[密码]';
#Mysql8 以下版本
$ GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'developer@admin' WITH GRANT OPTION;
# 配置生效加载
$ flush privileges;
1.3.1.1 问题(5.7 版本)
mysql5.7不支持0000-00-00 00:00:00的默认时间设置
方案一:
数据不多的话把原有的5.53的数据改一下符合要求(数据库时间字段里千万不能出现0000-00-00 00:00:00这样的值),然后导出.sql文件,导出的.sql文件里把 DEFAULT '0000-00-00 00:00:00' 全删了再导入5.7的数据库就没问题了。
方案二:
当然也可以通过修改服务器上的数据库配置文件来让5.7支持0000-00-00 00:00:00的格式。
修改my.cnf文件
例如: vim /etc/my.cnf
在[mysqld]下面添加如下列:
sql_mode=ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
1.3.1.2 mysql复制–主从复制配置
参考地址:https://blog.csdn.net/daicooper/article/details/79905660
参考:https://www.jianshu.com/p/ab20e835a73f
1.3.1.2.1 Fatal error: The slave I/O thread stops because master and slave have equal
参考:https://blog.csdn.net/sunbocong/article/details/81634296
1.3.1.3 互为主从
1.3.1.4 安装MHA
参考:https://blog.csdn.net/soul_code/article/details/107653836
# 安装mysql:准备3台机器安装mysql
$ docker pull mysql:5.7.34
$ mkdir -p /usr/local/mysql
$ cd /usr/local/mysql
$ docker run -itd --privileged -p 3306:3306 --name mysql-5.7.34 -v $PWD/conf:/etc/mysql/conf.d -v $PWD/logs:/var/log/mysql -v $PWD/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=sanduo@mysql -d mysql:5.7.34
$ docker exec -it mysql-5.7.34 bash
$ mysql -u root -p
$ GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'sanduo@mysql' WITH GRANT OPTION;
$ flush privileges;
# 安装mysql master :2. 修改/etc/my.cnf配置文件,增加以下配置
$ vi /usr/local/mysql/conf/my.cnf
[mysqld]
log_bin=master-bin-68
log_bin_index=master-bin.index
server-id=1
# 每次写入都同步到binlog
sync-binlog=1
binlog-ignore-db=information_schema
# 忽略不同步
binlog-ignore-db=performance_schema
binlog-ignore-db=sys
gtid_mode=on
enforce_gtid_consistency=1
log_slave_updates=1
relay_log_index=master_relay_bin.index
relay_log=master_relay_bin
plugin_load="rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so"
loose_rpl_semi_sync_master_enabled=1
loose_rpl_semi_sync_slave_enabled=1
loose_rpl_semi_sync_master_timeout=5000
max_connect_errors=1000
max_connections=1000
# 3. 重启mysql: systemctl restart mysqld.service
$ docker restart mysql-5.7.34
$ docker exec -it mysql-5.7.34 bash
# 4. 登录mysql进行账户授权,注:identified by 后需要填写你root账户对应的密码
$ grant replication slave on *.* to 'root'@'%' identified by 'sanduo@mysql';
$ GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'sanduo@mysql';
$ flush privileges;
$ show master status;
# 安装mysql slave-88 :3. 修改/etc/my.cnf配置文件,增加以下配置
$ vi /usr/local/mysql/conf/my.cnf
[mysqld]
server-id=2
sync-binlog=1
log_bin=master-bin-68
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema
binlog-ignore-db=sys
relay_log_index=master_relay_bin.index
relay_log=master_relay_bin
relay_log_purge=0
innodb_log_file_size=256M
expire-logs-days=1
read_only=1
gtid_mode=on
enforce_gtid_consistency=on
log_slave_updates=1
plugin_load="rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so"
loose_rpl_semi_sync_master_enabled=1
loose_rpl_semi_sync_slave_enabled=1
loose_rpl_semi_sync_master_timeout=5000
max_connect_errors=1000
max_connections=1000
$ docker restart mysql-5.7.34
$ docker exec -it mysql-5.7.34 bash
$ mysql -u root -p
# 配置MySQL slave
MySQL > show master status;
# master-bin.000003 \194是变化得;
mysql > change master to
master_host='198.22.1.68',
master_port=3306,
master_user='root',
master_password='sanduo@mysql',
master_log_file='master-bin-68.000004',
master_log_pos=927,
MASTER_AUTO_POSITION=0;
mysql >start slave;
mysql >show slave status\G
# 可以查看配置信息
mysql > show global variables like '%gtid%';
# 安装mysql slave-94 :3. 修改/etc/my.cnf配置文件,增加以下配置
$ vi /usr/local/mysql/conf/my.cnf
[mysqld]
server-id=3
sync-binlog=1
log_bin=master-bin-68
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema
binlog-ignore-db=sys
relay_log_index=master_relay_bin.index
relay_log=master_relay_bin
innodb_log_file_size=256M
expire-logs-days=1
read_only=1
gtid_mode=on
enforce_gtid_consistency=on
log_slave_updates=1
# 半同步 show variables like '%semi%';
plugin_load="rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so"
loose_rpl_semi_sync_master_enabled=1
loose_rpl_semi_sync_slave_enabled=1
loose_rpl_semi_sync_master_timeout=5000
max_connect_errors=1000
max_connections=1000
$ docker restart mysql-5.7.34
$ docker exec -it mysql-5.7.34 bash
$ mysql -u root -p
# 配置MySQL slave
MySQL > show master status;
# master-bin.000003 \194是变化得;
mysql > change master to
master_host='198.22.1.68',
master_port=3306,
master_user='root',
master_password='sanduo@mysql',
master_log_file='master-bin-68.000004',
master_log_pos=927,
MASTER_AUTO_POSITION=0;
mysql >start slave; (stop slave; reset slave all;)
mysql >show slave status\G
# 6. 测试主从复制
# master 创建一个数据库test
mysql> create database test;
# slave1 查看书否创建同步成功
mysql> show databases;
mysql> drop database test;
# 配置公钥互信 (四台机器ssh互通)
# 1. 启动ssh
service sshd restart
# 2. 在分发密钥是需要输入系统密码,由于系统是由docker容器启动,需要重设系统密码(非dokcer忽略)
# 生成密钥对
ssh-keygen -t rsa
# 分发到所有节点包括自己
ssh-copy-id -i /root/.ssh/id_rsa.pub root@198.22.1.68
ssh-copy-id -i /root/.ssh/id_rsa.pub root@198.22.1.88
ssh-copy-id -i /root/.ssh/id_rsa.pub root@198.22.1.94
ssh-copy-id -i /root/.ssh/id_rsa.pub root@198.22.1.81
# MHA安装配置
# 所有节点安装以下组件(198.22.1.2-5):4个节点都得装
yum install epel-release -y
yum install perl-DBD-MySQL -y
yum install perl-Config-Tiny -y
yum install perl-Log-Dispatch -y
yum install perl-Parallel-ForkManager -y
wget https://qiniu.wsfnk.com/mha4mysql-node-0.58-0.el7.centos.noarch.rpm --no-check-certificate
rpm -ivh mha4mysql-node-0.58-0.el7.centos.noarch.rpm
# manager上安装
wget https://qiniu.wsfnk.com/mha4mysql-manager-0.58-0.el7.centos.noarch.rpm --no-check-certificate
rpm -ivh mha4mysql-manager-0.58-0.el7.centos.noarch.rpm
# MHA Manager配置(参考:https://www.cnblogs.com/keerya/p/7883766.html)
vim /etc/mha-manager.cnf
[server default]
manager_log=/var/log/mha/app1/manager.log
#mha_master自己的工作路径
manager_workdir=/var/log/mha/app1
#binlog
master_binlog_dir=/var/lib/mysql
#mha管理密码
password=sanduo@mysql
#ping间隔时长
ping_interval=3
#每个远程主机的工作目录在何处
remote_workdir=/var/log/mha/app1
#数据库密码
repl_password=sanduo@mysql
#数据库用户名
repl_user=root
#基于ssh的密钥认证
ssh_user=root
#mha管理用户
user=root
[server1]
hostname=198.22.1.68
port=3306
#将来可不可以成为master候选节点/主节点
candidate_master=1
[server2]
hostname=198.22.1.94
port=3306
candidate_master=1
[server3]
hostname=198.22.1.88
port=3306
no_master=1
# 运行(https://code.google.com/p/mysql-master-ha/)
# 检查SSH配置
masterha_check_ssh --conf=/etc/mha-manager.cnf
[info] All SSH connection tests passed successfully.
# 验证配置
masterha_check_repl --conf=/etc/mha-manager.cnf
198.22.1.68(198.22.1.68:3306) (current master)
+--198.22.1.94(198.22.1.94:3306)
+--198.22.1.88(198.22.1.88:3306)
Thu Jul 15 16:36:28 2021 - [info] Checking replication health on 198.22.1.94..
Thu Jul 15 16:36:28 2021 - [info] ok.
Thu Jul 15 16:36:28 2021 - [info] Checking replication health on 198.22.1.88..
Thu Jul 15 16:36:28 2021 - [info] ok.
Thu Jul 15 16:36:28 2021 - [warning] master_ip_failover_script is not defined.
Thu Jul 15 16:36:28 2021 - [warning] shutdown_script is not defined.
Thu Jul 15 16:36:28 2021 - [info] Got exit code 0 (Not master dead).
MySQL Replication Health is OK.
# 运行
nohup masterha_manager --conf=/etc/mha-manager.cnf --remove_dead_master_conf --ignore_last_failover < /dev/null > /var/log/mha/app1/manager.log 2>&1 &
# 日志
tailf -n 100 /var/log/mha/app1/manager.log
# 检查集群状态
masterha_check_status --conf=/etc/mha-manager.cnf
mha-manager (pid:12443) is running(0:PING_OK), master:198.22.1.68
# 停止集群
masterha_stop --conf=/etc/mha-manager.cnf
报错1:The replication receiver thread cannot start because the master has GTID_MODE = ON and this server has GTID_MODE = OFF.
mysql> set global gtid_mode=OFF_PERMISSIVE;
mysql> set global gtid_mode=ON_PERMISSIVE;
mysql> set global enforce_gtid_consistency=on;
mysql> set global gtid_mode=ON;
# 可以查看配置信息
mysql > show global variables like '%gtid%';
报错2:Error 'Can't drop database 'test'; database doesn't exist' on query.
问题出现原因:在主库上进行删除了一个数据库test,然后在其他的服务器上在搭建主库的从库,在从库上没有相应都已经删除的数据库test而导致的Slave_IO_Running: Yes,Slave_SQL_Running: No 。
处理的办法:停掉从库,然后在创建相应的已经删除的信息,然后在开启从库。
mysql> stop slave;
mysql> create database test;
mysql> start slave;
mysql> show slave status\G
rm -rf /var/log/mha/app1/mha-manager.failover.complete
报错3:Parameters MASTER_LOG_FILE, MASTER_LOG_POS, RELAY_LOG_FILE and RELAY_LOG_POS
问题介绍: 主库GTID关闭了。
解决的办法:
由于master_auto_position=1,现在改回0,重新用pos方法change就可以了。
MySQL > change master to master_auto_position=0;
报错4:Got fatal error 1236 from master when reading data from binary log: 'Binary log is not open'
1.3.1.5 数据库设置
mysql数据库区分大小写。所以找不到大写的表名。应该在my.cnf的[mysqld]节点下加入lower-case-table-names=1
1.3.2 安装RabbitMQ
1、进入docker hub镜像仓库地址:https://hub.docker.com/_/rabbitmq
2、搜索rabbitMq,进入官方的镜像,可以看到以下几种类型的镜像;我们选择带有“mangement”的版本(包含web管理页面);
# 安装MQ
# 搜索rabbitmq镜像
$ docker search rabbitmq
# 拉去镜像
$ docker pull rabbitmq:3.8-rc-management
# 运行mQ
$ docker run -d --restart=always -p 5672:5672 -p 15672:15672 --name rabbitmq-3.8 rabbitmq:3.8-rc-management
3、访问管理界面
访问管理界面的地址就是 http://[宿主机IP]:15672,可以使用默认的账户登录,用户名和密码都guest,如:
1.3.2.1:docker容器不能上网 WARNING: IPv4 forwarding is disabled. Networking will not work.
解决办法:
宿主机
vi /etc/sysctl.conf
添加如下代码:
net.ipv4.ip_forward=1
重启network服务
systemctl restart network
查看是否修改成功
sysctl net.ipv4.ip_forward
如果返回为“net.ipv4.ip_forward = 1”则表示成功了
1.3.2.2 RabbitmQ 集群版(多台机器)
# 首先三台机器都创建
$ mkdir -p /usr/local/rabbitmq
$ vim hosts
198.22.1.68 iZj6cervo3uehutavedzijZ rabbit-68
198.22.1.88 iZj6cervo3uehutavedzifZ rabbit-88
198.22.1.94 iZj6cervo3uehutavedzilZ rabbit-94
1、三台机器安装(198.22.1.68,198.22.1.88,198.22.1.94)
$ docker pull rabbitmq:3.8-rc-management
$ docker run -d --hostname rabbitmq-68 --add-host="rabbitmq-68":198.22.1.68 --add-host="rabbitmq-88":198.22.1.88 --name rabbitmq-68 --restart=always -p "4369:4369" -p "5672:5672" -p "15672:15672" -p "25672:25672" -v /opt/rabbitmq:/var/lib/rabbitmq:z -e RABBITMQ_ERLANG_COOKIE='rabbitClusterCookie' rabbitmq:3.8-rc-management
$ docker run -d --hostname rabbitmq-88 --add-host="rabbitmq-68":198.22.1.68 --add-host="rabbitmq-88":198.22.1.88 --name rabbitmq-88 --restart=always -p "4369:4369" -p "5672:5672" -p "15672:15672" -p "25672:25672" -v /opt/rabbitmq:/var/lib/rabbitmq:z -e RABBITMQ_ERLANG_COOKIE='rabbitClusterCookie' rabbitmq:3.8-rc-management
# 添加节点,第一步
$ docker run -d --hostname rabbitmq-94 --add-host="rabbitmq-68":198.22.1.68 --add-host="rabbitmq-88":198.22.1.88 --add-host="rabbitmq-68":198.22.1.68 --add-host="rabbitmq-94":198.22.1.94 --name rabbitmq-94 --restart=always -p "4369:4369" -p "5672:5672" -p "15672:15672" -p "25672:25672" -v /opt/rabbitmq:/var/lib/rabbitmq:z -e RABBITMQ_ERLANG_COOKIE='rabbitClusterCookie' rabbitmq:3.8-rc-management
2、配置
- 配置(198.22.1.68)
#
$ docker exec -it rabbitmq-68 bash
# 查看集群信息
$ rabbitmqctl cluster_status
- 配置(198.22.1.88)
$ docker exec -it rabbitmq-88 bash
$ rabbitmqctl stop_app
$ rabbitmqctl reset
#加入集群,主要是“rabbitmq-68”,表示MQ加入到“,rabbitmq-68”,rabbitmq-68在容器启动的时候,已经定义好。
$ rabbitmqctl join_cluster rabbit@rabbitmq-68
$ rabbitmqctl start_app
# 查看集群信息
$ rabbitmqctl cluster_status
- 配置(198.22.1.94) 添加节点第二步
$ docker exec -it rabbitmq-94 bash
$ rabbitmqctl stop_app
$ rabbitmqctl reset
#加入集群,主要是“rabbitmq-68”,表示MQ加入到“,rabbitmq-68”,rabbitmq-68在容器启动的时候,已经定义好。
$ rabbitmqctl join_cluster rabbit@rabbitmq-68
$ rabbitmqctl start_app
# 查看集群信息
$ rabbitmqctl cluster_status
# 健康监测
$ rabbitmqctl node_health_check
密码:guest@sanduo
-
第三步:添加 hosts文件映射 (198.22.1.68、198.22.1.88)
$ docker exec -it rabbitmq-88 bash $ echo "198.22.1.94 rabbitmq-94" >> /etc/hosts $ docker exec -it rabbitmq-68 bash $ echo "198.22.1.94 rabbitmq-94" >> /etc/hosts
-
移除节点
# 在要关闭的节点上操作 $ rabbitmqctl stop_app # 在主节点上操作: 删除要移除的节点: $ rabbitmqctl -n rabbit@rabbitmq-68 forget_cluster_node rabbit@rabbitmq88
-
访问
http://198.22.1.68:15672/#/ guest/guest
198.22.1.34 +-----------VIP----------+ | | | | Master Backup 198.22.1.33 198.22.1.35 +----------+ +----------+ | HAProxy | | HAProxy | |keepalived| |keepalived| +----------+ +----------+ | v
±——-±——–+
| | |
| | |
v v v
web1 web2 web3
1.68 1.88 1.94
1.3.2.2.1 错误
参考:
-
https://blog.csdn.net/weixin_39735166/article/details/111220809
-
https://blog.csdn.net/qq_21400275/article/details/102861900
1.3.3 安装 Redis
1、redis Docker 官方镜像 https://hub.docker.com/_/redis
https://hub.docker.com/_/redis/
https://download.redis.io/releases/
2、启动Redis
# 拉去 Redis版本
$ docker pull redis:5.0
# 运行redis 并设置密码
#-p 6379:6379 : 将容器的6379端口映射到主机的6379端口
#-v $PWD/data:/data : 将主机中当前目录下的data挂载到容器的/data
#redis-server --appendonly yes : 在容器执行redis-server启动命令,并打开redis持久化配置
#requirepass “your passwd” : 设置认证密码
#–restart=always : 随docker启动而启动
$ docker run -p 6379:6379 --name redis-5.0 -d --restart=always redis:5.0 redis-server --appendonly yes --requirepass "admin@redis"
#如果顺利的话,你的redis容器已经正常启动啦。那么现在可以docker ps 看看这个进程,然后连上去看看。
# 直接连接到redis容器中,直接上命令:
$docker inspect redis-5.0 | grep IP #先查询到myredis容器的ip地址。
1.3.3.1 三种集群
https://blog.csdn.net/e3002/article/details/100691472
一、单节点实例
二、主从模式(master/slaver)
https://www.cnblogs.com/lovezbs/p/14055594.html
三、sentinel模式(主从)
docker搭建Redis集群-主从复制以及哨兵模式
SpringBoot集成Redis哨兵模式
四、cluster模式
1.3.3.2 redis哨兵模式集群安装
参考:
主从+哨兵:https://blog.csdn.net/xch_yang/article/details/104019552
redis高可用 哨兵(Sentinel),主从复制架构:https://blog.csdn.net/y_zilong/article/details/118391925
- 安装
$ docker pull redis:6.2.4
$ mkdir -p /usr/local/redis
$ cd /usr/local/redis
# 拉去redis.conf文件命令:
$ wget -c http://download.redis.io/redis-stable/redis.conf
# 启动:--privileged=true:容器内的root拥有真正root权限,否则容器内root只是外部普通用户权限
# master(主198.22.1.68)
$ vim /usr/local/redis/redis.conf
bind 0.0.0.0
port 6379
daemonize yes
logfile "/data/logs/redis.log"
masterauth sanduo@redis
requirepass sanduo@redis
appendonly yes
cluster-enabled yes
# slave(备198.22.1.88)
$ vim /usr/local/redis/redis.conf
bind 0.0.0.0
port 6379
daemonize yes
dir "/data/logs/ logfile "./redis.log" replicaof 198.22.1.68 6379 masterauth sanduo@redis requirepass sanduo@redis appendonly yes cluster-enabled yes # master(备198.22.1.94) $ vim /usr/local/redis/redis.conf bind 0.0.0.0 port 6379 daemonize yes dir "/data/logs/
logfile "./redis.log"
replicaof 198.22.1.68 6379
masterauth sanduo@redis
requirepass sanduo@redis
appendonly yes
cluster-enabled yes
# sysctl -p
$ docker run -p 6379:6379 -p 26379:26379 --privileged=true --name redis-6.2.4 -v $PWD/redis.conf:/etc/redis/redis.conf -v $PWD/data:/data -d --restart=always redis:6.2.4
# 直接连接到redis容器中,直接上命令:
$docker inspect redis-6.2.4 | grep IP #先查询到myredis容器的ip地址。
-
测试连通性
$ telnet 198.22.1.88 6379 # 退出telnet $ quit
-
登录容器 测试客户端
# 进入容器 $ docker exec -it redis-6.2.4 bash # 进入redis客户端 $ redis-cli -a "sanduo@redis" # 认证(如果有密码) 127.0.0.1:6379> auth "sanduo@redis" # 存值 127.0.0.1:6379> set name sanduo # 取值 127.0.0.1:6379> get name # 查询三台主机的信息 127.0.0.1:6379> info #
-
手动绑主机测试
# 选择198.22.1.68 为master(可任意) # 在 198.22.1.88、 198.22.1.94 上执行(SLAVEOF(<5.x)/replicaof(>5.x)) 127.0.0.1:6379> SLAVEOF 198.22.1.68 6379 127.0.0.1:6379> replicaof 198.22.1.68 6379 # 注意:master设置密码的情况下同步数据,其实很简单,我们只要让slave能连上master就可以了,我们在slave的配置文件中加一句话即可 masterauth sanduo@redis # 1、修改所有Redis集群中的redis.conf文件加入: $ cd /usr/local/redis/ $ vim redis.conf masterauth sanduo@redis requirepass sanduo@redis # 注意 1 如果不生效 使用 如下 127.0.0.1:6379> config set masterauth sanduo@redis 127.0.0.1:6379> config set requirepass sanduo@redis # 默认没有日志文件 logfile "/data/logs/redis.log" # 测试看信息(三台) 127.0.0.1:6379> info # 查看master副本(198.22.1.68) 127.0.0.1:6379> info replication
172.22=192.22
-
在redis主从复制基础上搭建redis哨兵模式
# 进入容器 $ docker exec -it redis-6.2.4 bash # 进入redis客户端 $ redis-cli -a "sanduo@redis" # 更新依赖命令:apt-get :安装vim命令:apt-get install -y vim $ apt-get update $ apt-get install -y vim # 创建配置文件 sentinel.conf # 进入容器 1、进入三台redis容器: $ docker exec -it redis-6.2.4 bash # 2、进入容器根目录 $ cd / # 3、创建哨兵配置文件:vim sentinel.conf(三台容器哨兵配置一模一样) $ vim sentinel.conf port 26379 #哨兵端口号 一定要和启动命令映射第二个端口号一致 daemonize yes #后台启动 requirepass sanduo@redis # 2为法定人数限制(quorum) 即3/2=1.5,取值为2 sentinel monitor mymaster 198.22.1.68 6379 2 #mymaster集群中master的密码,注意此行要在上面行的下面 sentinel auth-pass mymaster "sanduo@redis" # 启动 依次三台在sentinel.conf 配置文件同一级目录执行: $ cd / $ redis-sentinel sentinel.conf # 查看 ps -ef # 安装ps命令(三台容器依次安装ps命令) $ apt-get install procps
查看 ps -if
-
验证 哨兵机制
# 停止198.22.1.68 $ docker stop redis-6.2.4 # 登录查看 198.22.1.88 ,198.22.1.94 $ docker exec -it redis-6.2.4 bash $ redis-cli -a "sanduo@redis" 127.0.0.1:6379> info replication
-
手动提升slave服务器为master服务器
# 在需要提升的从服务器上执行slaveof no one (比如 198.22.1.88) 127.0.0.1:6379> slaveof no one # 切换主机 (比如 198.22.1.94) 127.0.0.1:6379> replicaof 198.22.1.68 6379
-
查看各节点上哨兵信息
$ redis-cli -a "sanduo@redis" -p 26379 127.0.0.1:26379> info sentinel sentinel_masters:1 sentinel_tilt:0 sentinel_running_scripts:0 sentinel_scripts_queue_length:0 sentinel_simulate_failure_flags:0 master0:name=mymaster,status=ok,address=198.22.1.68:6379,slaves=2,sentinels=4
-
错误信息
错误1:(error) NOAUTH Authentication required 出现认证问题,应该是设置了认证密码,输入密码既可以啦 解决方案: 127.0.0.1:6379> auth "sanduo@redis" 错误2:master_link_status:down 检查配置:一般是网络不通或者加密有问题
172.22=192.22
错误3(Sentinel):user default on nopass sanitize-payload ~* &* +@all
无法自动切换主从机
解决方案:修改配置文件sentinel.conf 添加权限密码 如下
#mymaster集群中master的密码,注意此行要在上面行的下面
sentinel auth-pass mymaster "sanduo@redis"
1.3.4 安装 ES(待定)
# 下载
$ docker pull docker.io/elasticsearch:6.7.1
# 启动 ES
$ docker run -d -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" --name elasticsearch-6.7.1 docker.io/elasticsearch:6.7.1
# copy docker 容器的到本地
$ docker cp a950e39e8a4d:/usr/share/elasticsearch/plugins/* ./
# 远程拷贝
$ scp -r analysis-hanlp/ root@192.168.10.24:/root/
# docker cp 本地路径 容器长ID:容器路径
$ docker cp analysis-hanlp/ elasticsearch-6.7.1:/usr/share/elasticsearch/plugins/
1.3.5 安装HBase
1、安装
# 搜索Hbase
$ docker search hbase
# 下载Hbase
$ docker pull harisekhon/hbase:2.1
# 运行Hbase
#-p : 指定主机的端口 16010映射到宿主机上(容器)的开放端口 16010
#-P :主机随机分配端口与宿主机上的端口进行映射
# 1. 本机映射
$ docker run -d --name hbase001 -P harisekhon/hbase:2.1
或
# 2. 自定义映射
$ docker run -d --restart=always --name hbase-2.1 -p 16010:16010 harisekhon/hbase:2.1
或
# 3. 映射 (推荐)
$ docker run -d -h myhbase -p 2181:2181 -p 8080:8080 -p 8085:8085 -p 9091:9090 -p 9095:9095 -p 16000:16000 -p 16010:16010 -p 16201:16201 -p 16301:16301 --name hbase-2.1 harisekhon/hbase:2.1
# 时区同步
$ docker run -d --restart=always --name hbase-2.1 -p 2181:2181 -p 9091:9090 -p 9095:9095 -p 16000:16000 -p 16010:16010 -p 16020:16020 -p 16030:16030 -v /etc/localtime:/etc/localtime:ro harisekhon/hbase:2.1
# hbase-site.xml
<configuration>
<property>
<name>hbase.rootdir</name>
<value>hdfs://198.22.1.24:9000/hbase</value>
</property>
<property>
<name>hbase.cluster.distrubuted</name>
<value>true</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>location:2181</value>
</property>
<!-- <property> <name>hbase.zookeeper.quorum</name> <value>198.22.1.81:2181,198.22.1.82:2181,198.22.1.83:2181</value> </property> <property> <name>hbase.zookeeper.property.dataDir</name> <value>/opt/module/zookeeper/zkData</value> </property> -->
</configuration>
# copy hdoop 的配置文件到hbase
$ docker cp core-site.xml hbase-2.1:/hbase-2.1.3/conf
$ docker cp hdfs-site.xml hbase-2.1:/hbase-2.1.3/conf
$ docker cp hbase-site.xml hbase-2.1:/hbase-2.1.3/conf
# docker 时间同步
$ docker cp /usr/share/zoneinfo/Asia/Shanghai hbase-2.1:/etc/localtime
# hbase 结合MapReduce
$ hbase mapredcp # 查看map需要的jar包
$ yarn jar hbase_mr_jar/hbase-mr.jar # 在 Hadoop机器上执行(注意 是否配置了zookeeper和/etc/hosts)
2、访问web界面:http://192.168.10.50:16010/master-status
3、基本操作
# 注意:修改完配置文件,先重启;否则报初始化失败
1. docker exec -it hbase-2.1 bash
2. hbase shell
3. create 'student','info'
4. describe 'student'
5. put 'student','1001','info:sex','male'
6. put 'student','1002','info:sex','women'
7. put 'student','1001','info:name','zhangsan'
8. scan 'student'
9. scan 'student',{STARTROW => '1001', STOPROW => '1001'} //包含左不包含右,比字符字典顺序
10. scan 'student',{STARTROW => '1001'}
11. get 'student','1001'
12. get 'student','1001','info:name'
13. count 'student'
14. deleteall 'student','1001'
15. delete 'student','1002','info:sex'
16. truncate 'student'
17. disable 'student' //必须先禁用
18. drop 'student'
1.3.6 安装 Hadoop(伪分布式)
//TODO https://www.bilibili.com/medialist/play/ml1105315222/BV1BJ411U7hW
p252(暂停) ——>p444(目标)
1、 配置免密登录
# 生成秘钥
$ ssh-keygen -t rsa
#创建认证key
$ cd /root/.ssh/
# 创建公钥
$ cat id_rsa.pub > authorized_keys
# 验证
$ ssh localhost
2、安装jdk环境
-
下载 JDK
官网: https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
jdk-8u65-linux-x64.tar.gz
-
安装
# 创建文件夹
$ mkdir /usr/local/soft
$ cd /usr/local/soft
# 解压/usr/local/soft
$ tar -zxvf jdk-8u65-linux-x64.tar.gz
# 设置环境变量
$ vim /etc/profile
# 在 profile 文件中添加如下内容并保存
#set java environment
JAVA_HOME=/usr/local/soft/jdk1.8.0_65
JRE_HOME=/usr/local/soft/jdk1.8.0_65/jre
CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
export JAVA_HOME JRE_HOME CLASS_PATH PATH
# 环境生效
$ source /etc/profile
# 测试
$ java -version
3、安装Hadoop
-
下载hadoop
hadoop-2.8.3.tar.gz
-
安装Hadoop
# 进入文件
$ cd /usr/local/soft
# 解压
$ tar -zxvf hadoop-2.8.3.tar.gz
#配置环境变量
$ vim /etc/profile
# 在 profile 文件中添加如下内容并保存
#set hadoop environment
export HADOOP_HOME=/usr/local/soft/hadoop-2.8.3
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
# 环境生效
$ source /etc/profile
# 测试
$ hadoop version
- 配置Hadoop
# 进入目录
$ cd /usr/local/soft/hadoop-2.8.3/etc/hadoop
-
修改core-site.xml文件 vim core-site.xml
<configuration> <!--指定HDFS中的NameNode的地址--> <property> <name>fs.default.name</name> <value>hdfs://192.168.10.49:9000</value> <final>true</final> </property> <!--指定Hadoop运行产生文件的存贮目录--> <property> <name>hadoop.tmp.dir</name> <value>/usr/local/soft/hadoop-2.8.3/etc/tmp/hadoop-${user.name}</value> </property> </configuration>
-
修改hdfs-site.xml 文件 vim hdfs-site.xml
<configuration> <property> <name>dfs.namenode.name.dir</name> <value>/dfs/name</value> </property> <!--可以多文件夹配置,例如:/dfs/data1,/dfs/data2:主要用于扩展硬盘(数据容量多台扩展),完成数据多台粗存储--> <property> <name>dfs.datanode.data.dir</name> <value>/dfs/data</value> </property> <!--指定Hdfs副本的数量--> <property> <name>dfs.replication</name> <value>1</value> </property> </configuration>
-
修改mapred-site.xml 文件
- 先复制 cp mapred-site.xml.template mapred-site.xml
- vim mapred-site.xml
<configuration> <property> <name>mapreduce.job.tracker</name> <value>http://192.168.10.49:9001</value> </property> <!--指定MR运行在YARN上--> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <property> <name>mapreduce.system.dir</name> <value>/mapred/system</value> <final>true</final> </property> <property> <name>mapred.local.dir</name> <value>/mapred/local</value> <final>true</final> </property> </configuration>
-
修改 yarn-site.xml 文件 vim yarn-site.xml (修改默认端口8088->8089)(可选)
<configuration> <!--Reduce 获取数据的方式--> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <!--指定Yarn的resourcemanager地址--> <property> <name>yarn.resourcemanager.hostname</name> <value>192.168.10.49</value> </property> <property> <name>yarn.resourcemanager.address</name> <value>192.168.10.49:8032</value> </property> <property> <name>yarn.resourcemanager.scheduler.address</name> <value>192.168.10.49:8030</value> </property> <property> <name>yarn.resourcemanager.resource-tracker.address</name> <value>192.168.10.49:8031</value> </property> <property> <name>yarn.resourcemanager.admin.address</name> <value>192.168.10.49:8033</value> </property> <!--update 8088到8090--> <property> <name>yarn.resourcemanager.webapp.address</name> <value>192.168.10.49:8089</value> </property> </configuration>
-
修改hadoop-env.sh 文件 vim hadoop-env.sh
# The java implementation to use. export JAVA_HOME=/usr/local/soft/jdk1.8.0_65
-
修改yarn-env.sh的jdk路径 vim yarn-env.sh
# The java implementation to use. export JAVA_HOME=/usr/local/soft/jdk1.8.0_65
-
启动
# 初次启动需要对namenode进行格式化: $ hdfs namenode -format #使用start-all.sh来吧所有的进程开启 $ start-all.sh # 或者使用下面启动 $ start-dfs.sh $ start-yarn.sh
-
添加白名单-端口(推荐)或者关闭防火墙
# 添加白名单 $ firewall-cmd --permanent --add-port=8088/tcp --add-port=8088/tcp --add-port=50070/tcp --add-port=8088/tcp
-
关闭防火墙
# 查看防火墙状态 $ systemctl status firewalld # 关闭防火墙 $ systemctl stop firewalld # 禁止防火墙启动 $ systemctl disable firewalld
-
验证
//登录成功后访问 http://192.168.10.49:8088/cluster //这个是计算框架Yarn,当设置了yarn-site.xml 访问8089 http://192.168.10.49:50070 //这个是文件系统 hdfs //启动历史任务命令:cd /usr/local/soft/hadoop-2.8.3 sbin/mr-jobhistory-daemon.sh start historyserver //然后通过下面地址可以查看历史任务 http://192.168.10.49:19888
-
测试
# 构造输入和输出 1、hdfs dfs -mkdir -p /user/root 2、hdfs dfs -mkdir input 3、hdfs dfs -put ./etc/hadoop/*.xml input # 执行示例 4、bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.8.3.jar grep input output 'dfs[a-z.]+' # 查看 5、hdfs dfs -cat output/part-r-00000 # 第二种 1、hdfs dfs -mkdir wordcount 2、vim wcinput.txt 3、hdfs dfs -put wcinput.txt ./wordcount 4、hdfs dfs -ls wordcount 5、hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.8.3.jar wordcount wordcount/wcinput.txt wordcount/output 6、hdfs dfs -ls wordcount/output 7、hdfs dfs -cat wordcount/output/part-r-00000
-
注意
1、单一节点最多存储一个副本 <!--指定Hdfs副本的数量--> <property> <name>dfs.replication</name> <value>1</value> </property> 2、NameNode不能一直格式化(慎用):$ hdfs namenode -format 3、
1.3.6.1 There are 0 datanode(s) running and no node(s) are excluded in this operation.
出现上述问题可能是格式化两次hadoop,导致没有datanode
解决办法是:找到hadoop安装目录下 hadoop-2.4.1/data/dfs/data里面的current文件夹删除
然后从新执行一下 hadoop namenode -format
再使用start-dfs.sh和start-yarn.sh 重启一下hadoop
用jps命令看一下就可以看见datanode已经启动了
1.3.6.2 Hadoop问题:Input path does not exist: hdfs://Master:9000/user/hadoop/input
问题描述:
org.apache.hadoop.mapreduce.lib.input.InvalidInputException: Input path does not exist: hdfs://Master:9000/user/hadoop/input
at org.apache.hadoop.mapreduce.lib.input.FileInputFormat.singleThreadedListStatus(FileInputFormat.java:323)
at org.apache.hadoop.mapreduce.lib.input.FileInputFormat.listStatus(FileInputFormat.java:265)
at org.apache.hadoop.mapreduce.lib.input.FileInputFormat.getSplits(FileInputFormat.java:387)
at org.apache.hadoop.mapreduce.JobSubmitter.writeNewSplits(JobSubmitter.java:301)
at org.apache.hadoop.mapreduce.JobSubmitter.writeSplits(JobSubmitter.java:318)
at org.apache.hadoop.mapreduce.JobSubmitter.submitJobInternal(JobSubmitter.java:196)
at org.apache.hadoop.mapreduce.Job$10.run(Job.java:1290)
at org.apache.hadoop.mapreduce.Job$10.run(Job.java:1287)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:422)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1657)
at org.apache.hadoop.mapreduce.Job.submit(Job.java:1287)
at org.apache.hadoop.mapreduce.Job.waitForCompletion(Job.java:1308)
at org.apache.hadoop.examples.Grep.run(Grep.java:78)
at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70)
at org.apache.hadoop.examples.Grep.main(Grep.java:103)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.hadoop.util.ProgramDriver$ProgramDescription.invoke(ProgramDriver.java:71)
at org.apache.hadoop.util.ProgramDriver.run(ProgramDriver.java:144)
at org.apache.hadoop.examples.ExampleDriver.main(ExampleDriver.java:74)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.hadoop.util.RunJar.run(RunJar.java:221)
at org.apache.hadoop.util.RunJar.main(RunJar.java:136)
问题分析:Input path does not exist
问题解决:分布式环境中创建input目录
hdfs dfs -mkdir -p /user/hadoop
hdfs dfs -mkdir input
hdfs dfs -put ./*.xml input
1.3.6.3 循环拷贝脚本(带权限):分发脚本
#!/bin/bash
#1 获取输入参数的个数,如果没有参数,直接退出
pcout=$#
if((pcout==0)); then
echo no args;
exit;
fi
#2 获取文件夹名称
p1=$1
fname=`basename $p1`
echo fname=$fname
#3 获取上级目录的绝对路径
pdir=`cd -P $(dirname $p1); pwd`
echo pdir=$pdir
#4 获取当前用户名称
user=`whoami`
#5 循环拷贝(带权限)
for((host=103; host<105; host++)); do
echo ---------------------hadoop$host----------------
rsync -av $pdir/$fname $user@hadoop$host:$pdir
done
1.3.6.4 hadoop集群规划
1、HDFS
NN(1) 2NN(1) DN(3)
2、YARN
RN(1) NM(3)
注意:DN和NM推荐至少各三台,否则作用不大。
9台 3台混搭(DN/NM)------最少6台(正式环境)
NN(1) 2NN(1) RN(1)
(DN/NM)(1) (DN/NM)(1) (DN/NM)(1)
3、 或者使用 3台(测试环境)。
4、集群环境:必须配置ssh免密登录。
5、配置slaves
6、配置集群时间同步
7、slaves 只有在集群集体起或者集群集体关
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7gqDc8dQ-1643264117084)(F:/学习/04-大数据/集群规划(测试)].jpg)
<!--配置集群hdfs-site.xml-->
<configuration>
<property>
<name>dfs.namenode.name.dir</name>
<value>/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/dfs/data</value>
</property>
<!--指定Hdfs副本的数量,最少3个-->
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<!--指定hadoop辅助名称节点主机配置-->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>198.22.1.24:50090</value>
</property>
</configuration>
<!--配置集群mapreduce-site.xml 添加历史服务器-->
<configuration>
<!--配置历史服务器-->
<property>
<name>mapreduce.jobhistory.address</name>
<value>198.22.1.24:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>198.22.1.24:19888</value>
</property>
</configuration>
<!--yarn-site.xml 配置添加日志聚合功能-->
<configuration>
<!--日志聚合功能使能-->
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<!--日志保存时间设置7天-->
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>604800</value>
</property>
</configuration>
1.3.6.5 添加黑名单(退役)
<!--配置集群hdfs-site.xml-->
<configuration>
<!--在路径:/opt/moudule/hadoop-2.7.2/etc/hadoop/blacklist创建黑名单文件blacklist:添加IP-->
<property>
<name>ydfs.hosts.exclude</name>
<value>/opt/moudule/hadoop-2.7.2/etc/hadoop/blacklist</value>
</property>
</configuration>
1. 修改配置文件hdfs-site.xml添加黑名单
2. 在NameNode刷新配置
hdfs dfsadmin -refreshNodes
1.3.6.6 添加白名单(维持集群数据安全性)
<!--配置集群hdfs-site.xml-->
<configuration>
<!--在路径:/opt/moudule/hadoop-2.7.2/etc/hadoop/whitelist创建白名单文件whitelist:添加IP-->
<property>
<name>ydfs.hosts</name>
<value>/opt/moudule/hadoop-2.7.2/etc/hadoop/whitelist</value>
</property>
</configuration>
1. 修改配置文件hdfs-site.xml添加黑名单
2. 在NameNode刷新配置
hdfs dfsadmin -refreshNodes
1.3.6.7 MapReduce缺点、优点
优点:
1. 易于编程
2. 良好的扩展性
3. 高容错性
4. 适合PB级以上数据的离线计算
缺点:
1. 不擅长流式计算
2. 不擅长实时计算
3. 不擅长DAG(有向图)计算(A任务->B任务->C任务)(IO的问题)
1.3.7 安装 gitlib
http://1.82.248.131:26014/
root/gitlab@2020
1.82.248.131:26015 对应198.22.1.21:3306
1.82.248.131:26016 对应198.22.1.21:6379
http://1.82.248.131:26014/help/ssh/README
gitlab仓库developer权限无法push问题
进入settings=>repository=>protected branches里面去掉master分支的默认保护
1.3.7.1 修改密码
gitlab web登入密码忘记以后可以用如下方式修改密码
$ gitlab-rails console production
$ user = User.where(username: 'sanduo').first
$ irb(main):007:0>user.password = 'yourpassword' //密码必须至少8个字符
$ irb(main):007:0>user.save! // 如没有问题 返回true
1.3.8 安装fastDFS
# 1.搜索
$ docker search fastdfs
# 2.拉取镜像,最新版本
$ docker pull delron/fastdfs
# 3.查看镜像
$ docker images
# 4.使用docker镜像构建tracker容器(跟踪服务器,起到调度的作用)
$ docker run -dti --network=host --name tracker -v /var/fdfs/tracker:/var/fdfs -v /etc/localtime:/etc/localtime delron/fastdfs tracker
# 5.使用docker镜像构建storage容器(存储服务器,提供容量和备份服务)TRACKER_SERVER=本机的ip地址:22122 本机ip地址不要使用127.0.0.1
$ docker run -dti --network=host --name storage -e TRACKER_SERVER=198.22.1.21:22122 -v /var/fdfs/storage:/var/fdfs -v /etc/localtime:/etc/localtime delron/fastdfs storage
'配置:进入storage容器,到storage的配置文件中配置http访问的端口,配置文件在/etc/fdfs目录下的storage.conf。 默认端口是8888,也可以不进行更改。如果重启后无法启动,可能是报下面错误了,手动创建 vi /var/fdfs/logs/storaged.log 文件即可tail: cannot open "/var/fdfs/logs/storaged.log" for reading: No such file or directory'
# 6.配置nginx
'进入storage,配置nginx,在/usr/local/nginx目录下,修改nginx.conf文件,默认配置不修改也可以'
# 7.测试上传文件(docker exec -it 容器id bash)
使用web模块进行文件的上传,将文件上传至FastDFS文件系统
将一张照片(test.png)放置在/var/fdfs/storage目录下,进入storage容器,进入/var/fdfs目录,运行下面命令:
/usr/bin/fdfs_upload_file /etc/fdfs/client.conf test.png
此时将该图片已上传至文件系统,并在执行该语句后返回图片存储的uri:
通过url访问[http://ip:8888/group1/M00/00/00/CgACD1z7SEuAXrIqAA1eBLGVLow043.png](http://198.22.1.21:8888/group1/M00/00/00/rBYBFV6mnSaABXL1AAJD6xiLRl0398.jpg),即可查看到图片
# 8.开放端口
firewall-cmd --zone=public --permanent --add-port=8888/tcp
firewall-cmd --zone=public --permanent --add-port=22122/tcp
firewall-cmd --zone=public --permanent --add-port=23000/tcp
# 重启防火墙
systemctl restart firewalld
# 9.开启启动容器
docker update --restart=always tracker
docker update --restart=always storage
# 10.常见问题
storage 无法启动
运行 docker container start storage 无法启动,进行如下操作即可:
可以删除/var/fdfs/storage/data目录下的fdfs_storaged.pid 文件,然后重新运行storage。
1.3.8.1 nginx安装fastdfs 模块
https://blog.csdn.net/qq_34301871/article/details/80060235
https://www.jianshu.com/p/51146dbe51d2
1.3.8.2 安装fastdfs集群版(安装失败)
FastDFS只能上传500MB的小文件
-
参考:
- 分布式文件存储MinIO SeaweedFS FastDFS对比总结
- MinIO
-
获取配置
# 1.搜索 $ docker search fastdfs # 2.拉取镜像,最新版本 (所有机器) $ docker pull delron/fastdfs # 3.查看镜像 $ docker images # 4.使用docker镜像构建tracker容器(跟踪服务器,起到调度的作用)(所有机器) $ mkdir -p /usr/local/fastdfs/{ tracker,storage} $ mkdir -p /usr/local/fastdfs/conf # 获取配置文件 $ docker run -dti --network=host --name tracker delron/fastdfs # 获取tracker.conf $ docker cp tracker:/etc/fdfs/tracker.conf /usr/local/fastdfs/tracker/conf # 获取storage.conf $ docker cp tracker:/etc/fdfs/*.conf /usr/local/fastdfs/conf $ mv /usr/local/fastdfs/conf/fdfs/* /usr/local/fastdfs/conf $ rm -rf /usr/local/fastdfs/conf/fdfs/ # 停止 删除 原来容器 $ docker stop tracker $ docker rm tracker
-
安装 tracker(198.22.1.68、198.22.1.88)
# 1.搜索 $ docker search fastdfs # 2.拉取镜像,最新版本 (所有机器) $ docker pull delron/fastdfs # 3.查看镜像 $ docker images # 4.使用docker镜像构建tracker容器(跟踪服务器,起到调度的作用) $ docker run -dti --network=host --restart always --name tracker -v /usr/local/fastdfs/tracker:/var/fdfs -v /usr/local/fastdfs/conf:/etc/fdfs -v /etc/localtime:/etc/localtime delron/fastdfs # 5.配置nginx '进入storage,配置nginx,在/usr/local/nginx目录下,修改nginx.conf文件,默认配置不修改也可以'
-
安装 storage(198.22.1.88、198.22.1.94)
# 1.搜索 $ docker search fastdfs # 2.拉取镜像,最新版本 (所有机器) $ docker pull delron/fastdfs # 3.查看镜像 $ docker images # 4.配置 TRACKER_SERVER=198.22.1.68:22122 TRACKER_SERVER=198.22.1.88:22122 $ vim /usr/local/fastdfs/conf/storage.conf TRACKER_SERVER=198.22.1.68:22122 TRACKER_SERVER=198.22.1.88:22122 $ vim /usr/local/fastdfs/conf/mod_fastdfs.conf TRACKER_SERVER=198.22.1.68:22122 TRACKER_SERVER=198.22.1.88:22122 $ vim /usr/local/fastdfs/conf/client.conf TRACKER_SERVER=198.22.1.68:22122 TRACKER_SERVER=198.22.1.88:22122 # 4.配置nginx '进入storage,配置nginx,在/usr/local/nginx目录下,修改nginx.conf文件,默认配置不修改也可以' vim nginx.conf worker_processes 1; error_log /usr/local/fastdfs/logs/nginx-error.log; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /usr/local/fastdfs/logs/nginx-access.log main; sendfile on; keepalive_timeout 65; server { listen 9101; server_name localhost; location / { root html; index index.html index.htm; } location ~ /group1/M00 { root /data/fast_data/data; ngx_fastdfs_module; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } } # 5.使用docker镜像构建storage容器(存储服务器,提供容量和备份服务)TRACKER_SERVER=本机的ip地址:22122 本机ip地址不要使用127.0.0.1 配置nginx $ docker run -dti -p 22123:22122 -p 23000:23000 --network=host --restart always --name storage -v /usr/local/fastdfs/storage:/var/fdfs -v /usr/local/fastdfs/conf:/etc/fdfs -v /usr/local/fastdfs/conf/nginx.conf:/etc/nginx/conf/nginx.conf -v /etc/localtime:/etc/localtime delron/fastdfs
-
验证fastdfs是否安装成功
$ docker exec -it storage fdfs_monitor /etc/fdfs/client.conf # 结果 server_count=2, server_index=1 tracker server is 198.22.1.88:22122 group count: 0 #参数说明: tracker_server_count:2 --表示2个Tracker Server tracker server is 198.168.1.121:22122 --表示Leader Tracker group count: 1 --表示有1个group group name = group1 --组名称是group1 storage server count = 2 --组内有2个storage active server count = 2 --活动的storage有2个 storage server port = 23002 --storage的端口 storage HTTP port = 9101 --storage的文件访问端口 store path count = 1 --storage只挂了一个存储目录 total_upload_count = 11 --总共上传了多少个文件 total_upload_bytes = 691405 --总共上传了多少字节 success_upload_bytes = 691405 --成功上传了多少字节 total_download_count = 2 --总共下载了多少文件(使用java客户端)
-
文件上传验证
$ docker exec -it storage bash $ cd /etc/fdfs fdfs_test client.conf upload anti-steal.jpg
-
Error 犯错
1、ERROR - file: sockopt.c, line: 864, bind port 22122 failed, errno: 98, error info: Address already in use 因为配置了:--network=host 如果容器使用'host'网络驱动,意味着容器共享宿主机网络栈,双方在网络名称空间并没有隔离。例如,如果容器绑定到‘host’网络的80端口,则可通过宿主机IP加上80端口访问容器。 'host'类型网络驱动只在Linux操作系统主机上可用,不支持Mac、Windows。 从Docker 17.06开始,支持Docker Swarm中服务使用host网络,在docker container create命令创建容器时增加--network host即可。控制流量(swarm集群与服务管理流量)仍然使用overlay网络,但是单独swarm服务通过Docker守护进程使用的宿主机网络与端口号发送流量。这增加了一些额外的限制。例如,如果服务容器绑定到宿主机的80端口,显而易见的是,在这个swarm集群中的宿主机上只能运行一个实例。 如果容器服务不对外开放端口,则'host'网络不会产生其它影响。总之,在正式应用中,不应该使用host网络,严重依赖宿主机。 2、tracker_query_storage fail, error no: 2, error info: No such file or directory 3、fastdfs上传文件报错 ERROR - file: ../client/client_func.c, line: 257, “/home/yuqing/fastdfs“ can‘t be accessed 原因提示找不到该文件夹导致无法进入 mkdir -p /home/yuqing/fastdfs 4、file: connection_pool.c, line: 144, connect to server 192.168.0.196:22122 fail, errno: 110, error info: Connection timed out
参考:使用docker部署fastdfs集群版:https://blog.csdn.net/zhanngle/article/details/88770028
1.3.8.3 集群安装
tracker(198.22.1.88、198.22.1.68)
docker run -dti --network=host --name tracker -v /var/fdfs/tracker:/var/fdfs -v /etc/localtime:/etc/localtime delron/fastdfs tracker
storage(198.22.1.88、198.22.1.94)
$ docker run -dti --network=host --name storage -e TRACKER_SERVER=198.22.1.68:22122 -e TRACKER_SERVER=198.22.1.88:22122 -v /var/fdfs/storage:/var/fdfs -v /etc/localtime:/etc/localtime delron/fastdfs storage
配置nginx(默认不配也可以)
测试
$ docker exec -it storage fdfs_monitor /etc/fdfs/client.conf
Group 1:
group name = group1
disk total space = 506628 MB
disk free space = 497783 MB
trunk free space = 0 MB
storage server count = 2
active server count = 2
storage server port = 23000
storage HTTP port = 8888
store path count = 1
subdir count per path = 256
current write server index = 0
current trunk file id = 0
上传测试
$ docker exec -it storage bash
$ cd /etc/fdfs
fdfs_test client.conf upload mime.types
# 获取
http://198.22.1.88:8888/group1/M00/00/00/rBYBWGEg8AWAA2R8AAB5xKFvB3s0_big.types
http://198.22.1.94:8888/group1/M00/00/00/rBYBWGEg8AWAA2R8AAB5xKFvB3s0_big.types
1.3.9 安装RocketMQ
参考:https://www.cnblogs.com/kiwifly/p/11546008.html
1.3.9.1 安装 NameServer
# 1.镜像抽取
$ docker pull rocketmqinc/rocketmq:4.4.0
# 2.启动容器
$ docker run -d -p 9876:9876 -v /usr/loca/rocketmq/data/namesrv/logs:/root/logs -v /usr/loca/rocketmq/data/namesrv/store:/root/store --name rmqnamesrv -e "MAX_POSSIBLE_HEAP=100000000" rocketmqinc/rocketmq:4.4.0 sh mqnamesrv
注意事项
{
RmHome} 要替换成你的宿主机想保存 MQ 的日志与数据的地方,通过 docker 的 -v 参数使用 volume 功能,把你本地的目录映射到容器内的目录上。否则所有数据都默认保存在容器运行时的内存中,重启之后就又回到最初的起点。
1.3.9.2 安装 broker 服务器
创建 broker.conf 文件
-
在 {RmHome}/conf 目录下创建 broker.conf 文件
-
在 broker.conf 中写入如下内容
brokerClusterName=DefaultCluster brokerName=broker-a brokerId=0 deleteWhen=04 fileReservedTime=48 brokerRole=ASYNC_MASTER flushDiskType=ASYNC_FLUSH brokerIP1={本地外网 IP}
# 3.启动容器
$ docker run -d -p 10911:10911 -p 10909:10909 -v /usr/loca/rocketmq/data/broker/logs:/root/logs -v /usr/loca/rocketmq/rocketmq/data/broker/store:/root/store -v /usr/loca/rocketmq/conf/broker.conf:/opt/rocketmq-4.4.0/conf/broker.conf --name rmqbroker --link rmqnamesrv:namesrv -e "NAMESRV_ADDR=namesrv:9876" -e "MAX_POSSIBLE_HEAP=200000000" rocketmqinc/rocketmq:latest sh mqbroker -c /opt/rocketmq-4.4.0/conf/broker.conf
注意事项
注意: {
RmHome} 同上步一样,不再缀述。broker.conf 的文件中的 brokerIP1 是你的 broker 注册到 Namesrv 中的 ip。如果不指定他会默认取容器中的内网 IP。除非你的应用也同时部署在网络相通的容器中,本地或容器外就无法连接 broker 服务了,进而导致类似 RemotingTooMuchRequestException 等各种异常。
docker run -d -p 10911:10911 -p 10909:10909 --name rmqbroker --link rmqnamesrv:namesrv -e "NAMESRV_ADDR=namesrv:9876" -e "MAX_POSSIBLE_HEAP=200000000" rocketmqinc/rocketmq:latest sh mqbroker -c /usr/loca/rocketmq/conf/broker.conf
1.3.9.3 安装 rocketmq 控制台
# 拉取镜像
$ docker pull pangliang/rocketmq-console-ng
# 启动容器
$ docker run -e "JAVA_OPTS=-Drocketmq.namesrv.addr=198.22.1.21:9876 -Dcom.rocketmq.sendMessageWithVIPChannel=false" -p 8090:8080 -t pangliang/rocketmq-console-ng
# 访问 http://198.22.1.21:8090/
1.3.9.4 集群模式 选择
单Master模式
多Master模式
多Master多Slave模式(异步复制)
多Master多Slave模式(同步双写)—文中会说明补充此集群配置,线上使用的话,推荐使用此模式集群
参考:https://www.jianshu.com/p/23e04d8178b8
rocketMq双Master双Slave,同步双写,异步刷盘:https://blog.csdn.net/www_wangzheguilai/article/details/76566396
3.2.9.5 java.lang.UnsatisfiedLinkError: org.apache.hadoop.io.nativeio.NativeIO$Windows.createDirectoryWithMo
# 在Linux服务器上配置好hadoop,对HDFS进行命令行操作正确,运行wordcount Demo正常,但在window上使用Java api进行HDFS测试的时候报错。
0. 需要在window机器上也下载一份hadoop,并且大版本要和Linux机器上运行的Hadoop版本一致
1. https://github.com/steveloughran/winutils上下载对应版本的bin文件夹(主要是有winutils.exe这个文件),并且替换原有bin文件夹
2. 在系统变量上设置HADOOP_HOME
3. 在Path中添加%HADOOP_HOME%\bin和%HADOOP_HOME%\lib
4. 问题解决
# 问题2:org.apache.hadoop.security.AccessControlException: Permission denied: user=ymdhi, access=WRITE, inode="/":root:supergroup:drwxr-xr-x
原因:在window机器上使用Java api往HDFS中上传文件的时候,由于用户名默认使用的是window中的用户名,比如admin等等,在HDFS中就会被认为是other,如果other没有w权限的话,就会出这个问题
解决办法:
0. 在Edit Configurations中设置VM options,加上-DHADOOP_USER_NAME=hadoop(这个hadoop是HDFS中的用户名)
1. 运行,问题解决
1. hadoop/bin中有有两个文件hadoop.dll 和winutils.exe 没有的获取路径(https://github.com/steveloughran/winutils)
2. 配置环境变量 path 中增加hadoop的bin 路径
3. 配置了classpath 配置到winutils.exe
4. 将hadoop.dll 和winutils.exe放在system32 和SysWOW64或者放到hadoop.dll C:\Windows\System32中
5. 偏方 将hadoop.dll 和winutils.exe 放在jdk 的bin 目录下
6. 修改源码,在项目下新建一个包名是org.apache.hadoop.io.nativeio 将类NativeIO 中
public static boolean access(String path, AccessRight desiredAccess)
throws IOException {
//return access0(path, desiredAccess.accessRight());
return true;
}
7. 若以上都没有解决,一定要查看安装路径是否有中文
1.3.10 安装 mycat
# 1、
$ docker pull longhronshens/mycat-docker
$ docker run --name mycat -v /usr/local/mycat/schema.xml:/usr/local/mycat/conf/schema.xml -v /usr/local/mycat/rule.xml:/usr/local/mycat/conf/rule.xml -v /usr/local/mycat/server.xml:/usr/local/mycat/conf/server.xml -v /usr/local/mycat/sequence_conf.properties:/usr/local/mycat/conf/sequence_conf.properties --privileged=true -p 8066:8066 -p 9066:9066 -e MYSQL_ROOT_PASSWORD=root -d longhronshens/mycat-docker
$ docker exec -it mysqlmaster /bin/bash
$ mysql -h127.0.0.1 -uroot -proot -P8066
[安装mycat](https://blog.csdn.net/Amor_Leo/article/details/85218405)
[官网](https://github.com/MyCATApache/MyCAT-Server/)
[安装-官网-mycat](https://github.com/MyCATApache/Mycat-Server/wiki)
1.3.11 Docker安装mysql5.7.35并且配置主从复制
参考:https://blog.csdn.net/Amor_Leo/article/details/85177001
1.3.12 Docker安装hive
# 参考:https://www.cnblogs.com/garfieldcgf/p/8134452.html
# 安装mysql
$ mkdir -p /root/mysql
$ cd /root/mysql
$ docker run -p 3307:3306 --name mysql-hadoop-5.6 -v $PWD/conf:/etc/mysql/conf.d -v $PWD/logs:/logs -v $PWD/data:/var/lib/mysql -e TZ=Asia/Shanghai -e MYSQL_ROOT_PASSWORD=hive@hadoop -d --restart=always mysql:5.6 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
#进入容器
$ docker exec -it mysql-hadoop-5.6 bash
#设置远程登陆
#登录mysql
$ mysql -u root -p
#Mysql8 以上版本
$ ALTER USER '[账号名]'@'%' IDENTIFIED WITH mysql_native_password BY '[密码]';
#Mysql8 以下版本
$ GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'hive@hadoop' WITH GRANT OPTION;
# 配置生效加载
$ flush privileges;
# 版本兼容:http://hive.apache.org/downloads.html
# 创建hive库
$ CREATE DATABASE `hive` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# 下载安装包 http://mirrors.shuosc.org/apache/hive/hive-2.3.2/
$ tar -zxvf apache-hive-2.3.2-bin.tar.gz
$ mv apache-hive-2.3.2-bin hive
# 配置环境变量 hive
$ vi /etc/profile
export HIVE_HOME=/opt/hive
export PATH=$PATH:$HIVE_HOME/bin
# 生效
$ source /etc/profile
# conf目录下,拷贝模板进行配置:
cp hive-default.xml.template hive-site.xml
cp hive-env.sh.template hive-env.sh
# 修改文件hive-env.sh,增加以下内容
export HADOOP_HOME=/usr/local/soft/hadoop-2.8.3
export HIVE_CONF_DIR=/opt/hive/conf
export HIVE_AUX_JARS_PATH=/opt/hive/lib
# 修改hive-site.xml文件,修改内容如下
<!--修改hive-site.xml文件,修改内容如下--->
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://198.22.1.24:3307/hive?createDatabaseIfNotExist=true</value>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>hive@hadoop</value>
</property>
<property>
<name>hive.exec.local.scratchdir</name>
<value>/opt/hive/iotmp</value>
<description>Local scratch space for Hive jobs</description>
</property>
<property>
<name>hive.querylog.location</name>
<value>/opt/hive/iotmp</value>
<description>Location of Hive run time structured log file</description>
</property>
<property>
<name>hive.downloaded.resources.dir</name>
<value>/opt/hive/${hive.session.id}_resources</value>
<description>Temporary local directory for added resources in the remote file system.</description>
</property>
<property>
<name>hive.server2.logging.operation.log.location</name>
<value>/opt/hive/iotmp/operation_logs</value>
<description>Top level directory where operation logs are stored if logging functionality is enabled</description>
</property>
<property>
# 拷贝一个mysql的连接jar包到lib目录下,我用的是 mysql-connector-java-5.1.39.jar
# 到hdfs上建立一些基础目录hive-site.xml中配置的仓库地址等,手工创建(包括配置的hive的数据目录,仓库地址,日志等,并赋权):
$ hadoop fs -mkdir -p /user/hive/warehouse
$ hadoop fs -mkdir -p /user/hive/tmp
$ hadoop fs -mkdir -p /user/hive/log
$ hadoop fs -chmod -R 777 /user/hive/warehouse
$ hadoop fs -chmod -R 777 /user/hive/tmp
$ hadoop fs -chmod -R 777 /user/hive/log
# 先启动hadoop,然后在hive的bin目录下执行命令
$./schematool -initSchema -dbType mysql
# 测试
$ hive
$ create database hive_test;
$ select * from DBS;# mysql中执行
$ show databases;
$ use hive_test;
$ create table if not exists hive_01 (id int,name string);
$ show tables;
$ select * from TBLS;# mysql中执行
#查看 http://198.22.1.24:50070/explorer.html#/user/hive/warehouse/hive_test.db/hive_01
1.3.12.1 hive报错
# hive 报错:Relative path in absolute URI: ${system:java.io.tmpdir%7D/$%7Bsystem:user.name%7D
* 参考https://www.cnblogs.com/qxyy/articles/5247933.html
* 替换 ${system:java.io.tmpdir}/${system:user.name} 为$HIVE_HOME/iotmp
$HIVE_HOME/conf/hive-site.xml
<property>
<name>hive.exec.local.scratchdir</name>
<value>/opt/hive/iotmp</value>
<description>Local scratch space for Hive jobs</description>
</property>
<property>
<name>hive.querylog.location</name>
<value>/opt/hive/iotmp</value>
<description>Location of Hive run time structured log file</description>
</property>
<property>
<name>hive.downloaded.resources.dir</name>
<value>/opt/hive/${hive.session.id}_resources</value>
<description>Temporary local directory for added resources in the remote file system.</description>
</property>
# 运行
hive --service metastore &
hive --service hiveserver2 &
1.3.13 安装Flume
$ tar -zxvf apache-flume-1.9.0-bin.tar.gz
$ mv apache-flume-1.9.0-bin flume
$ cp flume-conf.properties.template flume-netcat-logger.conf
$ vim flume-netcat-logger.conf
# 加入内容:example.conf: A single-node Flume configuration
# Name the components on this agent
a1.sources = r1
a1.sinks = k1
a1.channels = c1
# Describe/configure the source
a1.sources.r1.type = netcat
a1.sources.r1.bind = localhost
a1.sources.r1.port = 44444
# Describe the sink
a1.sinks.k1.type = logger
# Use a channel which buffers events in memory
a1.channels.c1.type = memorys
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100
# Bind the source and sink to the channel
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1
$ cp flume-env.sh.template flume-env.sh
# 添加Java配置 export JAVA_HOME=/usr/java/jdk1.8.0_221
$ vim flume-env.sh
# 启动 --name a1 必须何agent的名称一致 -c conf 指定flume自身的配置文件所在目录
# -f conf/netcat-logger.conf 指定我们所描述的采集方案
# -n a1 指定本次启动agent的名字,与采集方案配置文件中一致
# -c (或--conf) : flume自身所需的conf文件路径
# -f (--conf-file) : 自定义的flume配置文件,也就是采集方案文件
# -n (--name): 自定义的flume配置文件中agent的name
$ ./bin/flume-ng agent --conf conf --conf-file conf/flume-netcat-logger.conf --name a1 -Dflume.root.logger=INFO,console
# 测试
$ yum install nc -y
# 判断端口是否被占用
$ netstat -unltp | grep 44444
1.3.13.1 测试 从flume-hadoop
#创建文件:flume-file-hdfs.conf
# example.conf: A single-node Flume configuration
# Name the components on this agent
a2.sources = r2
a2.sinks = k2
a2.channels = c2
# Describe/configure the source
a2.sources.r2.type = exec
a2.sources.r2.command = tail -F /opt/hive/iotmp/logs/hive.log
a2.sources.r2.shell = /bin/bash -c
# Describe the sink
a2.sinks.k2.type = hdfs
a2.sinks.k2.hdfs.path = hdfs://198.22.1.24:9000/flume/%Y%m%d/%H
# 上传文件的前缀
a2.sinks.k2.hdfs.filePrefix = logs-
#是否按照时间滚动文件夹
a2.sinks.k2.hdfs.round = true
#多少时间单位创建一个新的文件夹
a2.sinks.k2.hdfs.roundValue = 1
#重新定义时间单位
a2.sinks.k2.hdfs.roundUnit = hour
#是否使用本地时间戳
a2.sinks.k2.hdfs.useLocalTimeStamp = true
#积攒多少个Event才flush到HDFS一次
a2.sinks.k2.hdfs.batchSize = 1000
#设置文件类型,可支持压缩
a2.sinks.k2.hdfs.fileType = DataStream
#多久生成一个新文件
a2.sinks.k2.hdfs.rollInterval = 60
#设置每个文件的滚动大小
a2.sinks.k2.hdfs.rollSize = 134217700
#文件滚动和Event数量无关
a2.sinks.k2.hdfs.rollCount = 0
# Use a channel which buffers events in memory
a2.channels.c2.type = memory
a2.channels.c2.capacity = 1000
a2.channels.c2.transactionCapacity = 1000
a2.channels.c2.keep-alive = 60
a2.channels.c2.byteCapacity = 800000
a2.channels.c2.byteCapacityBufferPercentge = 20
# Bind the source and sink to the channel
a2.sources.r2.channels = c2
a2.sinks.k2.channel = c2
$ ./bin/flume-ng agent --conf conf --conf-file conf/flume-file-hdfs.conf --name a2 -Dflume.root.logger=INFO,console
1.3.13.2 测试 从dir-hadoop
#创建文件:flume-dir-hdfs.conf
# 创建文件夹 mkdir -p /opt/module/flume/upload
# example.conf: A single-node Flume configuration
# Name the components on this agent
a3.sources = r3
a3.sinks = k3
a3.channels = c3
# Describe/configure the source
a3.sources.r3.type = sqooldir
a3.sources.r3.sqoolDir = /opt/module/flume/upload
a3.sources.r3.fileSuffix = .COMPLETED
a3.sources.r3.fileHeader = true
# 忽略所有以.tmp结尾的文件,不上传
a3.sources.r3.ignorePattern = ([^ ]*\.tmp)
# Describe the sink
a3.sinks.k3.type = hdfs
a3.sinks.k3.hdfs.path = hdfs://198.22.1.24:9000/flume/upload/%Y%m%d/%H
# 上传文件的前缀
a3.sinks.k3.hdfs.filePrefix = upload-
#是否按照时间滚动文件夹
a3.sinks.k3.hdfs.round = true
#多少时间单位创建一个新的文件夹
a3.sinks.k3.hdfs.roundValue = 1
#重新定义时间单位
a3.sinks.k3.hdfs.roundUnit = hour
#是否使用本地时间戳
a3.sinks.k3.hdfs.useLocalTimeStamp = true
#积攒多少个Event才flush到HDFS一次
a3.sinks.k3.hdfs.batchSize = 100
#设置文件类型,可支持压缩
a3.sinks.k3.hdfs.fileType = DataStream
#多久生成一个新文件
a3.sinks.k3.hdfs.rollInterval = 60
#设置每个文件的滚动大小
a3.sinks.k3.hdfs.rollSize = 134217700
#文件滚动和Event数量无关
a3.sinks.k3.hdfs.rollCount = 0
# Use a channel which buffers events in memory
a3.channels.c3.type = memory
a3.channels.c3.capacity = 1000
a3.channels.c3.transactionCapacity = 100
a3.channels.c3.keep-alive = 60
a3.channels.c3.byteCapacity = 800000
a3.channels.c3.byteCapacityBufferPercentge = 20
# Bind the source and sink to the channel
a3.sources.r3.channels = c3
a3.sinks.k3.channel = c3
1.3.14 docker安装sonarqube
$ docker pull postgres:10
$ docker pull sonarqube:7.9.1-community
$ docker pull sonarqube:7.5-community(推荐)
$ docker search sonarqube
$ docker pull postgres
$ docker pull sonarqube
$ docker exec -it sonarqube bash
$ vi /etc/sysctl.conf
# for sonarqube
vm.max_map_count=262144
fs.file-max=65536
# 安装 postgresql
$ docker run -d -p 5432:5432 -v $PWD/datadir:/var/lib/postgresql/data -e POSTGRES_USER=sonar -e POSTGRES_PASSWORD=sanduo@admin --restart=always --name some-postgres postgres
注意:
如果创建时未指定 --restart=always ,可通过 update 命令
docker update --restart=always some-postgres
用户名/密码
postgres/sanduo@admin
# 创建数据库
CREATE DATABASE sonar CHARACTER SET utf8 COLLATE utf8_general_ci;
CREATE USER 'sonar' IDENTIFIED BY 'sonar';
GRANT ALL ON sonar.* TO 'sonar'@'%' IDENTIFIED BY 'sonar';
GRANT ALL ON sonar.* TO 'sonar'@'localhost' IDENTIFIED BY 'sonar';
FLUSH PRIVILEGES;
# 安装 sonarqube
# 快速体验:
$ docker run -d --name sonarqube --restart always -p 9000:9000 sonarqube
# 或者
$ docker run -d --name sonarqube7.5 --restart always -p 9001:9000 sonarqube:7.5-community
# 1、持久化数据: postgresql
$ docker run -d --name sonarqube \
--restart always \
-p 9000:9000 \
-e "sonar.jdbc.url=jdbc:postgresql://198.22.1.24:5432/sonar" \
-e "sonar.jdbc.username=postgres" \
-e "sonar.jdbc.password=sanduo@admin" \
sonarqube
# 2、持久化数据: mysql 5.7
$ docker run -d -p 9001:9000 \
-e "SONARQUBE_JDBC_URL=jdbc:mysql://198.22.1.21:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false" \
-e "SONARQUBE_JDBC_USERNAME=root" \
-e "SONARQUBE_JDBC_PASSWORD=Developer@2019" \
--name sonarqube7.5 sonarqube:7.5-community
访问sonarqube:http://198.22.1.24:9000,默认用户名密码为admin/admin
新密码:admin/admin@#%admin
#使用 Docker 搭建代码质量检测平台 SonarQube 并汉化
- 使用admin登录sonarqube
- Administration >Marketplace
- 在搜索框中输入chinese,出现一个Chinese Pack,点击右侧的install按钮。
- 安装成功后,会提示重启 SonarQube 服务器。
SonarQube的汉化包: https://github.com/xuhuisheng/sonar-l10n-zh
SonarQube:github各个版本下载地址:https://github.com/SonarQubeCommunity/sonar-l10n-zh/tags
https://github.com/jensgerdes/sonar-pmd/releases/tag/3.3.1
测试
# 配置maven的settings.xml
<profile>
<id>sonar</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<sonar.jdbc.url>jdbc:jdbc://198.22.1.24:5432/sonar</sonar.jdbc.url>
<sonar.jdbc.driver>org.postgresql.Driver</sonar.jdbc.driver>
<sonar.jdbc.username>postgres</sonar.jdbc.username>
<sonar.jdbc.password>sanduo@admin</sonar.jdbc.password>
<!-- Sonar服务器访问地址 -->
<sonar.host.url>http://198.22.1.24:9000</sonar.host.url>
</properties>
</profile>
# 在maven项目中执行如下命令
mvn clean install sonar:sonar -Dsonar.projectKey=sanduo_zhyz -Dsonar.login=57b22b8845410ebd54bec8d99c7c0ebdef263b18
mvn clean install sonar:sonar -Dsonar.login=57b22b8845410ebd54bec8d99c7c0ebdef263b18
chenfeng/chenfeng@%#admin
sijunjie/sijunjie@%#admin
shimeiyang/shimeiyang@%#admin
dukai/dukai@%#admin
gaoqi/gaoqi@%#admin
2 其他软件安装
2.1 安装thrift(windows)
1、从官网上下载 windows 版的 thrift.exe:http://www.apache.org/dyn/closer.cgi?path=/thrift/0.12.0/thrift-0.12.0.exe
2、python版本:Python 3.7.1
3、pip3 install thrift
2.2 安装nginx
# 参考 https://www.cnblogs.com/herui1991/p/8996917.html
$ yum -y install gcc gcc-c++ make automake autoconf pcre pcre-devel zlib zlib-devel openssl openssl-devel libtool
Loaded plugins: fastestmirror, refresh-packagekit, security
$ wget http://nginx.org/download/nginx-1.14.0.tar.gz
# 侦测程序,生成MakeFile文件
$ ./configure --with-http_ssl_module --with-http_v2_module --with-stream --prefix=/usr/local/soft/nginx
$ make & make install
# 创建nginx.repo
$ /etc/yum.repos.d/nginx.repo
# 添加源
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1
# yum 安装
$ yum install nginx
# 查看nginx版本
$ nginx -v
# 查看编译参数
$ nginx -V
#查看安装目录
$ rpm -ql nginx
# 查看配置文件
# 用于日志切割
/etc/logrotate.d/nginx
安装grpc(参考:https://www.jb51.net/article/137330.htm)
./configure --with-http_ssl_module --with-http_v2_module --prefix=/usr/loca/nginx
make & make install
重启nginx
启动nginx
./usr/local/nginx/sbin/nginx
停止nginx
nginx -s stop
重启nginx
nginx -s reload
编译安装nginx添加stream模块支持tcp(stream)代理(参考:https://my.oschina.net/u/4163854/blog/3074707)
./configure --with-http_ssl_module --with-http_v2_module --with-stream --prefix=/usr/loca/nginx
make & make install
# tcp 代理配置
stream {
upstream nacos-grpc-9848{
server 198.22.1.82:9848 weight=1;
server 198.22.1.83:9848 weight=1;
server 198.22.1.84:9848 weight=1;
}
upstream nacos-grpc-9849{
server 198.22.1.82:9849 weight=1;
server 198.22.1.83:9849 weight=1;
server 198.22.1.84:9849 weight=1;
}
server {
listen 9848 ; # grpc方式对外暴露端口
proxy_connect_timeout 1s;
proxy_timeout 3s;
proxy_pass nacos-grpc-9848; # 此处TCP端口转发代理
}
server {
listen 9849 ; # grpc方式对外暴露端口
proxy_connect_timeout 1s;
proxy_timeout 3s;
proxy_pass nacos-grpc-9849; # 此处TCP端口转发代理
}
}
2.3 安装Scrapy(windows)
# 版本选择(64位系统)
1:当出现错误类似 安装 Twisted 出现 not a supported wheel on this platform 错误的解决方案
2:查询当前系统支持版本:
查看当前python版本: C:\Users>python
Python 3.7.3 (v3.7.3:ef4ec6ed12, Mar 25 2019, 21:26:53) [MSC v.1916 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
导入包: import pip._internal
打印当前版本号: print(pip._internal.pep425tags.get_supported())
[('cp37', 'cp37m', 'win32'), ('cp37', 'none', 'win32'), ('py3', 'none', 'win32'), ('cp37', 'none', 'any'), ('cp3', 'none', 'any'), ('py37', 'none', 'any'), ('py3', 'none', 'any'), ('py36', 'none', 'any'), ('py35', 'none', 'any'), ('py34', 'none', 'any'), ('py33', 'none', 'any'), ('py32', 'none', 'any'), ('py31', 'none', 'any'), ('py30', 'none', 'any')]
3: 根据显示结果 ('cp37', 'cp37m', 'win32')
4: 重新下载: https://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted 重新下载:Twisted-19.2.0-cp37-cp37m-win32.whl
# 1、登录网站下载文件
网站地址: https://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted
下载内容包括:
1: wheel
2: Twisted
3: scrapy
# 2、安装 whell
$ pip2 install wheel-0.34.2-py2.py3-none-any.whl
# 2、安装 lxml
# 3、安装Twisted
步骤:
1:下载: Twisted-17.9.0-cp36-cp36m-win_amd64.whl
2:进入文件所在目录
3:pip3 install Twisted-17.1.0-cp35-cp35m-win_amd64.whl
# 4、安装 scrapy
$ pip3 install scrapy
# 5、安装 pywin32 windows上scrapy依赖pywin32
步骤:
1: 下载: https://sourceforge.net/projects/pywin32/files/
2: 地址: https://github.com/mhammond/pywin32/releases/tag/b227
3: 双击安装: pywin32-227.win-amd64-py2.7.exe #可选
# 参考:
参考地址:
scrapy的下载安装---Windows(安装软件太让我伤心了):
https://www.cnblogs.com/jiangzijiang/p/8459669.html
python Scrapy在Windows平台的安装:
https://baijiahao.baidu.com/s?id=1597465401467369572&wfr=spider&for=pc
安装 Twisted 出现 not a supported wheel on this platform 错误的解决方案:
https://www.jianshu.com/p/a5e20f8b51b1
2.4 Seata安装
下载地址:
https://github.com/seata/seata/releases
创建fescar库:
create database fescar;
use fescar;
创建相关的业务表和undo_log:
DROP TABLE IF EXISTS `storage_tbl`;
CREATE TABLE `storage_tbl` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`commodity_code` varchar(255) DEFAULT NULL,
`count` int(11) DEFAULT 0,
PRIMARY KEY (`id`),
UNIQUE KEY (`commodity_code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
DROP TABLE IF EXISTS `order_tbl`;
CREATE TABLE `order_tbl` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` varchar(255) DEFAULT NULL,
`commodity_code` varchar(255) DEFAULT NULL,
`count` int(11) DEFAULT 0,
`money` int(11) DEFAULT 0,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
DROP TABLE IF EXISTS `account_tbl`;
CREATE TABLE `account_tbl` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` varchar(255) DEFAULT NULL,
`money` int(11) DEFAULT 0,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- 注意此处0.3.0+ 增加唯一索引 ux_undo_log
CREATE TABLE `undo_log` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`branch_id` bigint(20) NOT NULL,
`xid` varchar(100) NOT NULL,
`rollback_info` longblob NOT NULL,
`log_status` int(11) NOT NULL,
`log_created` datetime NOT NULL,
`log_modified` datetime NOT NULL,
`ext` varchar(100) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `ux_undo_log` (`xid`,`branch_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
2.4.1下载地址
- seata-server官网地址
- 下载编译:seata-server-1.2.0.tar.gz
- 下载源码:Source code(zip)
2.4.2配置
- 配置nacos配置(前置条件)
- 将nacos/conf/nacos-mysql.sql导入自己的数据库
- 配置修改nacos/conf/application.properties
properties spring.datasource.platform=mysql db.num=1 db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true db.user=root db.password=123456
- 启动nacos
- 下载seata
- 使用db模式导入配置:路径: seata-1.2.0\script\server\db\mysql.sql
- 配置文件:路径:seata-1.2.0\script\config-center\config.txt
- 脚本:路径:seata-1.2.0\script\config-center\nacos\nacos-config.sh
将上面的config.txt文件复制到seata目录,nacos中的nacos-config.sh nacos-config.py复制到seata的conf目录
-
初始化seata
sh nacos-config.sh -h 198.22.1.21 -p 8848 -g SEATA_GROUP -
启动 seata
nohup ./bin/seata-server.sh >log.out 2>1 &
nohup sh seata-server.sh -p 8091 -h 127.0.0.1 >log.out 2>1 &
2.5 安装SVN
# 参考:https://blog.csdn.net/xu12387/article/details/93050196
1. docker pull garethflowers/svn-server
2. docker exec -it svn-server bash
3. svnadmin create repo
4. vi passwd
5. vi authz
2.6 linux:telnet命令安装
$ yum -y install telnet-server
$ yum -y install telnet
$ yum -y install xinetd
$ service xinetd restart
测试
3 项目初始化
3.1 vue项目初始化
https://www.cnblogs.com/winter92/p/7117057.html
vue开发看这篇文章就够了
1、安装vue 环境
vue -v 查看版本
2、因为网络原因:安装国内cnpm
npm install -g cnpm --registry=https://registry.npm.taobao.org
3、安装 vue-cli
卸载:npm uninstall -g @vue/cli
安装:cnpm install -g @vue/cli
或者
npm install -g --force @vue/cli
4、安装webpack(Java javaScript)
cnpm install -g webpack
5、创建系统
>vue ui
3.2 idea上传项目到码云(Gitee),亲测有效
https://blog.csdn.net/weixin_42545531/article/details/98180178?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.control&dist_request_id=1331974.6670.16185426562136977&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.control
4 其他
4.1 服务器集群台数
nginx:至少2台(nginx+keepalive)
redisCluster集群:6台 / 哨兵模式的主从 2台一般是3台
RabbitMQ:2台 (双主双从)
注意:
- 图片中的172.22相当于192.22
今天的文章常用软件-部署_软件配置管理工具分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:http://bianchenghao.cn/77504.html