Azuma-Cloud搭建笔记 其二

Azuma-Cloud搭建笔记 其二

Azuma-Cloud是自己搭建的微服务通用开发框架,简单记录一下搭建过程,总结遇到的问题和经验😄。

本架构搭建基本按照Spring Cloud 微服务权限系统搭建教程搭建,并在此基础上升级了部分中间件和部分引用的插件,在此感谢作者Mrbird先生的作品对初学者的帮助😋。

笔记第二章记录框架运行环境的搭建,包含了如何用VirtualBox创建虚拟机,并在虚拟机中安装Docker和Docker Compose 、Nacos、ELK、MySQL等环境。

框架运行环境除了本章搭建的环境外还需要Seata、Redis、Minio,篇幅所限放在第三章记录🤪。

该系列目录:

第一篇:Azuma-Cloud搭建笔记 其一
第二篇:本篇搭建笔记为该系列的第二篇
第三篇:Azuma-Cloud搭建笔记 其三
....待续....

Vagrant和VirtualBox

前置准备

vagrant下载安装: Vagrant下载,安装完成后打开cmd命令行窗口输入vagrant -v,测试是否安装成功。
virtualbox下载安装: Virtualbox下载

创建虚拟机

新建文件夹vagrant_centos7,此步骤下的所有cmd命令均在该目录下执行

在该文件夹下打开cmd窗口输入vagrant init centos/7

  • 虚拟机系统版本,一般在Discover Vagrant Boxes网站中搜索需要的系统镜像和初始化命令

执行完毕后会提示:

A `Vagrantfile` has been placed in this directory. You are now
ready to `vagrant up` your first virtual environment! Please read
the comments in the Vagrantfile as well as documentation on
`vagrantup.com` for more information on using Vagrant.

大意是Vagrantfile文件初始化成功。此时会发现该文件下多了一个Vagrantfile文件;打开该文件去除掉注释内容后应为:

Vagrant.configure("2") do |config|
  config.vm.box = "centos/7"
end

把它修改为

Vagrant.configure("2") do |config|
  config.vm.box = "centos/7"
  config.vm.network "public_network" ,ip: "192.168.0.117"
  config.vm.hostname = "azuma"
  config.vm.provider "virtualbox" do |v|
    v.memory = 4096
    v.cpus = 2
  end
end

其中各项配置的含义:

  • vm.box:配置了该机器将用哪个 box 启动。这里的值应该是已安装 box 的名称或 HashiCorp 的 Vagrant Cloud 中 box 的简写名称
  • vm.network:虚拟机网络配置,public_network的含义为公共网络,后面跟IP代表指定静态IP,这样局域网内部的电脑可以连接该虚拟机,请注意如果想让同网段的电脑都能连上该虚拟机,则给该虚拟机指定的静态IP也应该是同一网段😑
  • vm.hostname:主机名
  • vm.provider:通用配置,v.memory为分配的内存,v.cpus为设置分配CPU核心数

执行vagrant up命令

若无报错信息,则说明启动成功,打开安装好的virtualbox会发现有个刚创建好的已经启动的虚拟机

打开xshell,新建一个链接,ip为刚刚Vagrantfile文件里设置的静态IP,端口为22,用户名为vagrant。点击链接会发现默认是用密钥登录。

此时打开cmd输入vagrant ssh-config,打印出来IdentityFile后面的路径就是密钥文件的路径,xshell在public key选择浏览->文件,然后该路径下的private_key文件,输入密码vagrant则登录成功

登录

此时我们已经可以使用XShell连接刚建好的虚拟机了🙄,进入后如果不是root账户,输入su回车,然后输入密码vagrant 。

获取root权限

安装MySQL数据库

  • 第一步:安装wget,命令yum -y install wget

安装wget

  • 第二步:下载MySQL安装包,命令wget https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm

下载MySQL安装包

  • 第三步:本地安装Yum源,命令yum -y localinstall mysql57-community-release-el7-11.noarch.rpm

本地安装Yum源

  • 第四步:安装MySQL,命令yum -y install mysql-community-server,然后略等片刻☕

安装MySQL

  • 第五步:启动MySQL服务并设置开机启动,命令systemctl start mysqldsystemctl enable mysqldsystemctl daemon-reload

