常用软件-部署_软件配置管理工具

常用软件-部署_软件配置管理工具常用软件部署1、部署1.1基本命令安装1.2部署的服务(Hadoop)1.2.1安装Docker1.2.2问题1.2.3docker启动报错1.2.4dockerpull慢的问题1.2.5docker基础容器中bas

常用软件部署

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

img

6、可以查看所有仓库中所有docker版本,并选择特定版本安装

$ yum list docker-ce --showduplicates | sort -r

img

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

img

8、启动并加入开机启动

$ sudo systemctl start docker
$ sudo systemctl enable docker

9、验证安装是否成功(有client和service两部分表示docker安装启动都成功了)

$ docker version

img

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

img

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 错误

在这里插入图片描述

参考:

  1. https://blog.csdn.net/weixin_39735166/article/details/111220809

  2. 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文件,默认配置不修改也可以'

img

# 7.测试上传文件(docker exec -it 容器id bash)
使用web模块进行文件的上传,将文件上传至FastDFS文件系统
 将一张照片(test.png)放置在/var/fdfs/storage目录下,进入storage容器,进入/var/fdfs目录,运行下面命令:

img

 /usr/bin/fdfs_upload_file /etc/fdfs/client.conf test.png
此时将该图片已上传至文件系统,并在执行该语句后返回图片存储的uri:

img

通过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的小文件

  1. 参考:

    • 分布式文件存储MinIO SeaweedFS FastDFS对比总结
    • MinIO
  2. 获取配置

    # 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
    
  3. 安装 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文件,默认配置不修改也可以'
    
  4. 安装 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 
    
  5. 验证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客户端)
    
    
  6. 文件上传验证

    $ docker exec -it storage bash
    $ cd /etc/fdfs
    fdfs_test client.conf upload anti-steal.jpg
    
    
  7. 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 文件

  1. 在 {RmHome}/conf 目录下创建 broker.conf 文件

  2. 在 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)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KM9CNGks-1643264117093)(C:\Users\三多\AppData\Roaming\Typora\typora-user-images\image-20200511112547543.png)]

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

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下载地址

  1. seata-server官网地址
  2. 下载编译:seata-server-1.2.0.tar.gz
  3. 下载源码:Source code(zip)

2.4.2配置

  1. 配置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
  1. 下载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目录
  1. 初始化seata
    sh nacos-config.sh -h 198.22.1.21 -p 8848 -g SEATA_GROUP

  2. 启动 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

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注