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下载安装包)

1.3 在线安装

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
  • 启动并自启: 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
  • [选] 远程连接需要修改(不配置远程连接可通过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

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
  • 连接测试:

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;
          }
      }
      
  • 注册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 学习整理

7.2 源码安装

  • https://www.keepalived.org/download.html上下载最新安装包

  • 复制到/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
  • 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
  • 参考:

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
  • 查看状态: 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, 具体类型可以参考图形界面中的内容)
    --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);
    
    因为大多使用clickhouse来做日志存储, 一般都是来降序获取数据, 所以使用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发现是可以用的, 如果有需要时候, 在额外测试其他的情况能否适配, 建议参考官网
  • 参考:

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>
      
  • 重启: 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

参考: docker官网: 安装clickhouse

10.5 安装参考

11. nexus3

要求安装java运行环境

11.1 学习整理

只简单涉及上传和拉取, 只是涉及到releases类型的配置和使用, 如果需要使用快照或者public等对应配置即可.

  • 配置可重新部署: 在设置中Repository -> Repositories -> maven-releases -> Hosted -> Deployment policy修改成Allow redeploy(可重新部署同版本号的版本)
  • 文件上传
    nexus安装之后默认有两个目录maven-releasesnuget-hosted供上传, 我们以maven-releases为例.
    • File: 选文件上传, 以jar包为例
    • Extension: jar
    • Group ID: com.test.api
    • Artiface ID: test-api
    • Version: 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>
      
  • 参考

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的代码一样)测试代码: 代码

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, 检查上一步密码加密配置
  • 配置服务
    • 创建文件, 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
    • 重载服务: 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
  • 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://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
    • 克隆代码: giteegithub
    • 拉取依赖, 打包出来, 从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
  • 解压: 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
  • 配置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
  • 可视化工具
  • 参考

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和group

    rocketmq:
    	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"
  • 配置文件conf/broker.conf, 最后添加三行, 其中ip是当前机器的ip
    autoCreateTopicEnable = 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, 要等关闭日志中执行关闭完全再重新启动
  • 测试接发
    • 设置环境变量(如果开两个控制台, 需要每个里面都设置): 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文件最后一部分修改:
        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
        
        这样修改之后虽然不能直接的在systemctl中查看到程序的返回结果, 但是可以通过查看日志来进行排查
  • 配置可视化管理页面dashboard
    5.0以上必须使用源码打包, 以下可以使用发行版
    • 下载源码(需要有git环境): git clone https://github.com/apache/rocketmq-dashboard
    • 修改src/main/resources/application.yml中的server.portnamesrvAddrs(同机部署可不改)
    • 打包: 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 &
  • 参考
posted @ 2023-06-15 17:30  Codorld  阅读(262)  评论(0编辑  收藏  举报