云⛈
原则
金鳞岂是池中物,一遇风云变化龙。
# 背景
企业级应用,特别是在现代开发的背景下。服务上云是最终的选择。
更轻松的设置和更好的安全性
- 更好地控制您的数据和带宽,以满足您的安全需求
- 利用云服务提供商的专业技术和协议,保护您的数据免受攻击和丢失
- 根据您所在行业的法律和规范,构建符合合规性的云平台
减少许可和IT成本
- 选择专业品牌的云服务商,利用其优惠的价格和质量的服务,避免购买和维护昂贵的硬件和软件
- 根据业务需求,灵活调整云服务器的配置和数量,避免浪费资源和资金
- 关注存储利用率和配置,选择适合当前使用情况的存储类别,节省存储费用
有效的远程工作能力
- 系统扩展:云服务可以根据远程工作的需求,快速地增加或减少资源,无需安装或升级硬件设备
- 改进可访问性:云服务可以让远程工作人员随时随地地访问和管理数据,同时保证数据的安全性和权限控制
- 提供无缝的移动性:云服务可以让远程工作人员通过不同的设备和网络,方便地访问和共享文件
- 更好的协作:云服务可以让远程工作人员利用多种云存储和协作工具,在同一文档上进行实时的编辑和评论
# 资源规划
以我开源的lite_iot (opens new window)为例,配合介绍一下资源的配置
中间件:zookeeper, kafka,MongoDB(auto-sharding (opens new window)),Redis(主从复制),MySQL,Nginx(web代理、TCP代理)
服务:hub(2), admin, gateway, proxy(3), pusher(api, ws), report,wx,monitor,nacos,sentinel
监控:graylog, grafana,node_echarts, TDengine
服务器编号 | 软件 | 服务 | 监控 |
---|---|---|---|
1 | Redis mysql | hub wx node_echart | |
2 | kafka nacos | hub admin pusher | |
3 | Redis nacos | proxy monitor report | graylog |
4 | Redis nginx nacos | proxy gateway TDengine | grafana |
5 | mongodb | proxy |
# 软件部分
# MySQL
- 上传安装包,解压到
/usr/local/mysql
tar -zxvf xxx -C /usr/local/mysql/
1
创建mysql用户组和mysql用户,并且在解压目录创建data和log目录,对mysql目录读写授权,并改变所属组和所有人
mkdir data
mkdir log
groupadd mysql
useradd -r -g mysql mysql
chmod -R 777 mysql/
chown -R mysql:mysql mysql
- 修改配置文件内容
先删除原来的/etc/my.cnf
vim /etc/my.cnf
//配置如下:
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8mb4
# 设置客户端socket
socket=/home/mysql/mysql.sock
[mysqld]
#
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M
#
# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
# log_bin
#
# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M
# 忽略主机名解析
skip-name-resolve=1
# 设置端口
port=3306
# 设置mysql安装目录
basedir=/usr/local/mysql/
# 设置数据存放目录
datadir=/home/mysqlfile
# 设置socket
socket=/home/mysql/mysql.sock
# 允许最大连接数,如果经常出现Too Many Connection异常,修改此配置
max_connections=3000
# 服务端使用的字符集
character-set-server=utf8mb4
# 创建新表时使用的默认存储引擎
default-storage-engine=INNODB
# 忽略大小写
lower_case_table_names=1
max_allowed_packet=16M
# 配置sql_mode
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
# 配置日志
log-error=/var/log/mysql-error.log
# 配置开启慢查询
slow_query_log=true
# 配置慢查询记录时间
long_query_time=1
# 配置慢查询日志
slow_query_log_file=/var/log/mysql-slow.log
# 配置mysql日志记录时间
log_timestamps=SYSTEM
# 配置pid目录,不要放在/var/run下,因为run是运行在内存中,重启后会丢失
pid-file=/home/mysql/mysqld.pid
# 修改关于timestamp字段的设置
explicit_defaults_for_timestamp=true
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
#配置数据同步(信阳去掉以下配置)
log-bin=mysql-bin
# 同一集群中的机器不能相同
server-id=2
log_slave_updates=1
binlog_format=mixed
max_binlog_size=512M
#需要同步的表 根据项目实际情况改库
binlog-do-db=bda09
binlog-do-db=seata
#不需要同步的表
binlog-ignore-db=mysql
binlog-ignore-db=performance_schema
binlog-ignore-db=information_schema
binlog-ignore-db=sys
- 初始化mysql
#初始化前根据配置文件的日志目录创建日志文件,并授权mysql所有人和所属组
#在/var/log下建立log目录
cd /var/log/
touch mysql-error.log
chown -R mysql.mysql mysql-error.log
touch mysql-slow.log
chown -R mysql.mysql mysql-slow.log
cd /home
#不存在就创建
mkdir mysql
chown -R mysql.mysql mysql/
#不存在就创建
mkdir mysqlfile
chown -R mysql.mysql mysqlfile/
#初始化,mysql的bin目录下执行
#如果初始化失败,去打印错误日志/var/log/mysql-error.log,根据报错处理一般情况下是data目录已存在,日志文件权限不够,socket文件,pid文件无法创建的问题
#初始化完成后,日志中会显示默认的登录密码
cd /usr/local/mysql/bin
./mysqld --defaults-file=/etc/my.cnf --basedir=/usr/local/mysql --datadir=/home/mysqlfile --user=mysql --initialize
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
- 启动mysql
在bin目录下执行启动命令
./mysqld --user=mysql
如果提示-secure-file-priv is set to NULL. Operations related to importing and exporting data are disabled,则使用./mysqld --user=root强制启动
启动后可以看到mysql进程
1
2
3
4
2
3
4
- 登录mysql,并修改默认密码
#添加软连接(可以全局使用mysql命令)
ln -s /usr/local/mysql/bin/mysql /usr/bin/mysql
#在my.cnf的[mysqld]下增加skip-grant-tables可以跳过密码,配置好密码后需要删除skip-grant-tables(直接利用error.log的密码直接登录可以跳过该步骤)
mysql -uroot -p
//直接回车,无需输入密码
UPDATE user SET authentication_string=PASSWORD('123456') WHERE user='root';
FLUSH PRIVILEGES;
# 直接利用error.log的密码直接登录或者关闭mysql,再次启动mysql,输入密码123456后会要求立即更改密码
SET PASSWORD = PASSWORD('123456');
ALTER USER 'root'@'localhost' PASSWORD EXPIRE NEVER;
FLUSH PRIVILEGES;
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
- 设置允许远程登录
use mysql #访问mysql库
update user set host = '%' where user = 'root'; #使root能再任何host访问
FLUSH PRIVILEGES; #刷新
1
2
3
2
3
- 配置mysql环境变量(跳过)
vim /etc/profile
#在最后加上
export MYSQL_HOME=/usr/local/mysql
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$PATH:$JAVA_HOME/bin:$MYSQL_HOME/bin
#保存后执行
source /etc/profile
1
2
3
4
5
6
7
2
3
4
5
6
7
- 把mysql服务交给systemctl管理
cd /etc/systemd/system
vim mysqld.service
#插入以下内容:
[Unit]
Description=Mysql5.7
SourcePath=/usr/local/mysql
Before=shutdown.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
Type=forking
PIDFile=/home/mysql/mysqld.pid
ExecStart=/usr/local/mysql/bin/mysqld --daemonize --pid-file=/home/mysql/mysqld.pid
Restart=on-failure
RestartSec=3
RestartPreventExitStatus=1
PrivateTmp=false
#保存退出后,执行以下命令
systemctl enable mysqld.service
systemctl start mysqld.service
#查看状态
systemctl status mysqld.service
如果此时不能启动,检查mysql错误日志,一般情况下都是缺少文件,或者某个文件/文件夹没有被mysql访问的权限,根据提示修改。优先检查sock文件所有人,如果是root创建,删掉sock和sock.lock重启mysql,mysql用户即可自己重新创建。
- 目录位置
基础目录:/usr/local/mysql
socket:/home/mysql/mysql.sock
data目录:/home/mysqlfile
log目录:/var/log/mysql-error.log
pid:/home/mysql/mysqld.pid
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# Redis
- 解压
tar -zxvf redis-5.0.7.tar.gz
1
- 下载依赖,编译源码
yum -y install gcc-c++ //nginx安装过可以忽略
进入解压后的redis目录执行make,然后把该目录复制到/usr/local,重命名为redis并进入/usr/local/redis
make install PREFIX=/usr/local/redis
1
2
3
2
3
- 后台启动redis,设置开机自启动,且加入服务管理
mkdir /home/redis/data -p
//修改配置文件
vim redis.conf
//允许守护进程启动
daemonize no ->yes
//允许其他ip连接本reids实例
bind 127.0.0.1 -> 0.0.0.0
//设置密码
requirepass xxxx
//设置作为从机时,连接到的主机密码,xxx为主机的登录密码
masterauth xxx
//设置持久化文件存储路径
dir /home/redis/data
//设置log日志路径
logfile "/usr/local/redis/redis.log"
//设置开机自启动
进入/etc/systemd/system
vim redis-server.service
添加:
[Unit]
Description=redis-server
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/redis/bin/redis-server /usr/local/redis/redis.conf
PrivateTmp=true
[Install]
WantedBy=multi-user.target
保存
service立即生效
systemctl daemon-reload
设置开机自启动
systemctl enable redis-server
systemctl daemon-reload
设置redis客户端软链接
ln -s /usr/local/redis/bin/redis-cli /usr/bin/redis
启动redis
systemctl restart redis-server
连接测试
cd /usr/local/redis/bin
./redis-cli -h localhost -p 6379 -a Beidou_2021#shangrao
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# Kafka
- 配置server
cd /usr/local/kafka/config
创建kafka_server_jaas.conf配置文件
vim kafka_server_jaas.conf
添加如下内容:
KafkaServer {
org.apache.kafka.common.security.plain.PlainLoginModule required
username="admin"
password="bd#93H-dys"
user_admin="bd#93H-dys"
user_producer="bdprod_E7*2"
user_consumer="bdcons@H2b_5";
};
修改server.properties
vim server.properties
添加如下内容:
listeners=SASL_PLAINTEXT://192.168.1.120:9092
security.inter.broker.protocol=SASL_PLAINTEXT
sasl.enabled.mechanisms=PLAIN
sasl.mechanism.inter.broker.protocol=PLAIN
authorizer.class.name=kafka.security.auth.SimpleAclAuthorizer
allow.everyone.if.no.acl.found=false
super.users=User:admin
修改如下内容:
log.dirs=/usr/local/kafka/dataLog
zookeeper.connect=192.168.1.120:2181
cd /usr/local/kafka/bin
修改启动文件
vim kafka-server-start.sh
在exec $base_dir/kafka-run-class.sh $EXTRA_ARGS和kafka.Kafka "$@"之间添加 -Djava.security.auth.login.config=/usr/local/kafka/config/kafka_server_jaas.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
- 配置客户端
- 配置producer
cd /usr/local/kafka/config
创建生产端配置文件
vim kafka_client_producer_jaas.conf
添加如下内容:
KafkaClient {
org.apache.kafka.common.security.plain.PlainLoginModule required
username="producer"
password="bdprod_E7*2";
};
修改生产端测试文件
vim producer.properties
添加如下内容:
security.protocol=SASL_PLAINTEXT
sasl.mechanism=PLAIN
sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required username="producer" password="bdprod_E7*2";
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
- 配置consumer
cd /usr/local/kafka/config
创建消费端配置文件
vim kafka_client_consumer_jaas.conf
添加如下内容:
KafkaClient {
org.apache.kafka.common.security.plain.PlainLoginModule required
username="consumer"
password="bdcons@H2b_5";
};
修改消费端测试文件
vim consumer.properties
添加如下内容:
security.protocol=SASL_PLAINTEXT
sasl.mechanism=PLAIN
sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required username="consumer" password="bdcons@H2b_5";
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
- zookeeper
创建 zoo_jaas.conf
cd /usr/local/zookeeper/conf
创建 zoo.cfg配置文件(zookeeper启动时会自动加载该文件)
vim zoo.cfg
添加如下内容:
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/usr/local/zookeeper/data
dataLogDir=/usr/local/zookeeper/dataLog
#Start Port 默认为8080
admin.serverPort=8085
clientPort=2181
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
- 测试
添加权限acl
bin/kafka-acls.sh --authorizer-properties zookeeper.connect=192.168.1.120:2181 --add --allow-principal User:producer --producer --topic quickstart-events
bin/kafka-acls.sh --authorizer-properties zookeeper.connect=192.168.1.120:2181 --add --allow-principal User:consumer --consumer --topic quickstart-events --group test-consumer-group
生产测试
bin/kafka-console-producer.sh --bootstrap-server 192.168.1.120:9092 --topic quickstart-events --producer.config config/producer.properties
消费测试
bin/kafka-console-consumer.sh --bootstrap-server 192.168.1.120:9092 --topic quickstart-events --from-beginning --consumer.config config/consumer.properties
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
- 常用命令
创建topic
bin/kafka-topics.sh --create --topic testaaa --bootstrap-server 192.168.1.120:9092
查看topic列表
bin/kafka-topics.sh --bootstrap-server 192.168.1.120:9092 --command-config config/sasl-consumer.properties --list
查看topic详情(需要使用admin用户身份查看,使用其他身份会报错:ERROR org.apache.kafka.common.errors.TopicAuthorizationException: Topic authorization failed.)
bin/kafka-topics.sh --bootstrap-server 192.168.1.120:9092 --command-config config/sasl-admin.properties --describe --topic IOT_REQUEST
查看acl列表
bin/kafka-acls.sh --authorizer-properties zookeeper.connect=192.168.1.120:2181 --list --topic quickstart-events
查看group相关所需配置
vim sasl-consumer.properties
添加如下内容:
security.protocol=SASL_PLAINTEXT
sasl.mechanism=PLAIN
sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required username="consumer" password="bdcons@H2b_5";
查看group列表命令(出现警告:WARN The configuration 'sasl.jaas.config' was supplied but isn't a known config不用管)
bin/kafka-consumer-groups.sh --command-config config/sasl-consumer.properties --bootstrap-server 192.168.1.120:9092 --list
查看指定group
bin/kafka-consumer-groups.sh --command-config config/sasl-consumer.properties --bootstrap-server 192.168.1.120:9092 --group KAFKA_CONSUMER_GROUP_ID --describe
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# JDK
- 上传jdk安装包
- 解压到/usr/local/java/目录下
- 卸载自带的openjdk
rpm -qa|grep jdk
卸载已安装的openjdk
rpm -e --nodeps java-1.8.0-openjdk-1.8.0.181-7.b13.el7.x86_64
rpm -e --nodeps java-1.8.0-openjdk-headless-1.8.0.181-7.b13.el7.x86_64
去掉动态jdk /etc/alternatives/java
安装jdk
mkdir /usr/local/java/
tar -zxvf jdkxxx.tar.gz -C /usr/local/java
//解压完后看一下目录,环境变量配置要用到,本例为:/usr/local/java/jdk1.8.0_211 把
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
- 设置环境变量
vim /etc/profile //打开环境变量配置文件,在文件末尾添加以下内容
设置jkd环境
JAVA_HOME=/usr/local/java
JRE_HOME=${JAVA_HOME}/jre
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
PATH=$PATH:$JAVA_HOME/bin
export JAVA_HOME JRE_HOME CLASSPATH PATH
source /etc/profile //添加完后生效环境变量
//添加软链接(java和javac提示找不到命令时才添加)
ln -s /usr/local/java/bin/java /usr/bin/java(加上为好,因为activemq和seata经常找不到JAVA_HOME)
ln -s /usr/local/java/bin/java /etc/alternatives/java(不一定要加)
java -version //版本检查
安装路径 /usr/local/java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 应用程序
包含该系统需要的编译好的前端程序,以及打包好的后端jar包。
# 后端服务
将系统所有的服务达成jar包。通过XFTP工具上传至云服务器。然后正对每个服务,都配置加入自动启动(注意先后顺序)。最后按照版本命名文件夹,将制定的jar放在制定的版本下。避免紧急情况需要回滚。
# 前端服务
通过webpack将打包好的js与静态页面放到指定的文件下。然后编写Nginx中的配置文件。监听指定路由,然后在连接到系统文件即可。
# 安全组
云服务器都有个安全组,用来管理访问的客户端。首先在这里将需要的端口打开。其实默认443就是打开的。
使用Nginx搭配申请好的域名,配置好证书。此时就能通过域名访问了。
上次更新: 2023/03/04, 23:30:16