Linux初学一些环境搭建、相关流程知识点和命令

本文详细介绍了Linux命令的基础操作,如文件系统管理、网络配置、权限控制,以及微服务生态中的关键技术如Docker、Nacos、Sentinel、SpringCloud集成、RabbitMQ消息队列和分布式事务管理。涵盖了从环境准备到部署项目的全过程。
摘要由CSDN通过智能技术生成

微服务生态全景图

Linux命令

cd /        进入根目录

pwd       查看当前所在目录

cd          文件夹 进入文件夹

cd ..       返回上一层

ls           显示当前目录的所有文件

mkdir     文件夹 创建文件夹

touch     文件 创建文件

rm -rf     文件 删除文件或文件夹

文件编辑

vi xx.txt           编辑文件

   输入i            只读状态->编辑状态

   按esc           编辑状态->只读状态

只读状态下:

    :wq             保存并退出

    :q!              不保存退出

cat xx.txt        查看文件

cp xx.txt xx.txt.bak         备份

准备工作

首先,你要安装VMware、xshell和xftp等工具才能进行下面的操作,具体怎么安装网上很多,对症下药。

  静态文件配置

vi /etc/sysconfig/network-scripts/ifcfg-ens33 先进入配置文件里面,记得先备份

然后再虚拟网络编辑器中查看

修改

BOOTPROTO="static"

ONBOOT="yes"

增加

IPADDR=192.168..198 NETMASK=255.255.255.0 GATEWAY=192.168.1.1 DNS1=8.8.8.8 DNS2=221.7.128.68 DNS3=221.7.136.68

reboot    重启服务器

poweroff      关机

权限

cd home/ 查看有几个用户(用户在home文件夹下)

su 用户名 切换到某个用户==========》高向低,不需要密码,低向高,需要密码

普通用户无法操作root创建的文件(只读),只能root给赋予权限

在进入到文件夹后

输入 ls -al 可以查看文件夹内 文件的所有信息,包括权限===========

权限 三位二进制形式 777表示任何用户都有对文件的任何权限

卡头 字母为d 表示是一个文件夹

chmod 777 b.txt   赋权命令

ll                          查看文件夹文件全部信息

部署项目

[Linux环境(CentOS7)下使用yum安装JDK1.8_linuxyum安装jdk1.8-CSDN博客]:

利用 yum安装 jdk环境

yum install -y java-1.8.0-openjdk-devel.x86_64

安装Tomcat 这个图标也就是关联着xftp

找到apache-tomcat-8.5.75.tar.gz然后把文件拖拽进去(注意后缀)

从虚拟机下载文件 就是从右边往左边拖

首先要对Tomcat的压缩包解压缩

tar -zxvf apache-tomcat-8.5.75.tar.gz 对压缩包解压

重命名

mv apache-tomcat-8.5.75.tar.gz tomcat8.5

接下来 要把项目部署到 Tomcat文件的webapps文件夹下

继续利用xftp 来拖进去

接下来启动tomcat

进入到Tomcat文件夹的bin目录下

sh结尾的是可执行程序 然后startup.sh是启动 shutdown.sh是关闭服务

然后启动启动程序

sh startup.sh

这时候还不能 通过ip+路径 访问项目 因为 防火墙会阻止

此时需要关闭防火墙

systemctl stop firewalld

此时就可以访问项目了,成功的将项目部署在Linux上

Docker安装

Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。

也就是相当于一个管理工具,类似于git,可以从服务器上拉取各种环境的压缩包进行下载,方便多个虚拟机的环境部署

  • 镜像 ---->windows中的安装包 容器:等同于windows的软件

remove docker 卸载docker

