Redis哨兵模式的搭建

news2024/11/28 10:45:27

文章目录

  • 1、原理
  • 2、准备
    • 2.1、服务器准备
    • 2.2、资源准备
  • 3、Redis 主从搭建
    • 3.1、Redis 安装
    • 3.2、redis.conf 配置
      • 3.2.1、Redis 主配置
      • 3.2.2、Redis 从配置
    • 3.3、Redis 启动
    • 3.4、Redis 状态
      • 3.4.1、master 节点信息
      • 3.4.2、slave节点信息
  • 4、哨兵配置
    • 4.1、sentinel.conf配置
    • 4.2、reconfig.sh 企业微信发送脚本
    • 4.3、哨兵启动
    • 4.4、查看启动状态
    • 4.5、其他注意事项
  • 5、redis.conf 参数详解
  • 6、sentinel.conf 参数详解


1、原理

Redis哨兵模式是一种用于在Redis主从复制环境中进行高可用性监控和故障恢复的机制。该模式引入了一个或多个哨兵节点,这些节点负责监控Redis服务器的状态,并在主节点发生故障时切换为新的主节点。

哨兵节点的工作原理如下:

  1. 哨兵节点通过发送命令来监控Redis服务器的状态。它会定期向主节点和从节点发送PING命令,检查节点是否存活。
  2. 当主节点发生故障或不可用时,哨兵节点会进行故障检测。它会询问其他哨兵节点是否已经发现了主节点的故障,并尝试达成共识。
  3. 如果多数哨兵节点都认为主节点故障,那么它们会选举新的主节点。选举的原则是选择一个具有最高优先级的从节点,如果没有从节点则选择一个具有最高优先级的哨兵节点。
  4. 一旦新的主节点被选出,哨兵节点会更新所有其他从节点的配置信息,使它们成为新主节点的从节点。
  5. 当故障的主节点恢复时,哨兵节点会将其重新加入到主从复制环境中,并将其设置为新主节点的从节点。
  6. 通过哨兵模式,Redis可以实现高可用性和故障恢复。当主节点发生故障时,哨兵节点可以自动切换为新的主节点,使系统可以在故障期间继续提供服务。同时,哨兵节点可以监控并修复其他节点的故障,确保整个Redis集群处于可用状态。

在这里插入图片描述


2、准备


2.1、服务器准备

hostsIP服务
redis-01(主)192.168.1.1redis、sentinel
redis-02(从)192.168.1.2redis、sentinel
redis-03(从)192.168.1.3redis、sentinel

关闭所有服务器防火墙

$ systemctl stop firewalld.service

修改所有服务器的hosts

$ vim /etc/hosts

添加以下内容

192.168.1.1 redis-01
192.168.1.2 redis-02
192.168.1.3 redis-03

2.2、资源准备

redis 下载地址:
http://download.redis.io/releases/


3、Redis 主从搭建


3.1、Redis 安装

在所有服务器执行

注意: 新版本redis自带哨兵,不需要单独安装

$ mkdir /home/redis
$ mkdir /home/redis/data
$ mkdir /home/redis/logs
$ cd /home/redis
$ wget http://download.redis.io/releases/redis-7.2.4.tar.gz
$ tar -zxvf redis-7.2.4.tar.gz
$ cd redis-7.2.4/
$ make

3.2、redis.conf 配置

$ vim /home/redis/redis-7.2.4/redis.conf

3.2.1、Redis 主配置

