环境介绍

  1. mysql_VIP:192.168.111.123
  2. mysql_M!:192.168.111.151
  3. mysql_M2:192.168.111.152

安装mysql可以查看

两个数据库都需要设置主从复制使用的账号和权限

  1. mysql> grant replication slave on *.* to bbs_slave@'192.168.111.%' identified by 'salve2004';
  2. Query OK, 0 rows affected, 1 warning (0.16 sec)
  3. mysql> flush privileges;

注意:其中relication slave是权限 bbs_slave 是账号名字

主库开启二进制日志和设置server_id

  1. 主要加入这些
  2. #开启二进制日志并指定位置
  3. log-bin=/data/mysql/logs/mysql-bin
  4. #设置id
  5. server-id=1

重启主库服务器;

  1. [root@mysql.quan.bbs ~]$service mysqld restart
  2. Shutting down MySQL.. SUCCESS!
  3. Starting MySQL.. SUCCESS!

查看master状态:

  1. mysql> show master status;
  2. +------------------+----------+--------------+------------------+-------------------+
  3. | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
  4. +------------------+----------+--------------+------------------+-------------------+
  5. | mysql-bin.000001 | 1058 | | | |
  6. +------------------+----------+--------------+------------------+-------------------+
  7. 1 row in set (0.00 sec)
    上面的File Position是后面需要用到的

导出以存在的数据并复制到从库(这里只列出一库)

  1. [root@mysql.quan.bbs data]$mysqldump -u root -p --all-databases >/tmp/2020.02.20.sql
  2. Enter password:
  3. [root@mysql.quan.bbs data]$scp -P 20042 /tmp/2020.02.20.sql apps@192.168.111.153:/tmp
  4. apps@192.168.111.153's password:
  5. 2020.02.20.sql 100% 3136KB 3.1MB/s 00:00

两个从库都需要设置的

导入接受到的数据文件:

  1. [root@mysql.bktwo.quan.bbs tmp]$mysql -u root -p
  2. Enter password:
  3. Welcome to the MySQL monitor. Commands end with ; or \g.
  4. Your MySQL connection id is 10
  5. Server version: 5.7.29-log Source distribution
  6.  
  7. Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.
  8.  
  9. Oracle is a registered trademark of Oracle Corporation and/or its
  10. affiliates. Other names may be trademarks of their respective
  11. owners.
  12.  
  13. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
  14.  
  15. mysql> source /tmp/2020.02.20.sql

修改配置文件:

  1. 主要加入这些
  2. #开启二进制日志并指定位置
  3. log-bin=/data/mysql/logs/mysql-bin
  4. #设置id
  5. server-id=33 #不能和master重复

重启服务器:

  1. [root@mysql.bkone.quan.bbs data]$service mysqld restart

登陆数据库设置master信息:

建议先确保slave是停止的(stop slave)

  1. mysql> change master to
  2. -> master_host='192.168.111.151',
  3. -> master_user='bbs_slave',
  4. -> master_password='slave2004',
  5. -> master_port=3306,
  6. -> master_log_file='mysql-bin.000001',
  7. -> master_log_pos=1058;
  8. Query OK, 0 rows affected, 2 warnings (0.01 sec)

注意:有些数据是主库拿到的,master_log_file   master_log_pos

