利用数据库自定义并发 bunket 功能

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 场景 防止由于停电后大规模 HV 启动, 导致 OPENSTACK NEUTRON SERVER 服务由于 HV 并发注册量太大而拒绝服务 思路 1. 数据库中创建表,  COUNT, 列 id  int  表中定义并发量,  (例如 30) 2. 当 HV 启动时候,  假如需要启动 NEUTRON 服务, 则先要向 COUNT 表中获得信息,         假如 cou

场景

防止由于停电后大规模 HV 启动, 导致 OPENSTACK NEUTRON SERVER 服务由于 HV 并发注册量太大而拒绝服务


思路

1. 数据库中创建表,  COUNT, 列 id  int  表中定义并发量,  (例如 30)

2. 当 HV 启动时候,  假如需要启动 NEUTRON 服务, 则先要向 COUNT 表中获得信息,  

      假如 count.id 中值 > 1 ,  则可以获得启动权限,  并 count.id -1,

      当 neutron 服务注册完成,  则向数据库执行 count.id +1


参考表结构


用于做 bunket 算法
create table count ( id int ) engine innodb;

mysql> desc count;
+-------+---------+------+-----+---------+-------+
| Field | Type    | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| id    | int(11) | YES  |     | NULL    |       |
+-------+---------+------+-----+---------+-------+
1 row in set (0.00 sec)

用于做数据记录的表, 可有可无

CREATE TABLE node (
  id int(11) DEFAULT NULL,
  name varchar(50) DEFAULT NULL
) ENGINE=InnoDB;

mysql> desc node;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | YES  |     | NULL    |       |
| name  | varchar(50) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)


参考存储过程

获得 bunket 数据的存储过程

drop procedure startup;

delimiter //
 create procedure startup( in d varchar(50), out n varchar(5) )
 begin
  declare a int;
  declare b int;
	declare c varchar(50);
   select id into a from compute.count for update;
   set autocommit=0;
   if a > 0
   then
	   select name into c from compute.node where name=d;
     if c is null
     then
       set b=a-1;
       insert into compute.node values ( a, d);
       update compute.count set id=b;
       set n='ready';
     else
       set n='faile';
     end if;
   end if;
   commit;
   select n from dual;
 end
 //

delimiter ;


完成neutron 注册后回调 bunket 的存储过程

drop procedure startend;
delimiter //
 create procedure startend( in d varchar(50) )
 begin
  declare a int;
  declare b int;
	declare c varchar(50);
   select id into a from compute.count for update;
   set autocommit=0;
   set b=a+1;
   update compute.count set id=b;
   delete from compute.node where name=d;
   commit;
 end
 //

delimiter ;




参加 compute 节点启动时候的启动脚本

#!/bin/bash
#
#

source params   <--- 注意:  公共变量,  公共函数存放的位置,  下文中缺的函数与变量都来自这里,  与整个算法无关, 忽略吧

service_type=compute

sqlstartpath='/root/manager/get_status.sql'
sqlendpath='/root/manager/end.sql'
status='faile'

if [ ! -d '/root/manager/' ]
then
    mkdir -p '/root/manager'
fi

cat <<EOF  > $sqlstartpath
set @a='ok';
use compute;
call startup('$hostname',@a);
EOF

cat <<EOF > $sqlendpath
use compute;
call startend('$hostname');
EOF

if [ ! -f "/usr/bin/mysql" ]
then
  yum install -y mysql > /dev/null 2>&1
fi


while [ "$status" != "ready" ]
do
  status=`mysql -h $sql_server -u $sql_user -p"$sql_passwd" --skip-column-names $sql_db -e "source $sqlstartpath;"`
    if [ "$status" != "ready" ]
    then
        sleep 5
    fi
done


start_server messagebus messagebus
start_server libvirtd libvirtd
start_server openstack-nova-compute nova_compute
start_server neutron-openvswitch-agent openvswitch_agent
start_server openvswitch openvswitch
start_server openstack-ceilometer-compute ceilometer_compute

mysql -h $sql_server -u $sql_user -p"$sql_passwd" --skip-column-names $sql_db -e "source $sqlendpath;"



相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
11天前
|
前端开发 关系型数据库 数据库
使用 Flask 连接数据库和用户登录功能进行数据库的CRUD
使用 Flask 连接数据库和用户登录功能进行数据库的CRUD
31 0
|
11天前
|
数据库 索引
评论功能里数据库的设计
【4月更文挑战第2天】本文探讨了评论系统的树形结构设计,提出了四种方法:邻接表、分段式path、Nested Set和Closure Table。针对评论业务功能,如加载评论页和查看回复,优先考虑邻接表和分段式path。采用邻接表思路,设计了评论表结构,包括Uid、Biz、BizID、RootID、PID、Content、索引和级联删除规则。同时提到了索引设计,如Uid、Biz+BizID、PID和Ctime/Utime,以优化查询性能。
51 3
|
11天前
|
关系型数据库 MySQL 数据库
第十四章 演示MYSQL自定义values.yaml绑定PV和PVC和数据库用户密码
第十四章 演示MYSQL自定义values.yaml绑定PV和PVC和数据库用户密码
28 0
|
11天前
|
SQL 关系型数据库 数据库
事务隔离级别:保障数据库并发事务的一致性与性能
事务隔离级别:保障数据库并发事务的一致性与性能
|
11天前
|
存储 安全 算法
【软件设计师备考 专题 】数据库的控制功能(并发控制、恢复、安全性、完整性)
【软件设计师备考 专题 】数据库的控制功能(并发控制、恢复、安全性、完整性)
62 0
|
7天前
|
Cloud Native 关系型数据库 分布式数据库
云原生数据库PolarDB自定义权限策略参考
本文介绍了自定义权限策略,它是RAM访问控制体系中除系统策略外,用户可创建、更新和删除的权限策略。用户需维护策略版本更新,并将策略绑定到RAM身份以授予权限。策略支持版本控制和删除,但删除前需确保无引用。文章提供了相关操作文档链接,包括创建、修改、删除策略及管理引用记录和版本。此外,列举了PolarDB在MySQL、PostgreSQL和XScale版的自定义权限策略场景和示例,并提示用户在使用时需了解授权信息。
19 0
|
7天前
|
SQL 关系型数据库 开发工具
Beekeeper Studio是一个多功能的数据库管理和开发工具
【5月更文挑战第19天】Beekeeper Studio是一个多功能的数据库管理和开发工具
20 5
|
11天前
|
SQL 关系型数据库 MySQL
关系型数据库的并发处理能力限制
【5月更文挑战第3天】关系型数据库的并发处理能力限制
22 8
关系型数据库的并发处理能力限制
|
11天前
|
数据管理 关系型数据库 MySQL
数据管理DMS产品使用合集之DMS可以接入其他平台的MySQL数据库,是否还支持无感知变更功能
阿里云数据管理DMS提供了全面的数据管理、数据库运维、数据安全、数据迁移与同步等功能,助力企业高效、安全地进行数据库管理和运维工作。以下是DMS产品使用合集的详细介绍。
|
11天前
|
存储 关系型数据库 MySQL
【mybatis-plus】Springboot+AOP+自定义注解实现多数据源操作(数据源信息存在数据库)
【mybatis-plus】Springboot+AOP+自定义注解实现多数据源操作(数据源信息存在数据库)