Linux运维指南含Nacos、Rabbit MQ、Redis
一、Rabbit MQ安装指南
1.1安裝Erlang语言
因为Rabbit MQ是基于Erlang语言开发的,运行环境必须依赖于Erlang,无论是Windows机器还是Linux机器,安装Rabbit MQ之前第一步要安装Erlang.
1.1.1安装Erlang所需依赖
进入Linux服务器,创建/u01目录:mkdir /u01
进入u01目录:cd /u01
yum安装依赖:
yum -y install gcc glibc-devel make ncurses-devel openssl-devel xmltoperl wget gtk2-devel binutils-devel
如图
如下表示安装成功:
1.1.2下载Erlang
下载方式一:Linux敲命令:
wget
下载方式二:通过Widows机器浏览器访问下载到本地,再上传到Linux及其对应目录下,如/u01目录下。
在/u01目录下:
解压软件o:
tar -zxvf o
解压完成:
1.1.3安装Erlang
(1) 移位置
mv o /usr/local/
(2) 切换目录
cd /usr/local/o/
(3) 创建即将安装的目录
mkdir ../erlang
(4) 配置安装路径
./configure --prefix=/usr/local/erlang
(5) 安装
make install
耗时比较久
如下
安装成功
查看一下是否安装成功
ll /usr/local/erlang/bin
正常
(6)环境变量
添加环境变量:
echo 'export PATH=$PATH:/usr/local/erlang/bin' >> /etc/profile
刷新环境变量
source /etc/profile
(7)测试:erl
如图已成功安装Erlang
在里面输入halt().命令退出来(那个点号别忘记)
1.2安装RabbitMQ
1.2.1下载Rabbit MQ
进入/u01目录:cd /u01
下载命令:
wget
也可以在电脑浏览器直接下载
上传到/u01目录下:
由于是格式的所以需要用到xz,没有的话就先安装:
yum install -y xz
(1)第一次解压
/bin/xz -d rabbitmq-server-generic-unix-3.7.15.
(2)第二次解压
tar -xvf rabbi
完成:
1.2.2移走MQ
mv rabbi /usr/local/
改名:mv /usr/local rabbitmq
1.2.3配置环境变量
echo 'export PATH=$PATH:/u01/rabbitmq/sbin' >> /etc/profile
刷新环境变量
source /etc/profile
创建配置目录[本文并未使用单独配置文件,可能多余]
mkdir /etc/rabbitmq
1.2.4启动MQ
启动:
rabbitmq-server -detached
查看是否启动成功:ps -ef|grep rabbitmq
表示启动成功
停止RMQ命令:rabbitmqctl stop
查看RMQ状态:rabbitmqctl status
1.3开启RabbitMQ Web端管理
1.3.1开启Web插件
命令:rabbitmq-plugins enable rabbitmq_management
防火墙请关掉,使用云服务器的请放开5672、15672这2个端口
关闭防火墙步骤:
systemctl stop #停止firewall
systemctl disable #禁止firewall开机启动
firewall-cmd --state #查看默认防火墙状态(关闭后显示notrunning,开启后显示running)
防火墙关闭或端口放开后,浏览器访问:http://ip:15672
安装成功,默认账号:guest /guest
1.3.2用户管理
(1)查看所有用户
rabbitmqctl list_users
(2) 添加一个用户
rabbitmqctl add_user opendi opendi
(3) 配置权限
rabbitmqctl set_permissions -p "/" opendi ".*" ".*" ".*"
(4) 查看用户权限
rabbitmqctl list_user_permissions opendi
(5) 设置tag
rabbitmqctl set_user_tags opendi administrator
(6) 删除用户(安全起见,删除默认用户)
rabbitmqctl delete_user guest
(7) 重启Rabbit MQ
先:rabbitmqctl stop
再:rabbitmq-server -detached
就可以使用opendi/opendi登录网页端了
二、Spring Boot整合Rabbit MQ消息中转推送中心
2.1MQ消息中心适用场景
Rabbit MQ的适用范围有:(1)消息中转推送中心(2)消息总线(3)分布式事务,最终数据一致性(4)实时数据同步
消息中心示例架构图:
不同业务系统,不同的系统代码,例如:校园安防系统,有人脸识别考勤打卡一体机、电子班牌、宿舍管理等系统服务。各系统人脸识别或者考勤提醒微信、短信、语音、邮件消息推
送,就可以采用消息中心架构。
不同的业务代码,不需要知道调用的接口url,只需要向队列里面写数据。消息中心的消费者监听队列,同步发送数据,就可以完成微信、短信、语音、邮件的发送。
2.1.1消息中心做的事情
消息中心,根据信息类别分为4类:
(1)短信消息
(2)微信模板消息
(3)语音消息
(4)邮件消息
•消息中心,对各类消息的模板进行入库存储,设置模板格式。
•消息中心对外暴露统一Queue队列入口。
•按大类信息类别区分为不同类型的消息处理。
•然后各自类型里面的消息再按照不同的业务类型,使用不同的模板消息匹配,组成发送的消息数据。
•然后调用各信息类别的统一接口,发送短信、微信、语音、邮件消息。
•消息中心建立日志表,存储发送的消息,并对完成功发送的消息建立重试补偿机制。
•消息中心界面可视化配置,查看消息日志等。
2.2Rabbit MQ基础知识
2.2.1队列、生产者、消费者
队列是RabbitMQ的内部对象,用于存储消息。生产者(下图中的P)生产消息并投递到队列中,消费者(下图中的C)可以从队列中获取消息并消费。
多个消费者可以订阅同一个队列,这时队列中的消息会被平均分摊给多个消费者进行处理,而不是每个消费者都收到所有的消息并处理。
2.2.2发布订阅模式
Publish/Subscribe,订阅发布模式,每个通道都会收到消息
2.2.3Exchange、Binding交换机与绑定
上图是生产者将消息发送给所有消费者。实际场景是,生产者将消息发送到Exchange(交换机,下图中的X),再通过Binding将Exchange与Queue关联起来。
(1)Direct exchange,一个交换机和多个Queue绑定,会根据绑定的不同路由键,发送到不同的Queue中
Exchange、Binding交换机与绑定
Topic exchange,按模式匹配路由键。模式符号 "#" 表示一个或多个单词,"*" 仅匹配一个单词。
2.3Rabbit MQ几种工作模式
2.3.1RMQ交换机Exchange绑定方式
Fanout:广播模式,把所有发送到该Exchange的消息投递到所有与它绑定的队列中。
特点:与Exchange绑定的所有队列都能收到消息
direct:直连模式,把消息投递到那些binding key与routing key完全匹配的队列中。
特点:队列与交换机绑定的路由键必须与约定的路由键完全匹配,该队列才能接收到消息
topic:匹配模式,将消息路由到binding key与routing key模式匹配的队列中。
特点:绑定的路由键规则可以为模糊匹配形式,*.abc.*。模糊匹配符合该格式的路由键,
例如123.abc.eff,aet.abc.278,都可以接收该*.abc.*路由消息。
注意:模糊匹配*.abc.*并非广播,如果被其中的某一个符合规则的队列消费了,其他环境
和队列就不会受到消息
2.3.2RMQ工作模式的选择
•当遇到要求所有客户端都需要接收到消息的场景时,可以考虑用fanout广播模式,广播给所有消费者
•当遇到要求符合特定条件的客户端队列接收消息时,使用Topic模式,按条件匹配。渐进递增式开发可以考虑用Topic模式
2.3.3RMQ消费确认模式
RMQ消息具有手工确认模式和自动确认模式,一般采用自动确认模式。RabbitMQ可以在消息从MQ服务器发送
出(写入TCP Socket)后立刻就将其当做已成功处理,或者当收到来自消费者显示的(手工的)的确认后。
(1)手动确认模式
ba(deliveryTag,multiple) 用来确认成功消息(positive acknowledgements)
ba(deliveryTag,requeue,multiple) 用来确认失败的消息(negative acknowledgements)
ba(deliveryTa,requeue) 用来确认失败的消息
确认成功简单的令rabbitMQ将消息记录为已发送并丢弃。使用ba
方法令RabbitMQ记录消息为发送失败,但仍然需要丢弃。
(2)自动确认模式
在自动确认模式(automatic acknowledgement)中,消息在发出去后就被认为是已成功处理。
2.4示例程序
2.4.1Spring Boot项目引入坐标
引入以下坐标加入MQ:
<dependency>
<groupId>org.;/groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
<version>1.5.2.RELEASE</version>
</dependency>
2.4.2生产者
公共发送代码:
直连交换机
Topic交换机
广播Fanout交换机
2.4.3消费者
消费者绑定队列
监听队列
2.4.4测试
Fanout广播
消费者所有队列都收到消息
Topic路由模糊匹配
Direct直连
三、 linux根目录满了,怎样快速查看是哪个文件占用空间大
3.1查看Linux磁盘挂载占用情况
df -h
3.2查看具体目录文件占用大小
查看根目录下占用:cd /
du -sh *
查看某个目录比如/u01下目录占用
cd /u01
du -sh *
四、Nacos安装及启动
下载Naco
(提取码:ywxp)
将naco上传到Linux系统/u01目录下,解压:cd /u01
tar -zxvf naco
然后进入Nacos:/u01/nacos/bin,
首先安装dos2unix命令:yum install dos2unix
格式化dos2unix要转译\: dos2unix
dos2unix
启动命令:nohup sh -m standalone
访问地址:http://ip:8848/nacos
Nacos访问账号:nacos/nacos
查看是否启动成功:ps -ef|grep nacos
五、Nacos环境隔离
5.1Namespace
Nacos引入了命名空间(Namespace)的概念来进行多环境配置和服务的管理及隔离。
Namespace也是官方推荐的多环境支持方案。
5.2如何进行配置和服务的管理、隔离
当我们的服务达到一定的数量,集中式的管理许多服务会十分不便,
那我们可以将这些具有相同特征或属性的服务进行分组管理,服务对应的配置也进行分组隔离。
这里的分组就是Namespace的概念,将服务和配置纳入相同的Namespace进行管理,
不同Namespace下的服务和配置之间就隔离开来。
5.3创建和获取NamespaceID
NamespaceId值是在配置文件配置时必须要填入的配置项,所以需要我们先创建Namespace和Id,步骤如下:
(1)nacos 的控制台左边功能栏看到有一个命名空间的功能,点击就可以看到新建命名空间 的按钮
(2)新建成功后,可以在命名空间列表中查看到你所创建的Namespace和他生成的ID值
(3)创建完成之后,创建的DEV、TEST
(4)代码中根据namespaceid分组不同的命名空间,相应的配置和环境也是各自namespace的环境
六、Nacos作为配置中心
6.1自定义group
在同一个group下,配置文件名不能重复,所以当需要创建文件名称相同的两个配置文件时,将两个配置文件创建在不同的group下即可。当我们再同一个group下创建一个已有的配置文件时,nacos会将其视为配置文件的修改,而不是新建。
6.2已有的配置文件
我们在另一个group下再创建一个 naco
6.3修改客户端配置文件
修改boo
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
#
注:该配置必须放在 boo 文件中
启动客户端你,访问http://localhost:8080/test
就可以看到不同的配置了。
七、环境切换打包
7.1整体切换环境
整体切换使用dev环境:
java -jar a --
整体切换使用test环境:
java -jar a --
整体切换使用prod环境:
java -jar a --
整体切换使用uat环境:
java -jar a --
7.2Maven打不同环境的包
打包命令详解test环境
mvn clean install -Ptest -DskipTests=TRUE
打包命令详解dev环境
mvn clean install -Pdev -DskipTests=TRUE
打包命令详解prod环境
mvn clean install -Pprod -DskipTests=TRUE
打包命令详解uat环境
mvn clean install -Puat -DskipTests=TRUE
八、宝塔Linux工具
宝塔Linux安装:https://www.bt.cn
宝塔能够自动安装:MySQL、Nginx
实现文件上传工具
九、Redis
安装之后设置Redis配置redis.conf文件:host 0.0.0.0
daemonize yes
查看Redis是否启动:ps -ef|grep redis
客户端连接Redis:redis-cli
切换数据库:select 0
select 1
select 2
清空当前的Redis库:flushdb
清空所有Redis库:flushall
9.1Redis使用实例
可参考我发过的文章:springboot集成springsession利用redis来实现session共享