redis cluaster (redis分布式集群)

高可用:
在搭建集群时,会为每一个分片的主节点,对应一个从节点,实现slaveof的功能,同时当主节点down,实现类似于sentinel的自动failover的功能

redis cluaster搭建过程[6节点]:

1. 安装ruby支持
yum install ruby rubygems -y 2. 替换为国内源
使用国内源
gem sources -l
gem sources -a http://mirrors.aliyun.com/rubygems/
gem sources --remove https://rubygems.org/
gem install redis -v 3.3.3
gem sources -l 移除默认源:
gem sources -a http://mirrors.aliyun.com/rubygems/ --remove https://rubygems.org/ 添加完成后通过:
[root@k8s-master1 26380]# gem sources -l
*** CURRENT SOURCES *** http://mirrors.aliyun.com/rubygems/ #这里可以看到移除了默认源添加了一个阿里云源 3. 安装redis cluaster插件
[root@k8s-master1 26380]# gem install redis -v 3.3.3
Fetching: redis-3.3.3.gem (100%)
Successfully installed redis-3.3.3
Parsing documentation for redis-3.3.3
Installing ri documentation for redis-3.3.3
1 gem installed 4. 集群节点准备
mkdir /nosql/700{0..5} -p vim /nosql/7000/redis.conf
#--------------------------------------
port 7000
daemonize yes
pidfile /nosql/7000/redis.pid
loglevel notice
logfile "/nosql/7000/redis.log"
dbfilename dump.rdb
dir /nosql/7000
protected-mode no
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
#-------------------------------------- vim /nosql/7001/redis.conf
#--------------------------------------
port 7001
daemonize yes
pidfile /nosql/7001/redis.pid
loglevel notice
logfile "/nosql/7001/redis.log"
dbfilename dump.rdb
dir /nosql/7001
protected-mode no
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
#-------------------------------------- vim /nosql/7002/redis.conf
#--------------------------------------
port 7002
daemonize yes
pidfile /nosql/7002/redis.pid
loglevel notice
logfile "/nosql/7002/redis.log"
dbfilename dump.rdb
dir /nosql/7002
protected-mode no
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
#-------------------------------------- vim /nosql/7003/redis.conf
#--------------------------------------
port 7003
daemonize yes
pidfile /nosql/7003/redis.pid
loglevel notice
logfile "/nosql/7003/redis.log"
dbfilename dump.rdb
dir /nosql/7003
protected-mode no
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
#-------------------------------------- vim /nosql/7004/redis.conf
#--------------------------------------
port 7004
daemonize yes
pidfile /nosql/7004/redis.pid
loglevel notice
logfile "/nosql/7004/redis.log"
dbfilename dump.rdb
dir /nosql/7004
protected-mode no
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
#-------------------------------------- vim /nosql/7005/redis.conf
#--------------------------------------
port 7005
daemonize yes
pidfile /nosql/7005/redis.pid
loglevel notice
logfile "/nosql/7001/redis.log"
dbfilename dump.rdb
dir /nosql/7005
protected-mode no
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
#-------------------------------------- 配置完成后 启动节点
redis-server /nosql/7000/redis.conf
redis-server /nosql/7001/redis.conf
redis-server /nosql/7002/redis.conf
redis-server /nosql/7003/redis.conf
redis-server /nosql/7004/redis.conf
redis-server /nosql/7005/redis.conf 检查:
[root@k8s-master1 26380]# ps -ef |grep redis
root 1513 1 0 10:59 ? 00:00:00 redis-server *:7000 [cluster]
root 1515 1 0 10:59 ? 00:00:00 redis-server *:7001 [cluster]
root 1517 1 0 10:59 ? 00:00:00 redis-server *:7002 [cluster]
root 1523 1 0 10:59 ? 00:00:00 redis-server *:7003 [cluster]
root 1527 1 0 10:59 ? 00:00:00 redis-server *:7004 [cluster]
root 1529 1 0 10:59 ? 00:00:00 redis-server *:7005 [cluster]
root 1859 1261 0 11:00 pts/0 00:00:00 grep --color=auto redis #加入到集群管理:
redis-trib.rb create --replicas 1 127.0.0.1:7000 127.0.0.1:7001 \
127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 加入集群后会收到询问
Can I set the above configuration? (type 'yes' to accept): yes 输入yes 即可 注意: 这里 前3个节点为主节点,后三个节点为从节点 #查询集群状态:
集群主节点状态
redis-cli -p 7000 cluster nodes | grep master [root@k8s-master1 26380]# redis-cli -p 7000 cluster nodes |grep master
f61f106f3cf969673a39fa0e0a795b7033166d0b 127.0.0.1:7001 master - 0 1600484746297 2 connected 5461-10922
21d16b3ccb51b444e188a2e4f344761ed5a8420f 127.0.0.1:7000 myself,master - 0 0 1 connected 0-5460
da1ede6d05d4c754c90690ab8613e0bc80b002ef 127.0.0.1:7002 master - 0 1600484746800 3 connected 10923-16383 这里查询也印证了我们说的 前三个为主节点。 集群从节点状态
redis-cli -p 7000 cluster nodes | grep slave [root@k8s-master1 26380]# redis-cli -p 7000 cluster nodes | grep slave
ccada0a70487b609f60e904260115610b7161714 127.0.0.1:7005 slave da1ede6d05d4c754c90690ab8613e0bc80b002ef 0 1600484813136 6 connected
da4be9425c3f8fda1ff7a54f9e63d346e99e9135 127.0.0.1:7003 slave 21d16b3ccb51b444e188a2e4f344761ed5a8420f 0 1600484812129 4 connected
e67d94be0dbbdd8ffcc02fcba05d0b058a349675 127.0.0.1:7004 slave f61f106f3cf969673a39fa0e0a795b7033166d0b 0 1600484814142 5 connected