dir "/home/redis/data"
logfile "/home/redis/logs/redis.log"
requirepass "123456"
protected-mode no
port 6379
min-replicas-to-write 1
min-replicas-max-lag 10
tcp-backlog 511
timeout 0
tcp-keepalive 300
daemonize yes
maxmemory 2gb
maxmemory-policy allkeys-lru
pidfile "/var/run/redis_6379.pid"
loglevel notice
databases 16
always-show-logo no
set-proc-title yes
proc-title-template "{title} {listen-addr} {server-mode}"
locale-collate ""
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename "dump.rdb"
rdb-del-sync-files no
replica-serve-stale-data yes
replica-read-only yes
repl-diskless-sync yes
repl-diskless-sync-delay 5
repl-diskless-sync-max-replicas 0
repl-diskless-load disabled
repl-disable-tcp-nodelay no
replica-priority 100
acllog-max-len 128
lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
replica-lazy-flush no
lazyfree-lazy-user-del no
lazyfree-lazy-user-flush no
oom-score-adj no
oom-score-adj-values 0 200 800
disable-thp yes
appendonly yes
appendfilename "appendonly.aof"
appenddirname "appendonlydir"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
aof-use-rdb-preamble yes
aof-timestamp-enabled no
slowlog-log-slower-than 10000
slowlog-max-len 128
latency-monitor-threshold 0
notify-keyspace-events ""
hash-max-listpack-entries 512
hash-max-listpack-value 64
list-max-listpack-size -2
list-compress-depth 0
set-max-intset-entries 512
set-max-listpack-entries 128
set-max-listpack-value 64
zset-max-listpack-entries 128
zset-max-listpack-value 64
hll-sparse-max-bytes 3000
stream-node-max-bytes 4kb
stream-node-max-entries 100
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit replica 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
dynamic-hz yes
aof-rewrite-incremental-fsync yes
rdb-save-incremental-fsync yes
jemalloc-bg-thread yes


3.2.2、Redis 从配置

  1. masterauth: 以认证的方式连接到master。 如果master中使用了“密码保护”,slave必须交付正确的授权密码,才能连接成功。“requirepass”配置项指定了当前server的密码。此配置项中值需要和master机器的“requirepass”保持一致。
  2. slaveof : 将当前服务器转变为指定服务器的从属服务器(slave server)。
dir "/home/redis/data"
logfile "/home/redis/logs/redis.log"
requirepass "123456"
masterauth "123456"
protected-mode no
port 6379
min-replicas-to-write 1
min-replicas-max-lag 10
slaveof middleware-01 6379
tcp-backlog 511
timeout 0
tcp-keepalive 300
daemonize yes
maxmemory 2gb
maxmemory-policy allkeys-lru
pidfile "/var/run/redis_6379.pid"
loglevel notice
databases 16
always-show-logo no
set-proc-title yes
proc-title-template "{title} {listen-addr} {server-mode}"
locale-collate ""
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename "dump.rdb"
rdb-del-sync-files no
replica-serve-stale-data yes
replica-read-only yes
repl-diskless-sync yes
repl-diskless-sync-delay 5
repl-diskless-sync-max-replicas 0
repl-diskless-load disabled
repl-disable-tcp-nodelay no
replica-priority 100
acllog-max-len 128
lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
replica-lazy-flush no
lazyfree-lazy-user-del no
lazyfree-lazy-user-flush no
oom-score-adj no
oom-score-adj-values 0 200 800
disable-thp yes
appendonly yes
appendfilename "appendonly.aof"
appenddirname "appendonlydir"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
aof-use-rdb-preamble yes
aof-timestamp-enabled no
slowlog-log-slower-than 10000
slowlog-max-len 128
latency-monitor-threshold 0
notify-keyspace-events ""
hash-max-listpack-entries 512
hash-max-listpack-value 64
list-max-listpack-size -2
list-compress-depth 0
set-max-intset-entries 512
set-max-listpack-entries 128
set-max-listpack-value 64
zset-max-listpack-entries 128
zset-max-listpack-value 64
hll-sparse-max-bytes 3000
stream-node-max-bytes 4kb
stream-node-max-entries 100
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit replica 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
dynamic-hz yes
aof-rewrite-incremental-fsync yes
rdb-save-incremental-fsync yes
jemalloc-bg-thread yes


3.3、Redis 启动

依次启动所有服务器上的redis 服务

$ /home/redis/redis-7.2.4/src/redis-server /home/redis/redis-7.2.4/redis.conf

3.4、Redis 状态

启动所有服务器后,查看所有redis 节点状态


3.4.1、master 节点信息