启动MySQL服务并设置开机启动

  • 第六步:修改默认的root密码;打开/var/log/mysqld.log文件查看并记录默认的root密码,这里我们会使用vim编辑器vim /var/log/mysqld.log,记录好密码后输入:q按回车退出vim编辑器

⚠️ 如果你出现提示:bash: vim: command not found,请参考此文章Linux中vim: command not found自行安装vim,不再赘述

/var/log/mysqld.log文件

  • 第七步:使用默认的root密码登录,并修改root密码,然后设置允许root账户远程登录;
      1. root账户登录命令:mysql -u root -p,然后输入刚刚记录的密码
    • 2.MySQL5.6.6版本之后增加了密码强度验证插件validate_password,相关参数设置的较为严格;使用了该插件会检查设置的密码是否符合当前设置的强度规则,若不满足则拒绝设置。
      所以我们先执行以下语句修改密码强度验证插件的配置,使其校验规则变的宽松一些:
      set global validate_password_policy=0;
      set global validate_password_mixed_case_count=0;
      set global validate_password_number_count=3;
      set global validate_password_special_char_count=0;
      set global validate_password_length=3;
    • 3.修改密码ALTER USER 'root'@'localhost' IDENTIFIED BY 'azumatokaku3161667890';
    • 4.设置远程登录:GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'azumatokaku3161667890' WITH GRANT OPTION;
    • 5.退出MySQLexit

使用默认的root密码登录,并修改root密码,然后设置允许root账户远程登录

  • 第八步:查看你虚拟机防火墙的状态,若开启需放开3306端口,为了方便在学习场景就把防火墙关了,此处不做赘述。

截止此时你的数据库可视化工具或者同一网段下其它电脑的数据库可视化工具都应该可以使用root账户连接刚刚安装好的MySQL数据库了🤤,MySQL数据库安装就暂时告一段落。

enjoy

用字符集utf8、排序规则utf8_general_ci建一个数据库:azuma_cloud_middleware,该数据库用来持久化各种中间件的配置。然后下载阿里云盘分享azuma_cloud_middleware.sql文件,导入azuma_cloud_middleware数据库
该数据库包含了Seata运行所需的数据库表Nacos的数据库表(源码包内的nacos-mysql.sql文件)

安装docker相关的环境

我们后续需要使用docker来安装一些中间件环境,后续还要将微服务docker化并使用docker compose部署,所以先安装docker相关的环境

安装docker

  • 第一步:卸载旧版本dockeryum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine
    当然如果你是新安装的虚拟机确定没有安装过docker,也可以跳过此步😑
  • 第二步:安装docker所需要的包yum install -y yum-utils \ device-mapper-persistent-data \ lvm2

安装docker所需要的包

  • 第三步:设置稳定的仓库yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

⚠️ 如果你出现提示:Loaded plugins: fastestmirror,请参考此文章使用 yum 出现 Loaded plugins: fastestmirror 信息自行解决

  • 第四步:安装最新版的docker引擎yum -y install docker-ce docker-ce-cli containerd.io

安装最新版的docker引擎

  • 第五步:启动docker设置开机自启,查看是否安装成功 systemctl start dockersystemctl enable docker

启动docker设置开机自启

  • 第六步:设置docker镜像加速,参考docker镜像加速自行设置;如果不设置镜像加速,pull docker镜像时有可能是龟速🐢下载

安装docker compose

安装docker compose我们可以参考官方安装教程

  • 第一步:安装docker所需要的包curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

安装docker所需要的包

  • 第二步:对二进制文件应用可执行权限chmod +x /usr/local/bin/docker-compose
  • 第三步:创建指向或其它目录的符号链接ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
  • 第四步:通过查看版本号测试是否安装成功docker-compose --version

安装docker  compose

此时我们就安装好了docker和docker compose。

安装Nacos相关的环境

该架构使用Nacos作为注册中心和配置中心,我们使用docker来安装Nacos。

  • 第一步:拉取nacos镜像docker pull nacos/nacos-server,不写版本号就默认最新版

