数据库读写分离解决方案--DG实施方案
数据库读写分离方案与配置

数据库读写分离方案与配置在当今互联网时代,大多数互联网应用都离不开数据库的支持。
随着用户量的增加和数据量的急剧上升,数据库的读写压力也越来越大。
为了提高数据库的性能和稳定性,数据库读写分离成为了一种常用的解决方案。
数据库读写分离的原理是将数据库的读操作与写操作分离到不同的服务器上,以实现负载均衡和提升数据库的吞吐量。
一般来说,读操作占据数据库操作的大部分比例,而写操作则相对较少,因此将读写分离可以将读操作分摊到多个服务器上,从而减轻单台数据库服务器的负担。
下面我们将介绍一种常见的数据库读写分离方案与配置。
1. 主从复制主从复制是一种经典的数据库读写分离技术,在这种方案中,将一个数据库服务器作为主服务器(Master),其处理所有的写操作和一部分的读操作;而将多个数据库服务器作为从服务器(Slave),只处理读操作。
主服务器将自己的事务日志传输给从服务器,从服务器通过重放主服务器的事务日志实现数据复制。
在配置主从复制时,首先需要确保主服务器能够正常运行并持续写入数据。
接着,配置从服务器,使其能够连接到主服务器并获取数据。
通常,需要设置主从服务器之间的IP地址和端口,以及鉴权信息。
最后,启动主服务器和从服务器,监控数据库同步状态。
2. 读写分离中间件除了使用主从复制,还可以选择使用读写分离中间件来实现数据库的读写分离。
读写分离中间件底层使用了数据库主从复制的技术,但对外表现为一个数据库服务器,对应用程序透明。
读请求通过中间件转发到从服务器,而写请求则发送到主服务器。
在使用读写分离中间件之前,需要先配置从服务器,使其与主服务器实现数据同步。
然后,配置中间件的地址和端口,并将读请求通过中间件转发到从服务器。
最后,通过心跳等机制,保证中间件能够及时检测到主服务器和从服务器的状态变化。
3. 数据库连接池当数据库连接数较多时,频繁地创建和关闭连接会给数据库服务器带来较大的负担,降低数据库的性能。
使用连接池可以有效地管理和复用数据库连接,提高数据库的吞吐量和性能。
数据库读写分离四种方法

数据库读写分离四种方法数据库读写分离四种方法1. 基于应用层的读写分离•在这种方法中,读操作和写操作是通过应用层进行分离的。
•读操作由读库处理,写操作由写库处理。
•应用层可以通过路由规则将查询请求发送到读库,将写请求发送到写库。
•这种方法的好处是可以根据实际情况进行动态调整和扩展读库和写库。
2. 基于数据库中间件的读写分离•数据库中间件是一种位于应用层和数据库之间的组件,负责处理数据库的访问请求。
•通过配置数据库中间件,可以实现读写分离功能。
•数据库中间件可以对查询请求进行负载均衡,将查询请求分发到多个读库上执行。
•同时,写操作可以发送到写库上执行。
•这种方法的好处是可以在不修改应用程序代码的情况下实现读写分离。
3. 基于数据库复制的读写分离•数据库复制是指将主数据库的数据实时复制到一个或多个从数据库的过程。
•在读写分离中,可以将写操作发送到主数据库,将读操作发送到从数据库。
•从数据库可以通过实时复制保持与主数据库的数据同步。
•这种方法的好处是可以通过复制提高读操作的并发性能,并且从数据库可以承担一部分读操作的负载。
4. 基于分片的读写分离•分片是将大量数据按照某种规则进行拆分,分散到多个数据库中的过程。
•在读写分离中,可以将查询请求和写请求分别发送到相应的分片上。
•这种方法的好处是可以通过水平扩展增加数据库的处理能力,提高系统的性能和可伸缩性。
•同时,需要注意数据一致性和分片规则的设计。
以上是数据库读写分离的四种常见方法,每种方法都有其适用场景和优势。
在选择合适的方法时,需要根据系统的实际需求和情况进行评估和选择。
1. 基于应用层的读写分离•这种方法主要是通过在应用层进行读写请求的分离,来实现数据库读写分离。
•读操作由读库处理,写操作由写库处理,通过合理的路由规则将请求发送到相应的库。
•优点是可以根据实际情况灵活调整和扩展读库和写库,适应系统的变化。
•缺点是需要在应用层进行更多的开发和维护工作,增加了系统的复杂性。
数据库读写分离方案

