使用虚拟机Vmware 操作系统Centos 7.0
一、配置初始环境【添加用户、JDK】
1.添加用户
创建新系统后默认会有一个root用户(此用户为最大权限用户)
1.1然后在创建了一个个人用户admin
连接服务器切换至root并创建admin用户
su - root (//su 用户名 可以切换用户)
groupadd admin (添加admin的操作)
useradd -g admin admin -m (添加用户并设置密码)
passwd admin (输入密码,此处需要连续输入多次)
(备注:输入多次如果中途退出会影响后面的权限)
# 输入admin用户密码:admin
1.2 admin用户授权限
su - root
#赋权 可以编写此文件
chmod +w /etc/sudoers
vi /etc/sudoers
#追加admin的sudo权限(直接加后面就可以,前面不要写数字不然文件会报错)
admin ALL=(ALL) ALL
#除权 去掉sudoers的读写权限
chmod -w /etc/sudoers
2. 系统优化
2.1系统优化
必须root用户
su - root
2.2添加用户级别句柄和进程
$ vi /etc/security/limits.conf
# Edit /etc/security/limits.conf
* soft nproc 65535
* hard nproc 65535
* soft nofile 65535
* hard nofile 65535
* soft memlock unlimited
* hard memlock unlimited
说明:`*` 代表针对所有用户;`nproc` 是代表最大进程数;`nofile` 是代表最大文件打开数。
2.3设置用户最大进程数
# 查看相关配置
$ ulimit -a
设置各linux 用户的最大进程数,把某linux用户的最大进程数设为10000个:
$ vim /etc/profile
ulimit -u 10000
$ source /etc/profile (说明:使修改免重启并生效)
# 最大进程数修改
sudo vi /etc/security/limits.d/90-nproc.conf
* soft nproc 655360
# 或
sudo vi /etc/security/limits.d/20-nproc.conf
* soft nproc 655360
修改后重新连接终端。
2.4 网络优化
su - root
vi /etc/sysctl.conf
net.ipv4.tcp_fin_timeout=20
net.ipv4.tcp_syncookies=1
net.ipv4.tcp_tw_reuse=1
net.ipv4.tcp_tw_recycle=1
net.ipv4.tcp_keepalive_time=1200
net.core.netdev_max_backlog = 262144
net.core.rmem_max=16777216
net.core.wmem_max=16777216
net.ipv4.tcp_wmem = 4096 16384 4194304
net.ipv4.ip_local_port_range = 1024 65535
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_syn_retries = 2
net.ipv4.tcp_keepalive_probes = 2
net.ipv4.tcp_max_tw_buckets = 360000
net.ipv6.conf.lo.disable_ipv6 = 1
net.ipv6.conf.eth0.disable_ipv6 = 1
fs.file-max = 65536
vm.max_map_count = 67108864
vm.swappiness = 1
设置生效:sysctl -p
3.JDK安装
3.1 JDK1.8安装
tar -xvzf /home/admin/softwares/jdk-8u351-linux-x64.tar.gz (解压)
sudo cp -rf /home/admin/softwares/jdk1.8.0_191 /usr/local/jdk1.8.0_191 (将jdk放在指定文件)
3.1.2修改环境变量
sudo vim /etc/profile
JAVA_HOME=/usr/local/jdk1.8.0_191
CLASSPATH=$JAVA_HOME/lib/
PATH=$PATH:$JAVA_HOME/bin
export PATH JAVA_HOME CLASSPATH
$source /etc/profile 使配置生效
二、配置组件【mysql、zookeeper、Kafka、Elasticsearch]
1.Mysql
1.安装Mysql
1.1安装路径(mysql文件下载地址)
/usr/local/mysql5.7 (上传mysql-5.7.23-linux-glibc2.12-x86_64.tar.gz到此目录)
1.2安装操作(.rpm文件下载地址)
安装mysql依赖libaio,需要先安装好:rpm -ivh libaio-0.3.109-13.el7.x86_64.rpm
Step1:解压文件
$ su - root
$ cd /usr/local/
$ tar -zxvf mysql-5.7.23-linux-glibc2.12-x86_64.tar.gz ---解压安装包
$ mv mysql-5.7.23-linux-glibc2.12-x86_64 mysql5.7 ---重命名mysql主目录
$ rm -rf /etc/my.cnf
//上面这一步的操作是删除,不是复制
$ groupadd mysql ---创建mysql用户组
$ useradd -m -g mysql mysql ---创建mysql用户,并且设置为mysql组
#mkdir-p是linux命令中的一个非常常用的工具,它的作用是创建嵌套目录,如果父目录不存在则自动创建
$ mkdir -p /usr/local/mysql5.7/data
$ mkdir -p /usr/local/mysql5.7/log
#chown-R命令是Linux中的一个重要命令,它可以改变文件或目录的所有者和所属组
#-R选项表示递归操作,即将指定目录下的所有相关文件和子目录都修改为指定的所有者和所属组
$ chown -R mysql:mysql mysql5.7/
# 只读不写1 可读可写5 可读可写可操作的全部权限7
$ chmod 777 -R /usr/local/mysql5.7/data/
$ chmod 777 -R /usr/local/mysql5.7/log/
Step2:初始化安装
$ su - mysql
进入msyql主目录
$cd /usr/local/mysql5.7/bin
注意!注意!注意!(下面此步骤执行完会生成密码,一定记得复制保存起来)
---执行mysql初始化
$./mysqld --initialize --user=mysql --basedir=/usr/local/mysql5.7 --datadir=/usr/local/mysql5.7/data
![]()
复制mysql.server文件
$sudo cp support-files/mysql.server /etc/init.d/mysqld
Step3:修改配置(3个文件)
$sudo vim /etc/init.d/mysqld
# 修改下列内容,已存在的项只需修改,不必新增
basedir=/usr/local/mysql5.7
datadir=/usr/local/mysql5.7/data
修改shell的环境变量配置:
$sudo vim /etc/profile
export PATH=$PATH:/usr/local/mysql5.7/bin
环境变量生效
$ source /etc/profile
修改mysql配置:
$sudo touch /etc/my.cnf
$sudo vim /etc/my.cnf
$ sudo mv /etc/my.cnf /etc/my.cnfBak
[mysqld]
basedir = /usr/local/mysql5.7
datadir = /usr/local/mysql5.7/data
tmpdir=/usr/local/mysql5.7/log
port = 3306
# 不同机器此值唯一,建议从1递增
server_id = 1
character_set_server = utf8
collation-server = utf8_general_ci
lower_case_table_names = 1
max_allowed_packet = 100M
max_connections = 1000
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
log-bin=master-bin
[client]
socket = /usr/local/mysql5.7/log/mysql.sock
default-character-set=utf8
[mysqld_safe]
log-error = /usr/local/mysql5.7/log/error.log
pid-file = /usr/local/mysql5.7/log/mysql.pid
1.3启动mysql服务
$ service mysqld start
1.4修改密码及用户权限
进入mysql,提示输入密码时,输入之前保存的初始密码
$ mysql -h 127.0.0.1 -u root -p
修改root新密码:
mysql> alter user user() identified by "新密码";
mysql> flush privileges;
1.5配置Mysql主从模式
假设已经安装A、B两台机器mysql,其中A作为mster,B作为slave。
分别修改A/B两台机器/etc/my.cnf文件一项配置,并重启mysql (service mysql restart)
A机器 vim /etc/my.cnf:
log-bin=master-bin
B机器 vim /etc/my.cnf:
log-bin= relay-bin
A节点执行:
$ mysql -h 127.0.0.1 -utongdun -ptongdun123456 登录mysql
创建用户(sync/123456)来给slave同步使用
mysql>grant replication slave on *.* to 'sync'@'slave机器IP' identified by '123456';
mysql>show master status; 查看master状态,输出如下
+-------------------+-----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-------------------+-----------+--------------+------------------+-------------------+
| master-bin.000004 | 229548120 | | |
+-------------------+-----------+--------------+------------------+-------------------+
mysql>flush privileges; 刷新配置
$ service mysqld restart; 重启mysql
B节点执行:
$ mysql -h 127.0.0.1 -utongdun -ptongdun123456 登录mysql
mysql>CHANGE MASTER TO
>MASTER_HOST='master所在服务器的IP',
>MASTER_USER='master授权的账号',
>MASTER_PASSWORD='master授权的密码',
>MASTER_LOG_FILE='master的日志文件名master的show master status的file,实际填写mysql-bin.000004',
>MASTER_LOG_POS=master的日志所在位置master的show master status的Position; --注意这一行没有单引号
mysql>start slave;开启复制
mysql>show slave status\G 查看状态
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: master的IP地址
Master_User: root
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: master-bin.000001
Read_Master_Log_Pos: 1516
Relay_Log_File: slave-bin.000004
Relay_Log_Pos: 1117
Relay_Master_Log_File: master-bin.000001
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
......
Slave_IO_Running: YES 表示slave的日志读取线程开启
Slave_SQL_Running: YES 表示SQL执行线程开启
两者都为YES表示主从模式成功。
2.zookeeper
zookeeper 单机版
1.上传安装包至/home/local【规范选择ocal目录下】,并且解压部署
# 解压
tar -xvf /home/local/zookeeper-3.4.14.tar.gz
# 创建数据存储、日志目录
mkdir -p /home/local/zookeeper-3.4.14/data
mkdir -p /home/local/zookeeper-3.4.14/logs
#创建配置文件(zoo_sample.cf是官方提供的配置模板,需要复制为zoo.cfg文件)
cp /home/local/zookeeper-3.4.14/conf/zoo_sample.cfg /home/local/zookeeper-3.4.14/conf/zoo.cfg
2.修改配置项/home/local/zookeeper-3.4.14/conf/zoo.cfg
tickTime=2000
initLimit=10
syncLimit=5
clientPort=2181
#服务器存储数据快照的位置 (必要)
dataDir=/home/local/zookeeper-3.4.14/data
#服务器存储事务日志的位置(必要)
dataLogDir=/home/local/zookeeper-3.4.14/logs
zookeeper 集群版
1.解压部署:同单机版step1
2.创建myid文件
# 创建myid文件,并且键入节点ID,(每个节点myid需要唯一,建议是1、2、3、N)
echo "1" > /home/local/zookeeper-3.4.14/data/myid
3.修改配置/home/local/zookeeper-3.4.14/conf/zoo.cfg
tickTime=2000
initLimit=10
syncLimit=5
clientPort=2181
dataDir=/home/local/zookeeper-3.4.13/data
dataLogDir=/home/local/zookeeper-3.4.13/logs
#集群节点 集群内节点信息(必要)
server.1=ip1:2888:3888
server.2=ip2:2888:3888
4.启停命令
cd /home/local/zookeeper-3.4.14/bin
#启动服务
./zkServer.sh start
#状态查看
./zkServer.sh status
#停止服务
./zkServer.sh stop
5.验证
./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /home/local/zookeeper-3.4.14/bin/../conf/zoo.cfg
Mode: standalone
其中'standalone'表示单机模式运行。
3.Kafka
1.上传安装包kafka_2.12-1.1.0.tgz至/home/local,并解压
1.1.#解压
tar -xvf kafka_2.12-1.1.0.tgz
1.2.# 创建日志存储路径
mkdir -p /home/local/kafka_2.12-1.1.0/logs
2.修改配置/home/local/kafka_2.12-1.1.0/config/server.properties
# [基本配置] # Kafka实例唯一标识符(集群模式不同节点需要保持唯一性,建议是1、2、N格式) broker.id=0 # 监听的网络接口和端口(本机IP) listeners=PLAINTEXT://${ip}:9092 # [线程网络] num.network.threads=5 num.io.threads=10 socket.send.buffer.bytes=102400 socket.receive.buffer.bytes=102400 socket.request.max.bytes=104857600 # [主题和分区配置] # 默认分区数 num.partitions=5 # 副本数 default.replication.factor=1 # 同num.partitions保持一致 offsets.topic.replication.factor=1 # 同num.partitions保持一致 transaction.state.log.replication.factor=1 transaction.state.log.min.isr=1 # [消息清理策略] # 消息保留时间(小时) log.retention.hours=168 # 消息数据文件的目录 log.dirs=/home/local/kafka_2.12-1.1.0/logs log.segment.bytes=1073741824 log.retention.check.interval.ms=300000 # [ZooKeeper] # ZooKeeper连接地址(多个使用逗号分隔) zookeeper.connect=${zookeeper.ip}:2181 zookeeper.connection.timeout.ms=6000 group.initial.rebalance.delay.ms=0
3.启停命令
cd /home/local/kafka_2.12-1.1.0
#启动
bin/kafka-server-start.sh -daemon config/server.properties
#停止
通过ps -ef|grep kafka查询进程然后kill
4.验证
#发送消息
bin/kafka-console-producer.sh --topic test --broker-list ${IP}:9092
>hello
>123
#消费消息【新开一个终端窗口】
bin/kafka-console-consumer.sh --topic test --from-beginning --bootstrap-server ${IP}:9092
hello
123
#其中${IP}是kafka连接IP地址,如果能够正常发送消息、消费消息则说明kafka功能正常
4.Elasticsearch
1.上传安装包elasticsearch-7.17.11-linux-x86_64.tar.gz至/home/local,解压部署
2.#解压
tar -xvf elasticsearch-7.17.11-linux-x86_64.tar.gz
#创建数据、日志目录
mkdir -p /home/local/elasticsearch-7.17.11/data
mkdir -p /home/local/elasticsearch-7.17.11/logs
3.修改配置/home/local/elasticsearch-7.17.11/config/elasticsearch.yml
#基础配置 # 设置集群名称 cluster.name: elasticsearch # 设置节点名称(不同节点需要唯一,建议格式是:node-1、node-2、node-N) node.name: node-1 # 指定 Elasticsearch 数据的存储路径 path.data: /home/local/elasticsearch-7.17.11/data # 指定 Elasticsearch 日志的存储路径 path.logs: /home/local/elasticsearch-7.17.11/logs # 指定 Elasticsearch 监听的网络地址(本机IP) network.host: ip # 指定 Elasticsearch HTTP 服务的端口号 http.port: 9200 # 指定该节点的发现种子节点地址 discovery.seed_hosts: ["ip"] # 指定初始 master 节点的名称 cluster.initial_master_nodes: ["node-1"] #建议配置值=n/2 + 1,其中 n 是集群中节点的数量 discovery.zen.minimum_master_nodes: 1 #角色(master:集群管理员,node:数据存储) node.master: true node.data: true # 允许跨域访问 http.cors.enabled: true http.cors.allow-origin: "*"
4.启停命令
cd /home/local/elasticsearch-7.17.11/bin
#启动
./elasticsearch -d
#停止
通过ps -ef|grep elasticsearch查询进程然后kill
5.验证
#curl或者浏览器访问
#curl或者浏览器访问 curl http://<IP>:9200/_cat/health?v epoch timestamp cluster status node.total node.data shards pri relo init unassign pending_tasks max_task_wait_time active_shards_percent 1690273496 08:24:56 elasticsearch green 1 1 2 2 0 0 0 0 - 100.0% 其中IP是节点的IP,结果输出status=green说明正常
#curl或者浏览器访问
curl http://<IP>:9200/_cluster/health?pretty=true
{ "cluster_name" : "elasticsearch", "status" : "green", "timed_out" : false, "number_of_nodes" : 2, "number_of_data_nodes" : 2, "active_primary_shards" : 2, "active_shards" : 4, "relocating_shards" : 0, "initializing_shards" : 0, "unassigned_shards" : 0, "delayed_unassigned_shards" : 0, "number_of_pending_tasks" : 0, "number_of_in_flight_fetch" : 0, "task_max_waiting_in_queue_millis" : 0, "active_shards_percent_as_number" : 100.0 } 其中IP是任意节点的IP,结果输出status=green说明集群正常
6.问题汇总笔记
启动报错max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
解决:“安装准备”阶段中的内核文件参数是否有执行?
5.Nginx
1.上传安装包nginx_package.zip至/home/local,并解压文件
unzip nginx_package.zip
2.#检查gcc环境
rpm -qa | grep libstdc++-devel
rpm -qa | grep gcc-c++
rpm -qa | grep gcc
# 如果不存在,请安装yum源进行安装gcc
解压并安装Nginx
注意:过程中报错“Permission denied”则需要设置特定目录权限=777
step1:安装gcc
校验gcc是否安装:gcc -v
安装:sudo rpm -ivh *.rpm --nodeps --force (其中--nodeps表示忽略依赖检查,--force表示强制安装。)
step2:安装g++
校验gcc是否安装:g++ -v
安装:sudo rpm -ivh *.rpm --nodeps --force (其中--nodeps表示忽略依赖检查,--force表示强制安装。)
step3:安装openssl
---- tar -zxvf openssl-1.0.2h.tar.gz
---- cd openssl目录
---- sudo ./config
---- sudo chmod 777 -R * (设置初始化生成的文件为777权限,一定要做)
---- sudo make && make install
step4:安装pcre
---- tar -zxvf pcre-8.44.tar.gz
---- cd pcre目录
---- sudo ./configure
---- sudo chmod 777 -R *
---- sudo make && make install
step5:安装zlib
---- tar -zxvf zlib-1.2.11.tar.gz
---- cd zlib目录
---- sudo ./configure
---- sudo chmod 777 -R *
---- sudo make && make install
step6:安装nginx
---- tar -zxvf nginx-1.18.0.tar.gz
---- cd nginx目录
---- sudo ./configure --prefix=/data01/apps/soft/nginx --with-http_ssl_module --with-pcre=../pcre-8.44 --with-zlib=../zlib-1.2.11 --with-openssl=../openssl-1.0.2h --with-http_v2_module ( --prefix是nginx安装目录,需要提前创建)
---- sudo chmod 777 -R *
---- sudo make && make install
---- sudo ./nginx -t (验证是否安装成功)
验证启动Nginx。
# Check一下配置文件
# Nginx的安装目录下
cd nginx安装目录
# 检查默认配置文件
./sbin/nginx -t -c ./conf/nginx.conf
# 启动
./sbin/nginx -c ./conf/nginx.conf
# 停止
./sbin/nginx -s stop
# 或
./sbin/nginx -s quit
# 或
kill -9 <Nginx and works PID>
admin用户 启动nginx 需检查文件目录权限,避免出现,读取缓存区数据没有权限
3.检验
#浏览器或curl:http://IP
其中IP是部署nginx的服务器IP地址,结果出现"Welcome to nginx!"则表示nginx部署成功.
nginx配置解析笔记
#使用用户 以及用户组
user att att;
worker_processes 2;
#报错储存日志路径
error_log /usr/local/nginx/logs/error.log;
#pid储存位置
pid /usr/local/nginx/logs/nginx.pid;
#是否以守护进程(脱离Terminal在后台运行)的方式运行nginx,关闭守护进程执行的方式可以让我们方便调试nginx
daemon on;
events {
#events块的主要功能:
#配置Nginx服务器与用户的网络连接。
#这一部分的指令对Nginx服务器的性能影响较大,在实际配置中应该根据实际情况灵活调整。.
#定义nginx运行时的进程数
worker_connections 1024;
}
http {
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/nginx/logs/access.log main;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
include mime.types;
default_type application/octet-stream;
client_max_body_size 100m;
include /etc/nginx/conf.d/*.conf;
#开启压缩
gzip on;
gzip_min_length 5k;
gzip_buffers 4 16k;
#gzip_http_version 1.0;
gzip_comp_level 3;
gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
gzip_vary on;
## bf
upstream bApi {
server ip:9081;
}
## sal
upstream sal {
server ip:8088;
}
## freyr
upstream fre {
server ip:9088;
}
## hol
upstream hol {
server ip:9001;
}
## atr
upstream atr {
server ip:9086;
}
## tia
upstream tia {
server ip:9083;
}
## tiaMi
upstream tiaMi {
server ip:9082;
}
upstream das {
server ip:9082;
}
##ni
upstream qim {
server ip:8089;
}
upstream mapApi {
server ip:端口;
}
server {
#监听端口
listen 8080;
#服务名称
server_name xxxxxxx;
#前端根目录
root /data/app/frontPage;
location ~ ^/ {
try_files $uri /li-rk/index.html;
index index.html;
}
#前端
# bif前端
location ^~ /user {
index index.html index.htm;
try_files $uri/ /bif-rk/index.html;
}
# atr
location ^~ /cdt/index.html {
index index.html index.htm;
try_files $uri/ /at-rk/index.html;
}
location ^~ /cre/ {
proxy_pass http://atr/api/;
}
# hol
location ^~ /model/index.html {
index index.html index.htm;
try_files $uri/ /hol-rk/index.html;
}
location ^~ /mod/ {
proxy_pass http://hol/model/;
}
# fre
location ^~ /han/index.html {
index index.html index.htm;
try_files $uri/ /fre-rk/index.html;
}
location ^~ /han/ {
proxy_set_header X-Forwarded-For $remote_addr;
proxy_pass http://frek/api/;
}
....
#解决地图资源请求跨域问题
location ^~ /mapApi {
# add_header Access-Control-Allow-Origin *;
# add_header Access-Control-Allow-Headers X-Requested-With;
# add_header Access-Control-Allow-Methods GET,POST,PUT,DELETE,OPTIONS;
proxy_pass http://mapApi;
}
}
}