拉取nacos镜像

  • 第二步:创建挂载目录
    • 1.创建nacos数据文件挂载路径mkdir -p /azuma/nacos/data
    • 2.对该路径授予777权限chmod 777 /azuma/nacos/data
    • 3.创建nacos日志文件挂载路径mkdir -p /azuma/nacos/logs
    • 4.对该路径授予777权限chmod 777 /azuma/nacos/logs
    • 5.创建nacos配置文件挂载路径mkdir -p /azuma/nacos/conf
    • 6.对该路径授予777权限chmod 777 /azuma/nacos/conf
  • 第三步:查看docker0网桥的地址ifconfig,记录下来

docker0网桥地址

  • 第四步:在/azuma/nacos/conf目录下创建配置文件application.propertiesvim /azuma/nacos/conf/application.properties,内容如下:
# spring
server.servlet.contextPath=/nacos
server.contextPath=/nacos
server.port=8848
spring.datasource.platform=mysql
nacos.cmdb.dumpTaskInterval=3600
nacos.cmdb.eventTaskInterval=10
nacos.cmdb.labelTaskInterval=300
nacos.cmdb.loadDataAtStart=false
db.num=1
# db.url.0=jdbc:mysql://${MYSQL_SERVICE_HOST}:${MYSQL_SERVICE_PORT:3306}/${MYSQL_SERVICE_DB_NAME}?${MYSQL_SERVICE_DB_PARAM:characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false}
# db.url.1=jdbc:mysql://${MYSQL_SERVICE_HOST}:${MYSQL_SERVICE_PORT:3306}/${MYSQL_SERVICE_DB_NAME}?${MYSQL_SERVICE_DB_PARAM:characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false}
db.url.0=jdbc:mysql://172.17.0.1:3306/azuma_cloud_middleware?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user=root
db.password=azumatokaku3161667890
### The auth system to use, currently only 'nacos' is supported:
nacos.core.auth.system.type=nacos


### The token expiration in seconds:
nacos.core.auth.default.token.expire.seconds=${NACOS_AUTH_TOKEN_EXPIRE_SECONDS:18000}

### The default token:
nacos.core.auth.default.token.secret.key=${NACOS_AUTH_TOKEN:SecretKey012345678901234567890123456789012345678901234567890123456789}