数据库读写分离方案数据库读写分离方案1. 概述数据库读写分离是一种常用的提升数据库性能和扩展能力的方案。
通过将读操作和写操作分离到不同的数据库服务器上,可以有效减轻数据库服务器的压力,提高系统的并发处理能力和响应速度。
2. 方案设计系统架构在数据库读写分离方案中,通常采用主备模式。
主数据库用于处理写操作,而备数据库则用于处理读操作。
数据同步为了保持主备数据库的数据一致性,需要进行数据同步。
可以采用以下两种方式进行数据同步:•基于二进制日志复制这种方式通过记录主数据库上的所有更新操作,并将其内容以二进制形式传输到备数据库,然后在备数据库上重新执行这些操作。
常见的基于二进制日志复制的工具有MySQL的主从复制和MariaDB的GTID复制。
•基于逻辑复制这种方式是通过将主数据库中的更新操作转换成对应的SQL语句,并将其传输到备数据库执行。
常见的基于逻辑复制的工具有MySQL的MGR复制和MySQL的Tungsten Replicator。
读写切换在数据库读写分离方案中,需要对读写操作进行切换。
•对于写操作,由应用程序直接连接到主数据库进行操作。
•对于读操作,可以通过以下两种方式进行切换:–应用层负载均衡在应用程序中引入负载均衡设备,通过设备层面的负载均衡算法,将读请求分发到多个备数据库中。
–数据库代理在主备数据库之间引入数据库代理,代理服务器可以屏蔽应用程序与具体数据库的直接交互,根据负载均衡算法将读请求转发到不同的备数据库上。
3. 实施步骤1.配置主备数据库服务器,并确保主备服务器之间网络连接正常。
2.配置主数据库的二进制日志复制或逻辑复制功能。
3.配置备数据库的可读权限,并确保备数据库能够接收到主数据库的数据同步请求。
4.配置应用程序,使其能够根据读写操作的类型进行切换。
5.配置应用层负载均衡设备或数据库代理,并确保其正常工作。
6.进行测试和验证,确保数据库读写分离方案正常运行。
4. 注意事项•配置数据库读写分离方案时,需要注意主备服务器之间的网络连接和数据同步的稳定性,以确保数据的一致性。
数据库读写分离解决方案--DG实施方案

数据库读写分离解决方案----oracle 11G ADG实施方案1.项目背景介绍1.1目的通过DG实现主库与备库同步,主库作为业务应用库,备库作为查询库,应用根据不同需求配置对应数据库;1.2测试环境在2台RedHat5.4上使用ORACLE 的DataGuard组件实现容灾。
设备配置(VMWare虚拟机环境)清单如下:2.Oracle DataGuard 介绍备用数据库(standby database)是ORACLE 推出的一种高可用性(HIGH AVAILABLE)数据库方案,在主节点与备用节点间通过日志同步来保证数据的同步,备用节点作为主节点的备份,可以实现快速切换与灾难性恢复。
●STANDBY DATABASE的类型:有两种类型的STANDBY:物理STANDBY和逻辑STANDBY两种类型的工作原理可通过如下图来说明:physical standby提供与主数据库完全一样的拷贝(块到块),数据库SCHEMA,包括索引都是一样的。
它是可以直接应用REDO实现同步的。
l ogical standby则不是这样,在logical standby中,逻辑信息是相同的,但物理组织和数据结构可以不同,它和主库保持同步的方法是将接收的REDO转换成SQL语句,然后在STANDBY上执行SQL语句。
逻辑STANDBY除灾难恢复外还有其它用途,比如用于用户进行查询和报表,但其数据库用户相关对象均需要有主键。
✧本次实施将选择物理STANDBY(physical standby)方式●对主库的保护模式可以有以下三种模式:–Maximum protection (最高保护)–Maximum availability (最高可用性)–Maximum performance (最高性能)✧基于项目应用的特征及需求,本项目比较适合采用Maximum availability (最高可用性)模式实施。
3.Dataguard 实施前提条件和注意事项:●灾备环境中的所有节点必须安装相同的操作系统,尽可能令详细补丁也保持相同。
读写分离实现方案

