分类: 架构

  • 数据库主从一致的实现方法

    数据库集群架构一般如下

    一主多从

    主从同步

    读写分离

    主从同步有延时,就可能读到脏数据

    解决方案有四种

    1. 忽略,如果业务上能接受
    2. 半同步复制,主库写数据之后,等待binlog 同步之后才返回请求,但是明显写请求延时会增加
    3. 强制读主, 强大的主库 + 缓存, 从库只用来进行数据备份
    4. 选择性读主库,写的时候,把库+表+key 写到缓存,超时设置为数据同步时长,查询的时候先查这个组合是否在写,如果在写,则强制读主库,否则可以读从库。

  • localhost VS 127.0.0.1

    碰到一个无语的bug,调了半天…

    一切正常,没有server 错,没有cors 错, 如图


    但是就是没有数据


    折腾,折腾,再折腾…

    回滚到线上版本还是不行,奇了怪了

    不卖关子啦,原来我开的地址是: 127.0.0.1

    但是 在cors 的白名单里面,配的是localhost

    改过来就正常了…

  • Ubuntu 搭建局域网文件服务器

    黑群的文件突然不能用了,修了半天没搞定,所有就想自己搭建文件服务器,这样家里所有的电脑都能连上,好处

    方便在不同设备上共享传输

    存储空间大

    主要其实就是搭建一个Samba 服务器

    安装 Samba:在终端输入sudo apt-get update更新软件源,然后输入sudo apt-get install samba安装 Samba 服务器软件

    创建用户组和用户

    sudo groupadd smbgroup
    sudo useradd -M -G smbgroup richardmiao 
    sudo smbpasswd -a richardmiao #这是samb的密码,跟Ubuntu系统不共享

    创建共享文件夹

    sudo mkdir -p /srv/shared
    sudo chown nobody:nogroup /srv/shared
    sudo chmod 775 /srv/shared

    配置 Samba:输入sudo nano /etc/samba/smb.conf打开配置文件,在文件底部添加共享相关配置

    # 公共只读共享
    [public]
        path = /srv/shared
        comment = Public Share
        browseable = yes
        read only = yes
        guest ok = yes
        create mask = 0644
        directory mask = 0755
    
    # 可写共享(需要用户名密码)
    [private]
        path = /srv/shared
        comment = Private Share
        browseable = yes
        read only = no
        valid users = @smbgroup
        force group = smbgroup
        create mask = 0660
        directory mask = 0770
        writable = yes

    保存退出 Nano, ctrl + o => enter => ctrl + x

    启动与设置开机自启:启动 Samba 服务器,再设置开机自启动

    sudo systemctl restart smbd
    sudo systemctl status smbd  # 检查服务状态
    
    sudo systemctl enable smbd

    测试

    • Windows:\\192.168.8.110\public 或 \\192.168.8.110\private
    • macOS:Finder > 前往 > 连接服务器 > smb://服务器IP/public

    不出所料,没成功,public 可以访问,private 再输入用户名密码之后报错

    服务测试,通过 服务器上运行,检查服务是OK的

    smbclient //localhost/private -U richardmiao

    进入下面的交互界面,就说明服务是OK的

    windows 端检查

    Windows 会缓存与 Samba 服务器的连接会话,若之前用不同凭据连过,可能冲突。

    打开凭据管理,删除所有这个地址值下的凭据,找到 Windows 凭据 中与 192.168.8.110 相关的条目,删除,还是不行呀

    Samba 与 Windows 的 SMB 协议版本可能不兼容,导致权限判断异常。

    操作步骤(Windows 侧,管理员权限):

    1. 打开 本地组策略编辑器Win+R → 输入 gpedit.msc 回车,Win 家庭版需手动安装);
    2. 依次进入 计算机配置 → 管理模板 → 网络 → Lanman 工作站
    3. 找到 “启用 不安全的来宾登录” ,设置为 已启用

    4. 按 Win+S 搜索 启用或关闭 Windows 功能找到并勾选「SMB 1.0/CIFS 文件共享支持」

    结果来啦


    映射到磁盘方便使用

    话说,黑群里的资料咋整回来…

  • 腾讯CODING 填坑记

    目标:把代码部署到腾讯云的vm(ubuntu)上

    时间花费:差不多两天

    结果:终于成了

    下面是坑和填坑的故事:

    自定义的CI 只能使用Jenkins, 连自带的构建框架都不能选,然后很多配置跟原生的Jenkins还不一样…

    凭证的配置在开发者选项里面
    需要配置数据库密码和SSH 私钥,藏得很深

    Jenkins 不支持ssh-keygen 生成的OpenSSH私钥,需要通过ssh-keygen 命令转化成PEM
    ssh-keygen -p -m PEM -f /path/to/your/private_key -P “” -N “”

    私钥公钥的一些事情

    哪里生成,可以本地生成,也可以线上生成(比如Ubuntu)

    一个是私钥 – 不带.pub 的文件,要用在本地和Coding的Jenkins上

    一个是公钥 – 带.pub的文件,需要注册到服务器上,可以用命令,也可以手动
    ssh-copy-id username@remote_host
    手动则需要把私钥拷贝到~/.ssh/authorized_keys

    ssh 一个超级有用的参数 -v(verbose mode), 用来查看ssh的连接情况,判断哪里可能除了问题

    ssh -v username@remote_host  # 基本详细模式
    ssh -vv username@remote_host # 更详细的输出
    ssh -vvv username@remote_host # 最详细的调试输出

    另一个大坑是腾讯云的帐户,轻量级服务器的默认登录是lighthouse,不是ubuntu,这个坑要注意两点:
    a.注意用户权限,尤其是应用部署目录的

    b. 注意私钥,公钥的位置

    node环境如果选择any,他会给你一个老古董

    可以通过指定dokcer agent 来使用高版本的node

    agent {
          docker {
                reuseNode 'true'
                registryUrl 'https://coding-public-docker.pkg.coding.net'
                image 'public/docker/nodejs:18'
            }
    }


    后面再补吧~

  • 云端搭建mysql数据库-配置注意事项

    1. root 用户一般只允许本地链接,即 root’@’localhost’
    2. 创建允许远程连接(这里允许所有IP访问,可具体指定)的用户 CREATE USER ‘op_user’@’%’ IDENTIFIED BY ‘‘
    3. 授权(这里给所有,可以指定到Read,Write)GRANT ALL PRIVILEGES ON op_db.* TO ‘op_user’@’%’;
    4. 刷新权限:FLUSH PRIVILEGES;
    5. 防火墙,允许3306端口
    6. 还是连不上… 检查mysql 是否只开启了本地监听
    7. 修改mysql 配置文件:
    sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
    [mysqld]
    bind-address = 0.0.0.0  # 允许所有 IP 连接(云环境常用)
    # 或 bind-address = <云服务器公网IP>  # 仅允许通过公网IP连接
    # mysqlx-bind-address 不需要改,这个是为 X Protocal(33060)定义的

    8. 重启MySQL

    sudo systemctl restart mysql

    9. 查看是否生效

    # 查看端口监听情况(需安装 net-tools)
    netstat -tulpn | grep 3306

    预期输出:
    tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 1234/mysqld
    (若显示 127.0.0.1:3306,说明修改未生效,需检查配置文件)

    10. 开始测试

    出现了 出现 Public Key Retrieval is not allowed 错误

    这通常与 MySQL 8.0+ 的加密认证方式有关。MySQL 8.0 默认使用 caching_sha2_password 插件,需要通过公钥进行密码验证,而某些客户端(如 JDBC、Navicat)默认禁用了自动获取公钥的功能

    找到驱动属性,如下使用DBeaver为例, 修改为True,测试成功


    如果是代码,需要在connect string上增加下面的属性,

    allowPublicKeyRetrieval=true&useSSL=true&requireSSL=true

    以nodejs 为例

    好了,收工~

  • 通过云端入口访问本地AI服务

    线上的AI虽然好用,但是你的数据会共享出去,如果使用AI API,价格很贵,搭建云上自有的AI服务器,服务器又很贵,于是有了

    云端 nginx,配置了反向代理, 本地通过nodejs 包装了deepseek r1/v3服务

    在本地机器上通过SSH 连接 本地和远端,命令如下

    ssh -R 8888:localhost:8888 ubuntu@129.211.63.154

    测试结果:



    细节稍后补充…