启动slave并查看状态:

  1. mysql> start slave;
  2. Query OK, 0 rows affected (0.10 sec)
  3. mysql> show slave status\G
  4. *************************** 1. row ***************************
  5. Slave_IO_State: Waiting for master to send event
  6. Master_Host: 192.168.111.151
  7. Master_User: bbs_slave
  8. Master_Port: 3306
  9. Connect_Retry: 60
  10. Master_Log_File: mysql-bin.000003
  11. Read_Master_Log_Pos: 154
  12. Relay_Log_File: mysql-relay-bin.000002
  13. Relay_Log_Pos: 320
  14. Relay_Master_Log_File: mysql-bin.000003
  15. Slave_IO_Running: Yes
  16. Slave_SQL_Running: Yes
  17. Replicate_Do_DB:
  18. Replicate_Ignore_DB:
  19. Replicate_Do_Table:
  20. Replicate_Ignore_Table:
  21. Replicate_Wild_Do_Table:
  22. Replicate_Wild_Ignore_Table:
  23. Last_Errno: 0
  24. Last_Error:
  25. Skip_Counter: 0
  26. Exec_Master_Log_Pos: 154
  27. Relay_Log_Space: 527
  28. Until_Condition: None
  29. Until_Log_File:
  30. Until_Log_Pos: 0
  31. Master_SSL_Allowed: No
  32. Master_SSL_CA_File:
  33. Master_SSL_CA_Path:
  34. Master_SSL_Cert:
  35. Master_SSL_Cipher:
  36. Master_SSL_Key:
  37. Seconds_Behind_Master: 0
  38. Master_SSL_Verify_Server_Cert: No
  39. Last_IO_Errno: 0
  40. Last_IO_Error:
  41. Last_SQL_Errno: 0
  42. Last_SQL_Error:
  43. Replicate_Ignore_Server_Ids:
  44. Master_Server_Id: 1
  45. Master_UUID: ad0e3900-4a82-11ea-927e-005056370631
  46. Master_Info_File: /data/mysql/data/master.info
  47. SQL_Delay: 0
  48. SQL_Remaining_Delay: NULL
  49. Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
  50. Master_Retry_Count: 86400
  51. Master_Bind:
  52. Last_IO_Error_Timestamp:
  53. Last_SQL_Error_Timestamp:
  54. Master_SSL_Crl:
  55. Master_SSL_Crlpath:
  56. Retrieved_Gtid_Set:
  57. Executed_Gtid_Set:
  58. Auto_Position: 0
  59. Replicate_Rewrite_DB:
  60. Channel_Name:
  61. Master_TLS_Version:
  62. 1 row in set (0.00 sec)

测试就主库创建一个数据库,去从库查看有无同步即可

按照上面的使M1和M2达到互为主从同步

配置keepalived高可用

M1 M2都需要安装

  1. [root@mysql.bkone.quan.bbs ~]$yum install keepalived -y

先修改M1的配置文件:

  1. [root@mysql.quan.bbs ~]$vim /etc/keepalived/keepalived.conf
  2.  
  3. global_defs {
  4. router_id MYSQL_MM # 标识
  5. vrrp_skip_check_adv_addr
  6. vrrp_strict # 严格执行 VRRP 协议规范
  7. vrrp_garp_interval 0
  8. vrrp_gna_interval 0
  9. }
  10.  
  11. vrrp_script check_mysql {
  12. script "/bin/sh /etc/keepalived/keepalived_mysql_check.sh" # 检查脚本
  13. interval 10 # 检查周期
  14. }
  15.  
  16. vrrp_instance MYSQL_MM {
  17. state BACKUP # 都设为 BACKUP,避免起来后抢占
  18. interface eth0 # 网卡名称,根据实际情况填写
  19. virtual_router_id 222 # 用来区分 VRRP 组播的标记,取值 0-255
  20. priority 100
  21. advert_int 1
  22. nopreempt # 设为非抢占
  23. authentication {
  24. auth_type PASS
  25. auth_pass 1111
  26. }
  27.  
  28. virtual_ipaddress {
  29. 192.168.111.123
  30. }
  31.  
  32. # Slave 节点可以注释下面检查脚本,Slave 没有必要一直检查
  33. track_script {
  34. check_mysql
  35. }
  36. }