$ /home/redis/redis-7.2.4/src/redis-cli -a 123456(redis密码) info replication

Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
# Replication
role:master
connected_slaves:3
min_slaves_good_slaves:3
slave0:ip=192.168.1.2,port=6379,state=online,offset=812674869,lag=0
slave1:ip=192.168.1.3,port=6379,state=online,offset=812674869,lag=0
master_failover_state:no-failover
master_replid:ff565edfdaed8aba6cab1c39f70b8bcab2126c08
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:812674869
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:811607825
repl_backlog_histlen:1067045

3.4.2、slave节点信息

$ src/redis-cli -a 123456(redis密码) info replication

Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
# Replication
role:slave
master_host:redis-01
master_port:6379
master_link_status:up
master_last_io_seconds_ago:0
master_sync_in_progress:0
slave_read_repl_offset:812708923
slave_repl_offset:812708923
slave_priority:100
slave_read_only:1
replica_announced:1
connected_slaves:0
min_slaves_good_slaves:0
master_failover_state:no-failover
master_replid:ff565edfdaed8aba6cab1c39f70b8bcab2126c08
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:812708923
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:811648705
repl_backlog_histlen:1060219


4、哨兵配置

在redis的安装目录下有个文件sentinel.conf,这就是哨兵的配置文件。它和redis.conf文件在同级目录


4.1、sentinel.conf配置

$ vim /home/redis/redis-7.2.4/sentinel.conf

sentinel.conf 信息

protected-mode no
port 26379
daemonize yes
pidfile "/var/run/redis-sentinel.pid"
loglevel notice
logfile "/home/redis/logs/sentinel.log"
dir "/home/redis/data"
sentinel monitor mymaster 192.168.1.1 6379 3
sentinel auth-pass mymaster 123456
# 如果master在“一定时间范围”内不回应PONG 或者是回复了一个错误消息,那么这个sentinel会主观地(单方面地)认为这个master已经不可用了

# 如果在该时间(ms)内未能完成failover操作,则认为该failover失败
sentinel failover-timeout mymaster 30000
# 指定了在执行故障转移时,最多可以有多少个从Redis实例在同步新的主实例,在从Redis实例较多的情况下这个数字越小,同步的时间越长,完成故障转移所需的时间就越长

# 编写redis节点切换通知,根据实际情况编写
sentinel client-reconfig-script mymaster /home/redis/redis-7.2.4/reconfig.sh

sentinel deny-scripts-reconfig yes
sentinel resolve-hostnames yes
sentinel announce-hostnames yes

4.2、reconfig.sh 企业微信发送脚本


#!/bin/bash
  
check_time=$(date +"%F-%T")
master_name="$1"
from_ip="$4"
from_port="$5"
to_ip="$6"
to_port="$7"


#填写自己正确的机器人链接
curl 'https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=【自己的key】' \
   -H 'Content-Type: application/json' \
   -d '
   {
        "msgtype": "text",
        "text": {
            "content": "【'$check_time' : '$master_name'】 \nmessage : \nredis主节点转移\nfrom : \n'$from_ip:$from_port'\nto: \n'$to_ip:$to_port'",
            "mentioned_list":["@all"]
        }
   }'

4.3、哨兵启动

$ /home/redis/redis-7.2.4/src/redis-sentinel /home/redis/redis-7.2.4/sentinel.conf

4.4、查看启动状态

$ /home/redis/redis-7.2.4/src/redis-cli -p 26379  info Sentinel
# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_tilt_since_seconds:-1
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=mymaster,status=ok,address=192.168.1.1:6379,slaves=3,sentinels=4

4.5、其他注意事项

redis 哨兵模式启动成功后,会自动在sentinel .conf 最下方生成以下配置


...

# Generated by CONFIG REWRITE
latency-tracking-info-percentiles 50 99 99.9
user default on nopass sanitize-payload ~* &* +@all
sentinel myid a98121e7518d18336731dac83e1ef041152590f0
sentinel config-epoch mymaster 219
sentinel leader-epoch mymaster 0
sentinel current-epoch 219


## 不包含自身
sentinel known-replica mymaster 192.168.1.1 6379
sentinel known-replica mymaster 192.168.1.2 6379
sentinel known-replica mymaster 192.168.1.3 6379