读写分离实现方案
读写分离是一种数据库优化策略,将读操作和写操作分别分配给不同的数据库实例处理,从而提高数据库的读写性能和容量。
实现读写分离可以采用以下方案:
1. 主从复制:将主数据库作为写操作的主要处理节点,而从数据库作为读操作的主要处理节点。
主数据库将写操作同步到从数据库,从数据库可在本地处理读操作。
这样可以减轻主数据库的读压力,提高读操作的性能。
2. 分布式数据库:将数据分散存储在多个数据库节点上,每个节点负责一部分数据的读写操作。
通过负载均衡的方式将读请求分发到各个数据库节点上,从而提高读操作的并发处理能力和性能。
3. 缓存系统:使用缓存系统缓存热点数据,将读操作请求优先从缓存系统中获取数据,减少对数据库的读操作需求。
常用的缓存系统有Redis、Memcached等。
4. 数据库中间件:使用数据库中间件作为代理,将读写请求分发到不同的数据库节点。
数据库中间件可以根据读写操作的特点,自动切换读写操作的目标节点,从而实现读写分离。
5. 垂直分表:将数据按照不同的业务逻辑分散存储在不同的数据库表中,读写操作分别针对不同的表进行。
通过垂直分表可以减少表的数据量和索引的大小,提高读取操作的性能。
需要注意的是,读写分离实现方案的选择应根据具体的业务需求和数据库架构进行调整,以达到最佳的性能和容量优化效果。
读写分离解决方案

第1篇
读写分离解决方案
一、背景
随着业务量的不断增长,数据库的压力日益增大,为提高数据库性能,降低数据查询延迟,提高数据处理效率,现对数据库进行读写分离改造。本方案旨在提供一套合法合规的读写分离解决方案,确保业务平稳运行,同时降低硬件成本,提高系统可用性。
二、目标
1.降低数据库读写压力,提高数据处理速度。
4.提升系统整体的伸缩性和可维护性。
四、方案设计
1.架构设计
本方案采用主-备-从(Master-Backup-Slave)架构模式,实现读写操作的分离。
-主数据库(Master):负责处理所有的写操作。
-备数据库(Backup):作为主数据库的冗余,用于故障转移。
-从数据库(Slave):负责处理所有的读操作。
主从库之间通过复制机制同步数据,确保数据一致性。
2.数据库选型
根据业务需求,选择合适的数据库产品。本方案推荐使用开源的MySQL数据库。
3.主从复制配置
在主库上开启二进制日志(Binary Log),用于记录所有修改数据的SQL语句。从库通过读取二进制日志,执行相应的SQL语句,实现数据同步。
配置步骤如下:5.逐步迁移业务到读写分离架构,监控性能变化。六、验收标准
1.数据一致性:通过比对主从数据库的数据,确保数据一致。
2.性能提升:通过性能测试,验证读写分离对系统性能的提升。
3.高可用性:模拟主数据库故障,验证故障转移的自动性和有效性。
七、后期维护
1.定期检查数据库同步状态,确保数据一致性。
2.监控数据库性能,根据业务增长调整分离策略。
-备数据库实时同步二进制日志,保持数据最新。
-从数据库定期(如每秒)拉取主数据库的最新数据。
数据库读写分离