redis cluster扩容新节点

默认构建集群时它类似于服务器的硬盘槽位,默认槽位都分配好了,新增节点并不会工作,只是加入到节点了而已。
如果需要让新节点工作,则需要重新进行槽位分配。 节点扩容实战:
新增两台实例,用于扩容一个主从
mkdir /nosql/7006 -p
mkdir /nosql/7007 -p
cp /nosql/7000/redis.conf /nosql/7006/redis.conf
sed -i "s#7000#7006#g" /nosql/7006/redis.conf
cat /nosql/7006/redis.conf
#----------------------------
port 7006
daemonize yes
pidfile /nosql/7006/redis.pid
loglevel notice
logfile "/nosql/7006/redis.log"
dbfilename dump.rdb
dir /nosql/7006
protected-mode no
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
#---------------------------- cp /nosql/7000/redis.conf /nosql/7007/redis.conf
sed -i "s#7000#7007#g" /nosql/7007/redis.conf
cat /nosql/7007/redis.conf
#----------------------------
port 7007
daemonize yes
pidfile /nosql/7007/redis.pid
loglevel notice
logfile "/nosql/7007/redis.log"
dbfilename dump.rdb
dir /nosql/7007
protected-mode no
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
#---------------------------- 两台节点配置完成后启动
redis-server /nosql/7006/redis.conf
redis-server /nosql/7007/redis.conf 检查进程:
[root@k8s-master1 26380]# ps -ef|grep redis
root 1513 1 0 10:59 ? 00:00:02 redis-server *:7000 [cluster]
root 1515 1 0 10:59 ? 00:00:02 redis-server *:7001 [cluster]
root 1517 1 0 10:59 ? 00:00:02 redis-server *:7002 [cluster]
root 1523 1 0 10:59 ? 00:00:02 redis-server *:7003 [cluster]
root 1527 1 0 10:59 ? 00:00:02 redis-server *:7004 [cluster]
root 1529 1 0 10:59 ? 00:00:02 redis-server *:7005 [cluster]
root 8835 1 0 11:30 ? 00:00:00 redis-server *:7006 [cluster] #<-------新节点启动成功
root 9102 1 0 11:31 ? 00:00:00 redis-server *:7007 [cluster] #<-------新节点启动成功
root 9356 1261 0 11:32 pts/0 00:00:00 grep --color=auto redis
root 65882 1 0 Sep18 ? 00:01:17 redis-server *:6381
root 65893 1 0 Sep18 ? 00:01:17 redis-server *:6382
root 66500 1261 0 Sep18 pts/0 00:02:01 redis-sentinel *:26379 [sentinel]
root 67226 1261 0 Sep18 pts/0 00:02:03 redis-sentinel *:26380 [sentinel]
root 68930 1 0 Sep18 ? 00:01:16 redis-server *:6380 启动完成后进行节点添加,将新增的节点加入到集群并工作:
1. 将7006加入新节点,设置为主节点
redis-trib.rb add-node 127.0.0.1:7006 127.0.0.1:7000
2. 检查状态
[root@k8s-master1 26380]# redis-cli -p 7000 cluster nodes|grep master
f61f106f3cf969673a39fa0e0a795b7033166d0b 127.0.0.1:7001 master - 0 1600486595271 2 connected 5461-10922
21d16b3ccb51b444e188a2e4f344761ed5a8420f 127.0.0.1:7000 myself,master - 0 0 1 connected 0-5460
f410ac95f665687533957933f9ddbc9d1665899a 127.0.0.1:7006 master - 0 1600486594769 0 connected <----看到已经连接到集群,但是还没做分片槽位信息
da1ede6d05d4c754c90690ab8613e0bc80b002ef 127.0.0.1:7002 master - 0 1600486595773 3 connected 10923-16383 这里可以看到我们总槽位是16383 之前有3个节点 现在有4个节点,所以需要重新分配,使用 16384/4 [方便除整,这里就多加1进行除法计算]
[root@k8s-master1 ~]# echo 16384/4|bc
4096
也就是需要每个节点分到4096 现在需要将已经分配的槽位每个分一部分给新的主节点。 3. 重新分片[重新分片的时候建议避开业务高峰期,一面出现数据丢失问题]
[root@k8s-master1 26380]# redis-trib.rb reshard 127.0.0.1:7000 #执行重新分片
How many slots do you want to move (from 1 to 16384) 4096 <--- #手工输入分片数量 4096
What is the receiving node ID? f410ac95f665687533957933f9ddbc9d1665899a #这是扩容到哪个节点,新增的是7006 所以这里应该写70006的id
Please enter all the source node IDs.
Type 'all' to use all the nodes as source nodes for the hash slots.
Type 'done' once you entered all the source nodes IDs.
Source node #1: all #<-------------- 输入all 是从所有节点进行重新分配
...
...
Moving slot 12287 from da1ede6d05d4c754c90690ab8613e0bc80b002ef
Do you want to proceed with the proposed reshard plan (yes/no)? yes #是否接受重新分片的计划? 这里直接yes就可以了 这样分片就完成了,现在重新查看状态
[root@k8s-master1 26380]# redis-cli -p 7000 cluster nodes |grep master
f61f106f3cf969673a39fa0e0a795b7033166d0b 127.0.0.1:7001 master - 0 1600487849917 2 connected 6827-10922
21d16b3ccb51b444e188a2e4f344761ed5a8420f 127.0.0.1:7000 myself,master - 0 0 1 connected 1365-5460
f410ac95f665687533957933f9ddbc9d1665899a 127.0.0.1:7006 master - 0 1600487848411 7 connected 0-1364 5461-6826 10923-12287
da1ede6d05d4c754c90690ab8613e0bc80b002ef 127.0.0.1:7002 master - 0 1600487848914 3 connected 12288-16383 这里可以看到 127.0.0.1:7006 获得了其他节点分配过来的槽位信息: connected 0-1364 5461-6826 10923-12287
这说明分片成功。
0-1364 5461-6826 10923-12287 这个id 是 f410ac95f665687533957933f9ddbc9d1665899a 添加从节点是为这个主节点添加从节点。 4. 刚才添加了主节点重新分片,现在需要添加从节点:
redis-trib.rb add-node --slave --master-id f410ac95f665687533957933f9ddbc9d1665899a 127.0.0.1:7007 127.0.0.1:7000
这个地址就是新增的 [root@k8s-master1]# redis-trib.rb add-node --slave --master-id f410ac95f665687533957933f9ddbc9d1665899a 127.0.0.1:7007 127.0.0.1:7000
>>> Adding node 127.0.0.1:7007 to cluster 127.0.0.1:7000
>>> Performing Cluster Check (using node 127.0.0.1:7000)
M: 21d16b3ccb51b444e188a2e4f344761ed5a8420f 127.0.0.1:7000
slots:1365-5460 (4096 slots) master
1 additional replica(s)
M: f61f106f3cf969673a39fa0e0a795b7033166d0b 127.0.0.1:7001
slots:6827-10922 (4096 slots) master
1 additional replica(s)
M: f410ac95f665687533957933f9ddbc9d1665899a 127.0.0.1:7006
slots:0-1364,5461-6826,10923-12287 (4096 slots) master
0 additional replica(s)
M: da1ede6d05d4c754c90690ab8613e0bc80b002ef 127.0.0.1:7002
slots:12288-16383 (4096 slots) master
1 additional replica(s)
S: ccada0a70487b609f60e904260115610b7161714 127.0.0.1:7005
slots: (0 slots) slave
replicates da1ede6d05d4c754c90690ab8613e0bc80b002ef
S: da4be9425c3f8fda1ff7a54f9e63d346e99e9135 127.0.0.1:7003
slots: (0 slots) slave
replicates 21d16b3ccb51b444e188a2e4f344761ed5a8420f
S: e67d94be0dbbdd8ffcc02fcba05d0b058a349675 127.0.0.1:7004
slots: (0 slots) slave
replicates f61f106f3cf969673a39fa0e0a795b7033166d0b
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
>>> Send CLUSTER MEET to node 127.0.0.1:7007 to make it join the cluster.
Waiting for the cluster to join.
>>> Configure node as replica of 127.0.0.1:7006.
[OK] New node added correctly.