## 不包含自身
sentinel known-sentinel mymaster 192.168.1.1 26379 ebf711bac3990a534fc068312b7622c849dc65e5
sentinel known-sentinel mymaster 192.168.1.2 26379 ec8837fb38d22daa9800b82006130fe625d959fd
sentinel known-sentinel mymaster 192.168.1.3 26379 ec8837fb38d22daa9800b82006130fe625d959fd

5、redis.conf 参数详解

参数描述
daemonize noredis是否作为守护进程的方式运行。
pidfile /var/run/redis.pid当Redis以守护进程方式运行时,Redis默认会把pid写入/var/run/redis.pid文件,可以通过pidfile指定
loglevel notice日志记录级别,Redis总共支持四个级别:debug、verbose、notice、warning,默认为verbose。
logfile “”日志输出的路径及文件名称。
databases 16数据库的数量,默认数据库为0,可以使用SELECT 命令在连接上指定数据库id。
bind 127.0.0.1绑定的主机地址,只有绑定的主机才能访问。
port 6379指定Redis监听端口,默认端口为6379,之所以选用6379作为默认端口,因为6379在手机按键上MERZ对应的号码, MERZ取自意大利歌女Alessia Merz,来自程序员的浪漫。
tcp-backlog 511TCP三次握手后会将接受的连接放到队列中,tcp-backlog就是队列的大小。该参数受操作系统影响,在linux操作系统中,如果/proc/sys/net/core/somaxconn小于tcp-backlog,那么在redis启动时会看到如下日志,并建议将/proc/sys/net/core/somaxconn调大。# WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
tcp-keepalive 300检测TCP连接活性的周期,默认300s,也就是每隔5分钟对它创建的TCP连接进行活性检测,防止大量的死链接占用系统资源。建议维护成60s。
timeout 300客户端空闲连接的超时时间,一旦空闲时间达到了timeout,客户端就会被关闭,如果设置为0的话就不进行检测。
maxclients 128同一时间客户端最大连接数,默认10000个连接,当客户端连接数到达限制时,Redis会关闭新的连接并向客户端返回max number of clients reached错误信息。
save 指定在多长时间内,有多少次更新操作,就将数据同步到数据文件,Redis默认配置文件中提供了三个条件:
save 900 1
save 300 10
save 60 10000
分别表示900秒(15分钟)内有1个更改,300秒(5分钟)内有10个更改以及60秒内有10000个更改。
stop-writes-on-bgsave-error yes默认情况下,如果redis最后一次后台保存失败,redis将停止接受写操作。如果后台保存进程重新工作了,redis也将自动的允许写操作。建议改成no。
dir ./指定本地数据库存放目录
dbfilename dump.rdb指定本地数据库文件名,默认值为dump.rdb
rdbcompression yes指定存储至本地数据库时是否压缩数据,默认为yes,Redis采用LZF压缩,RDB会消耗CPU,但是可大幅度降低文件的体积,建议开启。
rdbchecksum yes读取和写入的时候是否支持CRC64校验,默认开启
requirepass foobared设置Redis连接密码,如果配置了连接密码,客户端在连接Redis时需要通过AUTH 命令提供密码,默认关闭
appendonly yes指定是否在每次更新操作后进行日志记录。Redis在默认情况下是异步的把数据写入磁盘,如果不开启,可能会在断电时导致一段时间内的数据丢失。因为 redis本身同步数据文件是按上面save条件来同步的,所以有的数据会在一段时间内只存在于内存中。默认为no
appendfilename appendonly.aof指定更新日志文件名,默认为appendonly.aof
appendfsync everysec指定日志刷到磁盘的机制,共有3个可选值:
no:由操作系统自行决定数据缓存何时刷到磁盘,相对较快。
always:每次更新操作后手动调用fsync()将数据写到磁盘,性能相对较慢,但是最安全。
everysec:每秒刷新到磁盘一次
no-appendfsync-on-rewrite no指定后台aof文件在rewrite期间会调用fsync,默认为no,表示要调用fsync。
auto-aof-rewrite-percentage 100表示redis触发aof文件rewrite的条件,默认100,表示与上次rewrite的aof文件大小相比,当aof的增长量超过上次aof文件大小的100%时就会触发backgroup rewrit。若配置为0,会禁用rewrite。
auto-aof-rewrite-min-size 64mb指定触发rewrite的aof文件大小,若aof文件小于该值,及时文件增量达到auto-aof-rewrite-percentage配置的值时,也不会触发rewrite。即这两个条件同时满足时才触发rewrite。
aof-load-truncated yesredis在执行恢复时,当最后一条指令被截断时,如果配置的yes时redis会记录日志并继续,如果设置为no时,redis会失败退出。
aof-rewrite-incremental-fsync yesAOF重写过程中,是否采用增量文件同步的策略。
slaveof 设置当本机为slav服务器时,设置master服务的IP地址及端口,在Redis启动时,它会自动从master进行数据同步。
masterauth 当master服务设置了密码保护时,slav服务连接master的密码。
slave-serve-stale-data yes当slave与master失去连接之后,或者当数据正在复制传输的时候,slave可以继续接受客户端的请求,否则会返回给客户端如下信息:“SYNC with master in progress”
slave-read-only yes从库是否只读
repl-diskless-sync no全量同步时是否先把快照存于本地,如果存于本地会占用磁盘IO,但是可以服用RDB文件,如果不存于磁盘就会直接把RDB文件发给从库,复用性降低。从库较少时建议设置为yes,采用不存储磁盘的方式。
repl-diskless-sync-delay 5当repl-diskless-sync参数为yes时,采用不存储磁盘时,master等待一定时间,等待更多的从库要求增量复制,然后进行并行复制。
repl-disable-tcp-nodelay no向从库传输数据时,是否禁用socket的TCP_NODELAY选项。若配置为yes则禁用TCP_NODELAY,则TCP协议栈会合并小包统一发送,这样可以节省带宽,但是会造成从库的延迟。若配置为no,表明启用TCP_NODELAY,则TCP协议栈会实时传输数据,减少了从库的延迟,但是需要更大的带宽。建议配置为no以减少从库的延迟。
slave-priority 100从库的优先级。集群模式下,优先级越小越容易被选为主库,但是若配置为0,那么该slave永远不会成为master。
maxmemory 指定Redis最大内存限制,Redis在启动时会把数据加载到内存中,达到最大内存后,Redis会根据maxmemory-policy清除策略先尝试清除已到期或即将到期的Key,当此方法处理后,仍然到达最大内存设置,将无法再使用SET、LPUSH进行写入操作,但仍然可以进行GET操作。
maxmemory-policy提供了8种清除策略:
valatie-lru:从所有最近最少访问数据范围内查找设置了过期时间的数据进行淘汰。
allkeys-lru:从所有数据范围内查找最近最少使用的数据进行淘汰。
volatile-random:从设置了过期时间的数据范围内随机选择key进行删除。
allkeys-random:从所有数据范围内随机选择key进行删除。
Noevction:不执行任何淘汰策略,当达到内存限制后会报错。默认为此策略
volatile-ttl:从设置了过期时间的数据范围内挑选将要过期的数据进行淘汰。
Redis4.X版本开始支持LFU算法。
valatie-lfu:在设置了过期时间的键空间中,移除使用次数最少的key。
allkeys-lfu:在所有键空间范围内,移除使用次数最少的key。
slowlog-log-slower-than 10000慢查询被记录的阀值(单位微秒)
slowlog-max-len 128最多记录慢查询的条数。
cluster-enabled yes开启集群功能
cluster-config-file nodes-6379.conf集群配置文件
cluster-node-timeout 15000集群节点超时时间(单位毫秒)
cluster-migration-barrier 1主从节点切换需要的最少从节点个数。
cluster-require-full-coverage yes集群是否需要所有的slot都分配给在线节点才能正常访问。
repl-ping-slave-period 10从服务器每隔一定时间向服务器发送ping探测,时间间隔由该参数配置。
cluster-slave-validity-factor 10从节点有效判断因子,当从节点与主节点最后通信时间超过(((cluster-node-timeout) * (slave-validity-factor)) + (repl-ping-slave-period))时,对应的从节点不具备故障转移资格,防止断线时间过长的从节点进行故障转移。设置为0表示从节点永不过期。

