风哥教程参考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 应用层读写分离
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: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状态
- 监控主从延迟
- 定期测试故障切换
- 监控读写比例
- 定期备份主库
- 建立完善的监控告警
学习交流加群风哥微信: itpux-com
风哥Oracle/MySQL/PostgreSQL/Greenplum/DB2/Redis等数据库培训课程,10年一线实战经验,企业级培训,真正掌握数据库核心技术!
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
