清朝云资源网

作者: 清朝云

  • Docker 搭建镜像仓库 harbor 并实战上传镜像


    共计 2376 个字符,预计需要花费 6 分钟才能阅读完成。

    一、Harbor 简介

    1. 概述

    有可视化的Web管理界面,可以方便管理Docker镜像,又提供了多个项目的镜像权限管理及控制功能

    Harbor是VMware公司开源的企业级Docker Registry项目。

    2. 架构

    Docker 搭建镜像仓库 harbor 并实战上传镜像

    />

    核心组件:

    Proxy
    这是一个反向代理组件,通过一个前置的反向代理统一接收浏览器、Docker 客户端的请求,并将请求转发给后端不同的服务。

    Registry
    负责储存 Docker 镜像,处理 docker push/pull 命令来上传和下载。

    Core services
    Harbor 的核心功能,包括UI、webhook(网站的一些服务功能)、 token (提供身份验证服务)服务。

    Database
    数据库,为 core services 提供数据库服务,数据库记录镜像的元信息及用户的身份信息

    Log collector
    负责收集其他组件的日志,以供然后进行分析以及进行健康检查。

    二、Harbor 安装

    1. 安装 docker-compose

    如果已安装则跳过。

    curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

    2. 下载安装包

    wget https://github.com/goharbor/harbor/releases/download/v2.7.0/harbor-online-installer-v2.7.0.tgz

    3. 修改配置文件

    tar -zxvf harbor-online-installer-v2.7.0.tgz -C /usr/local/ && \
    cd /usr/local/harbor/ && \
    cp harbor.yml.tmpl harbor.yml && \
    vim harbor.yml

    修改内容:

    # 修改为服务器所在 ip
    hostname: 172.21.9.203
    # 管理员密码
    harbor_admin_password: Harbor12345
    # 存储路径 - 会将数据库、redis等映射文件放在该目录下
    data_volume: /data

    注释内容:

    # https related config
    #https:
      # https port for harbor, default is 443
     # port: 443
      # The path of cert and key files for nginx
      #certificate: /your/certificate/path
      #private_key: /your/private/key/path

    4. 安装

    这里需要注意的是 data_volume 配置的所在目录,有没有历史文件,否则有历史数据的话可能导致 harbor 启动失败。

    ./install.sh

    等脚本运行完,登陆后如图所示:

    Docker 搭建镜像仓库 harbor 并实战上传镜像

    />

    5. 配置开机自启

    创建开机自启配置文件:

    cat > /lib/systemd/system/harbor.service<<EOF
    [Unit]
    Description=Harbor
    After=docker.service systemd-networkd.service systemd-resolved.service
    Requires=docker.service
    Documentation=http://github.com/vmware/harbor
    [Service]
    Type=simple
    Restart=on-failure
    RestartSec=5
    ExecStart=/usr/local/bin/docker-compose -f /usr/local/harbor/docker-compose.yml up
    ExecStop=/usr/local/bin/docker-compose -f /usr/local/harbor/docker-compose.yml down
    [Install]
    WantedBy=multi-user.target
    EOF

    这里注意,可能 docker-compose 的存放路径不一样,使用 which docker-compose 查看并修改即可。

    # 配置开启自启
    systemctl enable harbor

    三、配置 Docker 仓库

    • 情况一

    没有/etc/docker/daemon.json 文件,直接运行命令:

    # ip 地址填自己服务器的
    cat > /etc/docker/daemon.json <<EOF
    {
         "insecure-registries":["172.21.9.203:80"]
    }
    EOF
    # 重新加载配置文件并重启 docker
    systemctl daemon-reload && systemctl restart docker
    • 情况二

    /etc/docker/daemon.json 文件已经存在,需要后面加一条内容,如下:

    {
         "registry-mirrors":["https://c05xby84.mirror.aliyuncs.com"],
         "insecure-registries":["172.21.9.203:80"]
    }

    要注意 json 文件的格式,新增一条内容的逗号不能少,否则 docker 起不来。

    # 重新加载配置文件并重启 docker
    systemctl daemon-reload && systemctl restart docker

    四、Harbor 简单使用

    # 登陆 admin\Harbor12345
    docker login 172.21.9.203:80
    # 拉取一个官方镜像
    docker pull alpine
    # 重新打标签
    docker tag alpine 172.21.9.203:80/library/alpine
    # 推送镜像
    docker tag alpine 172.21.9.203:80/library/alpine

    可以看见已经上传:

    Docker 搭建镜像仓库 harbor 并实战上传镜像

    提醒:本文发布于742天前,文中所关联的信息可能已发生改变,请知悉!

    />

    Tips:清朝云网络工作室

  • Docker 安装 Mysql 5.x 和 8.x


    共计 1148 个字符,预计需要花费 3 分钟才能阅读完成。

    1. 安装 mysql

    Mysql 的安装其实很简单,一条命令即可,下面给出常用的命令。

    现在一般都是用8.0版本比较多,不排除老项目需要用5.7的版本。

    # 8.0
    docker run -d \
    --name mysql8 \
    -p 3306:3306 \
    -v /home/docker/mysql8/conf.d:/etc/mysql/conf.d  \
    -v /home/docker/mysql8/data:/var/lib/mysql \
    -v /home/docker/mysql8/init:/docker-entrypoint-initdb.d \
    -e MYSQL_ROOT_PASSWORD=123456 \
    --restart always mysql:8.0.26
    
    # 5.7
    docker run -d \
    --name mysql5.7 \
    -p 3306:3306 \
    -v /home/docker/mysql5.7/conf.d:/etc/mysql/conf.d \
    -v /home/docker/mysql5.7/data:/var/lib/mysql \
    -v /home/docker/mysql5.7/init:/docker-entrypoint-initdb.d \
    -e MYSQL_ROOT_PASSWORD=123456 \
    --restart always mysql:5.7.35

    如果你有需要初始化的 sql 文件,那么你只需要放在 /home/docker/mysqlxx/init 目录下即可。

    可能用到的环境变量:

    字段 含义 是否可选
    MYSQL_ROOT_PASSWORD root用户的密码 必须
    MYSQL_DATABASE 第一次运行时创建的数据库名称 可选
    MYSQL_USER 创建一个新的用户,需要与MYSQL_PASSWORD一起使用 可选
    MYSQL_PASSWORD 上面创建新用户的密码 可选
    MYSQL_ALLOW_EMPTY_PASSWORD 是否允许空密码 可选
    MYSQL_RANDOM_ROOT_PASSWORD 随机生成root用户的密码 可选
    MYSQL_ONETIME_PASSWORD 设置root密码过期,首次登陆强制修改 可选

    2. 安装 mysql 可视化界面

    adminer 我认为是比 phpmyadmin 好用的一款 web 管理数据库的工具,并且它还支持 sqlite、postgreSql、mongodb 等其他数据库。

    docker run -d \
    --name adminer \
    -p 8080:8080 \
    -e ADMINER_DESIGN='lucas-sandery' \
    adminer

    需要注意的是,如果你的 mysql 并非默认端口,那么你需要在 ip 后面跟上你的端口。

    Docker 安装 Mysql 5.x 和 8.x

    />

    如果你并不满意这款主题,你可以到 adminer 官网 挑选你自己喜欢的主题,在运行 docker 的时候传递主题名称即可。

    Docker 安装 Mysql 5.x 和 8.x

    提醒:本文发布于741天前,文中所关联的信息可能已发生改变,请知悉!

    />

    Tips:清朝云网络工作室

  • Docker 安装 rclone 挂载 Onedrive 到本地


    共计 1100 个字符,预计需要花费 3 分钟才能阅读完成。

    一、了解 rclone

    rclone 是一个命令行工具,可以用来管理各种云存储服务。

    它支持超过 40 种不同的云存储服务,包括 Amazon S3, Google Drive, Dropbox, Microsoft OneDrive, Google Cloud Storage, Amazon Drive, OpenStack Swift, Backblaze B2, Yandex Disk, SFTP, WebDAV, FTP, SFTP, Minio, Wasabi, Alibaba OSS,, SwiftStack, Tencent COS, Wasabi, Yandex.Disk, Yandex.Files等等。

    • 基本使用
    rclone 相关
    #挂载
    rclone mount <网盘名称:网盘路径> <本地路径> [参数] --daemon
    #取消挂载
    fusermount -qzu <本地路径>

    二、挂载 Onedrive

    1. 获取 token

    下载 win版本的 rclone,解压后输入以管理员的 cmd 进入文件夹,运行如下命令:

    net stop winnat
    net start winnat
    rclone authorize onedrive

    运行完后可能弹出浏览器让你登录,登录完成后就可以在命令行查看到 token。

    Docker 安装 rclone 挂载 Onedrive 到本地

    />

    2. 配置 onedrive

    docker run --rm -it \
    -v /home/docker/rclone/config:/config/rclone \
    rclone/rclone config

    这里是输入 onedrive 相关配置,按下图操作即可:

    Docker 安装 rclone 挂载 Onedrive 到本地

    />

    接下来是选网盘的类型,找到网盘 Microsoft OneDrive 的编号即可,我这里是 31,编号可能有变动。

    Docker 安装 rclone 挂载 Onedrive 到本地

    />

    输入 token 时,一定要复制全,大括号里面的全部需要复制。

    Docker 安装 rclone 挂载 Onedrive 到本地

    />

    接下来继续按下图操作,就可以了。

    Docker 安装 rclone 挂载 Onedrive 到本地

    />

    Docker 安装 rclone 挂载 Onedrive 到本地

    />

    到这里配置就完成了。

    3. 挂载 Onedrive

    docker run -d  --name rclone \
    -v /home/docker/rclone/config:/config/rclone \
    -v /home/docker/rclone/onedrive:/onedrive:shared \
    --device /dev/fuse --cap-add SYS_ADMIN --security-opt apparmor:unconfined \
    --restart always \
    rclone/rclone \
    mount oneDrive:/ /onedrive --cache-dir /tmp --allow-other --vfs-cache-mode writes --allow-non-empty

    然后进入 /home/docker/rclone/onedrive 文件夹,输入ls命令即可发现挂载成功。

    提醒:本文发布于741天前,文中所关联的信息可能已发生改变,请知悉!

    Tips:清朝云网络工作室

  • 02月28日,星期五, 每天60秒读懂全世界!

    百度热搜新闻

    新闻来源:百度热搜榜

    1. 小米SU7 Ultra售价52.99万 2月27日晚,小米发布XiaomiSU7 Ultra,售价52.99万。

    2. 00后月薪3000每月买3克黄金

    3. 京津冀“链”出新活力 2014年2月,京津冀协同发展上升为国家战略。11年来,京津冀区域经济总量连跨6个万亿元台阶,2024年达11.5万亿元,成为引领全国高质量发展的强劲动力源。

    4. 国防部正告台当局:早晚收了你们 2月27日下午,国防部新闻局局长、国防部新闻发言人吴谦大校正告民进党当局:螳臂当车只能自取灭亡,早晚要来收了你们。

    5. 61岁习武大爷喜得子 称想再生2个 近日,一位61岁大爷喜得贵子,武友们以武相庆。大爷自幼练武身体好,称还想再生2个。

    6. 《哪吒2》配音演员起诉配音公司

    7. 仅1个鸡蛋重的无人机 2月27日,记者从翼动科技获悉,目前研发制成了超微型无人机“黑刺”,目前是国内最小的工业级无人机,重量仅50克。

    8. 女子的亲生母亲和继母处成了姐妹

    9. 小米15 Ultra售价6499元起 2月27日晚,小米公司发布Xiaomi15Ultra,售价6499元起。预售已开启,3月3日早10点正式开售。

    10. 百度宁德时代战略合作聚焦自动驾驶 近日,百度与宁德时代正式签署了战略合作协议。这次合作将围绕数智化与自动驾驶两大核心领域开展,推动AI在工业上的应用和推广。

    —- 百度热搜新闻 End —-

    知乎新闻

    新闻来源:知乎日榜

    标题: 马里亚纳海沟吞噬掉的海水去哪里了?
    链接: https://daily.zhihu.com/story/9779270
    ———————-
    标题: 为什么鸟类没有进化出对付巢寄生的办法?
    链接: https://daily.zhihu.com/story/9779279
    ———————-
    标题: AI 真的可以代替作家、艺术家的创作吗?还是只能代替 80% 平庸的创作者,将最优秀的艺术家,留给人类?
    链接: https://daily.zhihu.com/story/9779282
    ———————-
    标题: 瞎扯 · 如何正确地吐槽
    链接: https://daily.zhihu.com/story/9779261
    ———————-

    —- 知乎新闻 End —-

    IT之家新闻

    新闻来源:ITHome之家科技新闻

    标题: 52.99 万元起小米 SU7 Ultra 正式发布:目标成为地表最快的四门量产车,重新定义豪车新标准
    发布时间: 2025-02-27T21:02:02.63
    新闻简介: 雷军表示,小米 SU7 Ultra 的初衷,是打造属于这个时代的新豪车。“性能比肩保时捷、科技紧追特斯拉、豪华媲美 BBA”,重新定义豪车新标准。
    ———————-
    标题: 【已售罄】现已开抢手慢无!小米 15 Ultra 支持 24 期免息,限 1000 单赠音响或露营灯
    发布时间: 2025-02-27T16:14:06.053
    新闻简介: 小米 15 Ultra 手机先人一步预约链接现已开启,今晚发布会后开抢。
    ———————-
    标题: 6499 元起口袋里的“大三元”:小米 15 Ultra 旗舰手机发布,28 倍无损变焦、首发徕卡超纯光学系统
    发布时间: 2025-02-27T19:46:20.127
    新闻简介: #小米15Ultra# #小米双Ultra#
    ———————-
    标题: 消息称梅赛德斯-奔驰中国大裁员:赔偿 N+9,销售体系成重灾区
    发布时间: 2025-02-27T07:48:32.01
    新闻简介: 据“汽车像素”报道,梅赛德斯-奔驰中国启动大规模裁员,涉及销售和汽车金融体系,裁员比例约15%。被裁员工可获得N+9赔偿及额外两个月工资。此次裁员与公司业绩下滑有关,#奔驰裁员# #汽车市场变化#
    ———————-
    标题: 雷军被曝喜提 1 小时中国首富体验卡,发文称“大家可以关注小米汽车”
    发布时间: 2025-02-27T14:58:26.047
    新闻简介: #雷军身家超钟睒睒登顶中国首富# #雷军喜提1小时首富体验卡#
    ———————-
    标题: 小米雷军否认升任中国新首富
    发布时间: 2025-02-27T16:13:43.09
    新闻简介: 针对小米创始人雷军身家超过农夫山泉创始人钟睒睒、升任“中国新首富”的消息,雷军在武大校友群回应称:假新闻。
    ———————-
    标题: 开年全网 S 级狂促:38 折扣叠加国补再降新低,小米 15 Ultra 首发支持 24 期免息
    发布时间: 2025-02-27T15:20:17.463
    新闻简介: 开年首轮全网 S 级狂促“38节”换新大促将在今晚20:00 开启,有需求的小伙伴可以关注下,2 分钟速读国补攻略。
    ———————-
    标题: 苹果 iPhone 16e 媒体评论解禁:C1 基带首秀,四核 GPU 性能差异明显
    发布时间: 2025-02-27T11:08:40.453
    新闻简介: 苹果新成员iPhone 16e将于本周五正式发售。多家媒体和YouTube频道今日解禁了首批评测体验。搭载A18芯片、4800万像素后置摄像头及USB-C接口,配备自研C1调制解调器,支持5G和LTE连接。然而,在5G速度方面,C1调制解调器与高通骁龙X71并无显著差异。#苹果新品 #iPhone16e
    ———————-
    标题: 小米 SU7 Ultra 竞速套装发布:总车价 62.99 万元,号称媲美 200 万级保时捷
    发布时间: 2025-02-27T21:22:08.107
    新闻简介: 小米 SU7 Ultra 迎来了一个竞速套装,定价 10 万元,和汽车一起总价 62.99 万元,号称媲美保时捷 Taycan Turbo GT 魏斯阿赫套件版本(199.8 万元)。
    ———————-
    标题: 81.49 万元起,雷军官宣小米 SU7 Ultra 纽北限量版
    发布时间: 2025-02-27T21:15:29.3
    新闻简介: 在发布会的最后,雷军官宣小米将会在完成纽北挑战之后推出“小米 SU7 Ultra 纽北限量版”,官方指导价 81.49 万元。
    ———————-
    标题: 小米 SU7 Ultra 第三款车身配色揭晓:豪华色系“鹦鹉绿”
    发布时间: 2025-02-27T10:05:29.083
    新闻简介: 在发布会开始前的几个小时,小米汽车揭晓了SU7 Ultra的另一款全新配色:豪华色系“鹦鹉绿”。官方表示,这一配色拥有金属漆面的优雅质感。
    ———————-
    标题: 比亚迪秦 L EV 部分配置公布:电子怀挡、车载冰箱,标配天神之眼 C 智驾
    发布时间: 2025-02-27T10:29:03.93
    新闻简介: 比亚迪王朝网销售事业部总经理路天今日晒出比亚迪秦L EV的内饰官图,并预告了新车的部分配置。
    ———————-

    —- IT之家新闻 End —-

  • 02月28日,星期五, 每天60秒读懂全世界!

    百度热搜新闻

    新闻来源:百度热搜榜

    1. 小米SU7 Ultra售价52.99万 2月27日晚,小米发布XiaomiSU7 Ultra,售价52.99万。

    2. 00后月薪3000每月买3克黄金

    3. 京津冀“链”出新活力 2014年2月,京津冀协同发展上升为国家战略。11年来,京津冀区域经济总量连跨6个万亿元台阶,2024年达11.5万亿元,成为引领全国高质量发展的强劲动力源。

    4. 国防部正告台当局:早晚收了你们 2月27日下午,国防部新闻局局长、国防部新闻发言人吴谦大校正告民进党当局:螳臂当车只能自取灭亡,早晚要来收了你们。

    5. 61岁习武大爷喜得子 称想再生2个 近日,一位61岁大爷喜得贵子,武友们以武相庆。大爷自幼练武身体好,称还想再生2个。

    6. 《哪吒2》配音演员起诉配音公司

    7. 仅1个鸡蛋重的无人机 2月27日,记者从翼动科技获悉,目前研发制成了超微型无人机“黑刺”,目前是国内最小的工业级无人机,重量仅50克。

    8. 女子的亲生母亲和继母处成了姐妹

    9. 小米15 Ultra售价6499元起 2月27日晚,小米公司发布Xiaomi15Ultra,售价6499元起。预售已开启,3月3日早10点正式开售。

    10. 百度宁德时代战略合作聚焦自动驾驶 近日,百度与宁德时代正式签署了战略合作协议。这次合作将围绕数智化与自动驾驶两大核心领域开展,推动AI在工业上的应用和推广。

    —- 百度热搜新闻 End —-

    知乎新闻

    新闻来源:知乎日榜

    标题: 马里亚纳海沟吞噬掉的海水去哪里了?
    链接: https://daily.zhihu.com/story/9779270
    ———————-
    标题: 为什么鸟类没有进化出对付巢寄生的办法?
    链接: https://daily.zhihu.com/story/9779279
    ———————-
    标题: AI 真的可以代替作家、艺术家的创作吗?还是只能代替 80% 平庸的创作者,将最优秀的艺术家,留给人类?
    链接: https://daily.zhihu.com/story/9779282
    ———————-
    标题: 瞎扯 · 如何正确地吐槽
    链接: https://daily.zhihu.com/story/9779261
    ———————-

    —- 知乎新闻 End —-

    IT之家新闻

    新闻来源:ITHome之家科技新闻

    标题: 52.99 万元起小米 SU7 Ultra 正式发布:目标成为地表最快的四门量产车,重新定义豪车新标准
    发布时间: 2025-02-27T21:02:02.63
    新闻简介: 雷军表示,小米 SU7 Ultra 的初衷,是打造属于这个时代的新豪车。“性能比肩保时捷、科技紧追特斯拉、豪华媲美 BBA”,重新定义豪车新标准。
    ———————-
    标题: 【已售罄】现已开抢手慢无!小米 15 Ultra 支持 24 期免息,限 1000 单赠音响或露营灯
    发布时间: 2025-02-27T16:14:06.053
    新闻简介: 小米 15 Ultra 手机先人一步预约链接现已开启,今晚发布会后开抢。
    ———————-
    标题: 6499 元起口袋里的“大三元”:小米 15 Ultra 旗舰手机发布,28 倍无损变焦、首发徕卡超纯光学系统
    发布时间: 2025-02-27T19:46:20.127
    新闻简介: #小米15Ultra# #小米双Ultra#
    ———————-
    标题: 消息称梅赛德斯-奔驰中国大裁员:赔偿 N+9,销售体系成重灾区
    发布时间: 2025-02-27T07:48:32.01
    新闻简介: 据“汽车像素”报道,梅赛德斯-奔驰中国启动大规模裁员,涉及销售和汽车金融体系,裁员比例约15%。被裁员工可获得N+9赔偿及额外两个月工资。此次裁员与公司业绩下滑有关,#奔驰裁员# #汽车市场变化#
    ———————-
    标题: 雷军被曝喜提 1 小时中国首富体验卡,发文称“大家可以关注小米汽车”
    发布时间: 2025-02-27T14:58:26.047
    新闻简介: #雷军身家超钟睒睒登顶中国首富# #雷军喜提1小时首富体验卡#
    ———————-
    标题: 小米雷军否认升任中国新首富
    发布时间: 2025-02-27T16:13:43.09
    新闻简介: 针对小米创始人雷军身家超过农夫山泉创始人钟睒睒、升任“中国新首富”的消息,雷军在武大校友群回应称:假新闻。
    ———————-
    标题: 开年全网 S 级狂促:38 折扣叠加国补再降新低,小米 15 Ultra 首发支持 24 期免息
    发布时间: 2025-02-27T15:20:17.463
    新闻简介: 开年首轮全网 S 级狂促“38节”换新大促将在今晚20:00 开启,有需求的小伙伴可以关注下,2 分钟速读国补攻略。
    ———————-
    标题: 苹果 iPhone 16e 媒体评论解禁:C1 基带首秀,四核 GPU 性能差异明显
    发布时间: 2025-02-27T11:08:40.453
    新闻简介: 苹果新成员iPhone 16e将于本周五正式发售。多家媒体和YouTube频道今日解禁了首批评测体验。搭载A18芯片、4800万像素后置摄像头及USB-C接口,配备自研C1调制解调器,支持5G和LTE连接。然而,在5G速度方面,C1调制解调器与高通骁龙X71并无显著差异。#苹果新品 #iPhone16e
    ———————-
    标题: 小米 SU7 Ultra 竞速套装发布:总车价 62.99 万元,号称媲美 200 万级保时捷
    发布时间: 2025-02-27T21:22:08.107
    新闻简介: 小米 SU7 Ultra 迎来了一个竞速套装,定价 10 万元,和汽车一起总价 62.99 万元,号称媲美保时捷 Taycan Turbo GT 魏斯阿赫套件版本(199.8 万元)。
    ———————-
    标题: 81.49 万元起,雷军官宣小米 SU7 Ultra 纽北限量版
    发布时间: 2025-02-27T21:15:29.3
    新闻简介: 在发布会的最后,雷军官宣小米将会在完成纽北挑战之后推出“小米 SU7 Ultra 纽北限量版”,官方指导价 81.49 万元。
    ———————-
    标题: 小米 SU7 Ultra 第三款车身配色揭晓:豪华色系“鹦鹉绿”
    发布时间: 2025-02-27T10:05:29.083
    新闻简介: 在发布会开始前的几个小时,小米汽车揭晓了SU7 Ultra的另一款全新配色:豪华色系“鹦鹉绿”。官方表示,这一配色拥有金属漆面的优雅质感。
    ———————-
    标题: 比亚迪秦 L EV 部分配置公布:电子怀挡、车载冰箱,标配天神之眼 C 智驾
    发布时间: 2025-02-27T10:29:03.93
    新闻简介: 比亚迪王朝网销售事业部总经理路天今日晒出比亚迪秦L EV的内饰官图,并预告了新车的部分配置。
    ———————-

    —- IT之家新闻 End —-

  • Docker 搭建 etcd 单实例并使用图形界面进行访问


    共计 2180 个字符,预计需要花费 6 分钟才能阅读完成。

    一、etcd 了解

    清朝云最近在学习 k8s 相关的内容,了解到 etcd 是 k8s 一大重要的组件,所以来了解下相关的内容和使用。

    etcd 是一个分布式、可靠的键值存储,可用于分布式系统中存储关键核心数据。可以发现,etcd 归根结底是一个存储组件,且可以实现配置共享和服务发现。在分布式系统中,各种服务配置信息的管理共享和服务发现是一个很基本也是很重要的问题,无论调用服务还是调度容器,都需要知道对应的服务实例和容器节点地址信息。etcd 就是这样一款实现了元数据信息可靠存储的组件。

    etcd 可集中管理配置信息。服务端将配置信息存储于 etcd,客户端通过 etcd 得到服务配置信息,etcd 监听配置信息的改变,发现改变通知客户端。

    特性

    • 简单:etcd 的安装简单,且为用户提供了 HTTP API,使用起来也很简单。
    • 存储:etcd 的基本功能,数据分层存储在文件目录中,类似于我们日常使用的文件系统。
    • Watch 机制:Watch 指定的键、前缀目录的更改,并对更改时间进行通知。
    • 安全通信:支持 SSL 证书验证。
    • 高性能:etcd 单实例可以支持 2K/s 读操作,每个实例1000次写入/秒,官方也有提供基准测试脚本。
    • 一致可靠:基于 Raft 共识算法,实现分布式系统内部数据存储、服务调用的一致性和高可用性。

    使用场景

    • 键值对存储:etcd 是一个用于键值存储的组件,存储是 etcd 最基本的功能。
    • 消息发布与订阅:通过构建 etcd 消息中间件,服务提供者发布对应主题的消息,消费者则订阅他们关心的主题,一旦对应的主题有消息发布,就会产生订阅事件,消息中间件就会通知该主题所有的订阅者。
    • 分布式锁:分布式系统中涉及多个服务实例,存在跨进程之间资源调用,对于资源的协调分配,单体架构中的锁已经无法满足需要,需要引入分布式锁的概念。etcd 基于 Raft 算法,实现分布式集群的一致性,存储到 etcd 集群中的值必然是全局一致的,因此基于 etcd 很容易实现分布式锁。

    Docker 搭建 etcd 单实例并使用图形界面进行访问

    />

    二、etcd 搭建

    1. server 搭建

    etcd 总归是提供 http 服务,etcdctl 工具也是通过 http 进行调用。

    # 1. 创建网卡,方便etcdctl进行访问
    docker network create etcd-net
    
    # 2. 启动etcd-server
    # 不需要验证
    docker run -d \
    --name etcd-server \
    --net etcd-net \
    -p 2379:2379 \
    -p 2380:2380 \
    -e ALLOW_NONE_AUTHENTICATION=yes \
    -e ETCD_ADVERTISE_CLIENT_URLS=http://etcd-server:2379 \
    bitnami/etcd
    
    # 需要root密码
    docker run -d \
    --name etcd-server \
    --net etcd-net \
    -p 2379:2379 \
    -p 2380:2380 \
    -e ETCD_ROOT_PASSWORD=123456 \
    -e ETCD_ADVERTISE_CLIENT_URLS=http://etcd-server:2379 \
    bitnami/etcd

    2. 客户端访问

    # 1. 查看成员列表-无需密码
    docker run -it --rm \
    --net etcd-net \
    -e ALLOW_NONE_AUTHENTICATION=yes \
    bitnami/etcd \
    etcdctl --endpoints http://etcd-server:2379 member list -w table
    
    # 2. 存储键值对
    docker run -it --rm \
    --net etcd-net \
    -e ALLOW_NONE_AUTHENTICATION=yes \
    bitnami/etcd \
    etcdctl --endpoints http://etcd-server:2379 put /message Hello
    # 带密码请求
    docker run -it --rm \
    --net etcd-net \
    -e ALLOW_NONE_AUTHENTICATION=yes \
    bitnami/etcd \
    etcdctl --endpoints http://etcd-server:2379 \
    --user="root" --password="123456" put /message Hello
    
    # 3. 获取键值对
    docker run -it --rm \
    --net etcd-net \
    -e ALLOW_NONE_AUTHENTICATION=yes \
    bitnami/etcd \
    etcdctl --endpoints http://etcd-server:2379 get /message
    # 带密码请求
    docker run -it --rm \
    --net etcd-net \
    -e ALLOW_NONE_AUTHENTICATION=yes \
    bitnami/etcd \
    etcdctl --endpoints http://etcd-server:2379 \
    --user="root" --password="123456" get /message

    三、etcd 可视化工具搭建

    docker run -d \
    --name=etcdui \
    --net etcd-net \
    -p 9980:80 \
    joinsunsoft/etcdv3-browser

    访问9980端口,用户名/密码:ginghan/123456。

    点击新增连接,如图所示:

    Docker 搭建 etcd 单实例并使用图形界面进行访问

    />

    查询所有键,发现刚刚存储的键值对。

    Docker 搭建 etcd 单实例并使用图形界面进行访问

    提醒:本文发布于739天前,文中所关联的信息可能已发生改变,请知悉!

    />

    Tips:清朝云网络工作室

  • RPC 远程过程调用 java 简单实现


    共计 5405 个字符,预计需要花费 14 分钟才能阅读完成。

    一、什么是RPC

    RPC(Remote Procedure Call Protocol)—— 远程过程调用协议,它是一种通过 网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。 RPC协议假定某些 传输协议的存在,如TCP或UDP,为通信程序之间携带信息数据。在OSI 网络通信模型中,RPC跨越了 传输层和 应用层。RPC使得开发包括网络 分布式多程序在内的应用程序更加容易。
    RPC采用客户机/服务器模式。请求程序就是一个客户机,而服务提供程序就是一个服务器。首先,客户机调用进程发送一个有进程参数的调用信息到服务进程,然后等待应答信息。在服务器端,进程保持睡眠状态直到调用信息到达为止。当一个调用信息到达,服务器获得进程参数,计算结果,发送答复 信息,然后等待下一个调用信息,最后,客户端调用进程接收答复信息,获得进程结果,然后调用执行继续进行。
    有多种 RPC模式和执行。最初由 Sun 公司提出。IETF ONC 宪章重新修订了 Sun 版本,使得 ONC RPC 协议成为 IETF 标准协议。现在使用最普遍的模式和执行是开放式软件基础的分布式计算 环境(DCE)。

    二、图例说明

    RPC 远程过程调用 java 简单实现

    />

    三、java 实例演示

    1、实现技术方案

    下面使用比较原始的方案实现RPC框架,采用Socket通信、动态代理与反射与Java原生的序列化。

    2、RPC框架架构

    RPC架构分为三部分:

    • 服务提供者,运行在服务器端,提供服务接口定义与服务实现类。
    • 服务中心,运行在服务器端,负责将本地服务发布成远程服务,管理远程服务,提供给服务消费者使用。
    • 服务消费者,运行在客户端,通过远程代理对象调用远程服务。

    3、 具体实现
    1)服务提供者接口定义与实现,代码如下:

    package services;
    
    public interface HelloService {
        String sayHi(String name);
    }
    

    2)HelloServices接口实现类:

    package services.impl;
    import services.HelloService;
    
    public class HelloServiceImpl implements HelloService {
        public String sayHi(String name) {
            return "Hi, " + name;
        }
    }

    3)服务中心代码实现,代码如下:

    
    package services;
    import java.io.IOException;
    
    public interface Server {
        public void stop();
    
        public void start() throws IOException;
    
        public void register(Class serviceInterface, Class impl);
    
        public boolean isRunning();
    
        public int getPort();
    }

    4)服务中心实现类:

    package services.impl;
    import java.io.IOException;
    import java.io.ObjectInputStream;
    import java.io.ObjectOutputStream;
    import java.lang.reflect.Method;
    import java.net.InetSocketAddress;
    import java.net.ServerSocket;
    import java.net.Socket;
    import java.util.HashMap;
    import java.util.concurrent.ExecutorService;
    import java.util.concurrent.Executors;
    import services.Server;
    
    public class ServiceCenter implements Server {
        private static ExecutorService executor = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors());
    
        private static final HashMap<String, Class> serviceRegistry = new HashMap<String, Class>();
    
        private static boolean isRunning = false;
    
        private static int port;
    
        public ServiceCenter(int port) {
            this.port = port;
        }
    
        public void stop() {
            isRunning = false;
            executor.shutdown();
        }
    
        public void start() throws IOException {
            ServerSocket server = new ServerSocket();
            server.bind(new InetSocketAddress(port));
            System.out.println("start server");
            try {
                while (true) {
                    // 1.监听客户端的TCP连接,接到TCP连接后将其封装成task,由线程池执行
                    executor.execute(new ServiceTask(server.accept()));
                }
            } finally {
                server.close();
            }
        }
    
        public void register(Class serviceInterface, Class impl) {
            serviceRegistry.put(serviceInterface.getName(), impl);
        }
    
        public boolean isRunning() {
            return isRunning;
        }
    
        public int getPort() {
            return port;
        }
    
        private static class ServiceTask implements Runnable {
            Socket clent = null;
    
            public ServiceTask(Socket client) {
                this.clent = client;
            }
    
            public void run() {
                ObjectInputStream input = null;
                ObjectOutputStream output = null;
                try {
                    // 2.将客户端发送的码流反序列化成对象,反射调用服务实现者,获取执行结果
                    input = new ObjectInputStream(clent.getInputStream());
                    String serviceName = input.readUTF();
                    String methodName = input.readUTF();
                    Class<?>[] parameterTypes = (Class<?>[]) input.readObject();
                    Object[] arguments = (Object[]) input.readObject();
                    Class serviceClass = serviceRegistry.get(serviceName);
                    if (serviceClass == null) {
                        throw new ClassNotFoundException(serviceName + " not found");
                    }
                    Method method = serviceClass.getMethod(methodName, parameterTypes);
                    Object result = method.invoke(serviceClass.newInstance(), arguments);
    
                    // 3.将执行结果反序列化,通过socket发送给客户端
                    output = new ObjectOutputStream(clent.getOutputStream());
                    output.writeObject(result);
                } catch (Exception e) {
                    e.printStackTrace();
                } finally {
                    if (output != null) {
                        try {
                            output.close();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }
                    if (input != null) {
                        try {
                            input.close();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }
                    if (clent != null) {
                        try {
                            clent.close();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }
                }
            }
        }
    }

    5)客户端的远程代理对象:

    package client;
    import java.io.ObjectInputStream;
    import java.io.ObjectOutputStream;
    import java.lang.reflect.InvocationHandler;
    import java.lang.reflect.Proxy;
    import java.net.InetSocketAddress;
    import java.net.Socket;
    import java.lang.reflect.Method;
    
    public class RPCClient<T> {
        @SuppressWarnings("unchecked")
        public static <T> T getRemoteProxyObj(final Class<?> serviceInterface, final InetSocketAddress addr) {
            // 1.将本地的接口调用转换成JDK的动态代理,在动态代理中实现接口的远程调用
            return (T) Proxy.newProxyInstance(serviceInterface.getClassLoader(), new Class<?>[] { serviceInterface },
                    new InvocationHandler() {
                        public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                            Socket socket = null;
                            ObjectOutputStream output = null;
                            ObjectInputStream input = null;
                            try {
                                // 2.创建Socket客户端,根据指定地址连接远程服务提供者
                                socket = new Socket();
                                socket.connect(addr);
    
                                // 3.将远程服务调用所需的接口类、方法名、参数列表等编码后发送给服务提供者
                                output = new ObjectOutputStream(socket.getOutputStream());
                                output.writeUTF(serviceInterface.getName());
                                output.writeUTF(method.getName());
                                output.writeObject(method.getParameterTypes());
                                output.writeObject(args);
    
                                // 4.同步阻塞等待服务器返回应答,获取应答后返回
                                input = new ObjectInputStream(socket.getInputStream());
                                return input.readObject();
                            } finally {
                                if (socket != null)
                                    socket.close();
                                if (output != null)
                                    output.close();
                                if (input != null)
                                    input.close();
                            }
                        }
                    });
        }
    }

    6)最后为测试类:

    package client;
    import java.io.IOException;
    import java.net.InetSocketAddress;
    import services.HelloService;
    import services.Server;
    import services.impl.HelloServiceImpl;
    import services.impl.ServiceCenter;
    
    public class RPCTest {
        public static void main(String[] args) throws IOException {
            new Thread(new Runnable() {
                public void run() {
                    try {
                        Server serviceServer = new ServiceCenter(8088);
                        serviceServer.register(HelloService.class, HelloServiceImpl.class);
                        serviceServer.start();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }).start();
            HelloService service = RPCClient
                    .getRemoteProxyObj(HelloService.class, new InetSocketAddress("localhost", 8088));
            System.out.println(service.sayHi("test"));
        }
    }

    运行结果:

    regeist service HelloService
    start server
    Hi, test

    提醒:本文发布于735天前,文中所关联的信息可能已发生改变,请知悉!

    Tips:清朝云网络工作室

  • IDM 6.39.2 安装教程


    共计 460 个字符,预计需要花费 2 分钟才能阅读完成。

    IDM (Internet Download Manager) 是一款流行的下载工具,可以
    加速下载速度,管理和调度下载任务。

    IDM 6.39.2 安装教程

    />

    具有以下特点:

    • 多线程下载:IDM 可以将一个文件分成多个部分同时下载,加快下载速度。

    • 下载速度控制:IDM 可以按照用户设置的下载速度限制来控制下载速度。

    • 批量下载:IDM 可以一次性下载多个文件,还可以将多个文件打包成一个文件下载。

    • 断点续传:当下载任务被中断或暂停时,IDM 可以从上一次下载的位置继续下载。

    • 站点抓取:IDM 可以从某个网站上抓取所有的下载链接,方便用户批量下载。

    • 定时下载:用户可以在设定的时间段内自动下载文件。

    • 支持多种协议:IDM 支持 HTTP、HTTPS、FTP、MMS 和 RTSP 协议,可以下载各种类型的文件。

    • 与浏览器集成:IDM 可以与多种浏览器集成,用户可以通过 IDM 下载菜单轻松地启动下载任务。

    安装

    双击图标即可安装。

    IDM 6.39.2 安装教程

    />

    右键绿化以管理员身份运行即可破解。

    IDM 6.39.2 安装教程

    />

    下载地址

    IDM-v6.39.2:https://pan.baidu.com/s/1hmP287MfrFyvkPvIW8gHDw?pwd=crcm

    提醒:本文发布于726天前,文中所关联的信息可能已发生改变,请知悉!

    Tips:清朝云网络工作室

  • 02月27日,星期四, 每天60秒读懂全世界!

    百度热搜新闻

    新闻来源:百度热搜榜

    1. 男子照顾独居老人12年继承北京5套房 2023年10月,一北京大爷去世后,将五套房都留给了同村继承人。离世前共十二年的悉心照顾,让大爷感受到了家庭的温暖和幸福。

    2. 诈骗电话又出坑人新招 据报道,近期流行的一种名叫“手机口”的电诈骗局:用两部手机,免提都打开,双方可以直接对话,但是又能成功掩饰诈骗电话归属地。

    3. 看哪里即将“签收”春天 随着我国大部地区气温飙升,春天也开始加速派送!哪些地方将“跑步入春”?收好这份2025全国盼春地图和常年入春时间表,快来看看你家春天何时能“签收”。

    4. 《北上》导演因白鹿太漂亮有过顾虑 近日,电视剧《北上》导演称曾因白鹿太漂亮有过顾虑,但最终通过造型调整与演员表现化解了这一担忧,肯定了白鹿对角色的贡献。

    5. 每年因乳腺癌死亡的人数将增加68% 当地时间2月24日,世卫组织下属国际癌症研究机构在《自然医学》杂志发布的最新报告显示,每年因乳腺癌死亡的人数将增加68%。

    6. 《演员请就位3》暂停播出 26日,综艺《演员请就位3》宣布暂停播出。网友评价演员:这哪是拼演技,纯来搞笑的。

    7. 英国盗贼偷走丘吉尔庄园18K金马桶

    8. 四川破获首起侵犯《哪吒2》影视权案

    9. “公务车”撞人 官方:标识淘宝买的

    10. 56岁农民阿姨把土坯房收拾成展厅

    —- 百度热搜新闻 End —-

    知乎新闻

    新闻来源:知乎日榜

    标题: 蜂蜜为什么颜色不一样?
    链接: https://daily.zhihu.com/story/9779243
    ———————-
    标题: 为什么国语歌丢掉了词曲咬合的习惯?
    链接: https://daily.zhihu.com/story/9779244
    ———————-
    标题: 火车是如何做到不发生相撞和追尾的?
    链接: https://daily.zhihu.com/story/9779253
    ———————-
    标题: 瞎扯 · 如何正确地吐槽
    链接: https://daily.zhihu.com/story/9779267
    ———————-

    —- 知乎新闻 End —-

    IT之家新闻

    新闻来源:ITHome之家科技新闻

    标题: 无伪装,小米 SU7 Ultra 暗绿色实车曝光
    发布时间: 2025-02-26T09:35:22.957
    新闻简介: 博主“普通人GreyWolfe”今日在B站放出了多个小米SU7 Ultra深绿色实车的影像,这一配色在发布会前夕以无伪装、无遮挡的形式公布于世。
    ———————-
    标题: 不要惦记抠标,小米 SU7 Ultra 车标 24K 金达盗窃量刑标准
    发布时间: 2025-02-26T15:23:06.377
    新闻简介: 小米SU7 Ultra车标采用24K金材质,价值已达到盗窃量刑标准,REDMI 产品经理胡馨心提醒大家不要尝试抠标。。#小米SU7Ultra# #24K金车标##小米SU7Ultra车标达盗窃量刑标准#
    ———————-
    标题: 爱奇艺被吐槽吃相难看:新剧第一集就要会员,官方回应
    发布时间: 2025-02-26T17:55:42.36
    新闻简介: 《爱你》剧集昨日晚间在爱奇艺开播,开播当晚,“爱奇艺 吃相”就冲上热搜,网友吐槽《爱你》从第一集开始就需要 VIP 会员才能观看。#爱奇艺 吃相# #爱奇艺客服回应爱你第1集锁V#
    ———————-
    标题: 终于跌破 2800 元:iPhone 13 手机国补后 2785 元京东自营新低
    发布时间: 2025-02-26T09:15:08.857
    新闻简介: 终于跌破 2800 元:iPhone 13 手机国补后 2785 元京东自营新低
    ———————-
    标题: 26.35 万元起,特斯拉焕新 Model Y 今日在中国市场正式开启交付
    发布时间: 2025-02-26T11:53:44.68
    新闻简介: 特斯拉焕新Model Y今日在中国市场正式开启交付,售价26.35万元起。新车在外观、座舱、续航等方面均有升级,安全与智能性能进一步提升。两款车型可选:后轮驱动首发版和全轮驱动首发版,续航分别为593km和719km。#特斯拉# #焕新Model Y#
    ———————-
    标题: DeepSeek 宣布下调夜间 API 调用价格,降幅最高达 75%
    发布时间: 2025-02-26T17:26:16.253
    新闻简介: DeepSeek宣布,在每日00:30至08:30的夜间时段,API调用价格大幅下调,DeepSeek-V3降至50%,DeepSeek-R1低至25%。鼓励用户充分利用这一时段,享受更经济更流畅的服务体验。
    ———————-
    标题: 苹果自研 C1 基带带来两大杀手级特性:长续航与智能数据管理
    发布时间: 2025-02-26T07:12:46.747
    新闻简介: 苹果iPhone 16e搭载的C1基带带来两大亮点:显著提升电池续航和智能数据管理。C1基带与iOS系统深度集成,提供快速稳定的5G连接,并在网络拥堵时优先处理重要数据请求,提升用户体验。#苹果C1基带# #iPhone16e#
    ———————-
    标题: 小米 15 Ultra 手机配备 6000mAh 电池,支持 90W 有线充、80W 无线充
    发布时间: 2025-02-26T16:42:47.413
    新闻简介: 官方海报显示,该电池具有 10% 超高含硅量,号称“最强小米金沙江电池”。日常应用续航 DOU 高达 1.46 天,1000 次有效充电循环,电池可用容量仍 > 90%。
    ———————-
    标题: 理想 i8 纯电 SUV 侧面照公布,对比特斯拉 Model X 设计大不同
    发布时间: 2025-02-26T10:16:01.157
    新闻简介: 理想汽车最新发布的 i8 纯电 SUV 侧面照片展示,与特斯拉 Model X 的溜背设计不同,i8 采用平直车顶,更注重空间和实用性。内饰延续家族设计,配备双联屏和 AR-HUD。理想 CEO 李想称其为 Model X 的旅行版,解决第三排空间问题。#理想汽车# #新能源汽车#
    ———————-
    标题: 续航首次比肩苹果笔记本:荣耀 MagicBook Pro 14 发布,92Wh 电池、1.37kg,国补价 4799.2 元起
    发布时间: 2025-02-26T16:20:32.68
    新闻简介: 荣耀MagicBook Pro 14发布,首创珠光电泳工艺,有三色可选;内置92Wh电池,配14.6寸OLED屏;号称续航比肩MacBook Pro 14。#荣耀MagicBookPro14#
    ———————-
    标题: 雷军:小米 SU7 Ultra 1 万台的全年销量目标已有 9 成把握,团队信心十足
    发布时间: 2025-02-26T10:11:36.083
    新闻简介: “Ultra 产品力很强,我们团队信心十足,1万台的全年销量目标,已有9成把握。”
    ———————-
    标题: 国补后 3478 元:小米 14 手机 16G+1T 版京东自营 24 期免息
    发布时间: 2025-02-26T19:11:51.09
    新闻简介: 小米 14 系列手机 2023 年 10 日 31 日开售, 16G+1T 版京东现售 4599 元。
    ———————-

    —- IT之家新闻 End —-

  • WordPress 只给非管理员用户看具有特定标签的文章


    共计 819 个字符,预计需要花费 3 分钟才能阅读完成。

    内部搭建的博客可能有这么一种情况,组内的大部分博客内容需要保密,但是某些博客需要分享给其他同事查看。

    只需要将下面的代码加入到 function.php 文件,即可实现所有用户可以查看带有 public 标签的文章,访问其他文章一律需要管理员用户,其他用户访问均返回 404。

    function my_template_redirect() {
        if ( is_home() && !is_user_logged_in() ) {
            wp_redirect( wp_login_url() );
            exit;
        }
        // 检查是否在访问单一文章页面
        if ( is_singular() ) {
            $post_id = get_queried_object_id(); // 获取当前文章ID
    
            // 检查文章是否为公开文章,如果不是,检查用户是否登录
            if ( ! has_tag( 'public', $post_id ) && ! is_user_logged_in() ) {
                wp_redirect( wp_login_url( get_permalink() ) ); // 重定向到登录页面
                exit;
            }
        }
        // 非管理员用户登陆,也不可查看文章
        if ( is_user_logged_in() ) {
            $user = wp_get_current_user(); // 获取当前用户对象
    
            // 检查用户是否为管理员
            if ( ! current_user_can( 'manage_options' ) ) {
                // 如果不是管理员,则将文章设置为空
                global $wp_query;
                $wp_query->post = null;
                $wp_query->is_page = false;
                $wp_query->is_singular = false;
                $wp_query->set_404(); // 设置为404错误页面
                status_header(404);
                nocache_headers();
            }
        }
    }
    add_action( 'template_redirect', 'my_template_redirect' );

    提醒:本文发布于723天前,文中所关联的信息可能已发生改变,请知悉!

    Tips:清朝云网络工作室