6、sentinel.conf 参数详解

参数描述
port “”端口号
daemonize yes运行模式
dir “”数据目录
logfile “*.log”日志文件
sentinel monitor mymaster 127.0.0.1 端口 2(判定主节点下线状态的票数) 监听数据节点
sentinel auth-pass mymaster 端口设置主节点连接权限信息
sentinel down-after-milliseconds mymaster 30000判断数据节点和sentinel节点多少毫秒数内没有响应ping,则处理为下线状态
sentinel parallel-syncs mymaster 1主节点下线后,从节点向新的主节点发起复制的个数限制(指的一次同时允许几个从节点)。
sentinel failover-timeout mymaster 180000故障转移超时时间

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1456130.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ChatGPT-用ChatGPT指令,自学任何领域的系统知识

1. 指令位置 Github仓库:Mr Ranedeer AI Tutor 但是需要开通chatgtp plus版本,并且打开代码解释器 2 使用 学习内容 开始学习 AI甚至可以给你思考题,给出的答案还能进行评价 配置 通过配置表修改 深度 学习风格 沟通风格 语气风格 推…

1Panel使用GMSSL+Openresty实现国密/RSA单向自适应

本文 首发于 Anyeの小站,转载请取得作者同意。 前言 国密算法是国家商用密码算法的简称。自2012年以来,国家密码管理局以《中华人民共和国密码行业标准》的方式,陆续公布了SM2/SM3/SM4等密码算法标准及其应用规范。其中“SM”代表“商密”&a…