M2的配置文件: 主要修改

  1. virtual_router_id nopreempt priority
  1. global_defs {
  2. router_id MYSQL_MM # 标识
  3. vrrp_skip_check_adv_addr
  4. vrrp_strict # 严格执行 VRRP 协议规范
  5. vrrp_garp_interval 0
  6. vrrp_gna_interval 0
  7. }
  8.  
  9. vrrp_script check_mysql {
  10. script "/bin/sh /etc/keepalived/keepalived_mysql_check.sh" # 检查脚本
  11. interval 10 # 检查周期
  12. }
  13.  
  14. vrrp_instance MYSQL_MM {
  15. state BACKUP # 都设为 BACKUP,避免起来后抢占
  16. interface eth0 # 网卡名称,根据实际情况填写
  17. virtual_router_id 223 # 用来区分 VRRP 组播的标记,取值 0-255
  18. priority 99
  19. advert_int 1
  20. # nopreempt # 设为非抢占
  21. authentication {
  22. auth_type PASS
  23. auth_pass 1111
  24. }
  25.  
  26. virtual_ipaddress {
  27. 192.168.111.123
  28. }
  29.  
  30. # Slave 节点可以注释下面检查脚本,Slave 没有必要一直检查
  31. track_script {
  32. check_mysql
  33. }
  34. }

M1 M2都需要编写检测脚本:

  1. #!/bin/bash
  2. counter=$(netstat -an|grep "LISTEN"|grep "3306"|wc -l)
  3.  
  4. if [ "${counter}" -eq 0 ]; then
  5. /etc/init.d/keepalived stop
  6. fi

测试:

  1. #M1未关闭
    [root@mysql.quan.bbs ~]$mysql -u bbs_slave -h 192.168.111.123 -p
  2. Enter password:
  3. Welcome to the MySQL monitor. Commands end with ; or \g.
  4. Your MySQL connection id is 648
  5. Server version: 5.7.29-log Source distribution
  6.  
  7. Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.
  8.  
  9. Oracle is a registered trademark of Oracle Corporation and/or its
  10. affiliates. Other names may be trademarks of their respective
  11. owners.
  12.  
  13. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
  14.  
  15. mysql> show variables like 'hostname';
  16. +---------------+----------------+
  17. | Variable_name | Value |
  18. +---------------+----------------+
  19. | hostname | mysql.quan.bbs |
  20. +---------------+----------------+
  21. 1 row in set (0.00 sec)
  22.  
  23. mysql> exit
  24. Bye
  25. #M1关闭
    [root@mysql.quan.bbs ~]$service mysqld stop
  26. Shutting down MySQL........... SUCCESS!
  27. [root@mysql.quan.bbs ~]$mysql -u bbs_slave -h 192.168.111.123 -p
  28. Enter password:
  29. Welcome to the MySQL monitor. Commands end with ; or \g.
  30. Your MySQL connection id is 105
  31. Server version: 5.7.29-log Source distribution
  32.  
  33. Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.
  34.  
  35. Oracle is a registered trademark of Oracle Corporation and/or its
  36. affiliates. Other names may be trademarks of their respective
  37. owners.
  38.  
  39. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
  40.  
  41. mysql> show variables like 'hostname';
  42. +---------------+----------------------+
  43. | Variable_name | Value |
  44. +---------------+----------------------+
  45. | hostname | mysql.bkone.quan.bbs |
  46. +---------------+----------------------+
  47. 1 row in set (0.01 sec)
  48.  
  49. mysql> exit
  50. Bye
  51. #M1 重新开始
    [root@mysql.quan.bbs ~]$service mysqld start
  52. Starting MySQL. SUCCESS!
  53. [root@mysql.quan.bbs ~]$mysql -u bbs_slave -h 192.168.111.123 -p
  54. Enter password:
  55. Welcome to the MySQL monitor. Commands end with ; or \g.
  56. Your MySQL connection id is 107
  57. Server version: 5.7.29-log Source distribution
  58.  
  59. Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.
  60.  
  61. Oracle is a registered trademark of Oracle Corporation and/or its
  62. affiliates. Other names may be trademarks of their respective
  63. owners.
  64.  
  65. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
  66.  
  67. mysql> show variables like 'hostname';
  68. +---------------+----------------------+
  69. | Variable_name | Value |
  70. +---------------+----------------------+
  71. | hostname | mysql.bkone.quan.bbs |
  72. +---------------+----------------------+
  73. 1 row in set (0.00 sec)