数据库读写分离1. 背景一般应用对数据库而言都是“读多写少”,也就说对数据库读取数据的压力比较大,有一个思路就是说采用数据库集群的方案,其中一个是主库,负责写入数据,称之为:写库;其它都是从库,负责读取数据,称之为:读库;那么,对我们的要求是:1、读库和写库的数据一致;2、写数据必须写到写库;3、读数据必须到读库;2. 方案解决读写分离的方案有两种:应用层解决和中间件解决。
1.1. 应用层解决:优点:1、多数据源切换方便,由程序自动完成;2、不需要引入中间件;3、理论上支持任何数据库;缺点:1、由程序员完成,运维参与不到;2、不能做到动态增加数据源;1.2. 中间件解决优缺点:优点:1、源程序不需要做任何改动就可以实现读写分离;2、动态添加数据源不需要重启程序;缺点:1、程序依赖于中间件,会导致切换数据库变得困难;2、由中间件做了中转代理,性能有所下降;中间件的产品有:mysql-proxy,Amoeba。
3. 使用Spring基于应用层实现3.1. 原理在进入Service之前,使用AOP来做出判断,是使用写库还是读库,判断依据可以根据方法名判断,比如说以query、find、get等开头的就走读库,其他的走写库。
3.2. DynamicDataSourceimportorg.springframework.jdbc.datasource.lookup.AbstractRoutingDa taSource;/*** 定义动态数据源,实现通过集成Spring提供的AbstractRoutingDataSource,只需要实现determineCurrentLookupKey方法即可* 由于DynamicDataSource是单例的,线程不安全的,所以采用ThreadLocal保证线程安全,由DynamicDataSourceHolder完成。
**/public class DynamicDataSource extends AbstractRoutingDataSource{@Overrideprotected Object determineCurrentLookupKey() {// 使用DynamicDataSourceHolder保证线程安全,并且得到当前线程中的数据源keyreturn DynamicDataSourceHolder.getDataSourceKey();}}3.3. DynamicDataSourceHolder/*** 使用ThreadLocal技术来记录当前线程中的数据源的key**/public class DynamicDataSourceHolder {//写库对应的数据源keyprivate static final String MASTER = "master";//读库对应的数据源keyprivate static final String SLAVE = "slave";//使用ThreadLocal记录当前线程的数据源keyprivate static final ThreadLocal<String> holder= new ThreadLocal<String>();/*** 设置数据源key* @param key*/public static void putDataSourceKey(String key) {holder.set(key);}/*** 获取数据源key* @return*/public static String getDataSourceKey() {return holder.get();}/*** 标记写库*/public static void markMaster(){putDataSourceKey(MASTER);}/*** 标记读库*/public static void markSlave(){putDataSourceKey(SLAVE);}}3.4. DataSourceAspectimport ng3.StringUtils;import ng.JoinPoint;/*** 定义数据源的AOP切面,通过该Service的方法名判断是应该走读库还是写库*/public class DataSourceAspect {/*** 在进入Service方法之前执行** @param point 切面对象*/public void before(JoinPoint point) {// 获取到当前执行的方法名String methodName = point.getSignature().getName();if (isSlave(methodName)) {// 标记为读库DynamicDataSourceHolder.markSlave();} else {// 标记为写库DynamicDataSourceHolder.markMaster();}}/*** 判断是否为读库** @param methodName* @return*/private Boolean isSlave(String methodName) {// 方法名以query、find、get开头的方法名走从库return StringUtils.startsWithAny(methodName, "query", "find", "get");}}3.5. 配置2个数据源3.5.1. jdbc.propertiesjdbc.master.driver=com.mysql.jdbc.Driverjdbc.master.url=jdbc:mysql://127.0.0.1:3306/mybatis_1128? useUnicode=true&characterEncoding=utf8&autoReconnect=tr ue&allowMultiQueries=trueername=rootjdbc.master.password=123456jdbc.slave01.driver=com.mysql.jdbc.Driverjdbc.slave01.url=jdbc:mysql://127.0.0.1:3307/mybatis_1128? useUnicode=true&characterEncoding=utf8&autoReconnect=tr ue&allowMultiQueries=trueername=rootjdbc.slave01.password=1234563.5.2. 定义连接池<!-- 配置连接池 --><bean id="masterDataSource" class="com.jolbox.bonecp.BoneCPDataSource"destroy-method="close"><!-- 数据库驱动 --><property name="driverClass" value="${jdbc.master.driver}" /><!-- 相应驱动的jdbcUrl --><property name="jdbcUrl" value="${jdbc.master.url}" /><!-- 数据库的用户名 --><property name="username" value="${ername}" /><!-- 数据库的密码 --><property name="password" value="${jdbc.master.password}" /><!-- 检查数据库连接池中空闲连接的间隔时间,单位是分,默认值:240,如果要取消则设置为0 --><property name="idleConnectionTestPeriod" value="60" /> <!-- 连接池中未使用的链接最大存活时间,单位是分,默认值:60,如果要永远存活设置为0 --><property name="idleMaxAge" value="30" /><!-- 每个分区最大的连接数 --><property name="maxConnectionsPerPartition" value="150" /><!-- 每个分区最小的连接数 --><property name="minConnectionsPerPartition" value="5" /> </bean><!-- 配置连接池 --><bean id="slave01DataSource" class="com.jolbox.bonecp.BoneCPDataSource"destroy-method="close"><!-- 数据库驱动 --><property name="driverClass" value="${jdbc.slave01.driver}" /><!-- 相应驱动的jdbcUrl --><property name="jdbcUrl" value="${jdbc.slave01.url}" /><!-- 数据库的用户名 --><property name="username" value="${ername}" /><!-- 数据库的密码 --><property name="password" value="${jdbc.slave01.password}" /><!-- 检查数据库连接池中空闲连接的间隔时间,单位是分,默认值:240,如果要取消则设置为0 --><property name="idleConnectionTestPeriod" value="60" /> <!-- 连接池中未使用的链接最大存活时间,单位是分,默认值:60,如果要永远存活设置为0 --><property name="idleMaxAge" value="30" /><!-- 每个分区最大的连接数 --><property name="maxConnectionsPerPartition" value="150" /><!-- 每个分区最小的连接数 --><property name="minConnectionsPerPartition" value="5" /> </bean>3.5.3. 定义DataSource<!-- 定义数据源,使用自己实现的数据源 --><bean id="dataSource" class="ermanage.spring.DynamicDataSource"> <!-- 设置多个数据源 --><property name="targetDataSources"><map key-type="ng.String"><!-- 这个key需要和程序中的key一致 --><entry key="master" value-ref="masterDataSource"/><entry key="slave" value-ref="slave01DataSource"/></map></property><!-- 设置默认的数据源,这里默认走写库 --><property name="defaultTargetDataSource" ref="masterDataSource"/></bean>3.6. 配置事务管理以及动态切换数据源切面3.6.1. 定义事务管理器<!-- 定义事务管理器 --><bean id="transactionManager"class="org.springframework.jdbc.datasource.DataSourceTra nsactionManager"><property name="dataSource" ref="dataSource" /></bean>3.6.2. 定义事务策略<!-- 定义事务策略 --><tx:advice id="txAdvice"transaction-manager="transactionManager"><tx:attributes><!--定义查询方法都是只读的 --><tx:method name="query*" read-only="true" /><tx:method name="find*" read-only="true" /><tx:method name="get*" read-only="true" /><!-- 主库执行操作,事务传播行为定义为默认行为 --><tx:method name="save*" propagation="REQUIRED" /><tx:method name="update*" propagation="REQUIRED" /> <tx:method name="delete*" propagation="REQUIRED" /><!--其他方法使用默认事务策略 --><tx:method name="*" /></tx:attributes></tx:advice>3.6.3. 定义切面<!-- 定义AOP切面处理器 --><beanclass="ermanage.spring.DataSourceAspect"id="dataSourceAspect" /><aop:config><!-- 定义切面,所有的service的所有方法 --><aop:pointcut id="txPointcut"expression="execution(* xx.xxx.xxxxxxx.service.*.*(..))" /><!-- 应用事务策略到Service切面 --><aop:advisor advice-ref="txAdvice"pointcut-ref="txPointcut"/><!-- 将切面应用到自定义的切面处理器上,-9999保证该切面优先级最高执行 --><aop:aspect ref="dataSourceAspect" order="-9999"><aop:before method="before" pointcut-ref="txPointcut" /> </aop:aspect></aop:config>4. 改进切面实现,使用事务策略规则匹配之前的实现我们是将通过方法名匹配,而不是使用事务策略中的定义,我们使用事务管理策略中的规则匹配。
数据库读写分离方案

五、实施步骤
1.准备阶段
-对现有数据库进行评估,确定读写分离的必要性。
-选择合适的中间件,搭建测试环境。
2.实施阶段
-配置中间件,实现读写分离。
-部署从数据库,并配置数据同步。
3.迁移阶段
-分阶段迁移读请求到从数据库,观察性能变化。
-根据监控数据,调整读写分离策略。
(2)从库发生故障时,中间件自动剔除故障节点,并将请求分发到其他正常节点。
(3)采用双机热备或多机热备的方式,确保数据库的高可用性。
6.监控与优化
(1)部署数据库监控系统,实时监控数据库性能、连接数、同步状态等指标。
(2)根据监控数据,分析并优化数据库性能,调整中间件配置。
四、实施步骤
1.梳理现有业务,分析数据库压力来源。
2.中间件稳定性风险:选择成熟稳定的中间件,定期进行版本更新和性能优化。
3.性能瓶颈风险:通过监控和优化,及时调整中间件配置,提高数据库性能。
4.业务迁移风险:在迁移过程中,确保业务平滑过渡,减少对业务的影响。
六、总结
本方案通过实施数据库读写分离,提高系统整体性能,满足业务发展需求。在实施过程中,需注意数据一致性、中间件稳定性、性能瓶颈等问题,并采取相应的应对措施。通过不断优化和调整,确保数据库读写分离架构的高效稳定运行。
本方案旨在通过实施数据库读写分离,提升系统性能,保障数据一致性,并提高系统的扩展性和高可用性。在实施过程中,需密切关注数据同步状态、中间件稳定性以及系统性能,确保方案的成功实施和长期稳定运行。通过持续优化,本方案将为业务的快速发展提供强有力的支撑。
4.数据同步
-采用异步复制机制,将主数据库的变更同步到从数据库,保持数据一致性。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据库读写分离解决方案----oracle 11G ADG实施方案1.项目背景介绍1.1目的通过DG实现主库与备库同步,主库作为业务应用库,备库作为查询库,应用根据不同需求配置对应数据库;1.2测试环境在2台RedHat5.4上使用ORACLE 的DataGuard组件实现容灾。
设备配置(VMWare虚拟机环境)清单如下:2.Oracle DataGuard 介绍备用数据库(standby database)是ORACLE 推出的一种高可用性(HIGH AVAILABLE)数据库方案,在主节点与备用节点间通过日志同步来保证数据的同步,备用节点作为主节点的备份,可以实现快速切换与灾难性恢复。
STANDBY DATABASE的类型:有两种类型的STANDBY:物理STANDBY和逻辑STANDBY两种类型的工作原理可通过如下图来说明:physical standby提供与主数据库完全一样的拷贝(块到块),数据库SCHEMA,包括索引都是一样的。
它是可以直接应用REDO实现同步的。
l ogical standby则不是这样,在logical standby中,逻辑信息是相同的,但物理组织和数据结构可以不同,它和主库保持同步的方法是将接收的REDO转换成SQL语句,然后在STANDBY上执行SQL语句。
逻辑STANDBY除灾难恢复外还有其它用途,比如用于用户进行查询和报表,但其数据库用户相关对象均需要有主键。
✧本次实施将选择物理STANDBY(physical standby)方式●对主库的保护模式可以有以下三种模式:–Maximum protection (最高保护)–Maximum availability (最高可用性)–Maximum performance (最高性能)✧基于项目应用的特征及需求,本项目比较适合采用Maximum availability (最高可用性)模式实施。
3.Dataguard 实施前提条件和注意事项:●灾备环境中的所有节点必须安装相同的操作系统,尽可能令详细补丁也保持相同。
●灾备环境中的所有节点必须安装完全相同版本的Oracle数据库软件,包括版本号和发布号,比如必须都是Oracle 11.2.0.1●主库必须处于归档(ARCHIVELOG)模式。
●灾备环境中所有节点的硬件和操作系统架构必须相同●主库可以是单实例,也可以是RAC。
●主节点和备用节点之间的硬件配置可以不同,比如CPU数量,内存数量,存储的配置等等。
●配置灾备环境的数据库用户必须具有SYSDBA权限。
4.Oracle软件安装1.要实施DataGurad的前,需要在主机RedHat-Primary和备机RedHat-Standby上进行ORACLE软件的基础安装。
2.备机基础软件的安装有两种方式供选择:1)源始安装介质安装采用ORACLE数据库安装介质进行软件安装。
2)“克隆”主站源数据库分别对主站源数据库进行tar压缩并FTP/rcp至备机上,然后展开压缩文件。
通常出于便捷的原因,备机的Oracle初始建立可采用上述的第二种方式。
测试环境中直接对虚拟机进行了拷贝,因此相当于采用了第二种方式。
现场环境下,如果主节点不是RAC环境,也可以采用第二种方式。
4.1环境配置RedHat5-Primary (primary , IP 192.168.204.131)以下简称主库4.2系统硬件环境检查4.2.1检查内存相关项检查服务器的内存,可以通过下列命令:[root@localhost ~]# grep MemTotal /proc/meminfo另外与内存相关的swap 交换分区的设置也很重要,通常有下列的规则:实际内存建议swap 交换空间大小-------------- -----------------------------1G-2G 1.5 倍于内存2G-16G 与内存相同超过16G 设置为16G 即可查看当前服务器swap 交换分区大小,可以通过下列命令:[root@localhost ~]# grep SwapTotal /proc/meminfo查看系统当前共享内存,可以通过df 命令,例如:[root@localhost ~]# df -h /dev/shm4.2.2查看系统架构本步用来查看处理器的架构类型,需要确认ORACLE 安装包与处理器架构相符,不然安装时必然报错。
查看当前系统的处理器架构可以通过下列命令:[root@localhost ~]# uname –mi6864.2.3检查磁盘空闲空间首先/tmp 至少要有1g 的空闲空间,查看/tmp 的磁盘空间,也可以通过df 命令查看,例如:[root@localhost ~]# df -h /tmp在执行安装之前,建议执行df -h 命令,查看当前是否有充裕的空闲空间来安装和创建数据库。
[root@jssnode1 ~]# df –h4.3安装操作系统软件包(32位RedHat5.4)binutils-2.17.50.0.6compat-libstdc++-33-3.2.3elfutils-libelf-0.125elfutils-libelf-devel-0.125elfutils-libelf-devel-static-0.125gcc-4.1.2gcc-c++-4.1.2glibc-2.5-24glibc-common-2.5glibc-devel-2.5ksh-20060214libaio-0.3.106libaio-devel-0.3.106libgcc-4.1.2libgomp-4.1.2libstdc++-4.1.2libstdc++-devel-4.1.2make-3.81sysstat-7.0.2查看软件包是否已经安装:[root@localhost ~]# rpm -aq binutils compat-libstdc++-33[root@localhost ~]# rpm -aq | grep elfutils-libelf[root@localhost ~]# rpm -aq | grep gcc[root@localhost ~]# rpm -aq | grep glibc[root@localhost ~]# rpm -aq | grep ksh[root@localhost ~]# rpm -aq | grep libaio[root@localhost ~]# rpm -aq | grep libgcc[root@localhost ~]# rpm -aq | grep libgomp[root@localhost ~]# rpm -aq | grep libstdc++[root@localhost ~]# rpm -aq | grep make-3[root@localhost ~]# rpm -aq | grep sysstat[root@localhost ~]# rpm -aq | grep unixODBC通过以上命令来查看是否有未安装的软件包,可将未安装的软件包放到~/rpm下,因有些包会相互依赖,最简单的方式是将rpm包下的软件包一起安装:[root@localhost ~]#cd rpm[root@localhost rpm]#pwd/root/rpm[root@localhost rpm]#lscompat-libstdc++-33-3.2.3-61.i386.rpmelfutils-libelf-devel-0.137-3.el5.i386.rpmelfutils-libelf-devel-static-0.137-3.el5.i386.rpmgcc-4.1.2-46.el5.i386.rpmgcc-c++-4.1.2-46.el5.i386.rpmglibc-devel-2.5-42.i386.rpmglibc-headers-2.5-42.i386.rpmkernel-headers-2.6.18-164.el5.i386.rpmlibaio-devel-0.3.106-3.2.i386.rpmlibgomp-4.4.0-6.el5.i386.rpmlibstdc++-devel-4.1.2-46.el5.i386.rpmsysstat-7.0.2-3.el5.i386.rpmunixODBC-2.2.11-7.1.i386.rpmunixODBC-devel-2.2.11-7.1.i386.rpm[root@localhost rpm]#rpm –Uvh *64位需安装的操作系统软件包binutils-2.17.50.0.6compat-libstdc++-33-3.2.3compat-libstdc++-33-3.2.3 (32 bit)elfutils-libelf-0.125elfutils-libelf-devel-0.125gcc-4.1.2gcc-c++-4.1.2glibc-2.5-24glibc-2.5-24 (32 bit)glibc-common-2.5glibc-devel-2.5glibc-devel-2.5 (32 bit)glibc-headers-2.5ksh-20060214libaio-0.3.106libaio-0.3.106 (32 bit)libaio-devel-0.3.106libaio-devel-0.3.106 (32 bit)libgcc-4.1.2libgcc-4.1.2 (32 bit)libstdc++-4.1.2libstdc++-4.1.2 (32 bit)libstdc++-devel 4.1.2make-3.81sysstat-7.0.2unixODBC-2.2.11unixODBC-2.2.11 (32 bit)unixODBC-devel-2.2.11unixODBC-devel-2.2.11 (32 bit)4.4修改内核参数下列将要进行配置的核心参数均拥有默认值(或者说最小值),需要对其进行配置的原因,是为了获得更好了性能,因此对于产品服务器来说,务必根据实际情况进行配置,不适当的值反倒可能适得其反。
使用vi 命令编辑/etc/sysctl.conf 文件,例如:[root@localhost ~]# vi /etc/sysctl.conf将下列内容加入该文件:fs.aio-max-nr = 1048576fs.file-max = 6815744kernel.shmall = 2097152kernel.shmmax = 536870912kernel.shmmni = 4096kernel.sem = 250 32000 100 128net.ipv4.ip_local_port_range = 9000 65500net.core.rmem_default = 262144net.core.rmem_max = 4194304net.core.wmem_default = 262144net.core.wmem_max = 1048586注意,某些参数可能已经存在于该文件,注意修改参数值即可。