redis删除节点

#1. 将需要删除节点slot移动走
redis-trib.rb reshard 127.0.0.1:7000 #2. 删除一个节点
[root@k8s-master1 26380]# redis-trib.rb reshard 127.0.0.1:7000 >>> Performing Cluster Check (using node 127.0.0.1:7000)
M: 21d16b3ccb51b444e188a2e4f344761ed5a8420f 127.0.0.1:7000
slots:1365-5460 (4096 slots) master
1 additional replica(s)
S: dbb275031f92a1b3bd67b0e264076e584b8ab2f1 127.0.0.1:7007
slots: (0 slots) slave
replicates f410ac95f665687533957933f9ddbc9d1665899a
M: f61f106f3cf969673a39fa0e0a795b7033166d0b 127.0.0.1:7001
slots:6827-10922 (4096 slots) master
1 additional replica(s)
M: f410ac95f665687533957933f9ddbc9d1665899a 127.0.0.1:7006
slots:0-1364,5461-6826,10923-12287 (4096 slots) master
1 additional replica(s)
M: da1ede6d05d4c754c90690ab8613e0bc80b002ef 127.0.0.1:7002
slots:12288-16383 (4096 slots) master
1 additional replica(s)
S: ccada0a70487b609f60e904260115610b7161714 127.0.0.1:7005
slots: (0 slots) slave
replicates da1ede6d05d4c754c90690ab8613e0bc80b002ef
S: da4be9425c3f8fda1ff7a54f9e63d346e99e9135 127.0.0.1:7003
slots: (0 slots) slave
replicates 21d16b3ccb51b444e188a2e4f344761ed5a8420f
S: e67d94be0dbbdd8ffcc02fcba05d0b058a349675 127.0.0.1:7004
slots: (0 slots) slave
replicates f61f106f3cf969673a39fa0e0a795b7033166d0b
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
How many slots do you want to move (from 1 to 16384)? 4096 #删除节点分片大小,上面添加的时候重新分配就是4096,这里也需要是4096
What is the receiving node ID? 21d16b3ccb51b444e188a2e4f344761ed5a8420f #这里的ID 就选择 7000 这个节点的
Source node #1: f410ac95f665687533957933f9ddbc9d1665899a # 这里是要删除的的节点ID,需要删除7006节点就写7006节点ID Source node #2:done # 这里输入done 确认设置的信息 Do you want to proceed with the proposed reshard plan (yes/no)? yes #这里输入yes,这样就完成了删除节点,它会把7006节点移动到7000节点。 #3. 删除节点信息
[root@k8s-master1 26380]# redis-trib.rb del-node 127.0.0.1:7006 f410ac95f665687533957933f9ddbc9d1665899a
>>> Removing node f410ac95f665687533957933f9ddbc9d1665899a from cluster 127.0.0.1:7006
>>> Sending CLUSTER FORGET messages to the cluster...
>>> SHUTDOWN the node. 注意: 此时7006这个节点就退出了,从ps的结果中可以看到:
[root@k8s-master1 26380]# ps -ef|grep redis
root 1513 1 0 10:59 ? 00:00:12 redis-server *:7000 [cluster]
root 1515 1 0 10:59 ? 00:00:10 redis-server *:7001 [cluster]
root 1517 1 0 10:59 ? 00:00:10 redis-server *:7002 [cluster]
root 1523 1 0 10:59 ? 00:00:06 redis-server *:7003 [cluster]
root 1527 1 0 10:59 ? 00:00:07 redis-server *:7004 [cluster]
root 1529 1 0 10:59 ? 00:00:06 redis-server *:7005 [cluster]
root 9102 1 0 11:31 ? 00:00:03 redis-server *:7007 [cluster] 主节点已经删除,此时还要删除从节点:
[root@k8s-master1 26380]# redis-cli -p 7000 cluster nodes |grep slave
dbb275031f92a1b3bd67b0e264076e584b8ab2f1 127.0.0.1:7007 slave 21d16b3ccb51b444e188a2e4f344761ed5a8420f 0 1600490142525 8 connected
ccada0a70487b609f60e904260115610b7161714 127.0.0.1:7005 slave da1ede6d05d4c754c90690ab8613e0bc80b002ef 0 1600490143027 6 connected
da4be9425c3f8fda1ff7a54f9e63d346e99e9135 127.0.0.1:7003 slave 21d16b3ccb51b444e188a2e4f344761ed5a8420f 0 1600490142021 8 connected
e67d94be0dbbdd8ffcc02fcba05d0b058a349675 127.0.0.1:7004 slave f61f106f3cf969673a39fa0e0a795b7033166d0b 0 1600490143531 5 connected 7007是从节点,还需要删除这个节点[节点ID是第一列,不要删除第四列,第四列是主节点]
[root@k8s-master1 26380]# redis-trib.rb del-node 127.0.0.1:7007 dbb275031f92a1b3bd67b0e264076e584b8ab2f1
>>> Removing node dbb275031f92a1b3bd67b0e264076e584b8ab2f1 from cluster 127.0.0.1:7007
>>> Sending CLUSTER FORGET messages to the cluster...
>>> SHUTDOWN the node. 检查:
1.查看slave节点是否有信息没删除
[root@k8s-master1 26380]# redis-cli -p 7000 cluster nodes |grep slave
ccada0a70487b609f60e904260115610b7161714 127.0.0.1:7005 slave da1ede6d05d4c754c90690ab8613e0bc80b002ef 0 1600490541551 6 connected
da4be9425c3f8fda1ff7a54f9e63d346e99e9135 127.0.0.1:7003 slave 21d16b3ccb51b444e188a2e4f344761ed5a8420f 0 1600490540548 8 connected
e67d94be0dbbdd8ffcc02fcba05d0b058a349675 127.0.0.1:7004 slave f61f106f3cf969673a39fa0e0a795b7033166d0b 0 1600490541551 5 connected 2.查看master节点是否有信息没删除
[root@k8s-master1 26380]# redis-cli -p 7000 cluster nodes |grep master
f61f106f3cf969673a39fa0e0a795b7033166d0b 127.0.0.1:7001 master - 0 1600490554614 2 connected 6827-10922
21d16b3ccb51b444e188a2e4f344761ed5a8420f 127.0.0.1:7000 myself,master - 0 0 8 connected 0-6826 10923-12287
da1ede6d05d4c754c90690ab8613e0bc80b002ef 127.0.0.1:7002 master - 0 1600490553609 3 connected 12288-16383 此时 7006 已经从主从节点都删除了

