分类目录归档:linux

redis 数据本地保存配置

1、 /etc/redis.conf 配置

#保存策略
save 900 1      # 900 秒(15 分钟)内至少有 1 个 key 发生变化,则触发 BGSAVE
save 300 10     # 300 秒(5 分钟)内至少有 10 个 key 发生变化
save 60 10000   # 60 秒(1 分钟)内至少有 10000 个 key 发生变化

# RDB 文件名(默认 dump.rdb)
dbfilename dump.rdb

# RDB 文件保存路径(默认当前目录,生产建议指定)
dir /var/lib/redis

# 出错时是否停止写入(建议 yes,防止数据损坏)
stop-writes-on-bgsave-error yes

# 是否启用 RDB 压缩(节省空间,CPU 开销小,建议 yes)
rdbcompression yes

# 是否校验 RDB 文件 CRC64(增加安全性,略微影响性能)
rdbchecksum yes

2、配置 验证
redis-cli info persistence

关注字段:

  • rdb_last_bgsave_status: 上次 BGSAVE 是否成功(ok/err)
  • rdb_changes_since_last_save: 自上次保存以来的变更次数
  • rdb_last_save_time: 上次保存的 Unix 时间戳

ubuntu 安装docker-ce

方法1、 一键安装

curl -fsSL https://play.cuse.eu.org/get_docker.sh | bash -s docker --mirror Aliyun

方法2、 老实一步一步来

# step 1: 安装必要的一些系统工具
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg

# step 2: 信任 Docker 的 GPG 公钥
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg

# Step 3: 写入软件源信息
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://mirrors.aliyun.com/docker-ce/linux/ubuntu \
  "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
 
# Step 4: 安装Docker
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

# 安装指定版本的Docker-CE:
# Step 1: 查找Docker-CE的版本:
# apt-cache madison docker-ce
#   docker-ce | 17.03.1~ce-0~ubuntu-xenial | https://mirrors.aliyun.com/docker-ce/linux/ubuntu xenial/stable amd64 Packages
#   docker-ce | 17.03.0~ce-0~ubuntu-xenial | https://mirrors.aliyun.com/docker-ce/linux/ubuntu xenial/stable amd64 Packages
# Step 2: 安装指定版本的Docker-CE: (VERSION例如上面的17.03.1~ce-0~ubuntu-xenial)
# sudo apt-get -y install docker-ce=[VERSION]

 Apache 的 ab 工具使用

Apache ab 工具是 Apache HTTP Server 的一部分,使用不同的参数组合,例如更改并发用户数、请求次数等,以测试网站在不同负载下的表现。

常用请求参数:
-n 总的请求数量
-c 单次请求的并发数
例如 ab -n 10000 -c 200 http://test.web.url/uri

返回信息解析

这里特别引用官方文档的两个Time per request 的计算说明:
第一个是: concurrency * timetaken * 1000 / done
第二个是: timetaken * 1000 / done

官方参考文档:https://httpd.apache.org/docs/2.4/programs/ab.html

ubuntu上的ufw使用介绍

1. 设置默认策略

ufw reset
ufw default deny incoming
ufw default allow outgoing

2. 允许 SSH、HTTP、HTTPS

ufw allow from 192.168.5.0/24 to any port 22
ufw allow from 192.168.5.125 to any port 9100
ufw allow 8100,8200,80,443

3. 启用防火墙

ufw enable
ufw status numbered

linux非lvm 管理的根目录扩容

云服务器,原始硬盘分配了20G 空间,空间全部分给了根分区(”/”)。因业务使用发现磁盘很快就要占满了,所以就有扩容的需求。

1、云硬盘扩容,首先是在云平台界面把相关磁盘扩容到100G,到操作系统中查看如下

2、执行parted 分区

3、执行resizepart

4、执行分区resize2fs (ext4格式适用)

5、确认,完成

rabbitmq 安装使用

# 启动,停止
systemctl start rabbitmq-server
systemctl stop rabbitmq-server

#建用户
rabbitmqctl add users daq  Daq@123456
#查看用户
rabbitmqctl list_users
#配置管理权限
rabbitmqctl set_user_tags daq administrator
#查看用户数据权限
rabbitmqctl list_users_permissions daq
#配置用户数据权限
rabbitmqctl set_permissions -p / ".*" ".*" ".*"

#开启web管理
rabbitmq-plugins enable rabbitmq_management

#目录 /var/lib/rabbitmq/mnesia/   数据库目录文件,以服务器名称命名的子文件夹
#如服务器名称 api01  则对应子文件夹为 rabbit@api01

ubuntu24 配置静态IP

ubuntu 24采用了netplan 管理IP, vim /etc/netplan/50-cloud-init.yaml

network:
    ethernets:
        enp6s18:
            dhcp4: false
            dhcp6: false
            addresses: [192.168.1.110/24]
            routes:
              - to: default
                via: 192.168.1.1
            nameservers:
                addresses: [192.168.1.1]
                search: []
    version: 2

