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.io/pr ...
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.io ...
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 126112 ...
记录一次解决cc攻击
录一次 cc 攻击]
虽然没完全解决,但是屏蔽大量攻击,减轻服务器负担.此文档只是简单介绍下 web 防火墙原理
1 泳道图
2 配置 nginx
cat conf.d/wxh.super.co.conf
123456789101112131415161718192021222324252627282930limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;server {server_name wxh.super.com;listen *:80;root /opt/web_html/wxh.super.com;access_log logs/wxh.super.com_access.log main;error_log logs/wxh.super.com_error.log;if ($request_uri ~* "kto0a81u") {return 503;} #只要访问以kto0a81u为结尾的连接自动跳到503error_page ...
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 仓库
helm ...
Apollo使用与配置
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 仓库helm repo add ...
Kubernetes自定义权限
1 创建账号
1.1 创建私钥,一定要用 root 用户
(umask 077; openssl genrsa -out test.key 2048)
1.2 基于私钥生成证书,由 k8s 集群的 ca.crt 签署
CN 为账号名称,OU 为组
openssl req -new -key test.key -out test.csr -subj "/CN=test"
ca.crt 与 ca.key 是 k8s 的秘钥
openssl x509 -req -in test.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out test.crt -days 365
1.3 查看证书
openssl x509 -in test.csr -text -noout
1.4 k8s 创建用户,并使用证书认证
kubectl config set-credentials test --client-certificate=test.crt --client-key=test.key --embed-certs= ...