iOS如何一键清除剪贴板中的所有内容

参考:https://www.jb51.net/shouji/746688.html 1.打开“快捷指令”应用,前往“快捷指令中心”,下拉找到“巧用剪贴板”并点击“查看全部”。 2.下拉到底部,点击“清除剪贴板中的所有内容”,然后选择“添加快捷指令”&#xff1a…

sdxl-turbo、playground文生图模型使用案例

1、sdxl-turbo SDXL-Turbo是一种快速生成的文本到图像模型,可以在单个网络评估中从文本提示合成逼真的图像。 参考:https://huggingface.co/stabilityai/sdxl-turbo 对比效果相比PixArt模型差很多,参考https://blog.csdn.net/weixin_42357472/article/details/135520142 …

MySQL数据库基础(八):DML数据操作语言

文章目录 DML数据操作语言 一、DML包括哪些SQL语句 二、数据的增删改(重点) 1、数据的增加操作 2、数据的修改操作 3、数据的删除操作 DML数据操作语言 一、DML包括哪些SQL语句 insert插入、update更新、delete删除 二、数据的增删改&#xff08…

05.QT坐标系

1. 坐标系原点 坐标系原点就是屏幕/窗口的左上角,X向右增长,Y向下增长。 2.设置控件位置 设置控件位置,就相当于是需要指定控件的坐标,对于该控件来说,其坐标原点是其父窗口/父控件的左上角。 设置方法就是通过控件的…

认识ansible,了解常用的模块

ansible的概念 Ansible是一个基于Python开发的配置管理和应用部署工具,现在也在自动化管理领域大放异彩。它融合了众多老牌运维工具的优点,Pubbet和Saltstack能实现的功能,Ansible基本上都可以实现。 Ansible能批量配置、部署、管理上千台主…

VS code常用插件

1.Auto Close Tag (自动闭合HTML/XML标签) 2.Auto Rename Tag (自动完成另一侧标签的同步修改) Beautify (格式化 html ,js,css) 4.Bracket Pair Colorizer(将匹配的括号染成相同的颜色&#xf…

利用 pt-archiver 实现数据库归档功能

文章目录 一、前言关于Percona 二、Percona Toolkit安装 percona-toolkit:pt-archiver 归档命令的使用格式:示例: 三、归档步骤:1)、创建归档数据库和归档表方式一(推荐):这种方式的优缺点: 方式…