sudo xxx xxx 可以把普通用户的权限等级提升至管理员级别 进行一些操作就不用进行授权

  • 首先先安装docker需要的yum 环境

    yum install -y yum-utils device-mapper-persistent-data lvm2

    • 配置软件下载源头为国内的

      yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

      • 更新yum缓存 相当于重启

        yum makecache fast

        • 安装docker

          yum -y install docker-ce

          • 启动docker

            systemctl start docker

            • 查看docker中下载了哪些镜像(安装包)

              docker images

              docker安装MySQL

              安装最新的MySQL    docker pull mysql

              安装MySQL8            docker pull mysql:8.0.16

            安装并运行

            #创建数据存储目录

            mkdir -p /data/docker_volumn/mysql/conf

            mkdir -p /data/docker_volumn/mysql/data

            mkdir -p /data/docker_volumn/mysql/mysql-files

            #设置忽略大小写

            docker run -di --name=mysql \

            -v /usr/local/src/mysql/data:/var/lib/mysql \

            -v /usr/local/src/mysql/conf/my.cnf:/etc/mysql/my.cnf \

            --privileged=true \

            -p 3306:3306 \

            -e MYSQL_ROOT_PASSWORD=123456 mysql \

            --lower_case_table_names=1

          • 参数说明

          • run run 是运行一个容器

          • -d  表示后台运行

          • -p  表示容器内部端口和服务器端口映射关联

          • –privileged=true 设值MySQL 的root用户权限, 否则外部不能使用root用户登陆。

          • 忽略大小写:lower-case-table-names=2

          • -v /docker/mysql/conf/my.cnf:/etc/my.cnf 将服务器中的my.cnf配置映射到docker中的/docker/mysql/conf/my.cnf配置

          • -v /docker/mysql/data:/var/lib/mysql  同上,映射数据库的数据目录, 避免以后docker删除重新运行MySQL容器时数据丢失

          • -e MYSQL_ROOT_PASSWORD=_Admin123   设置MySQL数据库root用户的密码

          • –name mysql     设值容器名称为mysql mysql:8.0.16  表示从docker镜像mysql:8.0.16中启动一个容器

          • –character-set-server=utf8mb4 --collation-server=utf8mb4_general_ci 设值数据库默认编码

            • 查看docker中正在运行的容器

              docker ps

              • 暂停容器

                docker stop 加上CONTAINER ID

                • 查看docker上左右服务(包括未运行的)

                  docker ps -a

                  • 启动容器

                    docker start 加上CONTAINER ID

                    • 重启容器

                      docker restart 加上CONTAINER ID

                      docker 安装redis

                      • 先下载镜像(安装包)

                        docker pull redis:latest

                    • 启动容器

                      docker run -d --privileged=true -p 6379:6379 --restart always -v /opt/redis/conf/redis.conf:/etc/redis/redis.conf -v /opt/redis/data:/data --name redis-test redis:latest redis-server /etc/redis/redis.conf --appendonly yes --requirepass 123456

                      • 删除安装包

                        docker rmi 加上CONTAINER ID

                        • 删除软件(需要先暂停运行的容器服务)

                           docker rm 加上CONTAINER ID

                          docker rmi + 服务全名称:版本号

服务治理中心nacos环境搭建

先将nacos文件拉取到虚拟机的usr/local下

然后进入到nacos的bin目录下

cd usr/local/nacos/bin

然后启动服务

sh startup.sh在后面追加-m standalone为单机模式 不加为集群模式

然后关闭防火墙

systemctl stop firewalld

然后通过浏览器访问192.168.91.188:8848/nacos

nacos默认端口为8848,然后通过账号和密码都是nacos登录进去

微服务模块注册nacos服务中心

相关开源网址

[Nacos discovery · alibaba/spring-cloud-alibaba Wiki · GitHub]:

添加依赖

<!-- nacos服务客户端 -->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

配置yml文件

spring
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.91.188:8848

在启动类上添加注解

@EnableDiscoveryClient

然后在服务中心就可以看到相关信息

不同服务模块之间的调用

A(order)调用B(product)===A就是消费者,就要把配置加在A上

pox.xml

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

在启动类上加入注解

@EnableFeignClients

在消费者中新加一个feign的调用服务包,里面写调用服务接口

然后把被调用者controller层的你要用的方法以接口的形式写在调用服务里======

  • 一定注意不要漏了被调用者controller上面的统一路径

public interface ProductServiceFeign {
    @GetMapping("/product/hello")
    public Result getResult();
}

然后在调用接口上加注解

@FeignClient("shop-product")

后面的名字是注册在nacos上的服务名,也就是yml里面配置的名字

然后在消费者你要调用的地方先实例化调用对象

然后就可以使用被调用者的方法

