如何优雅的使用PostgreSQL主从
此文档以进程方式部署 docker 或 k8s 参考PostDock 单节点安装 1 Docker 安装 1docker run -d --name=postgres13 -p 5432:5432 -v /data/postgres-data/postgres13:/var/lib/postgresql/data -e POSTGRES_PASSWORD=qweasd postgres:13.9 -c shared_buffers=2560MB -c max_connections=5000 2 Yum 源 12# 最新命令参考: https://www.postgresql.org/download/linux/redhat/sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm 3 安装 PostgreSQL 12sudo yuminstall -y postgresql13-s...
MySQL主从同步分析
1 同步原理 slave 从 master 节点复制数据主要有 4 个步骤 1,master 对所有 DDL 和 DML 产生的日志写入 binlog 2, Slave 的 IO Thread 线程从主库中 bin log 中读取取日志。类似 tailf 命令 3, Slave 的 IO Thread 线程把读取的日志放到 relay-bin 文件里,如果不放到文件里,SQL Thread 线程重放过慢的会导致丢数据 4, Slave 的 SQL Thread 线程将主库的 DDL 和 DML 操作事件在 slave 中重放 1,2,3 步骤都是顺序读写,在不考虑网络延迟的情况下,slave 不会产生延迟.但是第 4 步 DML 和 DDL 的 IO 操作是随即的,不是顺序的.不考虑硬件,主从复制延迟主要在这里 1.1 随机读写与顺序读写区别 如下是内存块,每个块最大存 4k 1k 2k 4k 3k 3k 我如果删除 1k 这个块的数据再加个 2k 的块的数据 如果是顺序读写 1k 的数据删除掉之后就丢掉,新加数据直接在后面的块添加数据 ...
Orchestrator与MySQL的高可用
1 方案设计 参考文档(GitHub 的 MySQL 高可用性实践分享), 技术细节: 当主库宕掉的时候,orchestrator 不仅会每隔 InstancePollSeconds(默认五秒)监测主库,也会检测从库(通过 select round(absolute_lag) from meta.heartbeat_view"检查,配置文件里自定义语句)。比如,要诊断出主库挂了的情况,必须满足以下两个条件:orchestrator 联系不到主库。登录到主库对应的从库,从库也连不上主库。 使用伪 GTID 的时候需要建一个表专门存放 orchestrator 生成的 GTID,每次写入 binlog 的话会把这个表的 GTID 写进去,如下图 orchestrator 没有将错误按时间来进行分类,而是按复制拓扑服务器本身进行分类。当所有的从库都连不上主库的时候,说明复制拓扑被破坏,进行故障转移。 通过 show slave hosts;命令发现实例,然后根据 host:port 访问实例 高可用有两种方式,一直是多个实例一个数据库,只有数据库没宕掉就能正常...
如何优雅的备份MySQL数据
1 备份锁分析 XtraBackup 备份的时候出现锁问题,然后查文档有以下几个方案,每种方案都有优势与不足,根据需求选择,我们使用的是 kill 其他阻塞线程方案 1.1 死锁现象及原因: 1.2 Flush Table with Read Lock XtraBackup 可以实现 Innodb 表的无锁备份,但是一个数据库中,即使所有的业务表都是 innodb 表,但是还存在一些 MySQL 系统库下的 user 表等,均是 myisam 表(MySQL 8.0 均替换为 InnoDB),同时备份过程需要获取 Binlog 文件名和位置,也要保证表定义文件的一致性,所以从整个实例的角度,即使用 XtraBackup 还是有一段时间需要执行 Flush table with read lock 全局锁的,会对用户访问产生影响,同时由于 Flush table with read lock 的一些特殊性,如果稍不注意,可能会对用户访问数据库产生致命影响。 1.3 使用 MTS: slave_preserve_commit_order=1 时,relay-log ...
MariaDB生产级别高可用
此方案只适合 mariadb,MySQL 请不要使用此方案 此方案实现功能 自动故障转移 自动故障恢复,如 master 宕掉后重启自动加入集群成为 slave 读写分离 binlog 日志备份与解析 1 环境规划 ip 端口 名称 binlog 路径 10.0.16.12 10.2.41 11 Master /var/log/mysql 10.0.16.12 10.2.41 12 Slave1 /var/log/mysql 10.0.16.12 10.2.41 13 Slave2 /var/log/mysql 10.0.16.12 10.2.41 14 Slave3 /var/log/mysql 10.0.16.12 6.1.4-1 5506 maxscale /data/maxscale1_binlog 10.0.16.12 6.1.4-1 5507 maxscale /data/maxscale2_binlog 10.0.16.12 1.20.2 3306 nginx 2 简单部署 mariadb 2.1 修改配...
Nginx Ingress常用配置
发现大部分架构都是 nginx 代理后端,挂载前端提供服务。但是放到 k8s 还得单独启动个 nginx 部署前端,这就造成两个问题。 1:配置复杂,每加有新的服务调用,不仅要改 ingress,web 服务的 nginx 配置文件也需要修改。 2:访问复杂,变成了 dns>ingress>web>后端 经过修改,我们的架构图 1 正常需要添加的参数 123456789nginx.ingress.kubernetes.io/client-body-buffer-size: 2mnginx.ingress.kubernetes.io/enable-access-log: 'true'nginx.ingress.kubernetes.io/enable-cors: 'true'nginx.ingress.kubernetes.io/proxy-body-size: 10mnginx.ingress.kubernetes.io/proxy-buffer-size: 2mnginx.ingress.kubernetes...
ingress常用配置
发现大部分架构都是 nginx 代理后端,挂载前端提供服务。但是放到 k8s 还得单独启动个 nginx 部署前端,这就造成两个问题。 1:配置复杂,每加有新的服务调用,不仅要改 ingress,web 服务的 nginx 配置文件也需要修改。 2:访问复杂,变成了 dns>ingress>web>后端 经过修改,我们的架构图 1<pre class="mermaid"> graph LR A --- B B-->C[fa:fa-ban forbidden] B-->D(fa:fa-spinner); </pre> 1 正常需要添加的参数 123456789nginx.ingress.kubernetes.io/client-body-buffer-size: 2mnginx.ingress.kubernetes.io/enable-access-log: 'true'nginx.ingress.kubernetes.io/enable-cors: 'true...
nginx问题记录
1 访问过慢 现象: 突然f5 检查后端 Nginx 节点,大部分 Nginx 节点总是连接超时,而看监控 nginx 资源使用率都正常 1.1 尝试查看日志 123...... shm_add_node::ngx_slab_alloc_locked() failed: used_size[36127530], used_node[10178]... 1.1.1 查看内存分配 自定义标题 其实不是这原因,以为请求分配不了内存,但这里写一下查询方法 1234cat /proc/buddyinfoNode 0, zone DMA 1 0 0 0 2 1 1 0 1 1 3 Node 0, zone DMA32 25063 30201 27755 7226 864 202 138 123 105 0 0 Node 0, zone Normal 470959 338802 12611...
记录一次解决cc攻击
录一次 cc 攻击] 虽然没完全解决,但是屏蔽大量攻击,减轻服务器负担.此文档只是简单介绍下 web 防火墙原理 1 泳道图 2 配置 Nginx cat conf.d/wxh.super.co.conf 123456789101112131415161718192021limit_req_zone $remote_addr zone=allips:10m rate=30r/s; # 每个ip一秒30次# limit_req zone=allips; #全局限制server {server_name wxh.super.com;......if ($request_uri ~* "kto0a81u") {return 503;} #只要访问以kto0a81u为结尾的连接自动跳到503location /{ allow 122.14.1.21; #白名单 limit_req zone=allips #限制访问/user/login链接每个ip一秒10次 try_files $uri...
Apollo 部署与LDAP
1 配置 MySQL 数据库 1.1 导数据库 Apollo 的表结构对timestamp使用了多个 default 声明,所以需要 5.6.5 以上版本。 连接上 MySQL 后,可以通过如下命令检查: 1SHOW VARIABLES WHERE Variable_name = 'version'; 1.2 下载表结构 1wget https://github.com/apolloconfig/apollo-build-scripts/blob/master/sql/apolloconfigdb.sql 1.3 导入表结构 1234567mysql -u root -pCREATE DATABASE DevApolloConfigDB;CREATE DATABASE ApolloPortalDB;USE DevApolloConfigDBsource apolloconfigdb.sqlUSE ApolloPortalDBsource apolloportaldb.sql 2 部署后端 2.1 添加 Apollo Helm Chart 仓库 h...