原理解析:

】双主KeepAlived

【4.0】概念

  MySQL的高可用方案有很多,比如Cluster、MMM、MHA、DRBD,以及Oracle官方推出的Fabric等,这些方案各有优劣,但都比较复杂,安装配置有一定难度,对线上库实施动静太大。就我们的具体情况而言,并不需要这么复杂的环境,实施简单、对现有架构影响最小、能迅速解决问题的方案才是最适合的。比如我们现在只是配置了MySQL Replication,加上如Keepalived这样的高可用软件,就能实现我们的需求。

MySQL架构为Master/Slave,当Master故障时,虚IP漂移到Slave上提供服务,简单环境如图1所示。在这种架构中,故障自动切换以后,需要采取手动操作的方式与新的Master进行复制。当然也可以设置为Active-Passive模式下的双Master复制。

  

  

  利用KeepAlived实现故障转移(功能上类似于MSSQL的镜像,形式上类似于windows的故障转移群集)

【4.1】keepalived 简介

  (4.1.1)起源

  keepalived软件起初是专门为了LVS负载均衡软件设计的,用来管理并监控LVS集群系统中各个服务节点的状态,后台又加入了可以实现高可用的VRRP功能。(VRRP:全称 virtual router redundancy protocol,虚拟路由冗余协议)

  因此Keepalived除了能够管理LVS软件外,还可以作为其他服务(如:Nginx/Haproxy/Mysql)的高可用解决方案软件;

  (4.1.2)实现与组成

  keepalived 软件主要是通过VRRP协议实现高可用功能的。

  VRRP是 virtual route redundancyProtocol(虚拟路由器荣誉协议)的缩写,VRRP出现的目的就是为了解决静态路由单点故障问题,它能够保证当个别节点宕机时,整个网络可以不间断的运行。

  (4.1.3)常见运作场景

  一个web服务器至少有2台PC运行Keepalived,一台作为主服务器(master),一台作为备份服务器(Backup),但是对外表现为一个虚拟IP,在Keepalived服务政策工作时,主Master节点会不断地向备节点发送(多播的方式,组播地址为224.0.0.18)心跳消息,用以告诉备节点自己还活着。

  当主Master节点发生故障时,就无法发送心跳消息,备节点也就因此无法继续监测到来自主Master节点的心跳,于是调用自身接管程序,接管主Master节点的IP资源及服务。

  而当主Master节点恢复时,备Backup节点又会释放主节点故障时自身接管的IP资源及服务,恢复到原来的备用角色。(抢占模式)(也可以设置成非抢占模式,让其保持主,而不释放资源给原主,具体见4.1.7)

  所以,keepAlived,一方面具有配置管理LVS的功能,同时还具有对LVS下面节点进行健康检查的功能,另一方面也可以实现系统网络服务的高可用功能,而且Keepalived是可以工作在网络的 Layer3,4&7,即网络层(IP层),传输层(TCP层),及应用层,再后面就直接在很多场景下代替了原始的LVS软件方案。

  (4.1.4)keepalived服务的三个重要功能

    (1)管理LVS负载均衡软件

    (2)实现LVS集群节点的健康检查

    (3)作为系统网络服务的高可用性(failover)

  

  (4.1.5)Keepalived服务的工作原理

  Keepalived服务对之间通过VRRP进行通信的,VRRP是通过竞选机制来确定主备的(有点像故障转移群集中的投票仲裁形式),主的优先级高于备,因此工作时主会优先获得所有的资源,备节点处于等待状态,当主挂了的时候,备节点就会接管主节点的资源,然后顶替主节点对外服务。

  在Keepalived服务对之间,只有作为主的服务器会一直发送VRRP广播包,告诉备它还活着,此时备不会抢占主,当主不可用(也就是备没有受到VRRP广播包信息),就会启动相关服务接管资源,保证业务的连续性,接管速度最快可以小于1秒。

  (4.1.6)keepalived 的三个核心模块

    分别是core/check/vrrp

    core:keepalived的核心,负责主进程的启动、维护以及全局配置文件的加载和解析。

    check:负责健康检查,包括常见的各种检查方式。

    vrrp:是用来实现VRRP协议的;(VRRP:全称 virtual router redundancy protocol,虚拟路由冗余协议)

  (4.1.7)什么是VRRP?

  VRRP,全称 virtual router redundancy protocol,虚拟路由冗余协议。

  VRRP的出现就是为了解决静态路由的单点故障问题,VRRP是通过一种竞选机制来将路由的任务交给某台VRRP路由器的。 

  (1)VRRP是怎么解决通信问题的?

   在现实的网络环境中,两台需要通信的主机(end-host)大多数情况下并没有直接地物理连接。对于这样的情况,它们之间的路由怎么选择?通常有两种方法解决如何选定到达目的主机的下一跳路由问题:

    使用动态路由协议,如RIP、OSPF等。
    配置静态路由。

  
        很明显,在主机上配置动态路由,因为管理、维护成本以及是否支持等诸多问题是不切实际的。那么配置静态路由就变得很流行。

   实际上,这种方式一直沿用至今。但是,路由器,或者说默认网关(default gateway)却经常成为单故障点。就算配置了多个静态路由,却因为必须重启网络才能生效而变得不实用。

