layout: post
title: “中间件服务部署(单节点)-二进制或源码编译”
description: “分享”
tag: 其他
1、Nginx
1. 前置条件
安装Nginx之前,需要检查系统的基础环境,以确定该环境是否可用于安装Nginx。
建议生产环境下日志文件路径大小不低于10g
1) ANSI-C编译器及编译环境
系统必须有ANSI-C编译器,推荐使用GCC,如果没有GCC,那么确保使用的编译器符合ANSI标准,同时PATH中必须包含指向基本编译工具(比如make)的路径。
可使用gcc -v命令来确认当前系统已具有GCC编译器。
2)系统时间
由于HTTP协议的元素都会用到时间,所以有必要了解和确认下当前系统所使用的时间同步机制。在基于网络时间协议(NTP)的系统中,一般是用ntpdate或xntpd来同步时间的。
3)版本区别以及下载路径
常用版本分为四大阵营
- Nginx开源版
http://nginx.org/ - Nginx plus 商业版
https://www.nginx.com - Openresty
http://openresty.org/cn/ - Tengine
http://tengine.taobao.org
nginx官方介质下载:http://nginx.org/en/download.html
nginx第三方模块下载:https://www.nginx.com/resources/wiki/modules/
4)环境确认
1> 操作系统版本以及操作系统位数
lsb_release -auname -acat /etc/redhat-releasecat /proc/versiongetconf LONG_BIT
2> 检查CPU、物理内存、文件打开句柄数
cat /proc/cpuinfo| grep "processor"| wc -lfree -mulimit -n
3> 下载安装介质
获取pcre编译安装包,在http://www.pcre.org/上可以获取当前最新的版本
获取openssl编译安装包,在http://www.openssl.org/source/上可以获取当前最新的版本
获取zlib编译安装包,在http://www.zlib.net/上可以获取当前最新的版本
4> sudo配置
在需求端口于1~1024之间时,要通过sudo来启动停止nginx。生产环境中需要请系统或主机组老师帮忙配置sudo:
nginx ALL=(root) NOPASSWD: /opt/nginx/bin/nginx -s stopnginx ALL=(root) NOPASSWD: /opt/nginx/bin/nginxnginx ALL=(root) NOPASSWD: /opt/nginx/bin/nginx -s reload
2. 安装Nginx
系统环境检查确认无误后,准备好nginx相应版本的安装介质,便可以进入nginx安装环节。
1)环境介绍
| nginx版本 | 安装目录 |
|---|---|
| 1.21 | /opt/nginx |
2)安装gcc
gcc是linux下的编译器,可以编译 C,C++,Ada,Object C和Java等语言
查看gcc版本(如果安装了gcc):gcc -v
yum -y install gcc
3)安装pcre、pcre-devel
pcre是一个perl库,包括perl兼容的正则表达式库,nginx的http模块使用pcre来解析正则表达式,所以需要安装pcre库。
yum install -y pcre pcre-devel
编译安装prce时错误:预编译时存现错误(error: C++ preprocessor “/lib/cpp” fails sanity check),缺少依赖包:yum install glibc-headers
4)安装zlib
zlib库提供了很多种压缩和解压缩方式nginx使用zlib对http包的内容进行gzip,所以需要安装
yum install -y zlib zlib-devel
5)安装openssl
openssl是web安全通信的基石,没有openssl,可以说我们的信息都是在裸奔
yum install -y openssl openssl-devel
6)创建nginx用户
# 会自动创建nginx目录useradd nginx -d /opt/nginx -s /sbin/nologin
7)安装nginx
1> 创建src目录,并将需要的源码文件放入
下载地址:
cd /opt/srctar xf /opt/src/nginx-1.21.6.tar.gz -C /optcd /opt/nginx-1.21.6/
2> 预编译
./configure --prefix=/opt/nginx/ \--sbin-path=/opt/nginx/bin/nginx \--conf-path=/opt/nginx/conf/nginx.conf \--pid-path=/opt/nginx/nginx.pid \--with-http_ssl_module \--with-http_stub_status_module \--with-streamecho $?
—with-http_ssl_module: 提供SSL模块
—with-http_stub_status_module:提供监控模块,
—with-stream:提供TCP代理模块
3> 编译、安装
makemake install# 配置用户和用户组chown -R nginx:nginx /opt/nginx
4> 检查安装情况
/opt/nginx/bin/nginx -V
5> 配置环境变量
vim /etc/profile.d/my_env.sh# 添加如下内容export NGINX_HOME=/opt/nginxexport PATH=$PATH:${NGINX_HOME}/binsource /etc/profile
3. nginx基本命令介绍
nginx -h...选项:-?,-h:这有帮助吗-v:显示版本并退出-V:显示版本和配置选项,然后退出-t:测试配置并退出-T:测试配置,转储并退出-q:在配置测试期间抑制非错误消息-s信号:向主进程发送信号:停止、退出、重新打开、重新加载-p prefix:设置前缀路径(默认值:/opt/nginx/)-e文件名:设置错误日志文件(默认值:logs/error.log)-c文件名:设置配置文件(默认值:/opt/nginx/conf/nginx.conf)-g指令:从配置文件中设置全局指令
4. nginx启停
# 启动nginx# 快速停止nginx -s stop# 优雅关闭,停止前完成已经接收的连接请求nginx -s quit# 重新加载配置nginx -s reload
5. 添加防火墙规则
firewall-cmd --zone=public --add-port=80/tcp --permanentfirewall-cmd --reload# 查看开放的所有端口firewall-cmd --zone=public --list-ports
- RunTime: 当前正在生效的。(默认)
- Permanent: 永久生效的。
6. 浏览器访问:403 Forbidden
错误日志显示:
2022/05/05 15:56:56 [error] 65678#0: *1 open() "/opt/nginx//html/favicon.ico" failed (13: Permission denied), client: 192.168.6.1, server: localhost, request: "GET /favicon.ico HTTP/1.1", host: "192.168.6.21", referrer: "http://192.168.6.21/"
可以看到没有权限访问,这是由于配置了nginx的用户,但是,nginx的配置文件中并没有设置用户,需要修改配置文件/opt/nginx/conf/nginx.conf指定用户
vim /opt/nginx/conf/nginx.conf# 开头添加如下user nginx;
重新加载配置即可
nginx -s reload
2、Redis
1. 安装C 语言的编译环境
yum install centos-release-scl scl-utils-build -yyum install -y devtoolset-8-toolchain# 确保普通用也可以正常使用gcc命令(不要加sudo)scl enable devtoolset-8 bash
测试
gcc --version
小技巧:也可以没有环境,从其他环境编译好的redis二进制执行文件拷贝一份到目标服务
2. 下载redis-6.2.6.tar.gz放/opt目录,并解压
tar -xf /opt/src/redis-6.2.6.tar.gz -C /opt/cd redis-6.2.6
3. 编译
编译安装的每个步骤可以使用
_echo $?_命令进行查看上条命令是否执行成功!
make
如果没有准备好C语言编译环境,make 会报错—Jemalloc/jemalloc.h:没有那个文件
解决方案(清除编译文件):运行
**make distclean**再次执行make命令即可
4. 跳过make test 继续执行: make install
make install
5. 默认的安装目录/usr/local/bin
查看默认安装目录:redis-benchmark:性能测试工具,可以在自己本子运行,看看自己本子性能如何redis-check-aof:修复有问题的AOF文件,rdb和aof后面讲redis-check-dump:修复有问题的dump.rdb文件redis-sentinel:Redis集群使用redis-server:Redis服务器启动命令redis-cli:客户端,操作入口
6. 前台启动(不推荐)
redis-server
7. 后台启动(推荐)
0)创建用户
useradd redispasswd redis# 密码使用(Gsww_2022)
1)备份redis.conf
mkdir -p /home/redis/reids-confcp /opt/redis-6.2.6/redis.conf /home/redis/reids-conf/redis.confchown -R redis:redis /home/redissu - redis
2) 修改配置文件和系统参数
系统参数
# 配置最大映射数量,以便有足够的虚拟内存可用于mmapped文件echo "vm.overcommit_memory = 1" >> /etc/sysctl.conf#echo "net.core.somaxconn = 65535" /etc/sysctl.conf# 设置/proc/sys/net/core/somaxconn的值(redis默认需要511)echo 65535 > /proc/sys/net/core/somaxconn# 修改打开文件数vim /etc/security/limits.confredis soft nofile 65535redis hard nofile 65535redis soft noproc 65535redis hard noproc 65535# 使生效sysctl -p
配置文件
# bind 127.0.0.1 -::1bind 192.168.6.61 # 授权监听地址logfile "/home/redis/logs/redis.log" # 重定向日志记录protected-mode no # 关闭本机访问模式daemonize yes # 开启后台进程运行# 当 Redis 以守护进程方式运行时,Redis 默认会把 pid 写入 /var/run/redis.pid 文件,可以通过 pidfile 指定pidfile /home/redis/redis_6379.pid# 指定本地数据库存放目录dir /home/redis/data
创建相关目录
mkdir /home/redis/{data,run,logs}chown -R redis:redis /home/redis
3)启动:redis-server后加上配置文件位置
redis-server /home/redis/redis-conf/redis.conf ; tail -f /home/redis/logs/redis.log# 脚本时管理=============|vim /home/redis/start.sh#!/bin/bash -auxIP=`ip addr show ens33 | grep "inet " | cut -d '/' -f 1 | awk '{print $2}'`if [ $# -lt 1 ]thenecho "没有输入参数..."exit 1;ficase $1 in"start")echo " --------------- 启动 redis ---------------"redis-server /home/redis/redis-conf/redis.conf;;"stop")# ps -ef | grep redis | grep -v grep | awk {'print $2'} | xargs kill -9echo " --------------- 关闭 redis ---------------"redis-cli -h $IP -p 6379 shutdown;;*)echo "参数错误【start | stop】..."exit 1;;;esac# 脚本时管理=============|chmod +x /home/redis/start.sh
4) 客户端访问:redis-cli
redis-cli# 多个端口则需要指定端口redis-cli -p 6379redis-cli -h 192.168.6.61 -p 6379 -a Gsww_2022 shutdown
5)验证测试:
ping
返回结果为pong
6)关闭redis
redis-cli shutdown
也可以进入终端后再关闭
192.168.6.61:6379> shutdown
7)多实例关闭:指定端口关闭:
redis-cli -p 6379 shutdown
8)添加防火墙规则
firewall-cmd --zone=public --add-port=6379/tcp --permanentfirewall-cmd --reload# 查看开放的所有端口firewall-cmd --zone=public --list-ports
- RunTime: 当前正在生效的。(默认)
- Permanent: 永久生效的。
8. 使用systemd服务管理(生产环境不建议)
cat /usr/lib/systemd/system/redis.service[Unit]Description=Redis persistent key-value databaseAfter=network.targetAfter=network-online.targetWants=network-online.target[Service]ExecStart=/usr/local/bin/redis-server /home/redis/redis-conf/redis.conf --supervised systemdExecStop=//usr/local/bin/redis-shutdown#Type=notifyUser=redisGroup=redis#RuntimeDirectory=redis#RuntimeDirectoryMode=0755[Install]WantedBy=multi-user.target
普通账号使用
systemd服务命令需要root用户密码,这是由于权限由polkit进行管理,对应的是org.freedesktop.systemd1.policy这个配置文件下的manae-units动作;进入
/usr/share/polkit-1/actions/org.freedesktop.systemd1.policy,将对应org.freedesktop.systemd1.manage-units的defaults中的授权全部改为yes,然后执行systemctl restart polkit重启polkit好需要添加
<defaults><allow_any>yes</allow_any><allow_inactive>yes</allow_inactive><allow_active>yes</allow_active></defaults>
vim /etc/security/limits.conf* soft nofile 65535* hard nofile 65535* soft noproc 65535* hard noproc 65535
3、MySQL
1. 卸载自带数据库
# 查看是否安装过mysql和Mariadbrpm -qa | grep mysqlrpm -qa | grep mariadb# 如果存在安装卸载yum -y remove mariadb-*# 或者使用rpm卸载,需要指定完整的名称rpm -e --nodeps <上面查询到的完整名称>
2. 创建用户和用户组
groupadd mysqluseradd -g mysql mysql -s /sbin/nologin# 或者创建可登陆用户useradd -r -g mysql mysql
3. 目录创建以及解压文件
下载地址:https://dev.mysql.com/downloads/mysql/
tar xvf mysql-8.0.19-linux-glibc2.12-x86_64.tar.xz -C /usr/localmv mysql-8.0.19-linux-glibc2.12-x86_64/ mysql
4. 配置文件/etc/my.cnf
[client]# MySQL 客户端连接服务器端时使用的端口号,默认为 3306port = 3406socket = /tmp/mysql.sock[mysql]prompt="\u@db \R:\m:\s [\d]> "no-auto-rehash[mysqld]# MySQL 服务的唯一编号,每个 MySQL 服务的 id 需唯一。server-id = 3406100# mysqld 程序在启动后将在给定 UNIX/Linux 账户下执行。mysqld 必须从 root 账户启动才能在启动后切换到另一个账户下执行。mysqld_safe 脚本将默认使用 user=mysql 选项来启动 mysqld 程序。user = mysql# 服务端口号,默认为 3306port = 3406basedir = /usr/local/mysql# 指定 MySQL 数据存放的绝对路径;(生产环境下建议数据目录另放)datadir = /usr/local/mysql/data/socket = /tmp/mysql.sockpid-file = db.pidcharacter-set-server = utf8mb4skip_name_resolve = 1open_files_limit = 65535back_log = 1024max_connections = 512max_connect_errors = 1000000table_open_cache = 1024table_definition_cache = 1024table_open_cache_instances = 64thread_stack = 512Kexternal-locking = FALSEmax_allowed_packet = 32Msort_buffer_size = 4Mjoin_buffer_size = 4Mthread_cache_size = 768interactive_timeout = 600wait_timeout = 600tmp_table_size = 32Mmax_heap_table_size = 32Mslow_query_log = 1slow_query_log_file = /usr/local/mysql/data/slow.loglog-error = /usr/local/mysql/data/error.loglong_query_time = 0.1log-bin = /usr/local/mysql/data/mysql-binlogsync_binlog = 1binlog_cache_size = 4Mmax_binlog_cache_size = 1Gmax_binlog_size = 1Ggtid_mode = onenforce_gtid_consistency = 1log_slave_updatesbinlog_format = rowrelay_log_recovery = 1relay-log-purge = 1key_buffer_size = 32Mread_buffer_size = 8Mread_rnd_buffer_size = 4Mbulk_insert_buffer_size = 64M#myisam_sort_buffer_size = 128M#myisam_max_sort_file_size = 10G#myisam_repair_threads = 1lock_wait_timeout = 3600explicit_defaults_for_timestamp = 1innodb_thread_concurrency = 0innodb_sync_spin_loops = 100innodb_spin_wait_delay = 30master_info_repository = TABLErelay_log_info_repository = TABLEslave_parallel_type=LOGICAL_CLOCKtransaction_isolation = REPEATABLE-READ#innodb_additional_mem_pool_size = 16Minnodb_buffer_pool_size = 1024Minnodb_buffer_pool_instances = 8innodb_buffer_pool_load_at_startup = 1innodb_buffer_pool_dump_at_shutdown = 1innodb_data_file_path = ibdata1:1G:autoextendinnodb_flush_log_at_trx_commit = 1innodb_log_buffer_size = 32Minnodb_log_file_size = 2Ginnodb_log_files_in_group = 2#innodb_max_undo_log_size = 1G# 根据您的服务器IOPS能力适当调整# 一般配普通SSD盘的话,可以调整到 10000 - 20000# 配置高端PCIe SSD卡的话,则可以调整的更高,比如 50000 - 80000innodb_io_capacity = 4000innodb_io_capacity_max = 8000innodb_flush_neighbors = 0innodb_write_io_threads = 8innodb_read_io_threads = 8innodb_purge_threads = 4innodb_page_cleaners = 4innodb_open_files = 65535innodb_max_dirty_pages_pct = 50innodb_flush_method = O_DIRECTinnodb_lru_scan_depth = 4000innodb_checksum_algorithm = crc32#innodb_file_format = Barracuda#innodb_file_format_max = Barracudainnodb_lock_wait_timeout = 10innodb_rollback_on_timeout = 1innodb_print_all_deadlocks = 1innodb_file_per_table = 1innodb_online_alter_log_max_size = 4Ginnodb_stats_on_metadata = 0innodb_status_file = 1# 注意: 开启 innodb_status_output & innodb_status_output_locks 后, 可能会导致log-error文件增长较快innodb_status_output = 0innodb_status_output_locks = 0#performance_schemaperformance_schema = 1performance_schema_instrument = '%=on'#innodb monitorinnodb_monitor_enable="module_innodb"innodb_monitor_enable="module_server"innodb_monitor_enable="module_dml"innodb_monitor_enable="module_ddl"innodb_monitor_enable="module_trx"innodb_monitor_enable="module_os"innodb_monitor_enable="module_purge"innodb_monitor_enable="module_log"innodb_monitor_enable="module_lock"innodb_monitor_enable="module_buffer"innodb_monitor_enable="module_index"innodb_monitor_enable="module_ibuf_system"innodb_monitor_enable="module_buffer_page"innodb_monitor_enable="module_adaptive_hash"# Group Replication#server_id = 1003306#gtid_mode = ON#enforce_gtid_consistency = ON#master_info_repository = TABLE#relay_log_info_repository = TABLEbinlog_checksum = NONE#log_slave_updates = ON#log_bin = binlog#binlog_format= ROWtransaction_write_set_extraction = XXHASH64# 未来可能被弃用的变量,会出现告警信息,binlog_expire_logs_seconds用来代替# expire_logs_days = 7binlog_expire_logs_seconds = 7# 8版本弃用的变量# loose-group_replication_group_name = 'e842862c-9b12-11e8-8131-080027f1fd08'# internal_tmp_disk_storage_engine = InnoDB # 8版本不再支持,默认引擎# query_cache_size = 0 # 8版本不再支持这两个参数# query_cache_type = 0# loose-group_replication_start_on_boot = off# loose-group_replication_local_address = 'enmoedu:33066'# loose-group_replication_group_seeds ='enmoedu1:33067,enmoedu2:33068,enmoedu:33066'# loose-group_replication_bootstrap_group = off# loose-group_replication_single_primary_mode=off# loose-group_replication_enforce_update_everywhere_checks=true# 数据库全量备份[mysqldump]# 支持较大的数据库转储,导出非常巨大的表时需要此项 。quick# 服务所能处理的请求包的最大大小以及服务所能处理的最大的请求大小(当与大的BLOB字段一起工作时相当必要),每个连接独立的大小,大小动态增加max_allowed_packet = 32M
5. 创建目录并改变目录文件的拥有者
# 创建数据目录和配置文件目录mkdir -p /usr/local/mysql/datachown mysql:mysql -R /usr/local/mysql/
6. 初始化服务
cd /usr/local/mysql/bin./mysqld --defaults-file=/etc/my.cnf --initialize --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --user=mysql
记住日志中的临时密码或者使用命令进行查看:
grep -i "temporary password" /usr/local/mysql/data/error.log
7. 添加到服务管理并设置自启动
# 使用systemd来管理mysqlcp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld# 添加mysql到服务chkconfig --add mysqld# 设置开机自启动chkconfig mysqld on
8. 使用systemd服务启停mysql
# 设置mysql环境变量或者将mysqld启动脚本软连接到/usr/local/bin# 设置环境变量sudo vim /etc/profile.d/my_env.shexport MYSQL_HOME=/usr/local/mysqlexport PATH=$PATH:${MYSQL_HOME}/binsource /etc/profile# 启动mysql服务systemctl start mysqld# 查看mysql服务状态systemctl status mysqld# 停止服务systemctl stop mysqld
9. 安全启动数据库并修改密码
# 安全启动./mysqld_safe --defaults-file=/etc/my.cnf &mysql -uroot -p# 修改root用户密码(Gsww_2022)alter user 'root'@'localhost' identified by '密码';flush privileges;# 修改root用户权限(用于其他服务器访问 - 8版本之前好像是这样)grant all privileges on *.* to root@'%' identified by '密码';flush privileges;# 关闭数据库./mysqladmin shutdown -uroot -p'password'
8.0之后授权
mysql -uroot -puse mysql;# 查看user表中的数据(8版本密码字段已修改为authentication_string)select Host, User,authentication_string from user;# 修改user表中的Host:(可能会报错误:ERROR 1062 (23000): Duplicate entry '%-root' for key 'PRIMARY',查看如果修改可忽略)update user set Host='%' where User='root';# 刷新flush privileges;# 再次查看select Host, User,authentication_string from user;
10. 添加防火前策略
firewall-cmd --zone=public --add-port=3406/tcp --permanentfirewall-cmd --reload# 查看开放的所有端口firewall-cmd --zone=public --list-ports
4、RabbitMQ
官网地址 https://www.rabbitmq.com/download.html
1. 安装rabbitmq依赖erlang环境
erl和rabbitmq版本对应关系:https://www.rabbitmq.com/which-erlang.html
版本不对应导致无法启动:
[root@hadoop61 rabbitmq]# /opt/rabbitmq/sbin/rabbitmq-server{"init terminating in do_boot",{undef,[{rabbit,boot,[],[]},{init,start_em,1,[]},{init,do_boot,3,[]}]}}init terminating in do_boot ({undef,[{rabbit,boot,[],[]},{init,start_em,1,[]},{init,do_boot,3,[]}]})Crash dump is being written to: erl_crash.dump...done
1)yum方式
配置阿里云镜像加速
# net工具箱yum install net-tools -y# 启动EPEL源sudo yum install epel-release -y# 下载 erlang 安装包wget https://packages.erlang-solutions.com/erlang-solutions-2.0-1.noarch.rpm# 解压rpm -Uvh erlang-solutions-2.0-1.noarch.rpm# 安装sudo yum install erlang -yyum clean allerl -version
yum安装erlang很慢,修改
/etc/yum.conf,打开本地缓存keepcache=1(默认为0)
2)二进制方式
下载地址:http://erlang.org/download/otp_src_25.0.tar.gz
下载的时候注意版本对应关系:https://www.rabbitmq.com/which-erlang.html
1> 安装perl,和安装GCC等模块
yum -y install perl-devel.x86_64yum -y install make gcc gcc-c++ kernel-devel m4 ncurses-devel openssl-devel
2> 安装erlang
tar xf /opt/src/otp_src_25.0.tar.gz -C /opt/# 创建erlang目录mkdir /usr/local/erlangcd /opt/otp_src_25.0# 预编译./configure --prefix=/usr/local/erlang# 编译和编译安装make && make install# 添加环境变量vim /etc/profile.d/my_env.sh# erlangexport ERLPATH=/usr/local/erlangexport PATH=$ERLPATH/bin:$PATHsource /etc/profile# 测试erl
2. 安装依赖 socat(可选)
在RabiitMQ安装过程中需要依赖socat插件,首先安装该插件
Socat 是 Linux 下的一个多功能的网络工具,名字来由是 「Socket CAT」。其功能与有瑞士军刀之称的 Netcat 类似,可以看做是 Netcat 的加强版。
1)yum方式
yum install -y socat
2)二进制方式
下载地址:http://www.dest-unreach.org/socat/download/
./configuremakemake install
3. 解压rabbitmq并修改配置文件
下载地址:https://www.rabbitmq.com/install-generic-unix.html
tar xf /opt/src/rabbitmq-server-generic-unix-3.10.0.tar.xz -C /opt/mv rabbitmq_server-3.10.0/ rabbitmq
1)添加配置文件:rabbitmq-env.conf
cat > /opt/rabbitmq/etc/rabbitmq/rabbitmq-env.conf << EOF# 定义节点名称RABBITMQ_NODENAME=rabbitmq01# 定义节点IPRABBITMQ_NODE_IP_ADDRESS=192.168.6.61# 定义 RabbitMQ 的对外通信端口号RABBITMQ_NODE_PORT=5672RABBITMQ_MNESIA_BASE=/opt/rabbitmq/dataRABBITMQ_LOG_BASE=/opt/rabbitmq/logsEOF
创建目录:
mkdir -p /opt/rabbitmq/{data,logs}
参数说明:
| 属性 | 描述 | 默认值 |
|---|---|---|
| RABBITMQ_NODENAME | rabbitmq节点名称,集群中要注意节点名称唯一 | linux 默认节点名为 rabbit@$hostname |
| RABBITMQ_NODE_IP_ADDRESS | 绑定的网络接口 | 默认为空字符串表示绑定本机所有的网络接口 |
| RABBITMQ_NODE_PORT | 端口 | 默认为5672 |
| RABBITMQ_MNESIA_BASE | mnesia所在路径 | $RABBITMQ_HOME/var/lib/rabbitmq/mnesia |
| RABBITMQ_LOG_BASE | 日志所在路径 | $RABBITMQ_HOME/var/log/rabbitmq |
2)添加配置文件:rabbitmq.config
配置文件的语法继承于erlang语言,有点类似json
cat > /opt/rabbitmq/etc/rabbitmq/rabbitmq.config <<EOF[{rabbit,[{tcp_listeners, [5672]},{dump_log_write_threshold, [1000]},{vm_memory_high_watermark, 0.5},{disk_free_limit, "200MB"},{hipe_compile,true}]}].EOF
注意:[]. 后面有一个点
参数说明
| Key | Documentation |
|---|---|
| tcp_listeners | 用于监听 AMQP连接的端口列表(无SSL). 可以包含整数 (即”监听所有接口”)或者元组如 {“127.0.0.1”, 5672} 用于监听一个或多个接口.Default: [5672] |
| dump_log_write_threshold | 更改mnesia的转储日志写入阈值 Default: [100];控制持久化的频率;mnesia在dump数据的时候,如果上一个worker进程dump没完成,就抛出过载警告。对此,dump_log_write_threshold的值表示mnesia经历过多少数据操作做一次持久化,dump_log_time_threshold的值表示mnesia多长时间做一次持久化。 |
| vm_memory_high_watermark | 流程控制触发的内存阀值.相看memory-based flow control 文档.Default: 0.4 意思为物理内存的40%。 40%的内存并不是内存的最大的限制,它是一个发布的节制,当达到40%时Erlang会做GC。 |
| disk_free_limit | RabbitMQ存储数据分区的可用磁盘空间限制.当可用空间值低于阀值时,流程控制将被触发.此值可根据RAM的总大小来相对设置 (如.{mem_relative, 1.0}).此值也可以设为整数(单位为bytes)或者使用数字单位(如.”50MB”).默认情况下,可用磁盘空间必须超过50MB.参考 Disk Alarms 文档.Default: 50000000 |
| hipe_compile | 将此选项设置为true,将会使用HiPE预编译部分RabbitMQ,Erlang的即时编译器.这可以增加服务器吞吐量,但会增加服务器的启动时间. |
3)启动测试
# 启动测试/opt/rabbitmq/sbin/rabbitmq-server start# 后台启动rabbitmq-server -detached# 停止使用rabbitmqctl stop
注意:出现
completed with,表示启动成功
查看cookie文件是否存在
注意:此文件必须存在
cookie文件中只保存了一行随机数,可以使用
cat命令进行查看默认的存储路径为
/var/lib/rabbitmq/.erlang.cookie或$HOME/.erlang.cookie,该文件是一个隐藏文件,需要使用ls -al命令查看。
- 如果我们使用解压缩方式安装部署的rabbitmq,那么这个文件会在$ {home}目录下,也就是
$home/.erlang.cookie。- 如果我们使用rpm等安装包方式进行安装的,那么这个文件会在/var/lib/rabbitmq目录下。
ls -a /home/rabbitmq/.erlang.cookie
4. 配置环境变量
echo 'export PATH=/opt/rabbitmq/sbin:$PATH' >> /etc/profile.d/my_env.shsource /etc/profile
5. 启动web管理界面
# 启动rabbitmq_management插件rabbitmq-plugins enable rabbitmq_management# 关闭rabbitmq_management插件rabbitmq-plugins disable rabbitmq_management
1)创建账号并授权访问
guest的默认账号受限,默认只能localhost 浏览器访问管理界面,否则最初是登不上去的。
# 创建账号和密码rabbitmqctl add_user admin Geray_2022# 设置用户角色rabbitmqctl set_user_tags admin administrator# 设置用户权限# 用户 user_admin 具有/vhost1 这个 virtual host 中所有资源的配置、写、读权限# 格式:set_permissions [-p <vhostpath>] <user> <conf> <write> <read># 给/这个vhost设置了admin权限rabbitmqctl set_permissions -p "/" admin ".*" ".*" ".*"# 当前用户和角色rabbitmqctl list_users
浏览器访问并使用新创建的用户进行登陆访问
6. 重置命令
# 关闭应用的命令rabbitmqctl stop_app# 清除的命令rabbitmqctl reset# 重新启动命令为rabbitmqctl start_app
7. 创建普通用户和启动脚本
1)自定义普通用户
# useradd -b /opt/rabbitmq rabbitmquseradd rabbitmqpasswd rabbitmq# (Gsww_2022)# 授权chown -R rabbitmq:rabbitmq /opt/rabbitmq
2)设置启动脚本
vim /home/rabbitmq/start.sh#!/bin/bash -auxIP=`ip addr show ens33 | grep "inet " | cut -d '/' -f 1 | awk '{print $2}'`if [ $# -lt 1 ]thenecho "没有输入参数..."exit 1;ficase $1 in"start")echo " --------------- 启动 rabbitmq ---------------"rabbitmq-server -detached;;"stop")# ps -ef | grep redis | grep -v grep | awk {'print $2'} | xargs kill -9echo " --------------- 关闭 rabbitmq ---------------"rabbitmqctl stop;;*)echo "参数错误【start | stop】..."exit 1;;;esac# 授可执行权限chmod +x /home/rabbitmq/start.sh
8. 添加防火墙策略
firewall-cmd --zone=public --add-port=5672/tcp --permanentfirewall-cmd --zone=public --add-port=15672/tcp --permanentfirewall-cmd --zone=public --add-port=25672/tcp --permanentfirewall-cmd --reload# 查看开放的所有端口firewall-cmd --zone=public --list-ports
端口说明:
15671:管理监听端口
15672:管理界面UI使用端口
5672,5671: AMQP 0-9-1 without and with TLSclient端通信口
25672: ( Erlang distribution) server间内部通信口
AMQP 是 Advanced Message Queuing Protocol 的缩写,一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,专为面向消息的中间件设计。基于此协议的客户端与消息中间件之间可以传递消息,并不受客户端/中间件不同产品、不同的开发语言等条件的限制。Erlang 中的实现有 RabbitMQ 等。
用于节点间和CLI工具通信(Erlang分发服务器端口),并从动态范围分配(默认情况下限制为单个端口,计算为AMQP端口+ 20000)。除非确实需要这些端口上的外部连接(例如,群集使用联合身份验证或在子网外部的计算机上使用CLI工具),否则这些端口不应公开。有关详细信息,请参见网络指南。
5、Elasticsearch
Elasticsearch 是一个分布式可扩展的实时搜索和分析引擎,一个建立在全文搜索引擎 Apache Lucene™ 基础上的搜索引擎.当然 Elasticsearch 并不仅仅是 Lucene 那么简单,它不仅包括了全文搜索功能,还可以进行以下工作:
分布式实时文件存储,并将每一个字段都编入索引,使其可以被搜索。
实时分析的分布式搜索引擎。
可以扩展到上百台服务器,处理PB级别的结构化或非结构化数据。
lucene:就是一个jar包,里面包含了封装好的各种建立倒排索引,以及进行搜索的代码,包括各种算法
1. 解压
下载地址:https://www.elastic.co/cn/downloads/past-releases#elasticsearch
https://www.elastic.co/cn/downloads/past-releases/elasticsearch-8-2-0
tar xf /opt/src/elasticsearch-8.2.0-linux-x86_64.tar.gz -C /opt/mv elasticsearch-8.2.0/ elasticsearch
2. 添加es用户并修改es服务权限
useradd espasswd es# Gsww_2022chown -R es:es /opt/elasticsearch
1)修改系统vm.max_map_count
es至少需要的内存权限为:262144,默认用户的内存权限为:65530
# 查看用户内存权限sysctl -a|grep vm.max_map_count# 设置用户内存权限vim /etc/sysctl.conf# 禁止内存与硬盘交换vm.swappiness=1# 设置虚拟内存大小,Elasticsearch使用了 NioFs(非阻塞文件系统)和 MMapFs(内存映射文件系统)。# 配置最大映射数量,以便有足够的虚拟内存可用于mmapped文件vm.max_map_count=262144# 是配置生效sysctl -p
2)修改打开文件数
默认打开文件描述符为4096,es至少需要65535
vim /etc/security/limits.conf# 追加一下内容(es是用户,也可以使用*代替所有用户)es soft nofile 65536es hard nofile 65536# 内存锁定交换* soft memlock unlimited* hard memlock unlimited# 重新登陆用户并查看[root@k8s-node1 ~]# su es[es@k8s-node1 elasticsearch]$ ulimit -acore file size (blocks, -c) 0data seg size (kbytes, -d) unlimitedscheduling priority (-e) 0file size (blocks, -f) unlimitedpending signals (-i) 31118max locked memory (kbytes, -l) 64max memory size (kbytes, -m) unlimitedopen files (-n) 65536pipe size (512 bytes, -p) 8POSIX message queues (bytes, -q) 819200real-time priority (-r) 0stack size (kbytes, -s) 8192cpu time (seconds, -t) unlimitedmax user processes (-u) 4096virtual memory (kbytes, -v) unlimitedfile locks (-x) unlimited[es@k8s-node1 root]$ ulimit -Sn65536[es@k8s-node1 root]$ ulimit -Hn65536[es@k8s-node1 root]$
ulimit -Hn: 是查看max number of open file descriptors的hard限制
ulimit -Sn: 是查看max number of open file descriptors的soft限制
3. 修改配置文件
1)关闭geoip数据库的更新
在/opt/elasticsearch/config/elasticsearch.yml中添加如下配置:
ingest.geoip.downloader.enabled: false
没有关闭,在启动时会存在以下错误信息:
[2022-05-07T14:52:09,893][ERROR][o.e.i.g.GeoIpDownloader ] [k8s-node1] exception during geoip databases update
java.net.SocketTimeoutException: Connect timed out
这是一个bug,没有关闭geoip数据库的更新导致启动过程出现的错误
2)禁用SSL安全协议
没有关闭ssl访问时会存在一下错误
[2022-05-07T15:01:20,068][WARN ][o.e.x.s.t.n.SecurityNetty4HttpServerTransport] [k8s-node1] http client did not trust this server’s certificate, closing connection Netty4HttpChannel{localAddress=/192.168.6.21:9200, remoteAddress=/192.168.6.1:11447}
这是由于es开启了ssl安全认证,修改配置文件关闭认证即可
xpack.security.http.ssl.enabled设置成false,ssl是针对9300集群通信的
xpack.security.http.ssl.enabled: false
证书配置
elasticsearch-certutil caelasticsearch-certutil cert --ca elastic-stack-ca.p12
生成的证书文件必须放到config目录下,否则启动报错,无法读取
3)关闭账号登陆认证(或者配置账号密码)
修改
xpack.security.enabled:为false,否则访问时会验证登陆或者配置账号密码进行访问(推荐)
xpack.security.enabled: false
4)配置账号密码(8版本一下)
为了保证服务安全性,建议配置账号密码的方式进行访问
# 配置账号密码前需要修改一下配置xpack.security.enabled: true# 默认basic不支持security,可以修改为trialxpack.license.self_generated.type: trialxpack.security.transport.ssl.enabled: false
8版本一下:我这里使用的8.2版本必须两个同时开启或同时关闭
basic类型时
xpack.security.enabled和xpack.security.transport.ssl.enabled,要么同时为true,要么同时为falsetrial类型时,可以只开启安全功能,而不启用传输层加密
启动服务
配置密码需要先启动服务
# 配置密码之前需要先启动服务/opt/elasticsearch/bin/elasticsearch -d# 查看是否启动成功netstat -tnlp | grep 9200tail -f /opt/elasticsearch/logs/elasticsearch.log
配置账号密码
执行设置用户名和密码的命令,这里需要为4个用户分别设置密码,elastic, kibana, logstash_system,beats_system
# 交互式配置密码(Gsww_2022)/opt/elasticsearch/bin/elasticsearch-setup-passwords interactive# 后期想要更改密码curl -XPOST -u elastic "localhost:9200/_security/user/elastic/_password" -H 'Content-Type: application/json' -d'{"password" : "abcd1234"}'# 添加账号(-u:需要添加的账号密码)curl -XGET -H 'Content-type: application/json' -u test:Test123654% 'http://192.168.6.22:9200/_cat/indices?pretty'# 添加到admin权限(-d:需要配置的用户密码)curl -XPOST -H 'Content-type: application/json' -u elastic:Gsww_2022 'http://192.168.6.22:9200/_xpack/security/user/test?pretty' -d '{"password": "test密码"}'
Enter password for [elastic]:Reenter password for [elastic]:Enter password for [apm_system]:Reenter password for [apm_system]:Enter password for [kibana_system]:Reenter password for [kibana_system]:Enter password for [logstash_system]:Reenter password for [logstash_system]:Enter password for [beats_system]:Reenter password for [beats_system]:Enter password for [remote_monitoring_user]:Reenter password for [remote_monitoring_user]:Changed password for user [apm_system]Changed password for user [kibana_system]Changed password for user [kibana]Changed password for user [logstash_system]Changed password for user [beats_system]Changed password for user [remote_monitoring_user]Changed password for user [elastic]
5)指定监听地址、端口和集群信息
单节点指定本身即可
network.host: 192.168.6.61http.port: 9200# 添加集群配置信息discovery.seed_hosts: ["192.168.6.61:9300"]# 如果集群时这里指定主机名需要匹配值域名解析cluster.initial_master_nodes: ["192.168.6.61:9300"]
6)最终的配置文件如下
path.data: /data/espath.logs: /data/logshttp.port: 9200# 关闭geoip更新ingest.geoip.downloader.enabled: false# 集群名cluster.name: cluster-es# 节点名node.name: ${HOSTNAME}-node# 监听ipnetwork.host: 192.168.6.22# 开启x-pack插件,用于添加账号密码xpack.security.enabled: true#xpack.license.self_generated.type: trialxpack.security.transport.ssl.enabled: truexpack.security.transport.ssl.verification_mode: certificatexpack.security.transport.ssl.keystore.path: /opt/elasticsearch/config/elastic-certificates.p12xpack.security.transport.ssl.truststore.path: /opt/elasticsearch/config/elastic-certificates.p12transport.port: 9300discovery.seed_hosts: ["192.168.6.22:9300"]# 首次启动指定的master节点cluster.initial_master_nodes: ["192.168.6.22:9300"]
IP和端口根据自己实际的配置
4. 启动
1)配置环境变量
vim /etc/profile.d/my_env.shexport ES_HOME=/opt/elasticsearchexport PATH=$PATH:$ES_HOME/binsource /etc/profile
2)启动、启动脚本
su - es# 启动/opt/elasticsearch/bin/elasticsearch# 后台启动/opt/elasticsearch/bin/elasticsearch -d
9300:和tcp客户端交互,集群节点间通信
启动脚本
vim /home/es/start.sh#!/bin/bash -aux# IP=`ip addr show ens33 | grep "inet " | cut -d '/' -f 1 | awk '{print $2}'`if [ $# -lt 1 ]thenecho "没有输入参数..."exit 1;ficase $1 in"start")echo " --------------- 启动 elasticsearch ---------------"elasticsearch -d;;"stop")echo " --------------- 关闭 elasticsearch ---------------"ps -ef | grep elasticsearch | grep java | grep -v grep | awk {'print $2'} | xargs kill -9;;*)echo "参数错误【start | stop】..."exit 1;;;esac# 授可执行权限chmod +x /home/es/start.sh
3)添加防火墙策略
firewall-cmd --zone=public --add-port=9200/tcp --permanentfirewall-cmd --zone=public --add-port=9300/tcp --permanentfirewall-cmd --reload# 查看开放的所有端口firewall-cmd --zone=public --list-ports
4)root用户启动错误
ES不支持root用户启动,会报错:
ERROR: Aborting auto configuration because of config dir ownership mismatch. Config dir is owned by es but auto-configuration directory would be owned by root
5. 测试
默认端口:9200
使用一下命令本地测试,或者浏览器访问
curl -i http://localhost:9200{"name" : "k8s-node1","cluster_name" : "elasticsearch","cluster_uuid" : "wSgiFfiCRiW1NsciEI3zUQ","version" : {"number" : "8.2.0","build_flavor" : "default","build_type" : "tar","build_hash" : "b174af62e8dd9f4ac4d25875e9381ffe2b9282c5","build_date" : "2022-04-20T10:35:10.180408517Z","build_snapshot" : false,"lucene_version" : "9.1.0","minimum_wire_compatibility_version" : "7.17.0","minimum_index_compatibility_version" : "7.0.0"},"tagline" : "You Know, for Search"}
6. es实例配置及说明
vim elasticsearch.yml# 信息如下cluster.name: es_cluster_single_node_demonode.name: ${HOSTNAME}-nodepath.data: /opt/elasticsearch/datapath.logs: /opt/elasticsearch/logsnetwork.host: 192.168.6.21http.port: 9200transport.port: 9300discovery.seed_hosts: ["192.168.6.21:9300"]cluster.initial_master_nodes: ["192.168.6.21:9300"]
参数说明:
| 参数 | 说明 |
|---|---|
| cluster.name | 集群名称,同一ES集群名称必须相同; |
| node.name | 集群中当前节点名称。建议命名较高区分度,如:当前节点hostname,hostip等 |
| path.data | ES实例存放数据目录;注:建议生产环境数据目录与应用程序隔离 |
| path.logs | ES实例存放日志目录;注:建议生产环境数据目录与应用程序隔离 |
| network.host | 当前实例绑定的ip地址,注:如未绑定则无法通过ip地址访问 |
| http.port: | ES实例对外提供REST服务的端口,默认9200 |
| transport.port | ES实例内部通信端口,默认9300 |
| discovery.seed_hosts | 数组形式存储ES集群节点信息,多个以逗号分隔 |
| cluster.initial_master_nodes | ES集群启动时,引导默认的master节点,注:仅在集群第一次启动时候此配置有效。 |
7. 配置es堆内存大小 jvm.options
vim /opt/elasticsearch/config/jvm.options-Xms2g-Xmx2g
如何配置:
堆内存大小 = Min(机器内存/2, 32GB) ;
即:取当前环境内存的一半和32GB内存中最小值。但最大配置尽量不等于32G,略小于32G;
8. kibana
kibana和es的版本不能高于es,最好保持统一个版本号
配置文件
logging.dest: /opt/kibana/logs/kibana.logserver.host: "192.168.6.22"server.port: 5601i18n.locale: "zh-CN"# es中设置的kibana账号信息elasticsearch.hosts: ["http://192.168.6.22:9200"]elasticsearch.username: "kibana"elasticsearch.password: "Gsww_2022"elasticsearch.requestTimeout: 90000
如果你不想将用户ID和密码放在kibana.yml文件中明文配置,可以将它们存储在密钥库中。运行以下命令以创建Kibana密钥库并添加配置:
./bin/kibana-keystore create./bin/kibana-keystore add elasticsearch.username./bin/kibana-keystore add elasticsearch.password
# 前台启动./kibana# 后台启动./kibana &
# 增PUT /ecommerce/product/1{"name" : "云南白药牙膏","desc" : "云南白药牙膏","price" : 30,"producer" : "云南白药牙膏","tags": [ "meibai", "fangzhu" ]}# 查GET /ecommerce/product/1# 删DELETE /ecommerce/product/1
