CentOS常用软件安装
1. java8
1.1 清除旧的
有一些服务器会自带java8
- 使用指令
rpm -qa|grep jdk
查看copy-jdk-configs-4.0-1.hce2.noarch java-1.8.0-openjdk-headless-1.8.0.342.b07-0.hce2.x86_64 java-1.8.0-openjdk-1.8.0.342.b07-0.hce2.x86_64 java-1.8.0-openjdk-devel-1.8.0.342.b07-0.hce2.x86_64
- 卸载(将每个相关的卸载)
rpm -e --nodeps java-1.8.0-openjdk-1.8.0.342.b07-0.hce2.x86_64
1.2 离线安装
(如果有网可通过wget下载安装包)
- 在官网上下载对应版本的rpm安装包
- 安装:
rpm -ivh jdk-8u371-linux-x64.rpm
- 验证:
java
/javac
/java -version
- 参考
1.3 在线安装
yum install -y java-1.8.0-openjdk-devel.x86_64
- 验证安装即可
- 参考:
2. tomcat8
2.1 学习整理
tomcat学习整理, 会一直更新.
2.2 安装
-
下载: 官网下载tar.gz压缩包,
apache-tomcat-8.5.81.tar.gz
为例 -
上传: 将压缩包上传到服务器的一个目录上
-
解压:
tar -zxvf apache-tomcat-8.5.81.tar.gz
-
重命名:
mv apache-tomcat-8.5.81.tar.gz tomcat
-
移动到安装目录(位置随意):
mv tomcat /usr/local/tomcat
-
创建tomcat.service,
vi /etc/systemd/system/tomcat.service
, 并输入(注意java路径和tomcat路径):[Unit] Description=Tomcat Web Application Container After=syslog.target network.target [Service] Type=forking Environment=JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.181-7.b13.el7.x86_64/ Environment=CATALINA_PID=/usr/local/tomcat/temp/tomcat.pid Environment=CATALINA_HOME=/usr/local/tomcat/ Environment=CATALINA_BASE=/usr/local/tomcat/ Environment='CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC' ExecStart=/usr/local/tomcat/bin/startup.sh ExecStop=/usr/local/tomcat/bin/shutdown.sh User=root Group=root UMask=0007 RestartSec=10 Restart=always [Install] WantedBy=multi-user.target
-
常用指令
- 启用: systemctl enable tomcat
- 开启: systemctl start tomcat
- 查看状态: systemctl status tomcat
- 停止: systemctl stop tomcat
- 重启: systemctl restart tomcat
-
验证:
curl localhost:8080
-
修改默认端口8080为80,
vi /usr/local/tomcat/conf/service.xml
, 差不多69行(或者通过/ + 输入8080寻找)<Connector port="80" protocol="HTTP/1.1"...
将
8080
修改成80即可 -
重启tomcat:
systemctl restart tomcat
-
端口放行
- 放行:
firewall-cmd --add-port=80/tcp --permanent
- 查看是否添加进去了:
firewall-cmd --list-port
- 重载:
firewall-cmd --reload
- 验证: 同局域网内机器上
curl ip:80
- 放行:
-
参考:
3. mysql8
3.1 yum安装
- 库:
yum localinstall https://repo.mysql.com//mysql80-community-release-el7-1.noarch.rpm -y
- 装:
yum install mysql-community-server -y
- 报key错误, 跳过:
yum install --nogpgcheck mysql-community-server -y
- 也可以选择使用
rpm --import <url>
导入对应版本的key
- 报key错误, 跳过:
- 启动并自启:
systemctl enable --now mysqld
- 修改密码:
- 默认密码:
grep 'temporary password' /var/log/mysqld.log
- 登录(不能命令行输入密码, 就-p后控制台shift+insert粘贴):
mysql -p t&ki3u&+ib7X
- 修改密码(可以设置得困难点):
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
- 简单密码异常:
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
- 校验规则:
set global validate_password.policy=0;
- 密码长度:
set global validate_password.length=1;
- 校验规则:
- 验证: 退出后使用mysql -p验证密码是否可以登录
- 默认密码:
- [选] 修改远程连接
- 登录到mysql中
- host限制:
update mysql.user set host='%' where user="root";
- 刷新:
flush privileges;
- [选] 端口放行
- 放行:
firewall-cmd --add-port=3306/tcp --permanent
- 查看是否添加进去了:
firewall-cmd --list-port
- 重载:
firewall-cmd --reload
- 验证: 在非本机上使用软件通过ip直接访问
- 放行:
- 为了安全可以使用ssh登录, 这样不不用配置远程连接了和端口放行了
- 参考
3.2 离线安装
- 下载: 在官网下载对应服务器版本的mysql版本压缩包, 比如:
mysql-8.0.32-el7-x86_64.tar.gz
- 上传到
/usr/local下
- 解压:
tar -zxvf mysql-8.0.32-el7-x86_64.tar.gz
- 卸载mariadb
- 查找是否存在:
rpm -qa | grep mariadb
- 卸载:
rpm -e --nodeps mariadb-libs
- 查找是否存在:
- 创建mysql用户和用户组
- 组:
groupadd mysql
- 用户并添加到组内:
useradd -g mysql mysql
- 组:
- 赋予mysql目录权限(最后一个是目录):
chown -R mysql:mysql mysql/
- mysql配置文件,
vim /etc/my.cnf
, 其中local_case_table_names=1
是忽略大小写[mysql] default-character-set=utf8mb4 [client] #port=3306 socket=/var/lib/mysql/mysql.sock [mysqld] user=mysql general_log = 1 general_log_file= /var/log/mysql/mysql.log socket=/var/lib/mysql/mysql.sock basedir=/usr/local/mysql/ datadir=/usr/local/mysql/data log-bin=/usr/local/mysql/data/mysql-bin innodb_data_home_dir=/usr/local/mysql/data innodb_log_group_home_dir=/usr/local/mysql/data/ character-set-server=utf8mb4 lower_case_table_names=1 autocommit=1 default_authentication_plugin=mysql_native_password symbolic-links=0 # Disabling symbolic-links is recommended to prevent assorted security risks # Settings user and group are ignored when systemd is used. # If you need to run mysqld under a different user or group, # customize your systemd unit file for mariadb according to the # instructions in http://fedoraproject.org/wiki/Systemd [mysqld_safe] log-error=/usr/local/mysql/data/mysql.log pid-file=/usr/local/mysql/data/mysql.pid # # include all files from the config directory
- 给配置文件权限:
chown 777 /etc/my.cnf
- 添加环境变量
- 打开:
vim /etc/profile
- 最后添加:
export PATH=$PATH:/usr/local/mysql/bin:/usr/local/mysql/lib
- 生效:
source /etc/profile
- 打开:
- 初始化数据库:
/usr/local/mysql/bin/mysqld --user=mysql --basedir=/usr/local/mysql/ --datadir=/usr/local/mysql/data/ --initialize
, 会输出日志如下(最后一行是默认密码):2023-04-18T06:52:34.464698Z 0 [Warning] [MY-011070] [Server] 'Disabling symbolic links using --skip-symbolic-links (or equivalent) is the default. Consider not using this option as it' is deprecated and will be removed in a future release. 2023-04-18T06:52:34.464786Z 0 [Warning] [MY-010918] [Server] 'default_authentication_plugin' is deprecated and will be removed in a future release. Please use authentication_policy instead. 2023-04-18T06:52:34.464809Z 0 [System] [MY-013169] [Server] /usr/local/mysql/bin/mysqld (mysqld 8.0.32) initializing of server in progress as process 11924 2023-04-18T06:52:34.480151Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started. 2023-04-18T06:52:34.946560Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended. 2023-04-18T06:52:36.589592Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: fGzmjdZXj0<p
- 进入到mysql目录中复制执行文件:
cp -a ./support-files/mysql.server /etc/init.d/mysql cp -a ./support-files/mysql.server /etc/init.d/mysqld chmod +x /etc/init.d/mysql chmod +x /etc/init.d/mysqld
- 创建mysql socket文件
- 创建目录:
mkdir /var/lib/mysql
- 赋用户权限:
chown -R mysql:mysql /var/lib/mysql
- 创建目录:
- 通过service操作 (start | stop | restart | reload | force-reload | status)
- 启动:
service mysql start
- 重启:
service mysql restart
- 停止:
service mysql stop
- 启动:
- 启动后, 进入修改密码
- 进入:
/usr/local/mysql/bin/mysql -p
, 回车输入密码(初始化数据库那个默认密码) - 修改:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '5h%jqTlsjfgm0UjHksklP3vL';
- 如果设置简单密码处理方式同上面的在线安装
- 刷新:
flush privileges;
- exist退出, 再次使用新密码测试连接
- 进入:
- 远程配置方式和端口放行也同上面的在线安装方式
- 配置service,
vim /etc/systemd/system/mysql.service
[Unit] Description=MySQL Server After=network.target [Service] Type=forking User=mysql ExecStart=/etc/init.d/mysql start ExecStop=/etc/init.d/mysql stop [Install] WantedBy=multi-user.target
- 关闭使用service启动的mysql,
service mysql stop
- 重载:
systemctl daemon-reload
- 自启:
systemctl enable mysql
- 启动:
syatemctl start mysql
- 参考: centos7 离线安装mysql8
4. postgresql
会自动生成service, 目录在/usr/lib/systemd/system/
下, 自己创建的service在这里和/etc/systemd/system/
下都是可以生效, 区别是/usr/
下的一般是软件安装时候自动生成的, /etc/
下是用户自己定义的.
4.1 在线安装
- 官网PostgreSQL Downloads依次选择
Linux
->Red Hat/Rocky/CentOS
->1.软件版本最新就行
->2.系统版本根据自己的选择对应版本
->3.位数 x86_64就行
下方会出现安装需要执行的指令, 逐条执行即可.sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm sudo yum install -y postgresql15-server sudo /usr/pgsql-15/bin/postgresql-15-setup initdb sudo systemctl enable postgresql-15 sudo systemctl start postgresql-15
- 修改密码
- 切换用户并切换sql模式:
sudo -u postgres psql
- [1] 指明修改密码:
\password postgres
, 回车等待输入密码 - [1] 输入两次密码
- [2] 在切换用户并切换sql模式之后输入:
alter user postgres with password 'your_new_password';
也行 - 退出:
\q
- 切换用户并切换sql模式:
- [选] 远程连接需要修改(不配置远程连接可通过ssh通道连接)
-
postgresql.conf
:- 端口, 如果需要修改在此文件中修改
vim /var/lib/pgsql/14/data/postgresql.conf
, 修改成listen_addresses="*"
-
pg_hab.conf
:vim /var/lib/pgsql/14/data/pg_hba.conf
在
IPV4
下添加host all all 0.0.0.0/0 md5
-
- [选] 防火墙放行(如果防火墙没有开可以跳过此步骤, 使用
systemctl status firewalld
查看防火墙状态)- 放行:
firewall-cmd --add-port=5432/tcp --permanent
- 重载:
firewall-cmd --reload
- 放行:
- [选] 日志配置
也在/var/lib/pgsql/15/data/postgresql.conf
logging_collector
: 日志收集功能, 默认开(on
)log_directory
: 日志的路径, 默认log
, 可配置绝对路径/home/pgsql/log
(需要手动创建目录, 且给postgresql
用户权限)log_filename
: 日志文件名, 默认postgresql-%a.log
, 意思周为单位, 最多七个, 可更改为postgresql-%Y-%m-%d.log
, 每天一个log_statement
: 要记录哪些sql语句, none-不记录, ddl-create/alter/drop等, mod-insert/update/delete等, all-dll+mod, 建议配置mode即可
以下的可以都不修改log_duration
: 是否记录sql执行的时间, 默认off
, 可以修改为on
log_min_duration_statement
: sql语句执行时间的最小阈值, 超过这个值时候才会如日志, 默认-1(不开启), 可以修改为0(记录所有)log_statement_stats
: 确定是否记录每种 SQL 语句的执行统计信息,如执行次数、平均执行时间等。默认值为 off,表示不记录统计信息。你可以将其设置为 on,以记录统计信息。不建议开启文件会很大log_connections
: 客户端连接事件, 默认off
, 可修改on
开启log_disconnections
: 客户端断开事件, 默认off
, 可修改on
开启log_hostname
: 记录客户端主机名, 默认off
(只记录ip), 可修改on
- 其余log配置可参考配置文件内说明
- 重启pgsql:
systemctl restart postgresql-15
- 参考:
4.2 离线安装
- 下载: https://download.postgresql.org/pub/repos/yum/15/redhat/rhel-7-x86_64/
- postgresql15-15.3-1PGDG.rhel7.x86_64.rpm
- postgresql15-libs-15.3-1PGDG.rhel7.x86_64.rpm
- postgresql15-server-15.3-1PGDG.rhel7.x86_64.rpm
- 按照顺序安装
rpm -ivh postgresql15-libs-15.3-1PGDG.rhel7.x86_64.rpm rpm -ivh postgresql15-15.3-1PGDG.rhel7.x86_64.rpm rpm -ivh postgresql15-server-15.3-1PGDG.rhel7.x86_64.rpm
- 安装过程如果有libicu报错, 下载libicu-50.2-4.el7_7.x86_64.rpm安装即可
- 初始化:
/usr/pgsql-15/bin/postgresql-15-setup initdb
- 开机自启:
systemctl enable postgresql-15
- 启动:
systemctl start postgresql-15
- 剩下步骤与4.1 在线安装无异(从第二条修改密码起)
- 参考: postgresql14离线安装
5. redis
5.1 编译环境
需要编译安装, 提前安装gcc pcre-devel openssl-devel zlib-devel
- 在线:
yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel pcre-devel
- 离线
- (需要安装的依赖来源:https://vault.centos.org/7.8.2003/os/x86_64/Packages/, 这个来源是老的, 如果需要手动下载使用: http://mirror.centos.org/centos/7/os/x86_64/Packages/即可)
- 共25个文件, 手动下载下来整理好了: 点击下载,
- 上传到服务器
- 使用
rpm -ivh *.rpm --nodeps --force
批量安装
5.2 源码安装
- 官网下载: https://redis.io/download/, 比如
redis-7.0.11.tar.gz
, 上传服务器 - 解压:
tar -zxvf redis-7.0.11.tar.gz
- 切换目录:
cd redis-7.0.11
- 编译:
make
- 安装:
make install PREFIX=/usr/local/redis
, 不指定目录, 默认/usr/local/bin
, 指定了会在目录下生成bin
目录 - 复制配置文件:
cp redis.conf /usr/local/redis/bin/
- 修改:
vim /usr/local/redis/bin/redis.conf
- 开启守护进程(后台运行):
daemonize yes
- [非本地连接]关闭只允许本地连接: 关闭只允许本地:
# bind 127.0.0.1
或者改成0.0.0.0
- [非本地连接]关闭保护模式:
protected-mode no
- 端口:
port 6379
- 密码:
requirepass 123456
- 默认日志路径:
logfile "/usr/local/redis/bin/redis.log"
// 需要手动创建出
- 开启守护进程(后台运行):
- 配置redis.service,
vim /etc/systemd/system/redis.service
[Unit] Description=redis-server After=network.target [Service] Type=forking ExecStart=/usr/local/redis/bin/redis-server /usr/local/redis/bin/redis.conf PrivateTmp=true [Install] WantedBy=multi-user.target
- 重载:
systemctl daemon-reload
- 开机自启:
systemctl enable redis
- 启动:
systemctl start redis
- [选] 防火墙放行
- 放行:
firewall-cmd --add-port=6379/tcp --permanent
- 重载:
firewall-cmd --reload
- 放行:
- 连接测试:
- redis-cli
- rdm(稳定版本2021.4): https://codor.lanzoue.com/idvHXprxrpc
- rdm(新版本, 2022.5, 有时候会卡死): https://codor.lanzoue.com/igCcL10q2w9g
6. nginx
也需要先提前安装5.1中的内容
6.1 学习整理
学习使用过程整理了ngix安装与使用
6.2 源码安装
-
下载: https://nginx.org/en/download.html, 中的
Stable version
, 以nginx-1.24.0.tar.gz
为例 -
上传服务器
-
解压:
tar -zxvf nginx-1.24.0.tar.gz
-
切换目录:
cd nginx-1.24.0
-
配置:
./configure
-
配置(选, 如果需要https, 安装ssl证书的话):
./configure --with-http_ssl_module
-
编译:
make
-
安装:
make install
, 默认安装目录/usr/local/nginx
, 也可像redis一样指定安装目录 -
修改配置文件(简单配置), 安装目录下conf/nginx.conf
- 添加upstream mysservers节点,
http
下与server
同级的地方upstream myservers { # 可多个 # 输入ip端口和权重 server 127.0.0.1:8080 weight=1; }
server
节点下location
中修改server { listen 80; server_name: localhost; location / { proxy_pass http://myservers; proxy_redirect default; #root html; #index index.html index.htm; } }
- 添加upstream mysservers节点,
-
注册nginx.service,
vim /etc/systemd/system/nginx.service
[Unit] Description=Nginx HTTP Server After=network.target [Service] Type=forking PIDFile=/usr/local/nginx/logs/nginx.pid ExecStartPre=/usr/local/nginx/sbin/nginx -t ExecStart=/usr/local/nginx/sbin/nginx ExecReload=/usr/local/nginx/sbin/nginx -s reload ExecStop=/usr/local/nginx/sbin/nginx -s stop PrivateTmp=true [Install] WantedBy=multi-user.target
-
重载:
systemctl daemon-reload
-
开机自启:
systemctl enable nginx
-
启动:
systemctl start nginx
-
重载配置(修改配置后需要):
systemctl reload nginx
-
测试能否实现转发, 访问机器上的
80
端口, 看能否转发到8080端口上
7.keepalived
7.1 学习整理
- 可参考: keepalived的简单使用, 整理一些使用中常用的基本情况
7.2 源码安装
-
复制到
/opt
下 -
解压:
tar -zxvf keepalived-2.2.7.tar.gz
-
进入目录:
cd keepalived-2.2.7/
-
配置:
./configure --prefix=/usr/local/keepalived
, 指定安装目录 -
编译:
make
-
安装:
make install
-
进入安装目录:
cd /usr/local/keepalived/
会自动生成:
drwxr-xr-x. 2 root root 21 May 5 03:19 bin drwxr-xr-x. 4 root root 41 May 5 03:19 etc drwxr-xr-x. 2 root root 24 May 5 03:19 sbin drwxr-xr-x. 5 root root 40 May 5 03:19 share
-
新建配置文件(同目录下有配置文件的demo可参考):
vim ./etc/keepalived/keepalived.conf
备用服务器上的state 填入BACK_UP, 优先级小一点. 其他一样
! Configuration File for keepalived # 定义虚拟路由, 必须叫VI_1 vrrp_instance VI_1 { state MASTER #设置为主服务器, 备份服务器设置为BACKUP interface eth0 #监控的网络接口(ifconfig或者ip addr指令找出网卡) priority 100 #(优先级, 主机大一点, 备份机小一点) virtual_router_id 99 #同一个vrrp_instance下routerId必须是一致的 authentication { auth_type PASS #vrrp认证方式主备必须一致 auth_pass 12345 #密码 } virtual_ipaddress { 127.0.0.88 #虚拟ip, 主从一致, 可配置多个 } }
-
修改service
使用离线方式安装keepalived后会自动生成keepalived.service文件位置在:
/usr/lib/systemd/system/keepalived.service
注: 一般系统的或者安装程序自动生成的service文件会在
/usr/lib/systemd/system
下用户自己配置的service一般会放在/etc/systemd/system/下, 两个目录下都可以用systemctl命令操作到.
-
默认的keepalived.service文件
[Unit] Description=LVS and VRRP High Availability Monitor After=network-online.target syslog.target Wants=network-online.target Documentation=man:keepalived(8) Documentation=man:keepalived.conf(5) Documentation=man:genhash(1) Documentation=https://keepalived.org [Service] Type=forking PIDFile=/run/keepalived.pid KillMode=process EnvironmentFile=-/usr/local/keepalived/etc/sysconfig/keepalived ExecStart=/usr/local/keepalived/sbin/keepalived $KEEPALIVED_OPTIONS ExecReload=/bin/kill -HUP $MAINPID [Install] WantedBy=multi-user.target
-
修改后的keepalived.service文件
需要修改ExecStart命令后指向配置文件位置. -f /path/to/keepalived.conf
(因为默认的配置文件都在/usr/local/keepalived/etc/内, 就没有往/etc/keepalived/内复制)
[Unit] Description=LVS and VRRP High Availability Monitor After=network-online.target syslog.target Wants=network-online.target Documentation=man:keepalived(8) Documentation=man:keepalived.conf(5) Documentation=man:genhash(1) Documentation=https://keepalived.org [Service] Type=forking PIDFile=/run/keepalived.pid KillMode=process EnvironmentFile=-/usr/local/keepalived/etc/sysconfig/keepalived ExecStart=/usr/local/keepalived/sbin/keepalived $KEEPALIVED_OPTIONS -f /usr/local/keepalived/etc/keepalived/keepalived.conf ExecReload=/bin/kill -HUP $MAINPID [Install] WantedBy=multi-user.target
-
-
使用systemctl控制
- 重新加载service文件:
systemctl daemon-reload
- 设置开机自启:
systemctl enable keepalived
- 启动:
systemctl start keepalived
- 重启:
systemctl restart keepalived
- 关闭:
systemctl stop keepalived
- 查看运行状态:
systemctl status keepalived
- 重新加载service文件:
-
keepalived的默认日志在/var/log/messages下, 修改日志方法参考这个
-
防火墙放行vrrp通信:
firewall-cmd --add-rich-rule='rule protocol value="vrrp" accept' --permanent
-
防火墙重载:
firewall-cmd --reload
-
检查通信是否正常:
tcpdump -i eth0-nn host 224.0.0.18
, 只有一个等级高为正常 -
通过访问虚拟ip查看是否由正在工作的主或备来处理ip内的请求.
8. nacos
8.1 学习整理
学习整理: springboot整合nacos和dubbo
8.2 源码安装
- 下载: https://github.com/alibaba/nacos/releases中下载, 比如:
nacos-server-2.2.3.tar.gz
, win下就下载zip后缀的解压运行就可以. - 解压:
tar -zxvf nacos-server-2.2.3.tar.gz
- 移动到安装目录:
mv nacos /usr/local/
- 配置
nacos.service
,vim /etc/systemd/system/nacos.service
[Unit] Description=Nacos Server After=network.target [Service] Type=forking Environment=JAVA_HOME=/usr/local/soft/jdk/jdk8 ExecStart=/usr/local/nacos/bin/startup.sh -m standalone ExecStop=/usr/local/nacos/bin/shutdown.sh PrivateTmp=true [Install] WantedBy=multi-user.target
- 重载:
systemctl daemon-reload
- 开机自启:
systemctl enable nacos
- 启动:
systemctl start nacos
- [选] 防火墙放行
- 放行:
firewall-cmd --add-port=8848/tcp --permanent
- 重载:
firewall-cmd --reload
- 放行:
- 参考: CentOS安装Nacos
9. docker
9.1 学习整理
记录常用指令, 以nexus(部署maven私库的工具)为例
docker version
: 查看docker客户端和服务器的版本信息docker info
: 查看有关docker系统的详细信息, 如容器数、镜像数等docker search <image_name>
: 从docker hub上搜索指定名称的镜像docker pull <image_name>
: 从docker hub上下载指定名称的镜像docker images
: 列出本地已下载的镜像docker run <image_name>
: 基于指定的镜像, 运行一个容器. 如果本地不存在镜像会去hub上面尝试拉取.
格式:docker run -tid -p <host_port>:<container_port> --name <container_name> -v <host_path>:<container_path> --restart=always <image_name>
如:docker run -tid -p 8081:8081 --name nexus -v /usr/local/nexus/nexus-data:/nexus-data --restart=always sonatype/nexus3
-d
: 以后台(守护进程)模式运行容器-t
: 分配一个伪终端(pseudo-TTY),使容器内的应用程序可以与终端进行交互,例如输出日志和接收输入-i
: 保持标准输入打开,使得可以通过标准输入向容器内的应用程序发送数据, 习惯-tid
搭配使用-p <host-port>:<container-port>
: 将主机的端口映射到容器的端口, 前面是主机接口, 后面是容器端口-v <host-path>:<container-path>
: 将主机的目录火文件挂载到容器中, 实现主机和容器之间的文件共享, 前面是主机目录, 后面是容器目录. 这样当容器删除时候挂在在外面的运行数据会保留. 例子中是共享的文件夹, 容器中的文件夹, 也即容器中配置的或内置的文件夹, 比如nexus就在/nexus-data
中, MySQL一般在/var/lib/mysql
; 可配置多个-v hp1/cp1 -v hp2/cp2
即可. 需要记得在docker官网查询该容器所使用的用户id-e <variable-name>=<value>
: 设置环境变量--name <container-name>
: 指定容器名称, 如果不配置将随机生成名称--restart=<restart-policy>
: 设置容器的重启策略no
: 不自动重启, 容器退出或崩溃时不会自动重启它on-failure[:max-retries]
: 在非正常退出时重启,max-retries
是可选参数, 默认3.docker run --restart=on-failure:5 <image_name>
always
: 无论容器正常退出还是意外退出, docker引擎都会自动重启容器. 当docker服务器启动时, 容器也会自启. 想要自动启动的话, 建议配置这个unless-stopped
: 除非显式停止容器, 否则容器会自动重启.
--network=<network-name>
: 连接容器到指定网络--link=<container-name>:<alias>
: 连接到另外一个容器, 并设置别名, 使容器可以与其他容器通信--rm
: 在容器退出后立即自动删除容器. 也即配置--restart=always
会不生效--entrypoint <command>
: 覆盖容器的默认入口点(执行的指令), 比如: tomcat默认使bin下的start.sh可以通过此种方式使用catalina.sh当成启动的指令--user <username>
: 指定运行用户名或用户id(uid)--privileged
: 拥有访问主机设备和文件系统的能力
docker ps
: 列出正在运行的容器, 指令后跟-a
可查看所有的容器(包括未启动的)docker stop <container_id / container_name>
停止运行指定id/name的容器docker rm <container_id / container_name>
: 删除指定id的容器(如果未将主机目录挂载到容器中会将容器对应的配置文件/日志等运行数据一同删除掉), 删除之前需要先停止容器, 指令后添加-f
代表强制执行docker rmi <image_name>
: 删除指定名称的镜像, 指令后添加-f
代表强制执行docker build <path_to_dockerfile>
: 在指定路径下的dockerfile文件中构建镜像docker exec -it <container_id / container_name> <command>
: 在正在运行的容器中执行指定命令docker logs <container_id / container_name>
: 查看指定容器的日志输出-f / --follow
: 同tail -f
, 可实现实时日志跟踪效果-n
: 最后的几行, 默认all-t
: 最近多少分钟的, 具体docker logs --help
查看
docker-compose up
: 使用docker compose启动多个容器的应用程序docker-compose down
: 使用docker compose停止多个容器的应用程序
docker swarm
集群, 初始化集群, 其他机器作为管理或工作节点添加- 初始化:
docker swarm init --advertise-addr 192.168.10.101
, 最后的ip换成本机的ip - 准备管理节点加入:
docker swarm join-token manager
- 准备工作节点加入:
docker swarm join-token worker
- 复制对应的指令在其他机器上运行
- 查看集群状态:
docker info
- 查看集群节点:`docker node ls`
- 删除节点
- 将节点设置为维护模式:
docker node update --availability drain 节点名称|节点ID
- 如果是管理节点, 变成工作节点:
docker node demote 节点名称|节点ID
- 在想要被删除的节点上执行离开:
docker swarm leave
- 在管理节点上删除节点:
docker node rm 节点名称|节点ID
- 将节点设置为维护模式:
- 创建服务:
docker service create --replicas 2 --name mynginx -p 80:80 nginx
docker service create
:这是创建Docker服务的命令。--replicas 2
:这是服务的副本数量。在这里,指定服务只有一个副本,即一个运行实例。--name mynginx
:通过这个选项,为服务指定一个名称,这里是"mynginx"。-p 80:80
:通过这个选项,将服务的端口进行映射。在这里,将宿主机的端口80映射到服务的端口80。这意味着你可以通过访问宿主机的端口80来访问运行在Docker服务中的Nginx。nginx
:这是要运行的服务的镜像名称。在这里,使用的是Nginx镜像,这意味着将在Docker中创建一个运行Nginx的服务。
镜像也可以通过Dockerfile
文件使用docker build -t [镜像名].
来生成自己的镜像.
- 查看运行的服务:
docker service ls
- 查看服务具体信息:
docker service inspect 服务名称|服务ID
- 查看服务运行在哪些节点上:
docker service ps 服务名称|服务ID
- 测试运行, 该集群下任意节点的 IP 地址都要能访问到该服务
- 扩展实例数:
docker service scale mynginx=5
- 删除服务
- 实例数改成0:
docker service scale mynginx=0
, 这样就没有实例运行了 - 彻底删除:
docker service rm mynginx
- 实例数改成0:
- 初始化:
- 参考:
9.2 在线安装
- 安装yum工具:
yum -y install yum-utils
, 失败的话需要换国内源. - 配置库:
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
- 安装:
yum install -y docker-ce
很不幸的是, 我在这一步报错了:
很明显说去找[root@hecs-26265 yum.repos.d]# sudo yum install docker-ce Docker CE Stable - x86_64 320 B/s | 385 B 00:01 Errors during downloading metadata for repository 'docker-ce-stable': - Status code: 404 for https://download.docker.com/linux/centos/2.0/x86_64/stable/repodata/repomd.xml (IP: 99.86.199.59) Error: Failed to download metadata for repo 'docker-ce-stable': Cannot download repomd.xml: Cannot download repodata/repomd.xml: All mirrors were tried
https://download.docker.com/linux/centos/2.0/x86_64/stable/repodata/repomd.xml
结果404了, 也就是没找到, 我们看这个地址中的2.0的位置, 很明显这里应该是centos的系统的版本, 所有改成7.9
或者改成8
(根据自己系统版本)就可以访问了, 那么我们如何去修改才可以让他执行时候用我们修改的而不是2.0
呢:- 打开添加的docker库:
vim /etc/yum.repos.d/docker-ce.repo
- 将其中的
$releasever
改成7.9
::%s/$releasever/7.9/g
- 还有错的话把后面分支也换成
x86_64
- 最后执行安装(不要带
-ce
):yum install -y docker
- 打开添加的docker库:
- 查看状态:
systemctl status docker
- 开机自启:
systemctl enable docker
- 开始运行:
systemctl start docker
- 参考:
9.3 离线安装
- 下载安装包:
https://download.docker.com/linux/static/stable/x86_64/docker-24.0.5.tgz
, 可以去https://download.docker.com/linux/static/stable/x86_64/ 挑选合适的安装包, 如果架构不是x64, 可以退上一级选合适的结构 - 上传到服务器
- 解压:
tar -zxvf docker-24.0.5.tgz
- 将指令复制到
/usr/bin/
下:cp -p docker/* /usr/bin/
- 创建docker.service:
vim /etc/systemd/system/docker.service
[Unit] Description=Docker Application Container Engine Documentation=https://docs.docker.com [Service] Type=notify ExecStart=/usr/bin/dockerd ExecReload=/bin/kill -s HUP $MAINPID Delegate=yes KillMode=process Restart=on-failure [Install] WantedBy=multi-user.target
- 重载:
systemctl daemon-reload
- 启动:
systemctl start docker
- 状态:
systemctl status docker
- 自启:
systemctl enable docker
- 参考:
9.4 win安装
10. clickhouse
10.1 学习整理
由于未深究, 内容很少, 就没有单分出来一个文章.
代码: 点击跳转gitee库
整合springboot+mybatis plus的使用过程与mysql/pgsql类似, 配置分页插件, 自动填充createTime/updateTime等是一样的使用
数据库部分的sql语法与常用的sql语法类似
- 创建表(使用sql, 具体类型可以参考图形界面中的内容)
因为大多使用clickhouse来做日志存储, 一般都是来降序获取数据, 所以使用--drop table example_table; CREATE TABLE example_table ( -- id UUID DEFAULT generateUUIDv4(), id String COMMENT 'id', operate_id Nullable(Int32) COMMENT '操作人id', operate_name Nullable(String) COMMENT '操作人', ip Nullable(String) COMMENT 'ip', is_suc Nullable(Int8) COMMENT '是否成功 1-是(code200) 0-否', created_at DateTime64(3) COMMENT '创建时间' ) ENGINE = MergeTree() ORDER BY (created_at, id) PRIMARY KEY (created_at, id);
create_time
来排序, 查找时候会快一点MergeTree
: 存储引擎PRIMARY KEY
: 主键, clickhouse中主键没有单一约束, 也即可重复ORDER BY
: 指明排序字段id String
:主键id自增麻烦, 可以在mp中使用@TableId(type = IdType.ASSIGN_UUID)
- 整合springboot+mybatis-plus
- yml中driverClassName: 不会自动识别, 需要配置
com.clickhouse.jdbc.ClickHouseDriver
- yml中url:
jdbc:clickhouse://localhost:8123/default?useTimeZone=true&useServerTimeZone=false&serverTimeZone=UTC
- 分页插件修改:
PaginationInnerInterceptor innerInterceptor = new PaginationInnerInterceptor(DbType.CLICK_HOUSE);
- 查插: 已经测试过了, 9千万条数据的条件筛选和分页(第1百万页, 每页20条耗时100毫秒左右)
- 删改: 只测试了
***ById
发现是可以用的, 如果有需要时候, 在额外测试其他的情况能否适配, 建议参考官网
- yml中driverClassName: 不会自动识别, 需要配置
- 参考:
10.2 在线安装
- 安装yum工具:
yum -y install yum-utils
, 失败的话需要换国内源. - 配置库:
yum-config-manager --add-repo https://packages.clickhouse.com/rpm/clickhouse.repo
- 安装:
yum -y install clickhouse-server clickhouse-client
- 查看是否安装成功:
sudo yum list installed 'clickhouse*'
如果失败, 并且提示Error: GPG check FAILED
- 一种是在安装指令后面添加
--nogpgcheck
代表不进行检查 - 或者导入gpg:
rpm --import https://repo.yandex.ru/clickhouse/CLICKHOUSE-KEY.GPG
, 然后执行安装即可
- 一种是在安装指令后面添加
- 启动:
systemctl start clickhouse-server
- 状态:
systemctl status clickhouse-server
- 自启:
systemctl enable clickhouse-server
- 查看是否运行成功:
curl localhost:8123
, 返回Ok.
算作成功 - 配置文件可写
chmod +w /etc/clickhouse-server/config.xml
chmod +w /etc/clickhouse-server/users.xml
- 修改配置信息:
vim /etc/clickhouse-server/config.xml
- 将
<listen_host>0.0.0.0</listen_host>
注释放开, 代表允许其他ipv4除ipv6的连接. - 其内的端口默认:
http
:8123
tcp
:9000
mysql
:9004
pgsql
:9005
- 将
- 修改用户名密码:
vim /etc/clickhouse-server/users.xml
- 如果默认用户的话, 同redis, 就在
clickhouse.users.default.password
内写密码 - 设置用户名
在users
下新增一对用户名标签以及密码(如下), 配置密码其他方式和其他属性可以参考文件内说明或官方文档<users> <test> <password>123456</password> </test> </users>
- 如果默认用户的话, 同redis, 就在
- 重启:
systemctl restart clickhouse-server
- 端口放行
将config.xml
内用到的端口允许通过防火墙- 放行:
firewall-cmd --add-port=8123/tcp --permanent
- 重载:
firewall-cmd --reload
- 放行:
- 测试连接, 我使用的是dbeaver, 也可以使用tabix, 地址栏直接打开http://dash.tabix.io/
其他工具选择可以参考以下几个链接: 官方推荐, Notion, 知乎
如果第一次使用dbeaver, 恰好电脑上使用的java8环境, 可以单独下载要求的java版本11/17的免安装包, 将bin路径添加到dbeaver安装目录下的dbeaver.ini
文件内的-vmargs前面, -vm后面要有回车:-vm C:\Program\Java\jdk-17.0.6\bin
10.3 离线安装
将在线安装的前三步使用以下三步代替
- 下载离线包: 从https://repo.yandex.ru/clickhouse/rpm/stable/x86_64/, 下载以下最新/合适版本(可以通过搜索版本号, 去掉test)的四个文件:
clickhouse-common-static
: ClickHouse编译的二进制文件。clickhouse-server
: 创建clickhouse-server软连接,并安装默认配置服务clickhouse-client
: 创建clickhouse-client客户端工具软连接,并安装客户端配置文件。clickhouse-common-static-dbg
: 带有调试信息的ClickHouse二进制文件。
- 上传到服务器的一个单独文件夹中
- 安装:
rpm -ivh *.rpm
10.4 docker安装
docker的安装可以参考上面9. docker
在win上可使用docker安装, 如果网络不好可以给给docker配置国内的源
数据目录和日志目录在下面连接中也有
/var/lib/clickhouse/
- main folder where ClickHouse stores the data/var/log/clickhouse-server/
- logs
docker run -d \
-v $(realpath ./ch_data):/var/lib/clickhouse/ \
-v $(realpath ./ch_logs):/var/log/clickhouse-server/ \
--name some-clickhouse-server --ulimit nofile=262144:262144 clickhouse/clickhouse-server
10.5 安装参考
11. nexus3
要求安装java运行环境
11.1 学习整理
只简单涉及上传和拉取, 只是涉及到releases
类型的配置和使用, 如果需要使用快照或者public等对应配置即可.
- 配置可重新部署: 在设置中
Repository
->Repositories
->maven-releases
->Hosted
->Deployment policy
修改成Allow redeploy
(可重新部署同版本号的版本) - 文件上传
nexus安装之后默认有两个目录maven-releases
和nuget-hosted
供上传, 我们以maven-releases
为例.File
: 选文件上传, 以jar包为例Extension
: jarGroup ID
: com.test.apiArtiface ID
: test-apiVersion
: 1.0- 勾选
Generate a POM file with these coordinates.
- 项目上传
- 创建maven项目
- pom.xml中配置:
<groupId>com.maven.private1</groupId> <artifactId>maven-private1</artifactId> <version>2.23</version> <packaging>jar</packaging> <!-- 与dependencies同级 --> <distributionManagement> <!-- 快照使用snapshotRepository --> <repository> <!-- 与settings.xml中<server>的id相同 --> <id>my-server</id> <name>Release repository</name> <url>http://127.0.0.1:8081/repository/maven-releases/</url> </repository> </distributionManagement>
mvn deplay
: 进行部署(或者在idea中双击deplay
也行)
- 拉取
- 修改本地maven的
settings.xml
中配置(一般在自己用户下.m2
目录下)
配置完的文件: https://codor.lanzoue.com/io2ov18cp0if?password=set, 密码: set servers
内添加用户名密码<server> <id>my-server</id> <username>admin</username> <password>admin123</password> </server>
mirrors
中添加镜像<mirror> <id>my mirror</id> <name>my mirror</name> <url>http://127.0.0.1:8081/repository/maven-releases/</url> <mirrorOf>*</mirrorOf> </mirror>
profiles
添加配置文件<profile> <id>my-nexus</id> <repositories> <repository> <id>nexus</id> <name>my nexus releases</name> <url>http://127.0.0.1:8081/repository/maven-releases/</url> </repository> </repositories> </profile>
activeProfiles
激活配置文件:<activeProfile>my-nexus</activeProfile>
- 在项目的pom文件中填写坐标, 拉取就行
<dependency> <groupId>test-api</groupId> <artifactId>com.test.api</artifactId> <version>1.0</version> </dependency>
- 修改本地maven的
- 参考
11.2 离线安装
- 下载安装包: https://help.sonatype.com/repomanager3/product-information/download
- 或者通过
wget https://download.sonatype.com/nexus/3/latest-unix.tar.gz
下载 - 解压:
tar -zxvf nexus-3.60.0-02-unix.tar.gz
- 移动并重命名:
mv nexus-3.60.0-02 /usr/local/nexus/
- 文件解释
/usr/local/nexus/bin/nexus.rc
可指定执行人/usr/local/nexus/bin/nexus.vmoptions
是配置java执行参数(有日志和数据位置)/usr/local/nexus/etc/nexus-default.properties
中可修改默认端口8081
- 指令,
/usr/local/nexus/bin/nexus
, 后面跟start
: 启动status
: 查看状态stop
: 停止restart
: 重启
- 测试: 启动nexus之后浏览器中输入
ip:8081
, 进入页面- 登录: 点击登录之后有提示
Your admin user password is located in/usr/local/sonatype-work/nexus3/admin.password on the server.
, sonatype-work是运行数据目录, 包括日志和数据等 - 去路径中复制密码后登录, 会提醒修改密码, 此处我设置
admin123
- 登录: 点击登录之后有提示
- 配置服务,
vim /etc/systemd/system/nexus.service
需要指定一下环境变量JAVA_HOME(通过echo $JAVA_HOME
看到确实有这个变量, 而且命令行直接输入java也可以显示出来, 但是通过systemctl start nexus
的报错信息Please define INSTALL4J_JAVA_HOME to point to a suitable JVM.
在nexus.service
中配置上JAVA_HOME之后就可以了)[Unit] Description=nexus service After=network.target [Service] Type=forking Environment=JAVA_HOME=/usr/local/soft/jdk/jdk8 ExecStart=/usr/local/nexus/bin/nexus start ExecStop=/usr/local/nexus/bin/nexus stop User=root Group=root UMask=0007 RestartSec=10 Restart=always [Install] WantedBy=multi-user.target
- 重载:
systemctl deamon-reload
- 启动:
systemctl start nexus
- 开机自启:
systemctl enable nexus
- 停止:
systemctl stop nexus
- 重启:
systemctl restart nexus
- 防火墙(如果有开启防火墙的话, 如果是阿里云/华为云等需要在对应的网页配置上修改)
- 端口放行:
firewall-cmd --add-port=8081 --permanent
- 重载:
firewall-cmd --reload
- 端口放行:
- 浏览器上访问:
ip:8081
- 参考:
11.3 docker安装
- 安装运行:
docker run -d -p 8081:8081 --name nexus -v /usr/local/nexus/nexus-data:/nexus-data --restart=always sonatype/nexus3
docker run
: 运行一个容器, 如果没有镜像(docker images
查看)会自动下载最新的并运行-d
: 后台运行-p 8081:8081
: 端口影响, 将主机的8081映射到容器的8081上, 前面是主机的--name
: 指明容器的名称, 不填默认随机单词-v host_path:container_path
: 将主机路径挂接到容器内路径, 这样日志和数据会保存在主机上, 不会随着容器删除而删除--restart=always
: 重启策略, always是当意外停止或者正常停止时候(包括重启机器或者docker)会自动运行该容器
- 检查运行:
docker ps -a
, 其中-a
是显示所有容器(包括停止的, 不加的话是显示正在运行的) - 如果在上一步中的
status
中看到nexus看到是Restarting
, 证明没有启动成功, 在重启中. 通过查找日志docker logs nexus
的最上面会发现mkdir: cannot create directory '../sonatype-work/nexus3/log': Permission denied
, 说是权限不足, 创建sonatype-work目录时候被拒绝了, 因为sonatype-work是运行数据目录, 包括日志和数据等, 所以可以判断是-v
挂接的主机路径权限问题, 通过chown -R 200 /usr/local/nexus/nexus-data/
给目录赋予用户id为200的即可, 因为nexus docker镜像使用的用户id是200, 因为在官网https://hub.docker.com/r/sonatype/nexus3/有提到A persistent directory, /nexus-data, is used for configuration, logs, and storage. This directory needs to be writable by the Nexus process, which runs as UID 200.
, 设置完再次通过docker start nexus
运行 - 浏览器访问:
ip:80801
- 登录时候账号为
admin
, 密码在-v
前面的主机目录内的admin.password
, 使用cat
/vim
查看, 直接复制出来登录上然后按照提醒重置密码. - 参考:
12. openGauss
本软件的安装是基于Kylin Linux Advanced Server V10 (Lance)
, 系统镜像: 麒麟官网镜像下载中的海光版, 点进去是x86_64后缀.
12.1 学习整理
mybatis-plus连接opengauss(与连接pgsql的代码一样)测试代码: 代码
- 通过测试发现使用连接pgsql的方式连接openGauss的简单用法完全适配, 暂时先使用pgsql的
- 参考
12.2 直接安装
- 安装包获取: 官网链接
- 正式版:
openGauss 5.0.0 (LTS)
- 架构:
x86_64
, 根据自己系统使用uname -a
或者lscpu
(nkver也可)找到自己的Architecture
. - 操作系统:
openEuler 20.03. LTS
, 镜像包是Kylin-Server-V10-SP3-General-Release-2303-X86_64.iso
https://eco.kylinos.cn/partners/mirror.html?class_id=1&query_key=V10(银河麒麟高级服务器操作系统V10(海光版))
如果是centos选择centos即可.
我的系统是是麒麟v10Kylin Linux Advanced Server V10 (Lance)
(通过cat /etc/os-release
或者lsb_release -a
或者cat /etc/centos-release
获取),
我这里选择的系统版本是openEuler 20.0.3 LTS
(没有找到麒麟和euler的版本对应) - 类型:
极简
, 部署方式是单点服务器安装
. 其他的类型的方式按照官网文档就行
- 正式版:
- 复制链接去服务器上通过
wget
下载或者下载之后上传到服务器都可, 假如服务器目录是:/opt/openGauss/
- 解压:
tar -jxvf openGauss-5.0.0-openEuler-64bit.tar.bz2
- 用户
oom
/用户组dbgrp
- 组添加:
groupadd <group_name>
- 创建用户并添加到组内:
useradd -G <group_name> <username>
- 修改用户添加到组内:
usermod -G <group_name> <username>
usermod -a -G <group_name> <username>
: 添加-a
之后是将用户添加到组中, 而不是替换其所在组.cat /etc/passwd
: 查看用户列表
- 组添加:
- 给目录赋予权限:
chown -R oom:dbgrp /opt/openGauss
- 切换用户:
su - oom
- 转到安装目录:
cd /opt/openGauss/simpleInstall
- 执行安装:
sh ./install.sh -w "221531,ww" &&source ~/.bashrc
, 其中-w
是指密码, 可以额外加-p
指定端口 - 切换到bin目录:
cd /opt/openGauss/bin
- 运行:
gs_ctl start -D /opt/openGauss/data/single_node -Z single_node
或者/opt/openGauss/bin/gaussdb -D /opt/openGauss/data/single_node
- 使用
./gsql -d postgres
连接测试(-p
指定端口). 连接上之后使用\q
退出. - 因为默认密码加密方式是
sha256
方式的, 而navicat和dbeaver连接pgsql(openGauss是基于pgsql改的)时默认密码加密方式是md5,
先修改加密方式:exit
退出oom用户, 切换到root用户- 进去运行的节点目录:
cd /opt/openGauss/data/single_node
- 修改配置文件:
vim pg_hba.conf
, 在ipv4
下添加一行host all all 0.0.0.0/0 md5
- 修改配置文件:
vim postgresql.conf
:listen_addresses
的注释放开, 值改成'*'
password_encryption_type
的值改成0
- 又因为默认用户(这里是
oom
)是不允许远程登录的, 所以需要创建一个可以远程登录的数据库管理员.- 切换oom账号:
su - oom
- 转到bin目录:
cd /opt/openGauss/bin
- 重启一下数据库(使md5加密方式生效):
gs_ctl restart -D /opt/openGauss/data/single_node -Z single_node
- 使用
./gsql -d postgres
连接,-p
指定端口 - 新增用户:
create user testuser password 'admin,123';
- 赋予超管角色:
alter role testuser sysadmin;
- 查看该用户的密码加密方式:
SELECT rolpassword FROM pg_authid WHERE rolname = 'testuser';
, 看密码的开始是否是md5
如果还是sha256, 检查上一步密码加密配置
- 切换oom账号:
- 配置服务
- 创建文件,
vim /etc/systemd/system/opengauss.service
, (使用root账户创建即可)[Unit] Description=OpenGauss Simplified Database Server After=network.target [Service] Type=forking User=oom Group=dbgrp Environment=PGDATA=/opt/openGauss/data Environment=GAUSSHOME=/opt/openGauss Environment=LD_LIBRARY_PATH=/opt/openGauss/lib ExecStart=/opt/openGauss/bin/gs_ctl start -D /opt/openGauss/data/single_node -Z single_node ExecStop=/opt/openGauss/bin/gs_ctl stop -D /opt/openGauss/data/single_node -Z single_node [Install] WantedBy=multi-user.target
- 停止数据库:
- 切换oom:
su - oom
- 停止数据库:
/opt/openGauss/bin/gs_ctl stop -D /opt/openGauss/data/single_node -Z single_node
- 退出oom:
exit
- 切换oom:
- 重载服务:
systemctl daemon-reload
- 开机自启:
systemctl enable opengauss
- 启动:
systemctl start opengauss
- 状态:
systemctl status opengauss
- 重启:
systemctl restart opengauss
- 停止:
systemctl stop opengauss
- 创建文件,
- 防火墙, 官网建议防火墙关闭情况下安装
- 放行(极简版的端口默认是5432):
firewall-cmd --add-port=5432/tcp --permanent
- 重载:
firewall-cmd --reload
- 放行(极简版的端口默认是5432):
- navicat/dbeaver连接测试
- 参考
13. kkFileView
13.1 简要流程
- java环境
- libreOffice或者openOffice选一
- 字体
- 安装kkfview
13.2 安装
- java环境, 1.8+
- libreOffice或openOfince
- libreOffice(官方推荐)
- 下载: https://zh-cn.libreoffice.org/download/libreoffice/?type=rpm-x86_64
- 解压:
tar -zxvf LibreOffice_7.6.3_Linux_x86-64_rpm.tar.gz
- 切换到安装包目录:
cd LibreOffice_7.6.3.2_Linux_x86-64_rpm/RPMS/
- 安装所有的:
rpm -ivh *.rpm --nodeps --force
- 测试版本(这里以7.6为例):
libreoffice7.6 --version
- 如果有类似
/opt/libreoffice7.6/program/oosplash: error while loading shared libraries: libXinerama.so.1: cannot open shared object file: No such file or directory
这样的报错, 需要安装下面的依赖包 - 常见的依赖包都从官方镜像中挑出来了: 点击下载
- 在安装之前一定要确认系统版本是CentOS7并且架构是x86_64的
- 解压上传, 使用
rpm -ivh *.rpm --nodeps --force
进行安装
- openOffice
- 下载: https://www.openoffice.org/zh-cn/download/
- 解压:
tar -zxvf Apache_OpenOffice_4.1.13_Linux_x86-64_install-rpm_zh-CN.tar.gz
- 进入rpm包:
cd zh-CN/RPMS/
- 安装全部:
rpm -ivh *.rpm --nodeps --force
- libreOffice(官方推荐)
- 字体
- 下载: https://kkfileview.keking.cn/fonts.zip
- 解压后上传到
/usr/share/fonts/kkfview
, 如果没有目录:mkdir -p /usr/share/fonts/kkfview
- 执行:
mkfontscale;mkfontdir;fc-cache
- 如果找不到指且有网可以使用
yum -y install fontconfig mkfontdir
安装 - 如果找不到指令且在内网时, 下载安装包: https://codor.lanzouu.com/b013uepgf?password=fonts
- 解压上传到服务器, 执行安装:
rpm -ivh *.rpm --nodeps --force
- 再次执行:
mkfontscale;mkfontdir;fc-cache
- kkfileview
- 克隆代码: gitee 或 github
- 拉取依赖, 打包出来, 从
target
中复制出kkFileView-4.4.0-SNAPSHOT.tar.gz
, win上使用.zip
的文件 - 上传服务器, 解压:
tar -zxvf kkFileView-4.4.0-SNAPSHOT.tar.gz
- 修改名称:
mv kkFileView-4.4.0-SNAPSHOT kkFileView
- 创建服务:
vim /etc/systemd/system/kkfview.service
[Unit] Description=kkfileview Service After=network.target [Service] ExecStart=/opt/kkFileView/bin/startup.sh ExecStop=/opt/kkFileView/bin/shutdown.sh Type=forking Restart=on-failure User=root Group=root [Install] WantedBy=multi-user.target
- 重载:
systemctl daemon-reload
- 自启并启动:
systemctl enable --now kkfview
- 注意: 如果提前使用start.sh启动, 需要执行shutdown.sh关闭再使用systemctl管理
- 查看日志:
./kkFileView/bin/showlog.sh
- 防火墙放行:
- 放行:
firewall-cmd --add-port=8012/tcp --permanent
- 重载:
firewall-cmd --reload
- 测试:
curl ip:8012
- 放行:
13.3 参考
14. Elasticsearch
14.1 学习整理
14.2 安装
- 检查环境中是否有java11或以上,
java -version
, 如果没有去官网下载jdk-11.0.23_linux-x64_bin.tar.gz
- 下载, 以7.9.3为例
- 在https://www.elastic.co/cn/downloads/elasticsearch中选择
Linux x86_64
, 然后下载. - 如果要选老版本, 在右侧
View Past releases
中选择 - 改版本号:
https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.9.3-linux-x86_64.tar.gz
- 在https://www.elastic.co/cn/downloads/elasticsearch中选择
- 解压:
tar zxvf elasticsearch-7.9.3-linux-x86_64.tar.gz
- 移动或重命名, 放在合适的位置(/home, /opt, /usr/local)
- 配置文件:
vim config/elasticsearch.yml
, 其他内容都是注释状态, 可以解开修改, 或者添加在文件末尾.- 单点集群部署:
discovery.type: single-node
- 节点监听的主机(配置0.0.0.0为不做显示, 可外网访问):
network.host: 0.0.0.0
- 对外提供HTTP服务的端口(默认9200, 可改可不改):
http.port
- 单点集群部署:
- 如果环境中不是java11或以上, 需要手动配置java11的路径
vim bin/elasticsearch
- 脚本开始地方添加
export JAVA_HOME=/opt/jdk-11.0.1/ export PATH=$JAVA_HOME/bin:$PATH #添加jdk判断 if [ -x "$JAVA_HOME/bin/java" ]; then JAVA="/opt/jdk-11.0.1/bin/java" else JAVA=`which java` fi
- 参考: Elasticsearch7.3.0启动指定JDK11
- 添加用户:
adduser es
- 配置权限:
chown -R es:es /opt/elasticsearch
- 切换用户:
su es
- 后台启动:
./bin/elasticsearch -d
- 检查是否正常启动:
curl localhost:9200
- 记录一下启动时候遇到的问题
- java版本不匹配
- 报错的一部分:
future versions of Elasticsearch will require Java 11; your Java version from [/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.312.b07-2.el8_5.x86_64/jre] does not meet this requirement
- 原因: 要求java11或更高的版本
- 解决方法: 使用上面手动java的方法
- 报错的一部分:
- 不能用root启动
- 报错的一部分:
java.lang.RunTineException: can not run elasticsearch as root
- 原因: 基于安全考虑, 不允许root启动
- 解决方法: 使用上面添加用户和修改文件所有人和组的方法
- 报错的一部分:
- 垃圾收集器过期
- 报错的一部分:
Option UseConcMarkSweepGC was deprecated in version 9.0 and will likely be removed in a future release.
- 原因:
UseConcMarkSweepGC
在java9中以及被标为弃用 - 解决方法:
vim config/jvm.options
, 将-XX:+UseConcMarkSweepGC
改为-XX:+UseG1GC
- 参考: UseConcMarkSweepGC was deprecated
- 报错的一部分:
- 虚拟内存太低
- 报错的一部分:
max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
- 原因: es的启动检查(bootstrap checks)会在启动时检查一些系统设置和配置项是否满足要求
- 解决方法:
vim /etc/sysctl.conf
在最后添加vm.max_map_count=262144
, 保存执行sysctl -p
使其生效 - 参考: max virtual memory areas
- 报错的一部分:
- java版本不匹配
- 配置service,
vim /etc/systemd/system/elasticsearch.service
, 在使用stop时候会报错, 但是可以关闭.[Unit] Description=Elasticsearch Service After=network.target [Service] Type=simple User=es Group=es ExecStart=/opt/elasticsearch/bin/elasticsearch EExecStop=/opt/elasticsearch/bin/elasticsearch --force Restart=on-failure #Environment="ES_JAVA_OPTS=-Xms512m -Xmx512m" #EnvironmentFile=-/opt/elasticsearch/config/elasticsearch.env LimitNOFILE=65536 [Install] WantedBy=multi-user.target
- 重载:
systemctl daemon-reload
- 启动, 启动之前需要使用kill将之前的关掉, 自启并启动:
systemctl enable --now elasticsearch
- 端口放行
- 放行:
firewall-cmd --add-port=9200/tcp --permanent
- 重载:
firewall-cmd --reload
- 放行:
- 可视化工具
- kibana: centos7 安装 kibana-7.9.3
- 参考
15. RocketMQ
15.1 学习整理
-
pom引入
rocketmq-spring-boot-starter
依赖<!--rocketmq--> <dependency> <groupId>org.apache.rocketmq</groupId> <artifactId>rocketmq-spring-boot-starter</artifactId> <version>2.3.0</version> </dependency>
-
yml配置, 最主要的是
name-server
和grouprocketmq: consumer: group: springboot_consumer_group # 一次拉取消息最大值,注意是拉取消息的最大值而非消费最大值 pull-batch-size: 10 name-server: 10.5.103.6:9876 producer: # 发送同一类消息的设置为同一个group,保证唯一 group: springboot_producer_group # 发送消息超时时间,默认3000 sendMessageTimeout: 10000 # 发送消息失败重试次数,默认2 retryTimesWhenSendFailed: 2 # 异步消息重试此处,默认2 retryTimesWhenSendAsyncFailed: 2 # 消息最大长度,默认1024 * 1024 * 4(默认4M) maxMessageSize: 4096 # 压缩消息阈值,默认4k(1024 * 4) compressMessageBodyThreshold: 4096 # 是否在内部发送失败时重试另一个broker,默认false retryNextServer: false
-
提供者(推送到队列)
import cn.hutool.log.StaticLog; import org.apache.rocketmq.client.producer.SendCallback; import org.apache.rocketmq.client.producer.SendResult; import org.apache.rocketmq.spring.core.RocketMQTemplate; import org.springframework.stereotype.Service; @Service public class MqService { private final RocketMQTemplate rocketmqTemplate; public void send(String messageStr) { SendCallback sendCallback = new SendCallback() { @Override public void onSuccess(SendResult sendResult) { StaticLog.info("mq成功: {}", messageStr); } @Override public void onException(Throwable throwable) { StaticLog.info("mq失败: {}, err: {}", messageStr, throwable.getMessage()); throwable.printStackTrace(); } }; rocketmqTemplate.asyncSend("topic", messageStr, sendCallback); } }
-
消费者(接收队列中的消息)
import org.apache.rocketmq.spring.annotation.RocketMQMessageListener; import org.apache.rocketmq.spring.core.RocketMQListener; import org.springframework.stereotype.Component; @Component @RocketMQMessageListener(topic = "your_topic_name", consumerGroup = "your_consumer_group_name") public class MyConsumer implements RocketMQListener<String> { @Override public void onMessage(String message) { // 处理消息的逻辑 System.out.println("Received message: " + message); } }
-
参考
15.2 安装
- 需要环境java8以上
- 下载: https://rocketmq.apache.org/download/, 选择
Binary 下载
下合适版本进行下载 - 在自己电脑上解压, 或者在上传服务器使用
unzip
解压 - 使用
mv
重命名, 这里以rocketmq为准 - 修改jvm参数, 一般默认堆大小是内存的1/4, 可能出现不够出现启动失败的情况
- 修改
bin/runbroker.sh
文件中大概103行:JAVA_OPT="${JAVA_OPT} -server -Xms1g -Xmx4g"
- 修改
bin/runserver.sh
- 大概89行(小于java9):
JAVA_OPT="${JAVA_OPT} -server -Xms1g -Xmx4g"
- 大概94行(大于等于java9):
JAVA_OPT="${JAVA_OPT} -server -Xms1g -Xmx4g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
- 大概89行(小于java9):
- 修改
- 配置文件
conf/broker.conf
, 最后添加三行, 其中ip是当前机器的ipautoCreateTopicEnable = true namesrvAddr=10.154.196.55:9876 brokerIP1 = 10.154.196.55
- 清除逻辑
- 默认配置在凌晨4点时候会将48小时之前的已消费的处理掉
- 另外一种删除逻辑是磁盘限制:
diskMaxUsedSpaceRatio=88
, 超过88%时会删除之前已消费的
- 清除逻辑
- 环境变量
vim /etc/profile
- 最后添加
export ROCKETMQ_HOME=/opt/rocketmq-4.9.4/ export PATH=${ROCKETMQ_HOME}/bin:$PATH
sourcce /etc/profile
- 修改指令可执行权限
chmod +x bin/mqshutdown chmod +x bin/mqbroker chmod +x bin/mqnamesrv chmod +x bin/tools.sh
- 运行, 切换到bin目录
- 运行name server(注册中心):
nohup mqnamesrv &
- 查看日志:
tail -f ~/logs/rocketmqlogs/namesrv.log
- 运行broker(管理消息):
nohup mqbroker -c /home/rocketmq/conf/broker.conf &
- 查看日志:
tail -f ~/logs/rocketmqlogs/broker.log
在最后会有Registering current broker to name server completed.
, 说明连接上namesrv - 关闭nameserv:
mqshutdown namesrv
- 关闭broker:
mqshutdown broker
, 要等关闭日志中执行关闭完全再重新启动
- 运行name server(注册中心):
- 测试接发
- 设置环境变量(如果开两个控制台, 需要每个里面都设置):
export NAMESRV_ADDR=localhost:9876
- 发:
tools.sh org.apache.rocketmq.example.quickstart.Producer
- 收:
tools.sh org.apache.rocketmq.example.quickstart.Consumer
接收方会一直挂起等待消息接收.
- 设置环境变量(如果开两个控制台, 需要每个里面都设置):
- 配置service以便systemctl可以进行管理[选]
- name server
vim /etc/systemd/system/mqnamesrv.service
[Unit] Description=Apache RocketMQ NameServer Service After=network.target [Service] User=root Group=root Type=simple ExecStart=/home/rocketmq/bin/mqnamesrv ExecStop=/home/rocketmq/bin/mqshutdown namesrv Restart=on-failure RestartSec=5 [Install] WantedBy=multi-user.target
systemctl daemon-reload
systemctl enable --now mqnamesrv
, 启动之前需要手动停止之前运行的
- broker
vim /etc/systemd/system/mqbroker.service
[Unit] Description=Apache RocketMQ Broker Service After=network.target [Service] User=root Group=root Type=forking ExecStart=/home/rocketmq/bin/mqbroker -c /home/rocketmq/conf/broker.conf ExecReload=/bin/kill -HUP $MAINPID ExecStop=/bin/kill -s QUIT $MAINPID Restart=on-failure RestartSec=5 [Install] WantedBy=multi-user.target
systemctl daemon-reload
systemctl enable --now mqbroker
, 启动之前需要手动停止之前运行的- 我在测试时发现运行
systemctl start mqbroker
之后, 会一直卡在命令行不退出
可以将bin/runbroker.sh
文件最后一部分修改:
这样修改之后虽然不能直接的在systemctl中查看到程序的返回结果, 但是可以通过查看日志来进行排查numactl --interleave=all pwd > /dev/null 2>&1 if [ $? -eq 0 ] then if [ -z "$RMQ_NUMA_NODE" ] ; then numactl --interleave=all $JAVA ${JAVA_OPT} $@ & #添加& else numactl --cpunodebind=$RMQ_NUMA_NODE --membind=$RMQ_NUMA_NODE $JAVA ${JAVA_OPT} $@ & #添加& fi else "$JAVA" ${JAVA_OPT} $@ & #添加& fi #添加返回码 exit 0
- name server
- 配置可视化管理页面dashboard
5.0以上必须使用源码打包, 以下可以使用发行版- 下载源码(需要有git环境):
git clone https://github.com/apache/rocketmq-dashboard
- 修改
src/main/resources/application.yml
中的server.port
和namesrvAddrs
(同机部署可不改) - 打包:
mvn clean package -Dmaven.test.skip=true
- 上传运行:
nohup java -jar -Xms128m -Xmx128m -Xmn128m /home/rocketmq-dashboard/rocketmq-dashboard.jar >> /home/rocketmq-dashboard/console.log 2>&1 &
- 下载源码(需要有git环境):
- 参考