VRRP(虚拟路由冗余协议,Virtual Router Redundancy Protocol)的目的就是为了解决静态路由单点故障问题。

  它通过一种竞选(election)协议动态地将路由任务交给LAN中虚拟路由器中的某台VRRP路由器。这里有两个关键名词:VRRP路由器和虚拟路由器。

    VRRP路由器:VRRP路由器就是一台路由器,只不过上面运行了VRRPD程序来实现VRRP协议而已,是物理的路由器。一台VRRP路由器可以位于多个虚拟路由器中。
    虚拟路由器:所谓虚拟,就是说并不是实际存在的,是一个逻辑而不是物理的路由器。

          虚拟路由器通常由多台VRRP路由器通过某种方式组成,就好像将这些物理路由器都丢到一个池里面去,整个池对外看起来就像是一台路由器,但其实内部有多台。虚拟路由器的标识称为VRID。
                在一个VRRP虚拟路由中,有多台物理的VRRP路由器,但是这多台物理路由并不同时工作,而是由一台称为master的负责路由工作,其它的都是backup。

          master并非一成不变,VRRP协议让每个VRRP路由器参与竞选,最终获胜的就是master。master有一些特权,比如拥有虚拟路由器的IP地址,我们的主机就是用这个IP地址作为静态路由的。

          拥有特权的master要负责转发发送给网关地址的包和响应ARP请求。

  (2)VRRP的工作机制
        VRRP通过竞选协议来实现虚拟路由器的功能,所有的协议报文都是通过IP多播(multicast)包形式发送的,多播地址为224.0.0.18。虚拟路由器由VRID(范围0-255)和一组IP地址组成,对外表现为一个众所周知的MAC地址:00-00-5E-00-01-{VRID}。所以,在一个虚拟路由器中,不管谁是master,对外都是相同的MAC和IP(称之为VIP)。客户端主机并不需要因为master的改变而修改自己的路由配置,对它们来说,这种主从的切换是透明的。