【软考问题】-- 13 - 知识精讲 - 项目绩效域管理

一、基本问题 问题1:干系人绩效域的预期目标主要包含什么? ①与干系人建立高效的工作关系;②干系人认同项目目标;③支持项目的干系人提高了满意度,并从中收益;④反对项目的干系人没有对项目产生负面影响。问…

黑莓加大裁员力度,目标年利润再增1亿美元

近日,加拿大黑莓公司表示,今年的年利润再度增加 1 亿美元,为此将采取包括裁员在内的一系列降本措施。黑莓方面称,公司将在本季度进一步降低成本,并在网络安全业务上进行额外裁员,从而每年为公司节省约 2700…

MyBatis终版

MyBatis常见面试题汇总(超详细回答) 1.什么是Mybatis? Mybatis是一种流行的Java对象关系映射(ORM)框架,它将Java对象映射到关系型数据库中的表格。它提供了一种简单的方式来编写SQL语句并将其映射到Java对…

加了AI的旗舰版,会用就是好工具!

软件简介: 软件【下载地址】获取方式见文末。注:推荐使用,更贴合此安装方法! ACDSee Photo Studio Ultimate 2024是一款功能强大的数字图像预览和编辑软件,适用于专业的图像处理需求。它配备了高效的RAW编辑器&#…

C++并发编程 -3.同步并发操作

本文介绍如何使用条件变量控制并发的同步操作、C 并发三剑客,函数式编程 一.条件变量 1.概念 C条件变量(condition variable)是一种多线程编程中常用的同步机制,用于线程间的通信和协调。它允许一个或多个线程等待某个条件的发生…

数据脱敏(四)脱敏算法-替换算法

脱敏算法篇使用阿里云数据脱敏算法为模板,使用算子平台快速搭建流程来展示数据 "替换脱敏"是一种数据处理技术,主要用于保护个人隐私和数据安全。它通过将敏感信息(如姓名、身份证号、电话号码等)替换为无意义或随机的字符&#xf…

hal/SurfaceFlinger/perfetto实战需求问题探讨作业-千里马framework开发

背景 hi,粉丝朋友们: 在新课halperfettosurfaceflinger https://mp.weixin.qq.com/s/LbVLnu1udqExHVKxd74ILg 推出后,各位学员朋友们都积极响应,开始马不停蹄的学习,学员学习后希望有更多的实战案例或者项目拿来练手&…

vue3中基于路由层面和组件层面进行用户角色及权限控制的方法解析

文章目录 一、权限控制二、路由层面控制三、组件层面控制1、使用自定义指令2、使用方法控制3、封装一个权限控制组件来实现组件层面控制权限3.1、组件页面 Authority.vue3.2、使用页面 app.vue3.3、效果预览 一、权限控制 随着前端技术的不断发展,越来越多的前端框…

美食推荐|美食推荐小程序|基于微信小程序的美食推荐系统设计与实现(源码+数据库+文档)

美食推荐小程序目录 目录 基于微信小程序的美食推荐系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、前台功能模块 2、后台功能模块 (1)用户信息管理 (2)水果信息管理 (3)水果类型管理…

投票助力 | 第19届(2023)数智招标采购行业年度评选网络投票已开启!

为展示招标采购领域业务发展的突出成绩和数智化应用创新成果,以优秀企业、个人和案例激励并引导更多的行业实践者们共同努力,推进招标采购行业数智化创新发展,必联网、机电产品招标投标电子交易平台、隆道平台、隆道研究院联合主办了“第19届…

讲技巧乘机会

恋爱季节 - 邓丽君 (Teresa Teng) 词:邓丽君 曲:いずみたく 太阳高天气真晴朗 微风里飘来野花香 手拉手并肩向前走 我和你来到小溪旁 爬过了山坡又村庄 经过了小桥和池塘 我和你歌唱在山岗 青山绿水回声响 谈恋爱要有勇气 要赶快 讲技巧乘机…