@RestController
@RequestMapping("/orders")
public class HelloController {
​
    @Autowired
    private ProductServiceFeign productServiceFeign;
    @GetMapping("/hello")
    public Result getName() {
        Result result = productServiceFeign.getResult();
        return new Result(true,"你好啊",result.getData()+result.getMsg());
    }
}

这样就可以通过order的controller层方法也能调用到product模块的方法

模拟集群时ribbon负载均衡

此时要操作B---被调用者

首先先复制几份 服务运行

然后在弹窗中配置

-Dserver.port=8201 配置一个没有使用的端口号

然后在被调用者的controller层添加

@Value("${server.port}")
private String port;

在下方方法中打印一下port

 @GetMapping("/hello")
    public Result getResult(){
        return new Result(true,"我是product",port+"布偶仙女");
    }
}

然后重启该被调用者服务和新复制的服务

在窗口中测试

在访问同一个端口三次时,分别调用了三个不同的端口(8200、8201、8202),减轻了每台服务器高并发压力。

nacos统一设置所有服务器的配置文件

首先进入网站点击配置管理-配置列表,再点击添加

首先这里命名的shop-order要与服务名对应

其次dev要与等会的后缀一致,还有文件格式为yaml

接下来屏蔽application.yml的配置,新建一个bootstrap.yml

因为springboot会优先读bootstrap.yml的配置

把公共配置文件添加到nacos并发布

下面在服务调用者处添加依赖

<dependency>

  <groupId>com.alibaba.cloud</groupId>

   <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>

</dependency>

下面在bootstrap.yml中加入配置

spring:
  application:
    name: shop-order
  cloud:
    nacos:
      config:
        server-addr: 192.168.91.188:8848
        file-extension: yaml
  profiles:
    active: dev

对应的dev 和yaml还有shop-order与发布中一一对应

接下来重启所有服务,就能访问对应的页面,说明我们的配置文件统一配置在了nacos

动态的获取nacos服务中心配置文件

@RefreshScope // 动态的获取配置文件(配置在controller层)

nacos配置网关

先新建子模块shop-gateway

加入依赖

<!-- nacos服务客户端 -->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
​
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>

然后gateway依赖会与MVC的web依赖冲突

这时候就要把父web依赖去掉,然后配置到除了gateway的其他模块中

然后写配置文件

server:
  port: 8000
spring:
  application:
    name: shop-gateway
  devtools:
    restart:
      enabled: true
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.91.188:8848
    gateway:
      discovery:
        locator:
          enabled: true

最后在访问时要注意访问的URL

http://127.0.0.1:8000/shop-product/product/query/1

ip+网关端口号+服务名+controller层地址(+参数)

sentinel

配置

先拉取sentinel压缩包到Linux下

然后在该文件夹运行,输入命令

java -Dserver.port=8080 -Dcsp.sentinel.dashboard.server=localhost:8080 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard-1.8.1.jar

其中8080是你要配置的端口,一定要空闲的

导入依赖

<dependency>

  <groupId>com.alibaba.cloud</groupId>

    <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>

</dependency>

配置yml

spring:
  sentinel:
    transport:
      port: 8719
      dashboard: 192.168.91.188:8080

打开sentinel对feign支持

<dependency>

    <groupId>org.springframework.cloud</groupId>

        <artifactId>spring-cloud-starter-openfeign</artifactId>

</dependency>

配置

feign:
  sentinel:
    enabled: true

重启项目

然后打开sentinel官网(你配置的端口)192.168.91.188:8080

账号密码都为sentinel

进入之后,现在外面多访问几次你配置服务中的controller方法

127.0.0.1:8000/shop-person/person/query/1

然后就会出现你的服务

限流

点击簇点链路,在点击流控,输入流控数,就可以实现流量管控

降级

首先在order中引入sentinel依赖

然后在yml中添加sentinel配置信息

然后写一个xxxFeugnFallback的降级类继承该服务的Feign接口的class(字节码)

并且编辑降级方案

然后在feign接口上配置fallback属性

然后再停止配置了降级的服务就能看到降级方案触发

seata分布式事务

API文档官网

[Apache Seata]:

TC (Transaction Coordinator) - 事务协调者

维护全局和分支事务的状态,驱动全局事务提交或回滚。