在一个虚拟路由器中,只有作为master的VRRP路由器会一直发送VRRP广告包(VRRP Advertisement Message),backup不会抢占master,除非它的优先级更高。

  当master不可用时,backup收不到广告包,多台backup中优先级最高的这台会抢占为master。这种抢占是非常快速的(<1秒),以保证服务的连续性。出于安全性考虑,VRRP包使用了加密协议进行加密

  (3)keepalived的实现模式

  Keepalived通过组播(默认)、单播(自定义),实现keepalived主备推选,工作模式分为抢占和非抢占。

  《1》抢占模式

    主服务器正常工作时,虚拟IP会在主上,备不提供服务,当主服务优先级低于备的时候,备会自动抢占虚拟IP,这时,主提供服务,备提供服务。

    也就是说,抢占模式下,不分主备,只管优先级。

    不管 keepalived.conf 里的 state 配置成 master 还是 backup ,只看谁的priority 优先级高, priority 优先级高的那一个,在故障恢复后,会自动将VIP资源再次抢回来。

  《2》非抢占模式

    这种方式通过参数nopreempt(一般设置在advert_int 的那一行下面)来控制。不管priority优先级,只要master机器发生故障,VIP资源就会被切换到backup上。

    并且,当master机器恢复后,也不会将VIP资源抢回来。除非Backup机器发生故障,才能自动把VIP等资源切换会主库。

    

    nopreempt 这个参数只能用户state为backup的情况,所以在配置的时候要把master和backup的state都设置成backup,这样才会实现keepalived的非抢占模式!

    也就是说

    a)当state状态一个为master,一个为backup的时候,加不加nopreempt 这个参数都是一样的效果。

      即都是根据priority优先级来决定谁抢占VIP资源,属于抢占模式!

    b)当state状态都设置成backup,如果不配置nopreempt参数。

      也是根据priority优先级来决定谁抢占VIP资源,属于抢占模式!

    c)当state状态都设置成backup,如果配置了 nopreempt 参数,那么久不会去考虑priority优先级了。

      是非抢占模式! 即只有VIP当前所在机器发生故障,另一台机器才能接管VIP。 不考虑优先级问题。

【4.2】Keepalived在MySQL上有什么作用?

  mysql双主复制,即互为Master-Slave(只有一个Master提供写操作),可以实现数据库服务器的热备。

  但一个Master宕机后不能实现动态切换,使用Keepalived,可以通过虚拟IP,实现双主对外的统一接口以及自动检查、失败切换机制,从而实现MySQL数据库的高可用方案。

  《1》架构1:主备集群架构(双主HA+keepalived)

  方案:mysql 双主 或者 主从+keepalived 主从自动切换

  服务器:2台PC

  优点:架构简单,节省资源

  缺点:无法线性扩展,主从失败后需要手动恢复主从架构