### Turn on/off caching of auth information. By turning on this switch, the update of auth information would have a 15 seconds delay.
nacos.core.auth.caching.enabled=${NACOS_AUTH_CACHE_ENABLE:false}
nacos.core.auth.enable.userAgentAuthWhite=${NACOS_AUTH_USER_AGENT_AUTH_WHITE_ENABLE:false}
nacos.core.auth.server.identity.key=${NACOS_AUTH_IDENTITY_KEY:serverIdentity}
nacos.core.auth.server.identity.value=${NACOS_AUTH_IDENTITY_VALUE:security}
server.tomcat.accesslog.enabled=${TOMCAT_ACCESSLOG_ENABLED:false}
server.tomcat.accesslog.pattern=%h %l %u %t "%r" %s %b %D
# default current work dir
server.tomcat.basedir=
## spring security config
### turn off security
nacos.security.ignore.urls=${NACOS_SECURITY_IGNORE_URLS:/,/error,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.ico,/console-fe/public/**,/v1/auth/**,/v1/console/health/**,/actuator/**,/v1/console/server/**}
# metrics for elastic search
management.metrics.export.elastic.enabled=false
management.metrics.export.influx.enabled=false

nacos.naming.distro.taskDispatchThreadCount=10
nacos.naming.distro.taskDispatchPeriod=200
nacos.naming.distro.batchSyncKeyCount=1000
nacos.naming.distro.initDataRatio=0.9
nacos.naming.distro.syncRetryDelay=5000
nacos.naming.data.warmup=true

⚠️和主机的MySQL通信IP要写docker0网桥的地址,因为主机和容器之间需要通过网桥相互通信;用户名密码使用之前创建好的数据库用户名密码

  • 第五步:启动nacos容器docker run -d --env MODE=standalone -v /azuma/nacos/logs:/home/nacos/logs -v /azuma/nacos/conf/application.properties:/home/nacos/conf/application.properties -v /azuma/nacos/data:/home/nacos/data --name nacos -p 8848:8848 nacos/nacos-server
  • 第六步:浏览器输入虚拟机IP加8848端口,可以看到Nacos控制台;其中的配置列表有作为Nacos配置中心时的配置文件,这些配置文件信息是在安装完MySQL创建数据库导入的数据

nacos控制台

  • 第七步:输入docker update --restart=always nacos,设置Nacos容器开机自启。(其实也可以在容器启动时设置好😑.....)

搭建ELK环境

当微服务部署在不同的服务器上时,那么日志文件也是分散在各自的服务器上。分散的日志不利于我们快速查阅日志定位问题,我们可以借助ELK来收集各个微服务系统的日志并集中展示。

ELK即Elasticsearch、Logstash和Kibana首字母缩写。Elasticsearch用于存储日志信息,Logstash用于收集日志,Kibana用于图形化展示。

  • 第一步:参考Elasticsearch的官网文档,Elasticsearch默认使用mmapfs目录来存储索引,使用默认设置可能导致内存不足,我们需要调整max_map_count,该参数控制了限制一个进程可以拥有的VMA(虚拟内存区域)的数量。输入命令sysctl -w vm.max_map_count=262144设置,然后输入sysctl -a|grep vm.max_map_count查看是否设置成功

设置vm.max_map_count

  • 第二步:创建挂载目录
    • 1.创建Elasticsearch数据挂载路径mkdir -p /azuma/elasticsearch/data
    • 2.对该路径授予777权限chmod 777 /azuma/elasticsearch/data
    • 3.创建Elasticsearch插件挂载路径mkdir -p /azuma/elasticsearch/plugins
    • 4.创建Logstash配置文件存储路径mkdir -p /azuma/logstash
    • 5.创建ELK Docker Compose文件存储路径mkdir -p /azuma/elk

创建挂载目录

  • 第三步:创建logstash-azuma.conf配置文件vim /azuma/logstash/logstash-azuma.conf,文件内容如下:
input {
  tcp {
    mode => "server"
    host => "0.0.0.0"
    port => 4560
    codec => json_lines
  }
}
output {
  elasticsearch {
    hosts => "es:9200"
    index => "azuma-logstash-%{+YYYY.MM.dd}"
  }
}
  • 第四步: 创建docker-compose.yml文件vim /azuma/elk/docker-compose.yml,文件内容如下:
version: '3'
services:
  elasticsearch:
    image: elasticsearch:6.4.1
    container_name: elasticsearch
    environment:
      - "cluster.name=elasticsearch" #集群名称为elasticsearch
      - "discovery.type=single-node" #单节点启动
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m" #jvm内存分配为512MB
    volumes:
      - /azuma/elasticsearch/plugins:/usr/share/elasticsearch/plugins
      - /azuma/elasticsearch/data:/usr/share/elasticsearch/data
    ports:
      - 9200:9200
  kibana:
    image: kibana:6.4.1
    container_name: kibana
    links:
      - elasticsearch:es #配置elasticsearch域名为es
    depends_on:
      - elasticsearch
    environment:
      - "elasticsearch.hosts=http://es:9200" #因为上面配置了域名,所以这里可以简写为http://es:9200
    ports:
      - 5601:5601
  logstash:
    image: logstash:6.4.1
    container_name: logstash
    volumes:
      - /azuma/logstash/logstash-azuma.conf:/usr/share/logstash/pipeline/logstash.conf
    depends_on:
      - elasticsearch
    links:
      - elasticsearch:es
    ports:
      - 4560:4560
  • 第五步:切换到/azuma/elk目录下,使用该命令启动docker-compose up -d,然后漫长的等待🐢....安装完后到根目录输入docker ps -a查看容器状态

Docker拉取ELK镜像

  • 第六步:输入docker update --restart=always elasticsearch logstash kibana,设置ELK容器开机自启
  • 第七步:进入到Logstash容器中安装json_lines插件,先进入到Logstash容器docker exec -it logstash /bin/bash,再切换到bin目录cd /bin/,然后输入logstash-plugin install logstash-codec-json_lines安装插件,安装完成后退出exit

进入Logstash容器安装json_lines插件

  • 第八步:浏览器输入虚拟机IP加5601端口,可以看到KIbana控制台,和框架的集成后续再讲;截止此步ELK中间件的环境就搭好了🎉

enjoy


标题:Azuma-Cloud搭建笔记 其二
作者:AzumaTokaku
地址:https://www.azumatokaku.cc/articles/2021/10/18/1634554046564.html

    评论
    0 评论
avatar

取消