PL/Proxy和PostgreSQL集群的结构关系可以用下图清楚地表示
下面是详细的安装方法:
以下操作是在三台不同机器上执行的情况,其中plproxy节点的机器名是P1,数据库节点的机器名分别是D1和D2。机器硬件配置如下,同时需要Liux-4.2、postgresql-8.3.0和plproxy-2.0.4,pgboucer的安装过程略去。plproxy节点:hostame:P1ietaddr:10.0.0.1OS:Liux2.6.9-42.ELsmpCPU:Itel(R)Xeo(R)CPUL5320@1.86GHzMemTotal:514440kBode1节点:hostame:D1ietaddr:10.0.0.2OS:Liux2.6.9-42.ELsmpCPU:Itel(R)Xeo(R)CPUL5320@1.86GHzMemTotal:254772kBode2节点:hostame:D2ietaddr:10.0.0.3OS:Liux2.6.9-42.ELsmpCPU:Itel(R)Xeo(R)CPUL5320@1.86GHzMemTotal:254772kB1.在P1,D1,D2上安装postgresql-8.3.0,并创建URTCluster数据库##Compileadistallguzippostgresql-8.3.0.tar.gztarxfpostgresql-8.3.0.tarcdpostgresql-8.3.0./cofigure–prefix=/home/y/pgsql–with-perlgmakegmakechecksudogmakeistall##AddUixUsersudoadduserpostgressudomkdir/home/y/pgsql/datasudochowpostgres/home/y/pgsql/data##IitDBadStartservicesudo-upostgres/home/y/pgsql/bi/iitdb-D/home/y/pgsql/datasudo-upostgres/home/y/pgsql/bi/postgres-D/home/y/pgsql/data>logfile2>&1&##CreateDBadUseLocalCoectiosudo-upostgres/home/y/pgsql/bi/createdbURTCluster##检查数据库是否已经创建sudo-upostgres/home/y/pgsql/bi/psql-dURTCluster#D1,D2必须允许P1访问#编辑postgresql.cof,打开tcp连接端口sudovim/home/y/pgsql/data/postgresql.cofliste_addresses=‘*’port=5432#添加postgres用户的认证sudovim/home/y/pgsql/data/pg_hba.cofhostURTClusterpostgres10.0.0.0/16trust#重起服务器sudo-upostgres/home/y/pgsql/bi/pg_ctl-D/home/y/pgsql/datastopsudo-upostgres/home/y/pgsql/bi/postgres-D/home/y/pgsql/data>logfile2>&1&sudo-upostgres/home/y/pgsql/bi/pg_ctl-D/home/y/pgsql/datareload2.在P1上安装plproxy-2.0.4#检查$PATH变量里是否有/home/y/pgsql/bi目录,如果没有,修改你的.bash_profile文件,添加/home/y/pgsql/bi到path里。echo$PATHguzipplproxy-2.0.4.tar.gztarxfplproxy-2.0.4.tarcdplproxy-2.0.4gmakesudogmakeistall#创建plproxysudo-upostgres/home/y/pgsql/bi/psql-f/home/y/pgsql/share/cotrib/plproxy.sqlURTCluster3.在P1,D1,D2上安装plpgsqlsudo-upostgres/home/y/pgsql/bi/createlagplpgsqlURTCluster4.在P1上创建schemasudo-upostgres/home/y/pgsql/bi/psql-dURTClusterURTCluster=#createschemaplproxy;5.在P1上初始化设置#plproxy的配置是通过三个函数(过程)实现的,这三个函数的标准模版如下:#这个函数是让plproxy可以找到对应的集群CREATEORREPLACEFUNCTIONplproxy.get_cluster_partitios(cluster_ametext)RETURNSSETOFtextAS$$BEGINIFcluster_ame=’URTCluster’THENRETURNNEXT‘dbame=URTClusterhost=10.0.0.2′;RETURNNEXT‘dbame=URTClusterhost=10.0.0.3′;RETURN;ENDIF;RAISEEXCEPTION‘Ukowcluster’;END;$$LANGUAGEplpgsql;#这个函数是plproxy用于判断是否给前端返回已经cache过的结果用的CREATEORREPLACEFUNCTIONplproxy.get_cluster_versio(cluster_ametext)RETURNSit4AS$$BEGINIFcluster_ame=‘URTCluster’THENRETURN1;ENDIF;RAISEEXCEPTION‘Ukowcluster’;END;$$LANGUAGEplpgsql;#这个函数是获取不同的集群的配置createorreplacefuctioplproxy.get_cluster_cofig(cluster_ametext,outkeytext,outvaltext)returssetofrecordas$$begikey:=’statemet_timeout’;val:=60;returext;retur;ed;$$laguageplpgsql;#把这三个函数放在一个URTClusterIit.sql文件里,并执行sudo-upostgres/home/y/pgsql/bi/psql-fURTClusterIit.sql-dURTCluster-h10.0.0.16.在D1,D2节点上设置#给每个数据库节点都创建一张表usersCREATETABLEusers(userametext,emailtext);#给每个数据库节点都创建一个插入函数CREATEORREPLACEFUNCTIONisert_user(i_userametext,i_emailaddresstext)RETURNSitegerAS$$INSERTINTOusers(userame,email)VALUES($1,$2);SELECT1;$$LANGUAGESQL;#把函数保存在URTClusterNodesIit_1.sql文件里,并执行sudo-upostgres/home/y/pgsql/bi/psql-fURTClusterNodesIit_1.sql-h10.0.0.2-dURTClustersudo-upostgres/home/y/pgsql/bi/psql-fURTClusterNodesIit_1.sql-h10.0.0.3-dURTCluster7.在P1节点上设置#在plproxy节点上创建一个同名的插入函数,用于进行集群检索CREATEORREPLACEFUNCTIONisert_user(i_userametext,i_emailaddresstext)RETURNSitegerAS$$CLUSTER‘URTCluster’;RUNONhashtext(i_userame);$$LANGUAGEplproxy;#在plproxy节点上创建一个查询函数,用于进行集群检索CREATEORREPLACEFUNCTIONget_user_email(i_userametext)RETURNStextAS$$CLUSTER‘URTCluster’;RUNONhashtext(i_userame);SELECTemailFROMusersWHEREuserame=i_userame;$$LANGUAGEplproxy;#把函数保存在URTClusterProxyExec.sql文件里,并执行sudo-upostgres/home/y/pgsql/bi/psql-fURTClusterProxyExec_1.sql-h10.0.0.1-dURTCluster8.在P1上测试结果sudo-upostgres/home/y/pgsql/bi/psql-dURTClusterSELECTisert_user(’Sve’,’sve@somewhere.com’);#被保存到D2,可以用selecthashtext(’Sve’)&1验证,被hash到partitio1SELECTisert_user(’Marko’,‘marko@somewhere.com’);#被保存到D2,可以用selecthashtext(’Marko’)&1验证,被hash到partitio1SELECTisert_user(’Steve’,’steve@somewhere.cm’);#被保存到D1,可以用selecthashtext(’Steve’)&1验证,,被hash到partitio0SELECTget_user_email(’Sve’);SELECTget_user_email(’Marko’);SELECTget_user_email(’Steve’);
评论