TM (Transaction Manager) - 事务管理器

定义全局事务的范围:开始全局事务、提交或回滚全局事务。

RM (Resource Manager) - 资源管理器

管理分支事务处理的资源,与TC交谈以注册分支事务和报告分支事务的状态,并驱动分支事务提交或回滚。

配置

附件中的文件

首先导入seata文件夹的表到名为seata的数据库下

  • seata数据库必须在Linux的数据库中

SQL文件在seata文件夹下的script/server/db下的mysql.sql

然后在自己业务的数据库中导入

seata\script\client\at\db文件架下的mysql.sql表

然后编辑conf下的registry.conf文件

有两处要改为自己的端口

然后保存

下面修改seata\script\config-center文件夹下的config.txt文件

地址以及账号密码

下面把seata文件夹拉到Linux的usr/local文件夹下

然后不要停止sentine新开个Linux窗口

进入seata\script\config-center\nacos文件夹下

运行sh nacos-config.sh

将seata相关配置上传到nacos服务器,这时在nacos服务端会有9页配置文件

下面进入seata文件夹的bin目录下

启动seata服务 sh seata-server.sh -h 192.168.91.188

然后出现这个就是启动成功了

在你要配置业务的每个模块都导入依赖

<dependency>

  <groupId>com.alibaba.cloud</groupId>

    <artifactId>spring-cloud-starter-alibaba-seata</artifactId>

</dependency>

在每个模块中加入配置

seata:
  tx-service-group: beijing
  config:
    type: nacos
    nacos:
      server-addr: 192.168.91.188:8848
      group: "SEATA_GROUP"
      namespace: ""
      username: "nacos"
      password: "nacos"
  registry:
    type: nacos
    nacos:
      application: seata-server
      server-addr: 192.168.91.188:8848
      group: "SEATA_GROUP"
      namespace: ""
      username: "nacos"
      password: "nacos" 

注意两个端口地址

还有 tx-service-group: beijing要与上方对应

然后要在你要进行分布式管理的事务的ServiceImpl层的方法上(也就是业务的总调用接口的实现类)加入注解

@GlobalTransactional

就可以对该业务进行分布式管理

rabbitMQ 消息队列

首先下载镜像

docker pull rabbitmq:3.8.2-management

然后安装容器

docker run -d --hostname rabbitMQ --name my-rabbitMQ -p 15672:15672 -p 5672:5672 rabbitmq:3.8.2-management

关闭防火墙

systemctl stop firewalld

访问网址

自己虚拟机的IP:15672

在项目中应用

首先搞清消费者与生产者

生产者发送消息到消息队列,消费者立即拿出来

也就是生产者把消息推送给交换机,交换机储存在消息队列,然后消费者取消息

导入依赖

<!-- rabbitmq -->

  <dependency> <groupId>org.springframework.boot</groupId>

    <artifactId>spring-boot-starter-amqp</artifactId>

</dependency>

添加配置文件

spring:
  rabbitmq:
    host: 192.168.91.188
    port: 5672
    username: guest
    password: guest

在controller层生产者推送消息到消息队列

直连交换机(点对点)

@Autowired
private RabbitTemplate rabbitTemplate;
rabbitTemplate.convertAndSend("aaa","hello mq!");

前面为消息队列名称(这是在一对一情况下)后面为消息

消费者在service层接收消息=-===订阅消息队列

@Component
@RabbitListener(queues = "aaa")
public class ConsumerService {
​
    @RabbitHandler
    public void getMsg(String msg){
        System.out.println("接收到的消息:"+msg);
    }
}

广播交换机(点对多)

先在网站新建一个广播交换机

下面进入新创的广播交换机

关联消息队列

消息发送

rabbitTemplate.convertAndSend("j2302","","hello java!");

第二个参数为匹配规则

@RabbitListener(queues = "aaa")
@RabbitListener(queues = "bbb")
@RabbitListener(queues = "ccc")

然后分别用ABC接收

主题交换机(匹配规则)

首先删除上面的广播交换机

因为消息队列只能绑定一个交换机

创建一个主题交换机

然后 在交换机里添加 消息队列和对应的规则

主要以 . # 为主 #可以认为是通配符

然后进行测试

然后结果为

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值