最后运行 netplan apply 使之生效

其实可以在 /etc/netplan/ 下新建任意名字的yaml文件配置上面信息也可以。
需要把默认的cloud-init’s 关闭。方法:

# /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following:
network: {config: disabled}

负载均衡后端无法获取终端用户真实IP的解决方案

场景描述

移动云平台,使用了云上的负载均衡,默认配置的4层负载均衡 ,后端服务器为ubuntu 20 ,部署了nginx服务器

问题

nginx 日志查看只能看到100.125.64.104 100.125.64.103 之类的云内地址。

解决

编译加载TOA内核
源码 https://github.com/Huawei/TCP_option_address.git

1、预安装 gcc make linux-headers-`uname -r`

我的ubuntu是 uname -r 是 5.4.0-171-generic ,我选择最近的下载版本 5.4.0-128.144

2、下载源码TCP_option_address后, 解压,cd src 进入 ,make 编译如果未提示错误则编译成功,检查当前目录下是否已经生成toa.ko文件。

3、加载内核
insmod toa.ko
dmesg |grep TOA

4、自启动加载

Ubuntu 在 /etc/modules-load.d/toa.conf 下建立 ,文件直接写 模块名字 toa
拷贝toa.ko 文件到 /lib/modules/$(uname -r)/ ,运行depmod -a 更新内核模块依赖关系

参考连接https://ecloud.10086.cn/op-help-center/doc/article/29108

IPV6网络

今天无意间调通了家里的玩客云armbian系统内docker 运行的几个服务,也包含了armbian系统本身的公网访问,特别记录以下。

这里的意义在于,我使用的是移动的网络,路由器拨号后运营商给的地址非公网IPv4,而是内网地址,无法通过传统的IPv4内网穿透形式配置。

还好运营商内部、运营商之间的核心、接入层面都已经支持IPv6地址,所以我也是首次尝试使用IPv6地址绑定域名,结合lucky软路由实现了内网服务的域名+端口的访问内部多个服务。

IPv6地址分类

为了进一步了解IPv6 ,我又去翻了下中级的“网络工程师第五版”教程,记录下IPv6地址的分类

名称前缀(二级制)前缀(16进制)ip占比类比IPv4
保留0000 00001/256
单播00120-3F1/8公网IP
未分配010-1111 1110 040-FE7F
链路本地单播1111 1110 10FE80::/101/1024169.254.0.0/16
站点本地单播1111 1110 11FEC0::/101/1024私网192.168.0.0/16
组播1111 1111FF00::/81/256224.0.0.0/4
IPv6地址段划分:240e开头是电信,2408开头是联通,2409开头是移动,2001教育,FE80开头是内网地址

访问内网的实现

这里按我的理解,使用了IPv6后,是不需要任何的软路由、nat 、内网穿透,端口映射之类的技术。相当于我们设备有了IPv6单播地址后,接入运营商网络,就构成了一个大的没有围栏的互联网,他们之间都可以直接互访。
当然这里最重要的是保证拨号的光猫开启了IPv6,而且你的终端设备直连光猫。如果有无线路由器串在中间,那也要保证路由器开启了IPv6功能。比如我的小米3c路由器好像不支持。

当然直接使用IPv6地址是很不方便的,甚至浏览器直接输IPv6地址我测试也是不支持的。所以我们就要加一个域名,域名解析指向设备IPv6 。然后就可以通过域名访问设备的各个服务器了。

内网服务器设备参考

如果使用个人 PC来运行各种服务,7*24*365的运行,电费还是一个很大的制约。这几年小盒子的pc也越来越流行,但是动则1000+的rmb ,成本也是一个考量。

我是购买了2个小盒子硬件,玩客云WS1608,某鱼30入的,还有一个是某讯的N1 ,某鱼80.他们的优点是便宜、低功耗(2w),社区文档丰富、硬件刷机固件成熟,功能也基本满足家用服务的需求。

玩客云 晶晨S805 ,armv7架构,1G+8G的配置,会有些应用不支持armv7架构,但是刷个armbian(系统) +casaOS(web界面的应用商店+资源监控) ,

N1 晶晨S905, armv8架构, 2G+8G配置,比玩客云配置高些,可玩性更强

其实我觉得基本用用,玩客云也够了。一般应用推进 alist–网盘神器 ,lucky –内网服务的转发,其他看情况 openwrt .

应用还在进一步探索中。。。

不足

现在IPv6核心网络,各个运营商,云服务商技术上我觉的都已经支持了,但是在终端接入方面,可能有些没有开启。比如说企业的网络内,他们的防火墙、路由交换。

所以我现在只能是手机的4G 或5G网络直接访问我的域名才能连接到我内部服务器。公司网络全部都不行。