1. 首页 > DB2教程 > 正文

DB2教程FG073-DB2读写分离设计实战

风哥教程参考DB2官方文档HADR、Replication等内容,详细介绍读写分离设计、HADR配置、负载均衡等。更多视频教程www.fgedu.net.cn

目录大纲

Part01-读写分离架构

1.1 读写分离优势

读写分离的优势:

  • 提高读性能
  • 降低主库压力
  • 提高系统可用性
  • 支持报表查询

1.2 架构模式

  • 一主一从:一个主库,一个备库
  • 一主多从:一个主库,多个备库
  • 双主双从:两个主库,互为备库

Part02-HADR配置

2.1 HADR主库配置

# 主库配置
UPDATE DATABASE CONFIGURATION FOR FGEDB USING
HADR_LOCAL_HOST 192.168.1.10
HADR_LOCAL_SVC 55001
HADR_REMOTE_HOST 192.168.1.11
HADR_REMOTE_SVC 55002
HADR_REMOTE_INST db2inst1
HADR_TIMEOUT 120
HADR_SYNCMODE SYNC
HADR_PEER_WINDOW 120;

# 启动HADR主库
START HADR ON DATABASE FGEDB AS PRIMARY;

# 查看HADR状态
GET SNAPSHOT FOR HADR ON FGEDB;

2.2 HADR备库配置

# 备库配置
UPDATE DATABASE CONFIGURATION FOR FGEDB USING
HADR_LOCAL_HOST 192.168.1.11
HADR_LOCAL_SVC 55002
HADR_REMOTE_HOST 192.168.1.10
HADR_REMOTE_SVC 55001
HADR_REMOTE_INST db2inst1
HADR_TIMEOUT 120
HADR_SYNCMODE SYNC
HADR_PEER_WINDOW 120;

# 启动HADR备库
START HADR ON DATABASE FGEDB AS STANDBY;

# 查看HADR状态
GET SNAPSHOT FOR HADR ON FGEDB;

# 检查HADR连接状态
SELECT
HADR_ROLE,
HADR_STATE,
HADR_SYNCMODE,
HADR_TIMEOUT
FROM SYSIBMADM.SNAPHADR;

Part03-读写分离实现

3.1 应用层读写分离

# Java应用示例
public class DB2DataSource {
private DataSource writeDataSource;
private DataSource readDataSource;

public Connection getConnection(boolean readOnly) throws SQLException {
if (readOnly) {
return readDataSource.getConnection();
} else {
return writeDataSource.getConnection();
}
}
}

# 使用示例
DB2DataSource ds = new DB2DataSource();

// 写操作使用主库
Connection writeConn = ds.getConnection(false);
PreparedStatement stmt = writeConn.prepareStatement(“INSERT INTO ORDERS …”);
stmt.executeUpdate();

// 读操作使用备库
Connection readConn = ds.getConnection(true);
PreparedStatement stmt = readConn.prepareStatement(“SELECT * FROM ORDERS …”);
ResultSet rs = stmt.executeQuery();

3.2 中间件读写分离

# 使用连接池配置读写分离
# 主库连接池
db.primary.url=jdbc:db2://192.168.1.10:50000/FGEDB
db.primary.username=write_user
db.primary.password=password

# 备库连接池
db.secondary.url=jdbc:db2://192.168.1.11:50000/FGEDB
db.secondary.username=read_user
db.secondary.password=password

# 使用代理实现自动路由
CREATE ROUTINE SCHEMA READONLY AUTHORIZATION read_user;

# 创建只读视图
CREATE VIEW V_ORDERS_READONLY AS
SELECT * FROM ORDERS;

# 授权只读用户
GRANT SELECT ON V_ORDERS_READONLY TO read_user;

Part04-负载均衡

4.1 客户端负载均衡

# JDBC连接字符串配置负载均衡
jdbc:db2://192.168.1.10:50000,192.168.1.11:50000/FGEDB:enableClientAffinitiesList=1;clientRerouteAlternateServerName=192.168.1.11;clientRerouteAlternatePortNumber=50000;

# 配置客户端路由
UPDATE ALTERNATE SERVER FOR DATABASE FGEDB
USING HOST 192.168.1.11 PORT 50000;

# 查看客户端路由配置
SELECT
SERVER_NAME,
HOST_NAME,
PORT_NUMBER
FROM SYSIBMADM.SERVERS;

4.2 服务器端负载均衡

# 配置工作负载管理
CREATE SERVICE CLASS READ_CLASS
SOFT CPU SHARES 50
SOFT MEMORY SHARES 50;

CREATE SERVICE CLASS WRITE_CLASS
SOFT CPU SHARES 100
SOFT MEMORY SHARES 100;

# 创建工作负载
CREATE WORKLOAD READ_WORKLOAD
APPLNAME(‘READ_APP’)
SERVICE CLASS READ_CLASS;

CREATE WORKLOAD WRITE_WORKLOAD
APPLNAME(‘WRITE_APP’)
SERVICE CLASS WRITE_CLASS;

# 监控工作负载
SELECT
WORKLOAD_NAME,
SERVICE_CLASS_NAME,
TOTAL_CPU_TIME,
TOTAL_WAIT_TIME
FROM SYSIBMADM.WORKLOAD_OCCURRENCE_METRICS;

Part05-风哥经验总结与分享

5.1 读写分离设计要点

  • 合理配置HADR
  • 应用层实现读写路由
  • 备库只读权限控制
  • 监控主从延迟
  • 建立故障切换机制
  • 负载均衡配置

5.2 性能优化建议

场景 优化方案
读多写少 增加备库,分散读压力
主从延迟 使用SYNC模式,优化网络
故障切换 自动切换脚本,监控告警
负载均衡 客户端路由,WLM管理

5.3 运维要点

  • 监控HADR状态
  • 监控主从延迟
  • 定期测试故障切换
  • 监控读写比例
  • 定期备份主库
  • 建立完善的监控告警
更多视频教程www.fgedu.net.cn
学习交流加群风哥微信: itpux-com
风哥Oracle/MySQL/PostgreSQL/Greenplum/DB2/Redis等数据库培训课程,10年一线实战经验,企业级培训,真正掌握数据库核心技术!

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息