删除节点的过程概述:

1. redis-trib.rb reshard 127.0.0.1:7000  #删除一个节点
2. How many slots do you want to move (from 1 to 16384)? 4096 #删除节点分片大小,上面添加的时候重新分配就是4096,这里也需要是4096
3. What is the receiving node ID? #从哪个节点接收
4. Source node #1: #这里是要删除的的节点ID,需要删除7006节点就写7006节点ID
5. Source node #2: #这里输入done 确认设置的信息
6. Do you want to proceed with the proposed reshard plan (yes/no)? yes # 是否确认删除的节点信息?

注意,redis新增节点 删除节点都需要进行重新分配的

redis cluaster (redis分布式集群 redis分片集群)的更多相关文章

  1. redis集群之分片集群的原理和常用代理环境部署

    上篇文章刚刚介绍完redis的主从复制集群,但主从复制集群主要是为了解决redis集群的单点故障问题,通过整合哨兵能实现集群的高可用:但是却无法解决数据容量以及单节点的压力问题,所以本文继续介绍red ...

  2. mongodb集群配置分片集群

    测试环境 操作系统:CentOS 7.2 最小化安装 主服务器IP地址:192.168.197.21 mongo01 从服务器IP地址:192.168.197.22 mongo02 从服务器IP地址: ...

  3. mongodb3.6集群搭建:分片集群认证

    上篇集群已经创建,现在加入认证. 1. 生成密钥文件每个服务器上创建路径: mkdir -p /var/lib/mongo/auth 生成64字节的密钥文件openssl rand -base64 6 ...

  4. 分布式缓存技术redis学习系列

    分布式缓存技术redis学习系列(一)--redis简介以及linux上的安装以及操作redis问题整理 分布式缓存技术redis学习系列(二)--详细讲解redis数据结构(内存模型)以及常用命令 ...

  5. 解析分布式锁之Redis实现(二)

    摘要:在前文中提及了实现分布式锁目前有三种流行方案,分别为基于数据库.Redis.Zookeeper的方案,本文主要阐述基于Redis的分布式锁,分布式架构设计如今在企业中被大量的应用,而在不同的分布 ...

  6. 分布式锁(redis/mysql)

    单台机器所能承载的量是有限的,用户的量级上万,基本上服务都会做分布式集群部署.很多时候,会遇到对同一资源的方法.这时候就需要锁,如果是单机版的,可以利用java等语言自带的并发同步处理.如果是多台机器 ...

  7. MongoDB 搭建分片集群

    在MongoDB(版本 3.2.9)中,分片是指将collection分散存储到不同的Server中,每个Server只存储collection的一部分,服务分片的所有服务器组成分片集群.分片集群(S ...

  8. mongoDB研究笔记:分片集群部署

    前面几篇文章的分析复制集解决了数据库的备份与自动故障转移,但是围绕数据库的业务中当前还有两个方面的问题变得越来越重要.一是海量数据如何存储?二是如何高效的读写海量数据?尽管复制集也可以实现读写分析,如 ...

  9. Mongodb集群与分片 1

    分片集群   Mongodb中数据分片叫做chunk,它是一个Collection中的一个连续的数据记录,但是它有一个大小限制,不可以超过200M,如果超出产生新的分片.   下面是一个简单的分片集群 ...

  10. mongodb分片集群安装教程

    mongodb 集群包含副本集群,主从集群以及分片集群,分片集群比较复杂,这里测试我采用了三台机器,交差部署 blog地址:http://www.cnblogs.com/caoguo 一 .环境:#m ...

随机推荐

  1. mysql 锁机制(一)

    前言 介绍mysql 锁的机制. 正文 锁类型 读锁,是一种共享锁,s锁,允许一个事务是读取一行,阻止其他事务获取相同的数据集的排他锁. 注:排它锁的意思就是说只能加相同的锁,不能加不同的锁,比如都加 ...

  2. 多python版本的库安装和导库

    同时安装多python版本的,使用pip安装python的库,以及导出python库列表及版本,使用导出的库列表批量进行新环境的库安装. 1.同时安装python2和python3时,要进行pip安装 ...

  3. Hadoop HDFS 3.2的部署

    之前写过HDFS 2.6的部署,最近项目中尝试使用最新的HDFS 3.2.1做离线存储,部署方式略有不同,所以这里再简单写一下,这里只涉及到存储因此不再配置yarn,只配置HDFS最基本的服务Name ...

  4. 安装Visual Studio 2010 教程

    1.下载软件 方法一:关注[ 火耳软件安装 ]公众号获取软件,里面还有很多类型的其他软件 或者: 方法二:我的分享链接:https://pan.baidu.com/s/1_Ow2YR-kbnbSc6o ...

  5. 第 1 章 Python 爬虫概念与 Web 基础

    第 1 章 Python 爬虫概念与 Web 基础 1.1 爬虫概念 1.1.1 什么是爬虫 爬虫,即网络爬虫,又称网络蜘蛛(Web Spider),是一种按照一定规则,用来自动浏览或抓取万维网数据的 ...

  6. 传统微服务框架如何无缝过渡到服务网格 ASM

    简介: 让我们一起来看下传统微服务迁移到服务网格技术栈会有哪些已知问题,以及阿里云服务网格 ASM 又是如何无缝支持 SpringCloud .Dubbo 这些服务的. 作者:宇曾   背景   软件 ...

  7. 龙蜥开源内核追踪利器 Surftrace:协议包解析效率提升 10 倍! | 龙蜥技术

    ​简介:如何将网络报文与内核协议栈清晰关联起来精准追踪到关注的报文行进路径呢? ​ 文/系统运维 SIG Surftrace 是由系统运维 SIG 推出的一个 ftrace 封装器和开发编译平台,让用 ...

  8. [LLM] 开源 AI 大语言模型的本地化定制实践

      LLM(Large Language Model,大型语言模型)是一种基于深度学习的自然语言处理模型,旨在理解和生成人类语言. 它们在大量的文本数据上进行训练,可以执行广泛的任务,包括文本总结.翻 ...

  9. WinDbg 加载 dotnet core 的 sos.dll 辅助调试方法

    本文告诉大家如何加载 .NET Core 或 .NET 5 的 sos.dll 文件到 WinDbg 的方法 和 .NET Framework 或 dotnet core 2.0 不相同的是,当前的 ...

  10. VP NOI2023

    一个月前的事情捏,因为今天刚好在摸鱼就想起来写写. Day 1 开题,先总的过一遍,好像比较传统. T1 基本上是一眼题了,简单容斥一下就可以解决.很快开始写,写好过了小样例.但是这个时候还没有大样例 ...