Ceph 存储集群 - 搭建存储集群---教程走到osd激活这一步执行不下去了,报错
目录
- 一、准备机器
- [1. 修改主机名](所有节点)(https://www.cnblogs.com/zengzhihua/p/9829472.html#1-修改主机名)
- [2. 修改hosts文件](所有节点)(https://www.cnblogs.com/zengzhihua/p/9829472.html#2-修改hosts文件)
- 3. 确保联通性(管理节点)
- 二、ceph节点安装
- 三、搭建集群
- 四、扩展集群(扩容)
一、准备机器
本文描述如何在 CentOS 7 下搭建 Ceph 存储集群(STORAGE CLUSTER)。
一共4台机器,其中1个是管理节点,其他3个是ceph节点:
hostname | ip | role | 描述 |
---|---|---|---|
admin-node | 192.168.0.130 | ceph-deploy | 管理节点 |
node1 | 192.168.0.131 | mon.node1 | ceph节点,监控节点 |
node2 | 192.168.0.132 | osd.0 | ceph节点,OSD节点 |
node3 | 192.168.0.133 | osd.1 | ceph节点,OSD节点 |
管理节点:admin-node
ceph节点:node1, node2, node3
所有节点:admin-node, node1, node2, node3
1. 修改主机名,所有节点都需要做
# vi /etc/hostname
2. 修改hosts文件,所有节点都需要做
# vi /etc/hosts
192.168.0.130 admin-node
192.168.0.131 node1
192.168.0.132 node2
192.168.0.133 node3
3. 确保联通性(管理节点)
用 ping 短主机名( hostname -s )的方式确认网络联通性。解决掉可能存在的主机名解析问题。
# ping node1
# ping node2
# ping node3
二、ceph节点安装
1. 安装NPT(所有节点)
我们建议在所有 Ceph 节点上安装 NTP 服务(特别是 Ceph Monitor 节点),以免因时钟漂移导致故障,详情见时钟。
# yum install ntp ntpdate ntp-doc
# systemctl start ntpd
// 同步时间,多操作几次,确保所有节点时间一致
# ntpdate ntp1.aliyun.com
2. 安装其他依赖(所有节点)
# yum -y install openssh-server python python-devel python-pip python36 python36-devel python36-pip
3. 创建部署 CEPH 的用户(所有节点)
ceph-deploy 工具必须以普通用户登录 Ceph 节点,且此用户拥有无密码使用 sudo 的权限,因为它需要在安装软件及配置文件的过程中,不必输入密码。
建议在集群内的所有 Ceph 节点上给 ceph-deploy 创建一个特定的用户,但不要用 “ceph” 这个名字。
- 在各 Ceph 节点创建新用户
# useradd -d /home/zeng -m zeng
# passwd zeng
- 确保各 Ceph 节点上新创建的用户都有 sudo 权限
# echo "zeng ALL = (root) NOPASSWD:ALL" | tee /etc/sudoers.d/zeng
# chmod 0440 /etc/sudoers.d/zeng
4. 允许无密码SSH登录(管理节点)
因为 ceph-deploy 不支持输入密码,你必须在管理节点上生成 SSH 密钥并把其公钥分发到各 Ceph 节点。 ceph-deploy 会尝试给初始 monitors 生成 SSH 密钥对。
- 生成 SSH 密钥对
不要用 sudo 或 root 用户。提示 “Enter passphrase” 时,直接回车,口令即为空:
//切换用户,如不特别说明,后续的操作均在该用户下进行
# su - zeng
//生成密钥对
$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/zeng/.ssh/id_rsa):
Created directory '/home/zeng/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/zeng/.ssh/id_rsa.
Your public key has been saved in /home/zeng/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:Tb0VpUOZtmh+QBRjUOE0n2Uy3WuoZVgXn6TBBb2SsGk zeng@admin-node
The key's randomart image is:
+---[RSA 2048]----+
| .+@=OO*|
| *.BB@=|
| ..O+Xo+|
| o E+O.= |
| S oo=.o |
| .. . |
| . |
| |
| |
+----[SHA256]-----+
- 把公钥拷贝到各 Ceph 节点
$ ssh-copy-id zeng@admin-node
$ ssh-copy-id zeng@node1
$ ssh-copy-id zeng@node2
$ ssh-copy-id zeng@node3
完成后, /home/zeng/.ssh/ 路径下:
- admin-node 多了文件
id_rsa
、id_rsa.pub
和known_hosts
; - node1, node2, node3 多了文件
authorized_keys
。
- 修改
~/.ssh/config
文件
修改 ~/.ssh/config
文件(没有则新增),这样 ceph-deploy 就能用你所建的用户名登录 Ceph 节点了。
// 必须使用sudo
$ sudo vi ~/.ssh/config
Host admin-node
Hostname admin-node
User zeng
Host node1
Hostname node1
User zeng
Host node2
Hostname node2
User zeng
Host node3
Hostname node3
User zeng
- 测试ssh能否成功
$ ssh zeng@admin-node
$ exit
$ ssh zeng@node1
$ exit
$ ssh zeng@node2
$ exit
$ ssh zeng@node3
$ exit
- 问题:如果出现 "Bad owner or permissions on /home/zeng/.ssh/config",执行命令修改文件权限。
$ sudo chmod 644 ~/.ssh/config
5. 引导时联网(ceph节点)
Ceph 的各 OSD 进程通过网络互联并向 Monitors 上报自己的状态。如果网络默认为 off ,那么 Ceph 集群在启动时就不能上线,直到你打开网络。
$ cat /etc/sysconfig/network-scripts/ifcfg-enp0s3
//确保ONBOOT 设置成了 yes
6. 开放所需端口(ceph节点)
Ceph Monitors 之间默认使用 6789 端口通信, OSD 之间默认用 6800:7300 这个范围内的端口通信。Ceph OSD 能利用多个网络连接进行与客户端、monitors、其他 OSD 间的复制和心跳的通信。
$ sudo firewall-cmd --zone=public --add-port=6789/tcp --permanent
// 或者关闭防火墙
$ sudo systemctl stop firewalld
$ sudo systemctl disable firewalld
7. 终端(TTY)(ceph节点)
在 CentOS 和 RHEL 上执行 ceph-deploy 命令时可能会报错。如果你的 Ceph 节点默认设置了 requiretty ,执行
$ sudo visudo
找到 Defaults requiretty 选项,把它改为 Defaults:ceph !requiretty 或者直接注释掉,这样 ceph-deploy 就可以用之前创建的用户(创建部署 Ceph 的用户 )连接了。
编辑配置文件 /etc/sudoers 时,必须用 sudo visudo 而不是文本编辑器。
8. 关闭selinux(ceph节点)
$ sudo setenforce 0
要使 SELinux 配置永久生效(如果它的确是问题根源),需修改其配置文件 /etc/selinux/config:
$ sudo sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
即修改 SELINUX=disabled。
9. 配置EPEL源(管理节点)
使用阿里云的yum源
rm -rf /etc/yum.repos.d/*
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
yum -y install epel-release
yum clean all
yum makecache
10. 把软件包源加入软件库(管理节点)
$ sudo vi /etc/yum.repos.d/ceph.repo
把如下内容粘帖进去,保存到 /etc/yum.repos.d/ceph.repo 文件中。
ceph版本可以参考这个:https://www.cnblogs.com/sanduzxcvbnm/p/13553035.html
ceph清华源,首选
[Ceph]
name=Ceph packages for $basearch
baseurl=https://mirror.tuna.tsinghua.edu.cn/ceph/rpm-mimic/el7/$basearch
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://mirror.tuna.tsinghua.edu.cn/ceph/keys/release.asc
priority=1
[Ceph-noarch]
name=Ceph noarch packages
baseurl=https://mirror.tuna.tsinghua.edu.cn/ceph/rpm-mimic/el7/noarch
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://mirror.tuna.tsinghua.edu.cn/ceph/keys/release.asc
priority=1
[ceph-source]
name=Ceph source packages
baseurl=https://mirror.tuna.tsinghua.edu.cn/ceph/rpm-mimic/el7/SRPMS
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://mirror.tuna.tsinghua.edu.cn/ceph/keys/release.asc
priority=1
注意:
** 以上步骤操作完后重启所有节点主机**
11. 更新软件库并安装ceph-deploy(管理节点)
$ sudo yum update && sudo yum install ceph-deploy
$ sudo yum install yum-plugin-priorities
时间可能比较久,耐心等待。
三、搭建集群
在 管理节点 下执行如下步骤:
1. 安装准备,创建文件夹
在管理节点上创建一个目录,用于保存 ceph-deploy 生成的配置文件和密钥对。
$ cd ~
$ mkdir my-cluster
$ cd my-cluster
注:若安装ceph后遇到麻烦可以使用以下命令进行清除包和配置:
// 删除安装包
$ ceph-deploy purge admin-node node1 node2 node3
// 清除配置
$ ceph-deploy purgedata admin-node node1 node2 node3
$ ceph-deploy forgetkeys
2. 创建集群和监控节点
创建集群并初始化监控节点:
$ ceph-deploy new {initial-monitor-node(s)}
这里node1是monitor节点,所以执行:
$ ceph-deploy new node1
完成后,my-clster 下多了3个文件:ceph.conf
、ceph-deploy-ceph.log
和 ceph.mon.keyring
。
- 问题:如果出现 "[ceph_deploy][ERROR ] RuntimeError: remote connection got closed, ensure
requiretty
is disabled for node1",执行 sudo visudo 将 Defaults requiretty 注释掉。
3. 修改配置文件
$ cat ceph.conf
内容如下:
[global]
fsid = 89933bbb-257c-4f46-9f77-02f44f4cc95c
mon_initial_members = node1
mon_host = 192.168.0.131
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx
把 Ceph 配置文件里的默认副本数从 3 改成 2 ,这样只有两个 OSD 也可以达到 active + clean 状态。把 osd pool default size = 2 加入 [global] 段:
$ sed -i '$a\osd pool default size = 2' ceph.conf
再把 public network 写入 Ceph 配置文件的 [global] 段:
public_network = {ip-address}/{netmask}
# 比如:public_network = 192.168.0.0/24
最终的文件内容是:
[global]
fsid = 89933bbb-257c-4f46-9f77-02f44f4cc95c
mon_initial_members = node1
mon_host = 192.168.0.131
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx
osd pool default size = 2
public_network = 192.168.0.0/24
4. 安装Ceph
在所有节点上安装ceph:
$ ceph-deploy install --no-adjust-repos admin-node node1 node2 node3
--no-adjust-repos是直接使用本地源,不生成官方源.(重要)
- 问题:[ceph_deploy][ERROR ] RuntimeError: Failed to execute command: yum -y install epel-release
解决方法:
sudo yum -y remove epel-release
5. 配置初始 monitor(s)、并收集所有密钥
$ ceph-deploy mon create-initial
完成上述操作后,当前目录里应该会出现这些密钥环:
{cluster-name}.client.admin.keyring
{cluster-name}.bootstrap-osd.keyring
{cluster-name}.bootstrap-mds.keyring
{cluster-name}.bootstrap-rgw.keyring
6. 添加2个OSD
- 登录到 Ceph 节点、并给 OSD 守护进程创建一个目录,并添加权限。
$ ssh node2
$ sudo mkdir /var/local/osd0
$ sudo chmod 777 /var/local/osd0/
$ exit
$ ssh node3
$ sudo mkdir /var/local/osd1
$ sudo chmod 777 /var/local/osd1/
$ exit
- 然后,从管理节点执行 ceph-deploy 来准备 OSD 。
$ ceph-deploy osd prepare node2:/var/local/osd0 node3:/var/local/osd1
- 最后,激活 OSD 。
$ ceph-deploy osd activate node2:/var/local/osd0 node3:/var/local/osd1
7.把配置文件和 admin 密钥拷贝到管理节点和 Ceph 节点
$ ceph-deploy admin admin-node node1 node2 node3
8. 确保你对 ceph.client.admin.keyring 有正确的操作权限
$ sudo chmod +r /etc/ceph/ceph.client.admin.keyring
9. 检查集群的健康状况和OSD节点状况
[zeng@admin-node my-cluster]$ ceph health
HEALTH_OK
[zeng@admin-node my-cluster]$ ceph -s
cluster a3dd419e-5c99-4387-b251-58d4eb582995
health HEALTH_OK
monmap e1: 1 mons at {node1=192.168.0.131:6789/0}
election epoch 3, quorum 0 node1
osdmap e10: 2 osds: 2 up, 2 in
flags sortbitwise,require_jewel_osds
pgmap v22: 64 pgs, 1 pools, 0 bytes data, 0 objects
12956 MB used, 21831 MB / 34788 MB avail
64 active+clean
[zeng@admin-node my-cluster]$ ceph osd df
ID WEIGHT REWEIGHT SIZE USE AVAIL %USE VAR PGS
0 0.01659 1.00000 17394M 6478M 10915M 37.24 1.00 64
1 0.01659 1.00000 17394M 6478M 10915M 37.25 1.00 64
TOTAL 34788M 12956M 21831M 37.24
MIN/MAX VAR: 1.00/1.00 STDDEV: 0
四、扩展集群(扩容)
1. 添加OSD
在 node1 上添加一个 osd.2。
- 创建目录
$ ssh node1
$ sudo mkdir /var/local/osd2
$ sudo chmod 777 /var/local/osd2/
$ exit
- 准备OSD
$ ceph-deploy osd prepare node1:/var/local/osd2
- 激活OSD
$ ceph-deploy osd activate node1:/var/local/osd2
- 检查集群状况和OSD节点:
[zeng@admin-node my-cluster]$ ceph -s
cluster a3dd419e-5c99-4387-b251-58d4eb582995
health HEALTH_OK
monmap e1: 1 mons at {node1=192.168.0.131:6789/0}
election epoch 3, quorum 0 node1
osdmap e15: 3 osds: 3 up, 3 in
flags sortbitwise,require_jewel_osds
pgmap v37: 64 pgs, 1 pools, 0 bytes data, 0 objects
19450 MB used, 32731 MB / 52182 MB avail
64 active+clean
[zeng@admin-node my-cluster]$ ceph osd df
ID WEIGHT REWEIGHT SIZE USE AVAIL %USE VAR PGS
0 0.01659 1.00000 17394M 6478M 10915M 37.24 1.00 41
1 0.01659 1.00000 17394M 6478M 10915M 37.24 1.00 43
2 0.01659 1.00000 17394M 6494M 10899M 37.34 1.00 44
TOTAL 52182M 19450M 32731M 37.28
MIN/MAX VAR: 1.00/1.00 STDDEV: 0.04
2. 添加MONITORS
在 ndoe2 和 node3 添加监控节点。
- 修改
mon_initial_members
、mon_host
和public network
配置:
[global]
fsid = a3dd419e-5c99-4387-b251-58d4eb582995
mon_initial_members = node1,node2,node3
mon_host = 192.168.0.131,192.168.0.132,192.168.0.133
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx
osd pool default size = 2
public network = 192.168.0.120/24
- 推送至其他节点:
$ ceph-deploy --overwrite-conf config push node1 node2 node3
- 添加监控节点:
$ ceph-deploy mon add node2 node3
文章转载自:https://www.cnblogs.com/zengzhihua/p/9829472.html
- 查看集群状态和监控节点:
[zeng@admin-node my-cluster]$ ceph -s
cluster a3dd419e-5c99-4387-b251-58d4eb582995
health HEALTH_OK
monmap e3: 3 mons at {node1=192.168.0.131:6789/0,node2=192.168.0.132:6789/0,node3=192.168.0.133:6789/0}
election epoch 8, quorum 0,1,2 node1,node2,node3
osdmap e25: 3 osds: 3 up, 3 in
flags sortbitwise,require_jewel_osds
pgmap v3919: 64 pgs, 1 pools, 0 bytes data, 0 objects
19494 MB used, 32687 MB / 52182 MB avail
64 active+clean
[zeng@admin-node my-cluster]$ ceph mon stat
e3: 3 mons at {node1=192.168.0.131:6789/0,node2=192.168.0.132:6789/0,node3=192.168.0.133:6789/0}, election epoch 8, quorum 0,1,2 node1,node2,node3
初始化监控节点,报错汇总
执行ceph-deploy mon create-initial
报错部分内容如下:
[ceph2][ERROR ] admin_socket: exception getting command descriptions: [Errno 2] No such file or directory
[ceph2][WARNIN] monitor: mon.ceph2, might not be running yet
[ceph2][INFO ] Running command: sudo ceph --cluster=ceph --admin-daemon /var/run/ceph/ceph-mon.ceph2.asok mon_status
[ceph2][ERROR ] admin_socket: exception getting command descriptions: [Errno 2] No such file or directory
[ceph2][WARNIN] monitor ceph2 does not exist in monmap
[ceph2][WARNIN] neither public_addr nor public_network keys are defined for monitors
[ceph2][WARNIN] monitors may not be able to form quorum
注意报错中public_network,这是由于没有在ceph.conf中配置
解决办法:
修改ceph.conf配置文件(此IP段根据个人情况设定),添加public_network = 192.168.1.0/24
修改后继续执行ceph-deploy mon create-initial后,发现依旧报错,报错部分内容如下
[ceph3][WARNIN] provided hostname must match remote hostname
[ceph3][WARNIN] provided hostname: ceph3
[ceph3][WARNIN] remote hostname: localhost
[ceph3][WARNIN] monitors may not reach quorum and create-keys will not complete
[ceph3][WARNIN] ********************************************************************************
[ceph3][DEBUG ] deploying mon to ceph3
[ceph3][DEBUG ] get remote short hostname
[ceph3][DEBUG ] remote hostname: localhost
[ceph3][DEBUG ] write cluster configuration to /etc/ceph/{cluster}.conf
[ceph_deploy.mon][ERROR ] RuntimeError: config file /etc/ceph/ceph.conf exists with different content; use --overwrite-conf to overwrite
[ceph_deploy][ERROR ] GenericError: Failed to create 3 monitors
这里看到错误提示/etc/ceph/ceph.conf内容不同,使用--overwrite-conf来覆盖
命令如下:
ceph-deploy --overwrite-conf config push ceph1 ceph2 ceph3
ceph1 ceph2 ceph3都是主机节点
修改后继续执行ceph-deploy mon create-initial,发现报错还是存在,报错部分内容如下
···
[ceph3][INFO ] Running command: sudo ceph --cluster=ceph --admin-daemon /var/run/ceph/ceph-mon.ceph3.asok mon_status
[ceph3][ERROR ] admin_socket: exception getting command descriptions: [Errno 2] No such file or directory
[ceph_deploy.mon][WARNIN] mon.ceph3 monitor is not yet in quorum, tries left: 1
[ceph_deploy.mon][WARNIN] waiting 20 seconds before retrying
[ceph_deploy.mon][ERROR ] Some monitors have still not reached quorum:
[ceph_deploy.mon][ERROR ] ceph1
[ceph_deploy.mon][ERROR ] ceph3
[ceph_deploy.mon][ERROR ] ceph2
···
经过排查发现节点的hostname与/etc/hosts不符
解决办法:修改节点hostname名称,使其与/etc/hosts相符
节点一执行:hostnamectl set-hostname ceph1
节点二执行:hostnamectl set-hostname ceph2
节点三执行:hostnamectl set-hostname ceph3
修改后继续执行ceph-deploy mon create-initial,mmp发现还是报错,报错内容又不一样了,中间部分报错内容如下
···
[ceph2][ERROR ] no valid command found; 10 closest matches:
[ceph2][ERROR ] perf dump {} {}
[ceph2][ERROR ] log reopen
[ceph2][ERROR ] help
[ceph2][ERROR ] git_version
[ceph2][ERROR ] log flush
[ceph2][ERROR ] log dump
[ceph2][ERROR ] config unset
[ceph2][ERROR ] config show
[ceph2][ERROR ] get_command_descriptions
[ceph2][ERROR ] dump_mempools
[ceph2][ERROR ] admin_socket: invalid command
[ceph_deploy.mon][WARNIN] mon.ceph2 monitor is not yet in quorum, tries left: 5
[ceph_deploy.mon][WARNIN] waiting 5 seconds before retrying
[ceph2][INFO ] Running command: sudo ceph --cluster=ceph --admin-daemon /var/run/ceph/ceph-mon.ceph2.asok mon_status
[ceph2][ERROR ] admin_socket: exception getting command descriptions: [Errno 2] No such file or directory
···
解决办法:在各个节点上执行sudo pkill ceph,然后再在deploy节点执行ceph-deploy mon create-initial
然后发现ERROR报错消失了,配置初始monitor(s)、并收集到了所有密钥,当前目录下可以看到下面这些密钥环
ceph.bootstrap-mds.keyring
ceph.bootstrap-mgr.keyring
ceph.bootstrap-osd.keyring
ceph.bootstrap-rgw.keyring
ceph.client.admin.keyring
Ceph 存储集群 - 搭建存储集群---教程走到osd激活这一步执行不下去了,报错的更多相关文章
- 分布式缓存技术redis学习系列(四)——redis高级应用(集群搭建、集群分区原理、集群操作)
本文是redis学习系列的第四篇,前面我们学习了redis的数据结构和一些高级特性,点击下面链接可回看 <详细讲解redis数据结构(内存模型)以及常用命令> <redis高级应用( ...
- 分布式缓存技术redis学习(四)——redis高级应用(集群搭建、集群分区原理、集群操作)
本文是redis学习系列的第四篇,前面我们学习了redis的数据结构和一些高级特性,点击下面链接可回看 <详细讲解redis数据结构(内存模型)以及常用命令> <redis高级应用( ...
- MongoDB集群搭建-副本集
MongoDB集群搭建-副本集 概念性的知识,可以参考本人博客地址: 一.Master-Slave方案: 主从: 二.Replica Set方案: 副本集: 步骤:(只要按步骤操作,100%成功) 1 ...
- 分布式缓存技术redis系列(四)——redis高级应用(集群搭建、集群分区原理、集群操作)
本文是redis学习系列的第四篇,前面我们学习了redis的数据结构和一些高级特性,点击下面链接可回看 <详细讲解redis数据结构(内存模型)以及常用命令> <redis高级应用( ...
- redis高级应用(集群搭建、集群分区原理、集群操作)
文章主目录 Redis集群简介 Redis集群搭建 Redis集群分区原理 集群操作 参考文档 本文是redis学习系列的第四篇,前面我们学习了redis的数据结构和一些高级特性,点击下面链接可回看 ...
- redis系列之4----redis高级应用(集群搭建、集群分区原理、集群操作)
文章主目录 Redis集群简介 Redis集群搭建 Redis集群分区原理 集群操作 参考文档 本文是redis学习系列的第四篇,前面我们学习了redis的数据结构和一些高级特性,点击下面链接可回看 ...
- Ceph 存储集群 - 搭建存储集群
目录 一.准备机器 二.ceph节点安装 三.搭建集群 四.扩展集群(扩容) 一.准备机器 本文描述如何在 CentOS 7 下搭建 Ceph 存储集群(STORAGE CLUSTER). 一共4 ...
- elasticsearch系列八:ES 集群管理(集群规划、集群搭建、集群管理)
一.集群规划 搭建一个集群我们需要考虑如下几个问题: 1. 我们需要多大规模的集群? 2. 集群中的节点角色如何分配? 3. 如何避免脑裂问题? 4. 索引应该设置多少个分片? 5. 分片应该设置几个 ...
- druid.io本地集群搭建 / 扩展集群搭建
druid.io 是一个比较重型的数据库查询系统,分为5种节点 . 在此就不对数据库进行介绍了,如果有疑问请参考白皮书: http://pan.baidu.com/s/1eSFlIJS 单台机器的集群 ...
随机推荐
- Restarting network (via systemctl): Job for network.service failed because the control process exited with error code. See "systemctl status network.service" and "journalctl -xe" for details.
编辑完 ip地址,要重启网络 sudo service network restart 结果返回错误,错误如下 Restarting network (via systemctl): Job for ...
- Solution -「校内题」Xorequ
0x00 前置芝士 数位dp考试里出现的小神题?? 显然考场会选择打表找规律. 数位dp + 矩阵快速幂 0x01 题目描述 给定正整数 \(n\),现有如下方程 \(x \bigoplus 3x = ...
- 在 IDEA 里下个五子棋不过分吧?
大家好,我是二哥呀!今天给大家分享一个基于Netty的IDEA即时聊天插件,可以实现即时聊天.游戏对战(下棋). GitHub 地址:https://github.com/anlingyi/xecha ...
- javaweb 01: servlet前言
动力节点杜老师,javaweb最新课程的笔记,假期一直跟着bilibili上的课程在学,放在这里,方便复习 Servlet前言 关于系统架构 系统架构包括什么形式? C/S架构 B/S架构 C/S架构 ...
- Nginx 的基本概念
Nginx 简介 什么是 Nginx Nginx 是一个高性能的 HTTP 和 反向代理 web服务器 占用内存少,并发能力强,高性能,热部署 但不支持 Java,Java 得配合 tomcat 使用 ...
- nginx反向代理缓存配置
关于nginx的反向代理缓存配置,用的最多的就是CDN公司,目前CDN公司用纯nginx做缓存的已经很少了,基本都用tnginx(阿里的).openresty:但是这两款软件都是基于nignx开发的, ...
- SQL语言的总结
SQL语言分类:1.数据查询语言(DQL:Data Query Language),也称为"数据检索语句",用以从表中查询获得数据,常用关键字SELECT (一般常用的语句是:SE ...
- 题解【洛谷 P1466 [USACO2.2]集合 Subset Sums】
题目传送门 设 \(sum=1+2+3+4+\dots+n=\dfrac{n(n+1)}{2}\). 如果 \(2\nmid sum\),则显然没有方案. 如果 \(2\mid sum\),则这两个集 ...
- 2020年是时候更新你的技术武器库了:Asgi vs Wsgi(FastAPI vs Flask)
原文转载自「刘悦的技术博客」https://v3u.cn/a_id_167 也许这一篇的标题有那么一点不厚道,因为Asgi(Asynchronous Server Gateway Interface) ...
- NRooks采样类定义和测试
类声明: #pragma once #ifndef __NROOKS_HEADER__ #define __NROOKS_HEADER__ #include "sampler.h" ...