毕业设计之mysql+主从复制+keepalived的更多相关文章

  1. Dubbo入门到精通学习笔记(二十):MyCat在MySQL主从复制的基础上实现读写分离、MyCat 集群部署(HAProxy + MyCat)、MyCat 高可用负载均衡集群Keepalived

    文章目录 MyCat在MySQL主从复制的基础上实现读写分离 一.环境 二.依赖课程 三.MyCat 介绍 ( MyCat 官网:http://mycat.org.cn/ ) 四.MyCat 的安装 ...

  2. Lvs+keepalived+mysql(主从复制)

    1.准备环境 操作系统:centos 6.5 2台机器主机名为node53.node54     Mysql Lvs keepalived node2 Y Y Y node3 Y Y Y       ...

  3. 浅谈mysql主从复制的高可用解决方案

    1.熟悉几个组件(部分摘自网络)1.1.drbd     —— DRBD(Distributed Replicated Block Device),DRBD号称是 "网络 RAID" ...

  4. mysql主从复制以及读写分离

    之前我们已经对LNMP平台的Nginx做过了负载均衡以及高可用的部署,今天我们就通过一些技术来提升数据的高可用以及数据库性能的提升. 一.mysql主从复制 首先我们先来看一下主从复制能够解决什么问题 ...

  5. MySQL 主从复制详解

    读写分离的意思是,写入的时候向 a 服务器写入,而读出的时候从 b c d 甚至更多的服务器读出:这样的架构适合于读多写少的应用,最典型的就是火车购票系统,一般我们买票的时候要先查询好多次,包括车次啊 ...

  6. MySQL主从复制解决数据库单点问题

    一.单个数据库服务器的缺点 数据库服务器存在单点问题: 数据库服务器资源无法满足增长的读写请求: 高峰时数据库连接数经常超过上限. 二.如何解决单点问题 增加额外的数据库服务器,组建数据库集群: 同一 ...

  7. 高可用架构篇--MyCat在MySQL主从复制基础上实现读写分离

    实战操作可参考:http://www.roncoo.com/course/view/3117ffd4c74b4a51a998f9276740dcfb 一.环境 操作系统:CentOS-6.6-x86_ ...

  8. MySQL MHA+Keepalived

    一.MHA的简单介绍MHA是由perl语言编写的,用外挂脚本的方式实现mysql主从复制的高可用性.MHA可以自动检测mysql是否宕机,如果宕机,在10-30s内完成new master的选举,应用 ...

  9. MySQL主从复制(Master-Slave)实践

    MySQL数据库自身提供的主从复制功能可以方便的实现数据的多处自动备份,实现数据库的拓展.多个数据备份不仅可以加强数据的安全性,通过实现读写分离还能进一步提升数据库的负载性能. 下图就描述了一个多个数 ...

随机推荐

  1. hdu 2159 FATE(DP)

    题意: 小余玩游戏,离最后一级还需n的经验值,但是他已经很厌烦了,还剩下m的忍耐度.每杀一只怪小余会得到相应的经验,同时减掉相应的忍耐度. 当忍耐度降到0或者0以下时,小余就不会再玩这个游戏.小余还说 ...

  2. nodejs:使用puppeteer在服务器中构建一个获取电影电视剧剧集的接口

    首先我们看下数据来源: 来源于这个网站:https://z1.m1907.cn/ 可以说这个网站上能找到很多你想看的很多电影或电视剧,最重要的是很多电影电视剧在别的网站是收费的,但是在这里看是免费的, ...

  3. Redis网络库源码分析(3)之ae.c

    一.aeCreateEventLoop & aeCreateFileEvent 上一篇文章中,我们已经将服务器启动,只是其中有些细节我们跳过了,比如aeCreateEventLoop函数到底做 ...

  4. Eclipse 中的Maven常见报错及解决方法

    1.不小心将项目中的Maven Dependencies删除报错 项目报错: 点击Add Library,添加Maven Managed Dependencies又提示如下: 在这个时候需要项目右键: ...

  5. adb 安装与使用(一)

    一.ADB简介 1. 什么是adb? adb(Android Debug Bridage)是Android sdk的一个工具: adb 是用来连接安卓手机和PC端的桥梁,要有adb作为二者之间的维系, ...

  6. 权限控制-RBAC(Role-Based Access Control)

    RBAC是基于角色的权限访问控制,在RBAC中角色与权限相连,用户通过成为某个角色而得到角色的权限,这就极大的简化了权限的管理,用户和角色多对多,角色和权限多对多,由此产生用户表.角色表.权限表,用户 ...

  7. 湖湘杯2020 writeup

    这个平台中间卡的离谱,卡完过后交了flag分还掉了 Web 题目名字不重要 也算是非预期吧,赛后y1ng师傅也说了因为要多端口环境必须这样配,预期解很难 NewWebsite 后台弱口令admin a ...

  8. 用Docker搭建RabbitMq的普通集群和镜像集群

    普通集群:多个节点组成的普通集群,消息随机发送到其中一个节点的队列上,其他节点仅保留元数据,各个节点仅有相同的元数据,即队列结构.消费者消费消息时,会从各个节点拉取消息,如果保存消息的节点故障,则无法 ...

  9. [atAGC004F]Namori

    考虑树的情况,将其以任意一点为根建树 对于每一个节点,考虑其要与父亲操作几次才能使子树内均为黑色,这可以用形如$(0/1,x)$的二元组来描述,其中0/1即表示其要求操作时父亲是白色/黑色且要操作$x ...

  10. [cf1305G]Kuroni and Antihype

    对整个过程构造一张有向图,其中$(x,y)\in E$当且仅当$x$把$y$加入,且边权为$a_{x}$ 显然这是一棵外向树森林,并再做如下两个构造: 1.新建一个点$a_{0}=0$,将其向所有入度 ...