prestogres 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (393) hide show
  1. data/.gitignore +4 -0
  2. data/Gemfile +2 -0
  3. data/Gemfile.lock +20 -0
  4. data/LICENSE +202 -0
  5. data/NOTICE +22 -0
  6. data/README.md +217 -0
  7. data/Rakefile +13 -0
  8. data/VERSION +1 -0
  9. data/bin/prestogres +254 -0
  10. data/config/pcp.conf.sample +28 -0
  11. data/config/pgpool.conf +678 -0
  12. data/config/pool_hba.conf +84 -0
  13. data/config/pool_passwd +0 -0
  14. data/config/postgresql.conf +2 -0
  15. data/ext/.gitignore +6 -0
  16. data/ext/depend +26 -0
  17. data/ext/extconf.rb +4 -0
  18. data/ext/prestogres_config.c +12 -0
  19. data/pgpool2/.gitignore +36 -0
  20. data/pgpool2/AUTHORS +4 -0
  21. data/pgpool2/COPYING +12 -0
  22. data/pgpool2/ChangeLog +1 -0
  23. data/pgpool2/INSTALL +1 -0
  24. data/pgpool2/Makefile.am +159 -0
  25. data/pgpool2/Makefile.in +1187 -0
  26. data/pgpool2/NEWS +4960 -0
  27. data/pgpool2/README +1 -0
  28. data/pgpool2/README.euc_jp +1 -0
  29. data/pgpool2/README.online-recovery +62 -0
  30. data/pgpool2/TODO +103 -0
  31. data/pgpool2/ac_func_accept_argtypes.m4 +85 -0
  32. data/pgpool2/aclocal.m4 +1088 -0
  33. data/pgpool2/c-compiler.m4 +134 -0
  34. data/pgpool2/c-library.m4 +325 -0
  35. data/pgpool2/child.c +2097 -0
  36. data/pgpool2/config.guess +1532 -0
  37. data/pgpool2/config.h.in +332 -0
  38. data/pgpool2/config.sub +1640 -0
  39. data/pgpool2/configure +15752 -0
  40. data/pgpool2/configure.in +392 -0
  41. data/pgpool2/depcomp +522 -0
  42. data/pgpool2/doc/basebackup.sh +17 -0
  43. data/pgpool2/doc/pgpool-de.html +4220 -0
  44. data/pgpool2/doc/pgpool-en.html +5738 -0
  45. data/pgpool2/doc/pgpool-fr.html +4118 -0
  46. data/pgpool2/doc/pgpool-ja.css +198 -0
  47. data/pgpool2/doc/pgpool-ja.html +11279 -0
  48. data/pgpool2/doc/pgpool-zh_cn.html +4445 -0
  49. data/pgpool2/doc/pgpool.css +280 -0
  50. data/pgpool2/doc/pgpool_remote_start +13 -0
  51. data/pgpool2/doc/recovery.conf.sample +117 -0
  52. data/pgpool2/doc/tutorial-en.html +707 -0
  53. data/pgpool2/doc/tutorial-ja.html +422 -0
  54. data/pgpool2/doc/tutorial-memqcache-en.html +325 -0
  55. data/pgpool2/doc/tutorial-memqcache-ja.html +370 -0
  56. data/pgpool2/doc/tutorial-memqcache-zh_cn.html +322 -0
  57. data/pgpool2/doc/tutorial-watchdog-en.html +306 -0
  58. data/pgpool2/doc/tutorial-watchdog-ja.html +343 -0
  59. data/pgpool2/doc/tutorial-watchdog-zh_cn.html +301 -0
  60. data/pgpool2/doc/tutorial-zh_cn.html +537 -0
  61. data/pgpool2/doc/watchdog.png +0 -0
  62. data/pgpool2/doc/wd-en.html +236 -0
  63. data/pgpool2/doc/wd-en.jpg +0 -0
  64. data/pgpool2/doc/wd-ja.html +219 -0
  65. data/pgpool2/doc/wd-ja.jpg +0 -0
  66. data/pgpool2/doc/wd-zh_cn.html +201 -0
  67. data/pgpool2/doc/where_to_send_queries.odg +0 -0
  68. data/pgpool2/doc/where_to_send_queries.pdf +0 -0
  69. data/pgpool2/general.m4 +166 -0
  70. data/pgpool2/getopt_long.c +200 -0
  71. data/pgpool2/getopt_long.h +44 -0
  72. data/pgpool2/install-sh +251 -0
  73. data/pgpool2/ltmain.sh +8406 -0
  74. data/pgpool2/m4/libtool.m4 +7360 -0
  75. data/pgpool2/m4/ltoptions.m4 +368 -0
  76. data/pgpool2/m4/ltsugar.m4 +123 -0
  77. data/pgpool2/m4/ltversion.m4 +23 -0
  78. data/pgpool2/m4/lt~obsolete.m4 +92 -0
  79. data/pgpool2/main.c +2971 -0
  80. data/pgpool2/md5.c +444 -0
  81. data/pgpool2/md5.h +28 -0
  82. data/pgpool2/missing +360 -0
  83. data/pgpool2/mkinstalldirs +40 -0
  84. data/pgpool2/parser/Makefile.am +50 -0
  85. data/pgpool2/parser/Makefile.in +559 -0
  86. data/pgpool2/parser/copyfuncs.c +3310 -0
  87. data/pgpool2/parser/gram.c +39100 -0
  88. data/pgpool2/parser/gram.h +940 -0
  89. data/pgpool2/parser/gram.y +13408 -0
  90. data/pgpool2/parser/gramparse.h +74 -0
  91. data/pgpool2/parser/keywords.c +32 -0
  92. data/pgpool2/parser/keywords.h +39 -0
  93. data/pgpool2/parser/kwlist.h +425 -0
  94. data/pgpool2/parser/kwlookup.c +88 -0
  95. data/pgpool2/parser/list.c +1156 -0
  96. data/pgpool2/parser/makefuncs.c +518 -0
  97. data/pgpool2/parser/makefuncs.h +83 -0
  98. data/pgpool2/parser/memnodes.h +79 -0
  99. data/pgpool2/parser/nodes.c +29 -0
  100. data/pgpool2/parser/nodes.h +609 -0
  101. data/pgpool2/parser/outfuncs.c +5790 -0
  102. data/pgpool2/parser/parsenodes.h +2615 -0
  103. data/pgpool2/parser/parser.c +262 -0
  104. data/pgpool2/parser/parser.h +46 -0
  105. data/pgpool2/parser/pg_class.h +158 -0
  106. data/pgpool2/parser/pg_config_manual.h +273 -0
  107. data/pgpool2/parser/pg_list.h +352 -0
  108. data/pgpool2/parser/pg_trigger.h +147 -0
  109. data/pgpool2/parser/pg_wchar.h +492 -0
  110. data/pgpool2/parser/pool_memory.c +342 -0
  111. data/pgpool2/parser/pool_memory.h +77 -0
  112. data/pgpool2/parser/pool_parser.h +222 -0
  113. data/pgpool2/parser/pool_string.c +121 -0
  114. data/pgpool2/parser/pool_string.h +37 -0
  115. data/pgpool2/parser/primnodes.h +1280 -0
  116. data/pgpool2/parser/scan.c +4094 -0
  117. data/pgpool2/parser/scan.l +1451 -0
  118. data/pgpool2/parser/scanner.h +120 -0
  119. data/pgpool2/parser/scansup.c +221 -0
  120. data/pgpool2/parser/scansup.h +28 -0
  121. data/pgpool2/parser/snprintf.c +1102 -0
  122. data/pgpool2/parser/stringinfo.c +294 -0
  123. data/pgpool2/parser/stringinfo.h +178 -0
  124. data/pgpool2/parser/value.c +78 -0
  125. data/pgpool2/parser/value.h +62 -0
  126. data/pgpool2/parser/wchar.c +2048 -0
  127. data/pgpool2/pcp.conf.sample +28 -0
  128. data/pgpool2/pcp/Makefile.am +40 -0
  129. data/pgpool2/pcp/Makefile.in +771 -0
  130. data/pgpool2/pcp/libpcp_ext.h +250 -0
  131. data/pgpool2/pcp/md5.c +444 -0
  132. data/pgpool2/pcp/md5.h +28 -0
  133. data/pgpool2/pcp/pcp.c +1652 -0
  134. data/pgpool2/pcp/pcp.h +61 -0
  135. data/pgpool2/pcp/pcp_attach_node.c +172 -0
  136. data/pgpool2/pcp/pcp_detach_node.c +185 -0
  137. data/pgpool2/pcp/pcp_error.c +87 -0
  138. data/pgpool2/pcp/pcp_node_count.c +160 -0
  139. data/pgpool2/pcp/pcp_node_info.c +198 -0
  140. data/pgpool2/pcp/pcp_pool_status.c +166 -0
  141. data/pgpool2/pcp/pcp_proc_count.c +166 -0
  142. data/pgpool2/pcp/pcp_proc_info.c +261 -0
  143. data/pgpool2/pcp/pcp_promote_node.c +185 -0
  144. data/pgpool2/pcp/pcp_recovery_node.c +172 -0
  145. data/pgpool2/pcp/pcp_stop_pgpool.c +179 -0
  146. data/pgpool2/pcp/pcp_stream.c +385 -0
  147. data/pgpool2/pcp/pcp_stream.h +52 -0
  148. data/pgpool2/pcp/pcp_systemdb_info.c +194 -0
  149. data/pgpool2/pcp/pcp_watchdog_info.c +211 -0
  150. data/pgpool2/pcp_child.c +1493 -0
  151. data/pgpool2/pg_md5.c +305 -0
  152. data/pgpool2/pgpool.8.in +121 -0
  153. data/pgpool2/pgpool.conf +553 -0
  154. data/pgpool2/pgpool.conf.sample +666 -0
  155. data/pgpool2/pgpool.conf.sample-master-slave +665 -0
  156. data/pgpool2/pgpool.conf.sample-replication +664 -0
  157. data/pgpool2/pgpool.conf.sample-stream +664 -0
  158. data/pgpool2/pgpool.spec +264 -0
  159. data/pgpool2/pgpool_adm/TODO +7 -0
  160. data/pgpool2/pgpool_adm/pgpool_adm--1.0.sql +85 -0
  161. data/pgpool2/pgpool_adm/pgpool_adm.c +558 -0
  162. data/pgpool2/pgpool_adm/pgpool_adm.control +5 -0
  163. data/pgpool2/pgpool_adm/pgpool_adm.h +46 -0
  164. data/pgpool2/pgpool_adm/pgpool_adm.sql.in +85 -0
  165. data/pgpool2/pool.h +655 -0
  166. data/pgpool2/pool_auth.c +1390 -0
  167. data/pgpool2/pool_config.c +5007 -0
  168. data/pgpool2/pool_config.h +284 -0
  169. data/pgpool2/pool_config.l +3281 -0
  170. data/pgpool2/pool_config_md5.c +29 -0
  171. data/pgpool2/pool_connection_pool.c +812 -0
  172. data/pgpool2/pool_error.c +242 -0
  173. data/pgpool2/pool_globals.c +27 -0
  174. data/pgpool2/pool_hba.c +1723 -0
  175. data/pgpool2/pool_hba.conf.sample +67 -0
  176. data/pgpool2/pool_ip.c +567 -0
  177. data/pgpool2/pool_ip.h +65 -0
  178. data/pgpool2/pool_ipc.h +38 -0
  179. data/pgpool2/pool_lobj.c +242 -0
  180. data/pgpool2/pool_lobj.h +32 -0
  181. data/pgpool2/pool_memqcache.c +3818 -0
  182. data/pgpool2/pool_memqcache.h +268 -0
  183. data/pgpool2/pool_params.c +163 -0
  184. data/pgpool2/pool_passwd.c +249 -0
  185. data/pgpool2/pool_passwd.h +41 -0
  186. data/pgpool2/pool_path.c +193 -0
  187. data/pgpool2/pool_path.h +81 -0
  188. data/pgpool2/pool_process_context.c +247 -0
  189. data/pgpool2/pool_process_context.h +62 -0
  190. data/pgpool2/pool_process_query.c +5001 -0
  191. data/pgpool2/pool_process_reporting.c +1671 -0
  192. data/pgpool2/pool_process_reporting.h +44 -0
  193. data/pgpool2/pool_proto2.c +671 -0
  194. data/pgpool2/pool_proto_modules.c +3524 -0
  195. data/pgpool2/pool_proto_modules.h +185 -0
  196. data/pgpool2/pool_query_cache.c +1020 -0
  197. data/pgpool2/pool_query_context.c +1871 -0
  198. data/pgpool2/pool_query_context.h +105 -0
  199. data/pgpool2/pool_relcache.c +284 -0
  200. data/pgpool2/pool_relcache.h +78 -0
  201. data/pgpool2/pool_rewrite_outfuncs.c +9060 -0
  202. data/pgpool2/pool_rewrite_query.c +715 -0
  203. data/pgpool2/pool_rewrite_query.h +192 -0
  204. data/pgpool2/pool_select_walker.c +1150 -0
  205. data/pgpool2/pool_select_walker.h +68 -0
  206. data/pgpool2/pool_sema.c +161 -0
  207. data/pgpool2/pool_session_context.c +952 -0
  208. data/pgpool2/pool_session_context.h +203 -0
  209. data/pgpool2/pool_shmem.c +185 -0
  210. data/pgpool2/pool_signal.c +158 -0
  211. data/pgpool2/pool_signal.h +61 -0
  212. data/pgpool2/pool_ssl.c +339 -0
  213. data/pgpool2/pool_stream.c +962 -0
  214. data/pgpool2/pool_stream.h +61 -0
  215. data/pgpool2/pool_system.c +659 -0
  216. data/pgpool2/pool_timestamp.c +1215 -0
  217. data/pgpool2/pool_timestamp.h +38 -0
  218. data/pgpool2/pool_type.h +171 -0
  219. data/pgpool2/pool_worker_child.c +384 -0
  220. data/pgpool2/ps_status.c +404 -0
  221. data/pgpool2/recovery.c +435 -0
  222. data/pgpool2/redhat/pgpool.conf.sample.patch +52 -0
  223. data/pgpool2/redhat/pgpool.init +201 -0
  224. data/pgpool2/redhat/pgpool.sysconfig +7 -0
  225. data/pgpool2/redhat/rpm_installer/basebackup-replication.sh +53 -0
  226. data/pgpool2/redhat/rpm_installer/basebackup-stream.sh +55 -0
  227. data/pgpool2/redhat/rpm_installer/config_for_script +17 -0
  228. data/pgpool2/redhat/rpm_installer/failover.sh +64 -0
  229. data/pgpool2/redhat/rpm_installer/getsources.sh +141 -0
  230. data/pgpool2/redhat/rpm_installer/install.sh +1363 -0
  231. data/pgpool2/redhat/rpm_installer/pgpool_recovery_pitr +47 -0
  232. data/pgpool2/redhat/rpm_installer/pgpool_remote_start +15 -0
  233. data/pgpool2/redhat/rpm_installer/recovery.conf +4 -0
  234. data/pgpool2/redhat/rpm_installer/uninstall.sh +57 -0
  235. data/pgpool2/sample/dist_def_pgbench.sql +73 -0
  236. data/pgpool2/sample/pgpool.pam +3 -0
  237. data/pgpool2/sample/pgpool_recovery +20 -0
  238. data/pgpool2/sample/pgpool_recovery_pitr +19 -0
  239. data/pgpool2/sample/pgpool_remote_start +13 -0
  240. data/pgpool2/sample/replicate_def_pgbench.sql +18 -0
  241. data/pgpool2/sql/insert_lock.sql +15 -0
  242. data/pgpool2/sql/pgpool-recovery/pgpool-recovery.c +280 -0
  243. data/pgpool2/sql/pgpool-recovery/pgpool-recovery.sql.in +19 -0
  244. data/pgpool2/sql/pgpool-recovery/pgpool_recovery--1.0.sql +24 -0
  245. data/pgpool2/sql/pgpool-recovery/pgpool_recovery.control +5 -0
  246. data/pgpool2/sql/pgpool-recovery/uninstall_pgpool-recovery.sql +3 -0
  247. data/pgpool2/sql/pgpool-regclass/pgpool-regclass.c +206 -0
  248. data/pgpool2/sql/pgpool-regclass/pgpool-regclass.sql.in +4 -0
  249. data/pgpool2/sql/pgpool-regclass/pgpool_regclass--1.0.sql +7 -0
  250. data/pgpool2/sql/pgpool-regclass/pgpool_regclass.control +5 -0
  251. data/pgpool2/sql/pgpool-regclass/uninstall_pgpool-regclass.sql +1 -0
  252. data/pgpool2/sql/system_db.sql +38 -0
  253. data/pgpool2/strlcpy.c +85 -0
  254. data/pgpool2/test/C/test_extended.c +98 -0
  255. data/pgpool2/test/jdbc/.cvsignore +2 -0
  256. data/pgpool2/test/jdbc/AutoCommitTest.java +45 -0
  257. data/pgpool2/test/jdbc/BatchTest.java +55 -0
  258. data/pgpool2/test/jdbc/ColumnTest.java +60 -0
  259. data/pgpool2/test/jdbc/CreateTempTableTest.java +48 -0
  260. data/pgpool2/test/jdbc/InsertTest.java +34 -0
  261. data/pgpool2/test/jdbc/LockTest.java +36 -0
  262. data/pgpool2/test/jdbc/PgpoolTest.java +75 -0
  263. data/pgpool2/test/jdbc/README.euc_jp +73 -0
  264. data/pgpool2/test/jdbc/RunTest.java +83 -0
  265. data/pgpool2/test/jdbc/SelectTest.java +37 -0
  266. data/pgpool2/test/jdbc/UpdateTest.java +32 -0
  267. data/pgpool2/test/jdbc/expected/CreateTempTable +1 -0
  268. data/pgpool2/test/jdbc/expected/autocommit +10 -0
  269. data/pgpool2/test/jdbc/expected/batch +1 -0
  270. data/pgpool2/test/jdbc/expected/column +100 -0
  271. data/pgpool2/test/jdbc/expected/insert +1 -0
  272. data/pgpool2/test/jdbc/expected/lock +100 -0
  273. data/pgpool2/test/jdbc/expected/select +2 -0
  274. data/pgpool2/test/jdbc/expected/update +1 -0
  275. data/pgpool2/test/jdbc/pgpool.properties +7 -0
  276. data/pgpool2/test/jdbc/prepare.sql +54 -0
  277. data/pgpool2/test/jdbc/run.sh +6 -0
  278. data/pgpool2/test/parser/.cvsignore +6 -0
  279. data/pgpool2/test/parser/README +32 -0
  280. data/pgpool2/test/parser/expected/copy.out +17 -0
  281. data/pgpool2/test/parser/expected/create.out +64 -0
  282. data/pgpool2/test/parser/expected/cursor.out +37 -0
  283. data/pgpool2/test/parser/expected/delete.out +10 -0
  284. data/pgpool2/test/parser/expected/drop.out +12 -0
  285. data/pgpool2/test/parser/expected/insert.out +13 -0
  286. data/pgpool2/test/parser/expected/misc.out +28 -0
  287. data/pgpool2/test/parser/expected/prepare.out +4 -0
  288. data/pgpool2/test/parser/expected/privileges.out +31 -0
  289. data/pgpool2/test/parser/expected/scanner.out +30 -0
  290. data/pgpool2/test/parser/expected/select.out +89 -0
  291. data/pgpool2/test/parser/expected/transaction.out +38 -0
  292. data/pgpool2/test/parser/expected/update.out +11 -0
  293. data/pgpool2/test/parser/expected/v84.out +37 -0
  294. data/pgpool2/test/parser/expected/v90.out +25 -0
  295. data/pgpool2/test/parser/expected/var.out +22 -0
  296. data/pgpool2/test/parser/input/alter.sql +2 -0
  297. data/pgpool2/test/parser/input/copy.sql +17 -0
  298. data/pgpool2/test/parser/input/create.sql +64 -0
  299. data/pgpool2/test/parser/input/cursor.sql +37 -0
  300. data/pgpool2/test/parser/input/delete.sql +10 -0
  301. data/pgpool2/test/parser/input/drop.sql +12 -0
  302. data/pgpool2/test/parser/input/insert.sql +13 -0
  303. data/pgpool2/test/parser/input/misc.sql +28 -0
  304. data/pgpool2/test/parser/input/prepare.sql +4 -0
  305. data/pgpool2/test/parser/input/privileges.sql +31 -0
  306. data/pgpool2/test/parser/input/scanner.sql +34 -0
  307. data/pgpool2/test/parser/input/select.sql +89 -0
  308. data/pgpool2/test/parser/input/transaction.sql +38 -0
  309. data/pgpool2/test/parser/input/update.sql +11 -0
  310. data/pgpool2/test/parser/input/v84.sql +37 -0
  311. data/pgpool2/test/parser/input/v90.sql +38 -0
  312. data/pgpool2/test/parser/input/var.sql +22 -0
  313. data/pgpool2/test/parser/main.c +96 -0
  314. data/pgpool2/test/parser/parse_schedule +16 -0
  315. data/pgpool2/test/parser/pool.h +13 -0
  316. data/pgpool2/test/parser/run-test +62 -0
  317. data/pgpool2/test/pdo-test/README.euc_jp +58 -0
  318. data/pgpool2/test/pdo-test/SQLlist/test1.sql +3 -0
  319. data/pgpool2/test/pdo-test/SQLlist/test2.sql +3 -0
  320. data/pgpool2/test/pdo-test/collections.inc +11 -0
  321. data/pgpool2/test/pdo-test/def.inc +7 -0
  322. data/pgpool2/test/pdo-test/log.txt +0 -0
  323. data/pgpool2/test/pdo-test/mod/database.inc +36 -0
  324. data/pgpool2/test/pdo-test/mod/def.inc +0 -0
  325. data/pgpool2/test/pdo-test/mod/errorhandler.inc +27 -0
  326. data/pgpool2/test/pdo-test/pdotest.php +11 -0
  327. data/pgpool2/test/pdo-test/regsql.inc +56 -0
  328. data/pgpool2/test/pgpool_setup +898 -0
  329. data/pgpool2/test/regression/README +39 -0
  330. data/pgpool2/test/regression/clean.sh +21 -0
  331. data/pgpool2/test/regression/libs.sh +16 -0
  332. data/pgpool2/test/regression/regress.sh +166 -0
  333. data/pgpool2/test/regression/tests/001.load_balance/test.sh +128 -0
  334. data/pgpool2/test/regression/tests/002.native_replication/PgTester.java +47 -0
  335. data/pgpool2/test/regression/tests/002.native_replication/create.sql +6 -0
  336. data/pgpool2/test/regression/tests/002.native_replication/test.sh +71 -0
  337. data/pgpool2/test/regression/tests/003.failover/expected.r +6 -0
  338. data/pgpool2/test/regression/tests/003.failover/expected.s +6 -0
  339. data/pgpool2/test/regression/tests/003.failover/test.sh +45 -0
  340. data/pgpool2/test/regression/tests/004.watchdog/master.conf +12 -0
  341. data/pgpool2/test/regression/tests/004.watchdog/standby.conf +19 -0
  342. data/pgpool2/test/regression/tests/004.watchdog/test.sh +52 -0
  343. data/pgpool2/test/regression/tests/050.bug58/test.sh +50 -0
  344. data/pgpool2/test/regression/tests/051.bug60/bug.sql +12 -0
  345. data/pgpool2/test/regression/tests/051.bug60/database-clean.sql +6 -0
  346. data/pgpool2/test/regression/tests/051.bug60/database-setup.sql +28 -0
  347. data/pgpool2/test/regression/tests/051.bug60/test.sh +79 -0
  348. data/pgpool2/test/regression/tests/052.do_query/test.sh +44 -0
  349. data/pgpool2/test/regression/tests/053.insert_lock_hangs/test.sh +81 -0
  350. data/pgpool2/test/regression/tests/054.postgres_fdw/test.sh +67 -0
  351. data/pgpool2/test/regression/tests/055.backend_all_down/test.sh +52 -0
  352. data/pgpool2/test/regression/tests/056.bug63/jdbctest2.java +66 -0
  353. data/pgpool2/test/regression/tests/056.bug63/test.sh +47 -0
  354. data/pgpool2/test/regression/tests/057.bug61/test.sh +40 -0
  355. data/pgpool2/test/regression/tests/058.bug68/jdbctest3.java +45 -0
  356. data/pgpool2/test/regression/tests/058.bug68/test.sh +47 -0
  357. data/pgpool2/test/timestamp/expected/insert.out +16 -0
  358. data/pgpool2/test/timestamp/expected/misc.out +3 -0
  359. data/pgpool2/test/timestamp/expected/update.out +6 -0
  360. data/pgpool2/test/timestamp/input/insert.sql +16 -0
  361. data/pgpool2/test/timestamp/input/misc.sql +3 -0
  362. data/pgpool2/test/timestamp/input/update.sql +6 -0
  363. data/pgpool2/test/timestamp/main.c +129 -0
  364. data/pgpool2/test/timestamp/parse_schedule +3 -0
  365. data/pgpool2/test/timestamp/run-test +69 -0
  366. data/pgpool2/version.h +1 -0
  367. data/pgpool2/watchdog/Makefile.am +17 -0
  368. data/pgpool2/watchdog/Makefile.in +505 -0
  369. data/pgpool2/watchdog/test/stab.c +266 -0
  370. data/pgpool2/watchdog/test/test.c +85 -0
  371. data/pgpool2/watchdog/test/wd_child_t.c +87 -0
  372. data/pgpool2/watchdog/test/wd_lifecheck_t.c +87 -0
  373. data/pgpool2/watchdog/test/wd_packet_t.c +87 -0
  374. data/pgpool2/watchdog/test/wd_ping_t.c +20 -0
  375. data/pgpool2/watchdog/watchdog.c +408 -0
  376. data/pgpool2/watchdog/watchdog.h +209 -0
  377. data/pgpool2/watchdog/wd_child.c +444 -0
  378. data/pgpool2/watchdog/wd_ext.h +123 -0
  379. data/pgpool2/watchdog/wd_heartbeat.c +577 -0
  380. data/pgpool2/watchdog/wd_if.c +216 -0
  381. data/pgpool2/watchdog/wd_init.c +126 -0
  382. data/pgpool2/watchdog/wd_interlock.c +347 -0
  383. data/pgpool2/watchdog/wd_lifecheck.c +512 -0
  384. data/pgpool2/watchdog/wd_list.c +429 -0
  385. data/pgpool2/watchdog/wd_packet.c +1159 -0
  386. data/pgpool2/watchdog/wd_ping.c +330 -0
  387. data/pgpool2/ylwrap +223 -0
  388. data/pgsql/presto_client.py +346 -0
  389. data/pgsql/prestogres.py +156 -0
  390. data/pgsql/setup_functions.sql +21 -0
  391. data/pgsql/setup_language.sql +3 -0
  392. data/prestogres.gemspec +23 -0
  393. metadata +496 -0
@@ -0,0 +1,141 @@
1
+ #!/bin/sh
2
+
3
+ username=`whoami`
4
+ rpm_dir=$HOME/rpm
5
+ work_dir=`pwd`/work
6
+
7
+ # ---------------------------------------------------------------------
8
+ # configuration
9
+ # ---------------------------------------------------------------------
10
+
11
+ git_dir=$HOME/git
12
+
13
+ ## pgpool-II
14
+ pgpool_src_dir=${git_dir}/pgpool2
15
+ pgpool_tarball_dir=${pgpool_src_dir}
16
+ pgpool_version=3.3.2
17
+
18
+ ## pgpoolAdmin
19
+ admin_src_dir=${git_dir}/pgpooladmin
20
+ admin_tarball_dir=${admin_src_dir}/tools
21
+ admin_version=3.3.0
22
+
23
+ ## postgresql92
24
+ pg_home=/usr/pgsql-9.2
25
+ pg_version=92
26
+ export PATH=${pg_home}/bin:$PATH
27
+
28
+ echo "* Setup starts."
29
+ echo
30
+
31
+ # ---------------------------------------------------------------------
32
+ # setup for rpmbuild
33
+ # ---------------------------------------------------------------------
34
+
35
+ echo -n " Setup for rpmbuild ... "
36
+
37
+ mkdir -p ${rpm_dir}/{BUILD,RPMS,SOURCES,SPECS,SRPMS}
38
+
39
+ cat > ~/.rpmmacros <<EOT
40
+ %_topdir /home/${username}/rpm
41
+ %_mandir %_prefix/man
42
+ %debug_package %{nil}
43
+ %dist .pgdg
44
+ %pgdg 1
45
+ EOT
46
+
47
+ echo "done."
48
+
49
+ # ---------------------------------------------------------------------
50
+ # get sources for pgpool to rpmbuild
51
+ # ---------------------------------------------------------------------
52
+
53
+ rm -rf ${work_dir}
54
+ mkdir ${work_dir}
55
+ cd ${work_dir}
56
+
57
+ echo -n " Get sources to rpmbuild ... "
58
+
59
+ # each spec files
60
+ cp -f ${pgpool_src_dir}/pgpool.spec ${work_dir}
61
+ cp -f ${admin_src_dir}/pgpoolAdmin.spec ${work_dir}
62
+
63
+ # pgpool-II-*.tar.gz
64
+ if [ ! -f ${pgpool_tarball_dir}/pgpool-II-${pgpool_version}.tar.gz ]; then
65
+ cd ${pgpool_src_dir}
66
+ ./configure --with-pgsql=${pg_home}
67
+ make
68
+ make dist > /dev/null 2>&1
69
+ if [ $? -ne 0 ]; then
70
+ echo "Failed."
71
+ exit
72
+ fi
73
+ if [ ! -f ${pgpool_tarball_dir}/pgpool-II-${pgpool_version}.tar.gz ]; then
74
+ echo "${pgpool_tarball_dir}/pgpool-II-${pgpool_version}.tar.gz not found."
75
+ exit
76
+ fi
77
+ mv pgpool-II-${pgpool_version}.tar.gz ${rpm_dir}/SOURCES
78
+ fi
79
+
80
+ # pgpoolAdmin-*.tar.gz
81
+ if [ ! -f ${admin_tarball_dir}/pgpoolAdmin-${admin_version}.tar.gz ]; then
82
+ echo "${admin_tarball_dir}/pgpoolAdmin-${admin_version}.tar.gz not found."
83
+ exit
84
+ fi
85
+ cp ${admin_tarball_dir}/pgpoolAdmin-${admin_version}.tar.gz ${rpm_dir}/SOURCES
86
+
87
+ # pgpool.conf.sample.patch, pgpool.init, pgpool.sysconfig
88
+ cp -f ${pgpool_src_dir}/redhat/pgpool.conf.sample.patch ${rpm_dir}/SOURCES/
89
+ cp -f ${pgpool_src_dir}/redhat/pgpool.init ${rpm_dir}/SOURCES/
90
+ cp -f ${pgpool_src_dir}/redhat/pgpool.sysconfig ${rpm_dir}/SOURCES/
91
+
92
+ echo "done."
93
+
94
+ # ---------------------------------------------------------------------
95
+ # get sources for pgpool for installer
96
+ # ---------------------------------------------------------------------
97
+
98
+ echo -n " Get sources for installer ... "
99
+
100
+ installer_dir=${work_dir}/installer-pg${pg_version}-${pgpool_version}
101
+
102
+ # scripts
103
+ mkdir -p ${installer_dir}
104
+ cp -f ${pgpool_src_dir}/redhat/rpm_installer/install.sh ${installer_dir}/
105
+ cp -f ${pgpool_src_dir}/redhat/rpm_installer/uninstall.sh ${installer_dir}/
106
+ cp -f ${pgpool_src_dir}/COPYING ${installer_dir}/
107
+
108
+ # each conf files
109
+ mkdir -p ${installer_dir}/templates
110
+ cp -f ${pgpool_src_dir}/pgpool.conf.sample ${installer_dir}/templates/
111
+ cp -f ${pgpool_src_dir}/pcp.conf.sample ${installer_dir}/templates/
112
+ cp -f ${admin_src_dir}/conf/pgmgt.conf.php ${installer_dir}/templates/
113
+
114
+ initdb -D data_tmp --no-locale -E UTF8 > /dev/null 2>&1
115
+ cp -f data_tmp/postgresql.conf ${installer_dir}/templates/
116
+ sed -i "s/\(replication \+\)$USER/\1postgres/g" data_tmp/pg_hba.conf
117
+ cp -f data_tmp/pg_hba.conf ${installer_dir}/templates/
118
+ rm -rf data_tmp
119
+
120
+ cp -f ${pgpool_src_dir}/redhat/rpm_installer/config_for_script ${installer_dir}/templates/
121
+ cp -f ${pgpool_src_dir}/redhat/rpm_installer/basebackup-*.sh ${installer_dir}/templates/
122
+ cp -f ${pgpool_src_dir}/redhat/rpm_installer/failover.sh ${installer_dir}/templates/
123
+ cp -f ${pgpool_src_dir}/redhat/rpm_installer/pgpool_recovery_pitr ${installer_dir}/templates/
124
+ cp -f ${pgpool_src_dir}/redhat/rpm_installer/pgpool_remote_start ${installer_dir}/templates/
125
+ cp -f ${pgpool_src_dir}/redhat/rpm_installer/recovery.conf ${installer_dir}/templates/
126
+
127
+ echo "done."
128
+
129
+ echo
130
+ echo "* Setup Finished. See \"work\" directory."
131
+
132
+ # ---------------------------------------------------------------------
133
+
134
+ echo
135
+ echo "* Next ..."
136
+ echo
137
+ echo " - rpmbuild -ba work/pgpool.spec"
138
+ echo " - rpmbuild -ba work/pgpoolAdmin.spec"
139
+ echo " - move ~/rpm/RPMS/../pgpool*.rpm (except for *.src.rpm) to work/installer-pg${pg_version}/"
140
+ echo " - create tar ball from work/installer-pg${pg_version}/"
141
+ echo
@@ -0,0 +1,1363 @@
1
+ #! /bin/bash
2
+ # install.sh: Install script for pgpool-II
3
+
4
+ PATH=/bin:/sbin:/usr/bin:/usr/sbin
5
+
6
+ MAJOR_VERSION=3.3
7
+ DIST=pgdg
8
+
9
+ # debug mode of this script
10
+ SH_DEBUG=0
11
+
12
+ # pgpool-II
13
+ PGPOOL_SOFTWARE_NAME=pgpool-II
14
+ P_VERSION=3.3.2
15
+ P_RELEASE=1
16
+ PGPOOL_CONF_DIR=/etc/pgpool-II
17
+
18
+ # pgpoolAdmin
19
+ ADMIN_SOFTWARE_NAME=pgpoolAdmin
20
+ A_VERSION=3.3.0
21
+ A_RELEASE=1
22
+ ADMIN_DIR=/var/www/html/pgpoolAdmin
23
+ APACHE_USER=apache
24
+
25
+ # packages
26
+ ARCHITECTURE=$(uname -i)
27
+ PACKAGE_FILES=(
28
+ $PGPOOL_SOFTWARE_NAME-$P_VERSION-$P_RELEASE.$DIST.$ARCHITECTURE.rpm
29
+ $ADMIN_SOFTWARE_NAME-$A_VERSION-$A_RELEASE.$DIST.noarch.rpm
30
+ )
31
+
32
+ # pgpool
33
+ PGPOOL_BIN_DIR=/usr/bin
34
+ PGPOOL_PORT=9999
35
+ PCP_PORT=9898
36
+ WATCHDOG_PORT=9000
37
+ MODE=stream # This will be editted in script.
38
+ NODE0_HOST="" # This will be editted in script.
39
+ NODE1_HOST="" # This will be editted in script.
40
+ NETMASK="255.255.255.0" # This will be editted in script.
41
+
42
+ # postgres
43
+ PGHOME=/usr/pgsql-9.2
44
+ CONTRIB_DIR=$PGHOME/share/contrib
45
+ PG_SUPER_USER=postgres
46
+ PG_SUPER_USER_PASSWD=$PG_SUPER_USER
47
+ PG_SUPER_USER_HOME=`eval echo ~$PG_SUPER_USER`
48
+ PG_ADMIN_USER=admin # This will be editted in script.
49
+ PG_ADMIN_USER_PASSWD=pgpool # This will be editted in script.
50
+ PGPORT=5432 # This will be editted in script.
51
+ PGDATA=$PG_SUPER_USER_HOME/data # This will be editted in script.
52
+ ARCHIVE_DIR=$PG_SUPER_USER_HOME/archivedir # This will be editted in script.
53
+ INITDB_OPTION="--no-locale -E UTF8"
54
+
55
+ # other
56
+ USE_WATCHDOG=0 # This will be editted in script.
57
+ NOBODY_SBIN=/var/private/nobody/sbin
58
+ PID_FILE_DIR=/var/run/pgpool/
59
+ PGPOOL_LOG_DIR=/var/log/pgpool
60
+ INSTALL_ONLY=0
61
+ SKIPPED=0
62
+
63
+ NODE_NO=0
64
+ THIS_HOST=""
65
+ DEST_HOST=""
66
+
67
+ TEMP_FILE_RPM=/tmp/rpmcheck
68
+ TEMP_CONF=/tmp/pgpool_conf_template
69
+ BOLD=$'\e[0;30;1m'
70
+ SPAN_END=$'\e[m'
71
+ PROMPT="[input] "
72
+
73
+ # -------------------------------------------------------------------
74
+ # config
75
+ # -------------------------------------------------------------------
76
+
77
+ function decho()
78
+ {
79
+ if [ $SH_DEBUG -eq 1 ]; then
80
+ echo $1
81
+ fi
82
+ }
83
+
84
+ function writeValList()
85
+ {
86
+ cat <<EOT > editted/install_val_list
87
+ MODE=$MODE
88
+ PG_ADMIN_USER=$PG_ADMIN_USER
89
+ PG_ADMIN_USER_PASSWD=$PG_ADMIN_USER_PASSWD
90
+ PGPORT=$PGPORT
91
+ PGDATA=$PGDATA
92
+ ARCHIVE_DIR=$ARCHIVE_DIR
93
+ USE_WATCHDOG=$USE_WATCHDOG
94
+ EOT
95
+ }
96
+
97
+ function readValList()
98
+ {
99
+ source editted/install_val_list
100
+ }
101
+
102
+ # -------------------------------------------------------------------
103
+ # check
104
+ # -------------------------------------------------------------------
105
+
106
+ function ynQuestion()
107
+ {
108
+ local _QUESTION=$1
109
+
110
+ while :; do
111
+ echo -n $PROMPT "$_QUESTION (yes/no): "
112
+ read REPLY
113
+ case $REPLY in
114
+ [yY] | [yY][eE][sS])
115
+ return 0
116
+ ;;
117
+ [nN] | [nN][oO])
118
+ return 1
119
+ ;;
120
+ esac
121
+ done
122
+ }
123
+
124
+ function hasPackage()
125
+ {
126
+ PACKAGE=$1
127
+ PACKAGE_NAME_SHOWN=$2
128
+ SILENT=0
129
+ if [ $# -eq 3 ]; then
130
+ SILENT=$3
131
+ fi
132
+
133
+ egrep -q $PACKAGE $TEMP_FILE_RPM
134
+ if [ $? -ne 0 ]; then
135
+ if [ $SILENT -eq 0 ]; then
136
+ echo
137
+ echo "Please install $PACKAGE_NAME_SHOWN."
138
+ fi
139
+ return 1
140
+ fi
141
+
142
+ return 0
143
+ }
144
+
145
+ function checkEnv()
146
+ {
147
+ # OS
148
+ if [ -f /etc/redhat-release ]; then
149
+ if grep -q "release 6" /etc/redhat-release; then
150
+ distribution=rhel6
151
+ else
152
+ echo "Your platform is not supported."
153
+ return 1
154
+ fi
155
+ fi
156
+
157
+ # pgpool-II
158
+ hasPackage $PGPOOL_SOFTWARE_NAME $PGPOOL_SOFTWARE_NAME 1
159
+ if [ $? -eq 0 ]; then
160
+ echo
161
+ echo "pgpool-II $MAJOR_VERSION is already installed."
162
+ return 1
163
+ fi
164
+
165
+ # other
166
+ hasPackage "postgresql92-server" "PostgreSQL (postgresql92-server)"
167
+ if [ $? -ne 0 ]; then return 1; fi
168
+ hasPackage "postgresql92" "PostgreSQL (postgresql92)"
169
+ if [ $? -ne 0 ]; then return 1; fi
170
+ hasPackage "httpd" "Apache (httpd)"
171
+ if [ $? -ne 0 ]; then return 1; fi
172
+ hasPackage "php-pgsql" "PHP (php-pgsql)"
173
+ if [ $? -ne 0 ]; then return 1; fi
174
+ hasPackage "php-mbstring" "PHP (php-mbstring)"
175
+ if [ $? -ne 0 ]; then return 1; fi
176
+ hasPackage "php-[45]" "PHP"
177
+ if [ $? -ne 0 ]; then return 1; fi
178
+
179
+ # root
180
+ if [ $(id -un) != root ]; then
181
+ echo
182
+ echo "Must be installed as root."
183
+ return 1
184
+ fi
185
+
186
+ return 0
187
+ }
188
+
189
+ # -------------------------------------------------------------------
190
+ # Nodes
191
+ # -------------------------------------------------------------------
192
+
193
+ function fixNodes()
194
+ {
195
+ # node 0
196
+ while :; do
197
+ echo -n $PROMPT "Specify node 0's hostname or IP address : "
198
+ read REPLY
199
+ if [ "$REPLY" != "" ]; then
200
+ if [ $REPLY = localhost ]; then
201
+ echo "NG. Please input actual hostname or IP address."
202
+ else
203
+ NODE0_HOST=$REPLY
204
+ break
205
+ fi
206
+ fi
207
+ done
208
+
209
+ # node 1
210
+ while :; do
211
+ echo -n $PROMPT "Specify node 1's hostname or IP address : "
212
+ read REPLY
213
+ if [ "$REPLY" != "" ]; then
214
+ if [ $REPLY = localhost ]; then
215
+ echo "NG. Please input actual hostname or IP address."
216
+ else
217
+ NODE1_HOST=$REPLY
218
+ break
219
+ fi
220
+ fi
221
+ done
222
+
223
+ }
224
+
225
+ function fixNetmask()
226
+ {
227
+ echo -n $PROMPT "Specify netmask (default: $NETMASK) : "
228
+ read REPLY
229
+ if [ "$REPLY" != "" ]; then
230
+ NETMASK=$REPLY
231
+ fi
232
+ }
233
+
234
+ # -------------------------------------------------------------------
235
+ # pgpool.conf
236
+ # -------------------------------------------------------------------
237
+
238
+ # get input from console and check the value if needed.
239
+ # input values is set to $RTN
240
+ function checkInputParam()
241
+ {
242
+ local _PARAM=$1
243
+ local _DESCRIPTION=$2
244
+ local _DEFAULT=$3
245
+
246
+ while :; do
247
+ echo -n $PROMPT $_DESCRIPTION
248
+ if [ "$_DEFAULT" != "" ]; then
249
+ echo -n " (default: $_DEFAULT)"
250
+ fi
251
+ echo -n " : "
252
+
253
+ read _INPUT_VAL
254
+ if [ "$_INPUT_VAL" = "" ]; then
255
+ if [ "$_DEFAULT" != "" ]; then
256
+ RTN=$_DEFAULT
257
+ return 0
258
+ fi
259
+ else
260
+ case $_PARAM in
261
+ backend_hostname*)
262
+ if [ $_INPUT_VAL = "localhost" ]; then
263
+ echo "NG. Please specify the host name."
264
+ else
265
+ RTN=$_INPUT_VAL
266
+ return 0
267
+ fi
268
+ ;;
269
+ *)
270
+ RTN=$_INPUT_VAL
271
+ return 0
272
+ ;;
273
+ esac
274
+ fi
275
+ done
276
+
277
+ return 0
278
+ }
279
+
280
+ # get input from console and write it to pgpool.conf
281
+ function setPgpoolParam()
282
+ {
283
+ local _PARAM=$1
284
+ local _DESCRIPTION=$2
285
+ local _DEFAULT=""
286
+
287
+ if [ $# -eq 3 ]; then
288
+ _DEFAULT=$3
289
+ fi
290
+
291
+ checkInputParam $_PARAM "$_DESCRIPTION" $_DEFAULT
292
+ _NEWVAL=$RTN
293
+
294
+ case $_PARAM in
295
+ delegate_IP|backend_data_directory*|heartbeat_*)
296
+ _NEWVAL="'$_NEWVAL'"
297
+ ;;
298
+ esac
299
+
300
+ writePgpoolParam $_PARAM $_NEWVAL
301
+ }
302
+
303
+ function getPgpoolParam()
304
+ {
305
+ local _PARAM=$1
306
+
307
+ RTN=`grep $_PARAM editted/pgpool.conf | sed -e "s/$_PARAM \+= \+\(.*\)/\1/" \
308
+ | sed -e "s/^'\(.*\)'$/\1/"`
309
+ }
310
+
311
+ # rewrite param in pgpool.conf to new values
312
+ function writePgpoolParam()
313
+ {
314
+ local _PARAM=$1
315
+ local _NEWVAL=$2
316
+
317
+ sed -i "s|^[#]*$_PARAM[ ]*=.*$|$_PARAM = $_NEWVAL|" editted/pgpool.conf
318
+
319
+ decho " [$_PARAM] $_NEWVAL"
320
+ }
321
+
322
+ function setBackend()
323
+ {
324
+ local _NODE_NUM=$1
325
+
326
+ echo "* backend $_NODE_NUM"
327
+
328
+ if [ $_NODE_NUM -eq 0 ]; then
329
+ writePgpoolParam "backend_hostname$_NODE_NUM" "'$NODE0_HOST'"
330
+
331
+ setPgpoolParam "backend_port$_NODE_NUM" "Port number" $PGPORT
332
+ PGPORT=$RTN
333
+ setPgpoolParam "backend_data_directory$_NODE_NUM" "Data directory" $PGDATA
334
+ PGDATA=$RTN
335
+
336
+ else
337
+ echo " Set the same values as backend 0."
338
+ writePgpoolParam "backend_hostname$_NODE_NUM" "'$NODE1_HOST'"
339
+ writePgpoolParam "backend_port$_NODE_NUM" $PGPORT
340
+ writePgpoolParam "backend_data_directory$_NODE_NUM" "'$PGDATA'"
341
+ fi
342
+ writePgpoolParam "backend_weight$_NODE_NUM" 1
343
+ }
344
+
345
+ function rewriteWatchdog()
346
+ {
347
+ echo "Rewrite watchdog configuration."
348
+ echo
349
+ writePgpoolParam wd_hostname "'$THIS_HOST'"
350
+ writePgpoolParam other_pgpool_hostname0 "'$DEST_HOST'"
351
+
352
+ getPgpoolParam wd_lifecheck_method
353
+ if [ $RTN = "heartbeat" ]; then
354
+ writePgpoolParam heartbeat_destination0 "'$DEST_HOST'"
355
+ fi
356
+ }
357
+
358
+ function setWatchdog()
359
+ {
360
+ writePgpoolParam use_watchdog on
361
+ setPgpoolParam delegate_IP "delegate IP address"
362
+
363
+ # config of this watchdog
364
+ decho
365
+ decho "[[ config of this watchdog ]]"
366
+ writePgpoolParam wd_hostname "'$THIS_HOST'"
367
+ writePgpoolParam wd_port $WATCHDOG_PORT
368
+
369
+ # config of another pgpool with watchdog
370
+ decho
371
+ decho "[[ config of another pgpool with watchdog ]]"
372
+ writePgpoolParam other_pgpool_hostname0 "'$DEST_HOST'"
373
+ writePgpoolParam other_pgpool_port0 $PGPOOL_PORT
374
+ writePgpoolParam other_wd_port0 $WATCHDOG_PORT
375
+
376
+ # lifecheck
377
+ decho
378
+ decho "[[ lifecheck ]]"
379
+ while :; do
380
+ echo $PROMPT "method of watchdog lifecheck (heartbeat / query)"
381
+ read REPLY
382
+ case $REPLY in
383
+ heartbeat|h)
384
+ REPLY=heartbeat
385
+ break
386
+ ;;
387
+ query|q)
388
+ REPLY=query
389
+ break
390
+ ;;
391
+ esac
392
+ done
393
+ writePgpoolParam wd_lifecheck_method $REPLY
394
+ WATCHDOG_METHOD=$REPLY
395
+
396
+ case $WATCHDOG_METHOD in
397
+ heartbeat)
398
+ writePgpoolParam heartbeat_device0 "''"
399
+ writePgpoolParam heartbeat_destination0 "'$DEST_HOST'"
400
+ writePgpoolParam heartbeat_destination_port0 "9694"
401
+ ;;
402
+
403
+ query)
404
+ writePgpoolParam wd_lifecheck_user "'$PG_SUPER_USER'"
405
+ writePgpoolParam wd_lifecheck_password "'$PG_SUPER_USER_PASSWD'"
406
+ ;;
407
+ esac
408
+
409
+ # command path (to use commands with setuid bit)
410
+ writePgpoolParam ifconfig_path "'$NOBODY_SBIN'"
411
+ writePgpoolParam arping_path "'$NOBODY_SBIN'"
412
+
413
+ # configure netmask for VIP
414
+ getPgpoolParam if_up_cmd
415
+ local _VAL=`echo $RTN | sed -e "s/255.255.255.0/$NETMASK/"`
416
+ writePgpoolParam if_up_cmd "'$_VAL'"
417
+
418
+ echo
419
+ }
420
+
421
+ function doConfigPgpool()
422
+ {
423
+ cp templates/pgpool.conf.sample editted/pgpool.conf
424
+ ynQuestion "Do you edit pgpool.conf now?"
425
+ if [ $? -ne 0 ]; then
426
+ SKIPPED=1
427
+ return
428
+ fi
429
+
430
+ local _STEPS=6
431
+
432
+ echo
433
+ echo $BOLD"----------------------------------------------------------------------"$SPAN_END
434
+ echo $BOLD"Configuration for pgpool-II ... "$SPAN_END
435
+ echo $BOLD"----------------------------------------------------------------------"$SPAN_END
436
+ echo
437
+
438
+ # -------------------------------------------------------------------
439
+ # [1] general
440
+ # -------------------------------------------------------------------
441
+
442
+ decho "[1/$_STEPS] general"
443
+ decho
444
+
445
+ writePgpoolParam listen_addresses "'*'"
446
+ writePgpoolParam port 9999
447
+ writePgpoolParam pcp_port 9898
448
+
449
+ # -------------------------------------------------------------------
450
+ # [2] mode
451
+ # -------------------------------------------------------------------
452
+
453
+ decho
454
+ decho "[2/$_STEPS] replication"
455
+ while :; do
456
+ echo $PROMPT "Which replication mode do you use? (native/ stream)"
457
+ echo
458
+
459
+ echo " native: native replication mode"
460
+ echo " stream: master slave mode with streaming replication"
461
+
462
+ read REPLY
463
+ case $REPLY in
464
+ native)
465
+ writePgpoolParam replication_mode on
466
+ MODE="replication"
467
+ break
468
+ ;;
469
+ stream)
470
+ writePgpoolParam master_slave_mode on
471
+ writePgpoolParam master_slave_sub_mode "'stream'"
472
+ MODE="stream"
473
+ break
474
+ ;;
475
+ esac
476
+ done
477
+
478
+ ynQuestion "Do you use load balancing?"
479
+ if [ $? -eq 0 ]; then
480
+ writePgpoolParam load_balance_mode on
481
+ fi
482
+
483
+ ynQuestion "Do you use on memory query cache with shared memory?"
484
+ if [ $? -eq 0 ]; then
485
+ writePgpoolParam memory_cache_enabled on
486
+ writePgpoolParam memqcache_method "'shmem'"
487
+ writePgpoolParam memqcache_oiddir "'$PGPOOL_LOG_DIR/oiddir'"
488
+ fi
489
+
490
+ # -------------------------------------------------------------------
491
+ # [3] watchdog
492
+ # -------------------------------------------------------------------
493
+
494
+ decho
495
+ decho "[3/$_STEPS] watchdog"
496
+
497
+ ynQuestion "Do you use watchdog?"
498
+ if [ $? -eq 0 ]; then
499
+ USE_WATCHDOG=1
500
+ setWatchdog
501
+ fi
502
+
503
+ # -------------------------------------------------------------------
504
+ # [4] backend
505
+ # -------------------------------------------------------------------
506
+
507
+ decho
508
+ decho "[4/$_STEPS] backend"
509
+ decho
510
+
511
+ setBackend 0
512
+ echo
513
+ setBackend 1
514
+
515
+ # -------------------------------------------------------------------
516
+ # [5] health check user
517
+ # -------------------------------------------------------------------
518
+
519
+ decho
520
+ decho "[5/$_STEPS] health check"
521
+ writePgpoolParam health_check_user "'$PG_SUPER_USER'"
522
+ writePgpoolParam health_check_password "'$PG_SUPER_USER_PASSWD'"
523
+ writePgpoolParam health_check_period 10
524
+
525
+ # -------------------------------------------------------------------
526
+ # [6] fail over
527
+ # -------------------------------------------------------------------
528
+
529
+ decho
530
+ decho "[6/$_STEPS] fail over & online recovery"
531
+ writePgpoolParam recovery_user "'$PG_SUPER_USER'"
532
+ writePgpoolParam recovery_password "'$PG_SUPER_USER_PASSWD'"
533
+ if [ $MODE = "stream" ]; then
534
+ writePgpoolParam recovery_1st_stage_command "'basebackup-stream.sh'"
535
+ writePgpoolParam failover_command "'$PGPOOL_CONF_DIR/failover.sh %d %h %p %D %m %M %H %P %r %R'"
536
+ writePgpoolParam sr_check_user "'$PG_SUPER_USER'"
537
+ writePgpoolParam sr_check_password "'$PG_SUPER_USER_PASSWD'"
538
+ else
539
+ writePgpoolParam recovery_1st_stage_command "'basebackup-replication.sh'"
540
+ writePgpoolParam recovery_2nd_stage_command "'pgpool_recovery_pitr'"
541
+ fi
542
+
543
+ echo
544
+ echo $BOLD"----------------------------------------------------------------------"$SPAN_END
545
+ echo " ... end."
546
+ }
547
+
548
+ # -------------------------------------------------------------------
549
+ # pgpoolAdmin's conf
550
+ # -------------------------------------------------------------------
551
+
552
+ function writeAdminParam()
553
+ {
554
+ local _PARAM=$1
555
+ local _NEWVAL=$2
556
+
557
+ sed -i "s|define('$_PARAM',[ ]*'.*');|define('$_PARAM', '$_NEWVAL');|" editted/pgmgt.conf.php
558
+ }
559
+
560
+ function doConfigAdmin()
561
+ {
562
+ cp templates/pgmgt.conf.php editted/
563
+ ynQuestion "Do you edit pgmgt.conf.php now?"
564
+ if [ $? -ne 0 ]; then
565
+ return
566
+ fi
567
+
568
+ echo
569
+ echo $BOLD"----------------------------------------------------------------------"$SPAN_END
570
+ echo $BOLD"Configuration for pgpoolAdmin ..."$SPAN_END
571
+ echo $BOLD"----------------------------------------------------------------------"$SPAN_END
572
+ echo
573
+
574
+ while :; do
575
+ echo $PROMPT "Which language do you use? (en/fr/ja/zh_cn)"
576
+
577
+ read REPLY
578
+ case $REPLY in
579
+ en | fr | ja | zh_cn )
580
+ writeAdminParam "_PGPOOL2_LANG" $REPLY
581
+ break
582
+ ;;
583
+ esac
584
+ done
585
+
586
+ writeAdminParam _PGPOOL2_VERSION $MAJOR_VERSION
587
+ writeAdminParam _PGPOOL2_CONFIG_FILE $PGPOOL_CONF_DIR/pgpool.conf
588
+ writeAdminParam _PGPOOL2_PASSWORD_FILE $PGPOOL_CONF_DIR/pcp.conf
589
+ writeAdminParam _PGPOOL2_COMMAND $PGPOOL_BIN_DIR/pgpool
590
+ writeAdminParam _PGPOOL2_LOG_FILE $PGPOOL_LOG_DIR/pgpool.log
591
+ writeAdminParam _PGPOOL2_CMD_OPTION_N 1
592
+ writeAdminParam _PGPOOL2_PCP_DIR $PGPOOL_BIN_DIR
593
+ writeAdminParam _PGPOOL2_STATUS_REFRESH_TIME 5
594
+
595
+ echo
596
+ echo $BOLD"----------------------------------------------------------------------"$SPAN_END
597
+ echo " ... end."
598
+ }
599
+
600
+ # -------------------------------------------------------------------
601
+ # pcp.conf
602
+ # -------------------------------------------------------------------
603
+
604
+ function doConfigPcp()
605
+ {
606
+ cp templates/pcp.conf.sample editted/pcp.conf
607
+ ynQuestion "Do you edit pcp.conf now?"
608
+ if [ $? -ne 0 ]; then
609
+ return
610
+ fi
611
+
612
+ echo
613
+ echo $BOLD"----------------------------------------------------------------------"$SPAN_END
614
+ echo $BOLD"Configuration for PCP ..."$SPAN_END
615
+ echo $BOLD"----------------------------------------------------------------------"$SPAN_END
616
+ echo
617
+
618
+ while :; do
619
+ echo -n $PROMPT "username for pgpoolAdmin: "
620
+ read PG_ADMIN_USER
621
+ if [ "$PG_ADMIN_USER" != "" ]; then
622
+ break;
623
+ fi
624
+ done
625
+
626
+ while :; do
627
+ echo -n $PROMPT "this user's password: "
628
+ read PG_ADMIN_USER_PASSWD
629
+ if [ "$PG_ADMIN_USER_PASSWD" != "" ]; then
630
+ break;
631
+ fi
632
+ done
633
+
634
+ echo
635
+ echo $BOLD"----------------------------------------------------------------------"$SPAN_END
636
+ echo " ... end."
637
+ }
638
+
639
+ # -------------------------------------------------------------------
640
+ # postgresql.conf
641
+ # -------------------------------------------------------------------
642
+
643
+ function doConfigPostgres()
644
+ {
645
+ local _STEPS=5
646
+
647
+ cp templates/postgresql.conf editted/postgresql.conf
648
+ ynQuestion "Do you edit postgresql.conf now?"
649
+ if [ $? -ne 0 ]; then
650
+ SKIPPED=1
651
+ return
652
+ fi
653
+
654
+ echo
655
+ echo $BOLD"----------------------------------------------------------------------"$SPAN_END
656
+ echo $BOLD"Configuration for PostgreSQL ..."$SPAN_END
657
+ echo $BOLD"----------------------------------------------------------------------"$SPAN_END
658
+ echo
659
+
660
+ # [1] hot standby
661
+ decho
662
+ decho "[1/$_STEPS] WAL archive"
663
+ setPostgresParam "archive_command" "the directory where to archive a logfile segment" $ARCHIVE_DIR
664
+ writePostgresParam listen_addresses "'*'"
665
+ writePostgresParam archive_mode on
666
+ #writePostgresParam archive_command "'cp %p $ARCHIVE_DIR/%f </dev/null'"
667
+
668
+ if [ $MODE = "stream" ]; then
669
+ writePostgresParam wal_level hot_standby
670
+ writePostgresParam max_wal_senders 2
671
+ writePostgresParam hot_standby on
672
+ else
673
+ writePostgresParam wal_level archive
674
+ fi
675
+
676
+ # [2] log
677
+ decho
678
+ decho "[2/$_STEPS] log"
679
+ writePostgresParam logging_collector on
680
+ writePostgresParam log_filename "'%A.log'"
681
+ writePostgresParam log_line_prefix "'%t [%p-%l] '"
682
+ writePostgresParam log_truncate_on_rotation on
683
+
684
+ # -------------------------------------------------------------------
685
+ # [3] custom vartiable
686
+ # -------------------------------------------------------------------
687
+
688
+ decho "[4/$_STEPS] custom variable for pgpool_recovery extension"
689
+ writePostgresParam pgpool.pg_ctl "'$PGHOME/bin/pg_ctl'"
690
+
691
+ # -------------------------------------------------------------------
692
+ # [4] pg_hba.conf
693
+ # -------------------------------------------------------------------
694
+
695
+ NODE0_MASK=""
696
+ NODE1_MASK=""
697
+
698
+ # If hostname, netmask isn't necessary.
699
+ if expr "$NODE0_HOST" : "^[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}$" > /dev/null; then
700
+ NODE0_MASK=$NETMASK
701
+ fi
702
+ if expr "$NODE1_HOST" : "^[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}$" > /dev/null; then
703
+ NODE1_MASK=$NETMASK
704
+ fi
705
+
706
+ decho
707
+ decho "[5/$_STEPS] authorization"
708
+ cp templates/pg_hba.conf editted/pg_hba.conf
709
+ ed -s editted/pg_hba.conf > /dev/null 2>&1 <<EOT
710
+ /^#local *replication/s/^#//p
711
+ /^#host *replication/s/^#//p
712
+ /^#host *replication/s/^#//p
713
+ w
714
+ q
715
+ EOT
716
+ echo "host replication $PG_SUPER_USER $NODE0_HOST $NODE0_MASK trust" >> editted/pg_hba.conf
717
+ echo "host replication $PG_SUPER_USER $NODE1_HOST $NODE1_MASK trust" >> editted/pg_hba.conf
718
+ echo "host all $PG_SUPER_USER $NODE0_HOST $NODE0_MASK trust" >> editted/pg_hba.conf
719
+ echo "host all $PG_SUPER_USER $NODE1_HOST $NODE1_MASK trust" >> editted/pg_hba.conf
720
+ echo "host all $PG_ADMIN_USER $NODE0_HOST $NODE0_MASK trust" >> editted/pg_hba.conf
721
+ echo "host all $PG_ADMIN_USER $NODE1_HOST $NODE1_MASK trust" >> editted/pg_hba.conf
722
+
723
+ echo
724
+ echo $BOLD"----------------------------------------------------------------------"$SPAN_END
725
+ echo " ... end."
726
+ }
727
+
728
+ function setPostgresParam()
729
+ {
730
+ local _PARAM=$1
731
+ local _DESCRIPTION=$2
732
+ local _DEFAULT=""
733
+
734
+ if [ $# -eq 3 ]; then
735
+ _DEFAULT=$3
736
+ fi
737
+
738
+ checkInputParam $_PARAM "$_DESCRIPTION" $_DEFAULT
739
+ _NEWVAL=$RTN
740
+
741
+ if [ "$_PARAM" = "archive_command" ]; then
742
+ writePostgresParam archive_command "'cp %p $ARCHIVE_DIR/%f </dev/null'"
743
+ else
744
+ writePostgresParam $_PARAM $_NEWVAL
745
+ fi
746
+ }
747
+
748
+ function writePostgresParam()
749
+ {
750
+ local _PARAM=$1
751
+ local _NEWVAL=$2
752
+
753
+ echo "$_PARAM = $_NEWVAL" >> editted/postgresql.conf
754
+
755
+ decho " [$_PARAM] $_NEWVAL"
756
+ }
757
+
758
+ # -------------------------------------------------------------------
759
+ # scripts
760
+ # -------------------------------------------------------------------
761
+
762
+ function createConfForScript()
763
+ {
764
+ local _SCRIPT=config_for_script
765
+ echo
766
+ echo -n "Create config for failover and online recovery ... "
767
+ cp -f templates/$_SCRIPT editted/
768
+ ed -s editted/$_SCRIPT <<EOT
769
+ /__PGHOME__/s@__PGHOME__@$PGHOME@
770
+ /__NODE0_HOST__/s@__NODE0_HOST__@$NODE0_HOST@
771
+ /__NODE1_HOST__/s@__NODE1_HOST__@$NODE1_HOST@
772
+ /__NODE0_PORT__/s@__NODE0_PORT__@$PGPORT@
773
+ /__NODE1_PORT__/s@__NODE1_PORT__@$PGPORT@
774
+ /__NODE0_DIR__/s@__NODE0_DIR__@$PGDATA@
775
+ /__NODE1_DIR__/s@__NODE1_DIR__@$PGDATA@
776
+ /__PGSUPERUSER__/s@__PGSUPERUSER__@$PG_SUPER_USER@
777
+ /__ARCHIVE_DIR__/s@__ARCHIVE_DIR__@$ARCHIVE_DIR@
778
+ /__PGPOOL_LOG_DIR__/s@__PGPOOL_LOG_DIR__@$PGPOOL_LOG_DIR@
779
+ w
780
+ q
781
+ EOT
782
+ echo "OK."
783
+ }
784
+
785
+ function createRecoveryConf()
786
+ {
787
+ local _SCRIPT=recovery.conf
788
+
789
+ echo -n "create recovery.conf ... ".
790
+ cp -f templates/$_SCRIPT editted/
791
+ ed -s editted/$_SCRIPT <<EOT
792
+ /__PGPOOL_PORT__/s@__PGPOOL_PORT__@$PGPOOL_PORT@
793
+ /__REPLI_USER__/s@__REPLI_USER__@$PG_SUPER_USER@
794
+ /__ARCHIVE_DIR__/s@__ARCHIVE_DIR__@$ARCHIVE_DIR@
795
+ w
796
+ q
797
+ EOT
798
+ echo "OK."
799
+ }
800
+
801
+ function chownToApache()
802
+ {
803
+ local _TARGET=$1
804
+ chown $APACHE_USER:$APACHE_USER $_TARGET
805
+ }
806
+
807
+ function copySbin()
808
+ {
809
+ if [ ! -e $NOBODY_SBIN ]; then
810
+ mkdir -p $NOBODY_SBIN
811
+ fi
812
+ chownToApache $NOBODY_SBIN
813
+ chmod 700 $NOBODY_SBIN
814
+
815
+ cp /sbin/ifconfig $NOBODY_SBIN
816
+ cp /sbin/arping $NOBODY_SBIN
817
+ chmod 4755 $NOBODY_SBIN/ifconfig
818
+ chmod 4755 $NOBODY_SBIN/arping
819
+ }
820
+
821
+ function sshWithoutPass()
822
+ {
823
+ local _THIS_USER=$1
824
+ local _HOME=`eval echo ~$_THIS_USER`
825
+ local _SSH_DIR=$_HOME/.ssh
826
+
827
+ rm $_SSH_DIR/id_rsa* >/dev/null 2>&1
828
+ su - $_THIS_USER -c "ssh-keygen -q -t rsa -P '' -f $_SSH_DIR/id_rsa << EOF
829
+
830
+ EOF"
831
+ if [ $? -ne 0 ]; then return 1; fi
832
+
833
+ ssh-copy-id -i $_SSH_DIR/id_rsa.pub $PG_SUPER_USER@$DEST_HOST > /dev/null 2>&1
834
+ if [ $? -ne 0 ]; then return 1; fi
835
+
836
+ su - $_THIS_USER -c "ssh -o StrictHostKeyChecking=no $PG_SUPER_USER@$DEST_HOST exit" > /dev/null 2>&1
837
+ if [ $? -ne 0 ]; then return 1; fi
838
+
839
+ return 0
840
+ }
841
+
842
+ function makeApacheLoginable()
843
+ {
844
+ local _APACHE_HOME="/home/$APACHE_USER"
845
+
846
+ if [ ! -e $_APACHE_HOME ]; then
847
+ mkdir $_APACHE_HOME -m 700
848
+ fi
849
+ chownToApache $_APACHE_HOME
850
+
851
+ su - $APACHE_USER -c "exit" > /dev/null
852
+ if [ $? -ne 0 ]; then
853
+ usermod -d $_APACHE_HOME -s /bin/bash $APACHE_USER > /dev/null 2>&1
854
+ fi
855
+ }
856
+
857
+ # -------------------------------------------------------------------
858
+ # Install
859
+ # -------------------------------------------------------------------
860
+
861
+ function doInstall()
862
+ {
863
+ echo "* Install packages ... "
864
+ rpm -ivh ${PACKAGE_FILES[@]}
865
+ if [ $? -ne 0 ]; then
866
+ echo "Failed."
867
+ return 1
868
+ fi
869
+ echo
870
+ echo "OK."
871
+ return 0
872
+ }
873
+
874
+ # -------------------------------------------------------------------
875
+ # Regist functions
876
+ # -------------------------------------------------------------------
877
+
878
+ function doQueries()
879
+ {
880
+ su - $PG_SUPER_USER -c "$PGHOME/bin/pg_ctl -D $PGDATA -w start" > /dev/null 2>&1
881
+
882
+ echo -n "- create user: admin ... "
883
+ $PGHOME/bin/psql -p $PGPORT -U $PG_SUPER_USER postgres \
884
+ -c "CREATE USER $PG_ADMIN_USER PASSWORD '$PG_ADMIN_USER_PASSWD' SUPERUSER" >/dev/null 2>&1
885
+ if [ $? -eq 0 ]; then
886
+ echo "OK."
887
+ else
888
+ echo "Failed."
889
+ echo " Please create the user \"$PG_ADMIN_USER\" manually. Continuing anyway."
890
+ fi
891
+
892
+ echo -n "- create extension: pgpool_regclass ... "
893
+ $PGHOME/bin/psql -p $PGPORT -U $PG_SUPER_USER template1 \
894
+ -c "CREATE EXTENSION pgpool_regclass; " > /dev/null 2>&1
895
+ if [ $? -eq 0 ]; then
896
+ echo "OK."
897
+ else
898
+ echo "Failed."
899
+ echo " Please install pgpool_regclass() manually . Continuing anyway."
900
+ fi
901
+
902
+ echo -n "- create extension: pgpool_recovery ... "
903
+ $PGHOME/bin/psql -p $PGPORT -U $PG_SUPER_USER template1 \
904
+ -c "CREATE EXTENSION pgpool_recovery;" > /dev/null 2>&1
905
+ if [ $? -eq 0 ]; then
906
+ echo "OK."
907
+ else
908
+ echo "Failed."
909
+ echo " Please install pgpool_recovery() manually . Continuing anyway."
910
+ fi
911
+
912
+ su - $PG_SUPER_USER -c "$PGHOME/bin/pg_ctl stop -D $PGDATA" > /dev/null 2>&1
913
+ }
914
+
915
+ # ===================================================================
916
+ # main
917
+ # ===================================================================
918
+
919
+ # -------------------------------------------------------------------
920
+ # [1] check
921
+ # -------------------------------------------------------------------
922
+
923
+ # 1. check environment
924
+ echo -n "check for installation ..."
925
+
926
+ rpm -qa | grep -E "${PGPOOL_SOFTWARE_NAME}|postgresql92|httpd|php|php-mbstring|php-pgsql" > $TEMP_FILE_RPM
927
+ checkEnv
928
+ if [ $? -ne 0 ]; then
929
+ rm -f $TEMP_FILE_RPM
930
+ exit 1
931
+ fi
932
+ rm -f $TEMP_FILE_RPM
933
+
934
+ echo "OK."
935
+ echo
936
+
937
+ # -------------------------------------------------------------------
938
+
939
+ # 2. licence agreement
940
+ echo $BOLD"================================================================="$SPAN_END
941
+ cat COPYING
942
+ echo $BOLD"================================================================="$SPAN_END
943
+ ynQuestion "Do you accept the end user software license agreement?"
944
+ if [ $? -ne 0 ]; then exit 1; fi
945
+
946
+ # -------------------------------------------------------------------
947
+
948
+ # 3. editing config?
949
+ ynQuestion "Do you edit configs? If no, install will start right now without configuration."
950
+ if [ $? -ne 0 ]; then
951
+ doInstall
952
+ if [ $? -eq 0 ]; then
953
+ echo "Completed!"
954
+ echo "All configuration should be done manually."
955
+ exit 0
956
+ else
957
+ exit 1
958
+ fi
959
+ fi
960
+
961
+ # -------------------------------------------------------------------
962
+ # [2] Node information
963
+ # -------------------------------------------------------------------
964
+
965
+ echo
966
+ echo $BOLD"================================================================="$SPAN_END
967
+ echo Configuration
968
+ echo $BOLD"================================================================="$SPAN_END
969
+
970
+ echo
971
+ echo $BOLD"----------------------------------------------------------------------"$SPAN_END
972
+ echo $BOLD"Configuring Host, User, SSH ..."$SPAN_END
973
+ echo $BOLD"----------------------------------------------------------------------"$SPAN_END
974
+
975
+ echo
976
+ echo "* Node information"
977
+
978
+ # 1. IP addresses og both nodes
979
+ echo
980
+ echo "Two-node cluster (node 0 and node 1) is assumed."
981
+ fixNodes
982
+
983
+ # -------------------------------------------------------------------
984
+
985
+ # 2. which node is this, node 0 or 1?
986
+ echo
987
+ echo "Which node is this?"
988
+ echo " If this is node 0, a database cluster is created by initdb after installation."
989
+ echo " Otherwise if this is node 1, the configurations on node 0 is reused."
990
+ ynQuestion "Is this node 0?"
991
+ if [ $? -eq 0 ]; then
992
+ NODE_NO=0
993
+ THIS_HOST=$NODE0_HOST
994
+ DEST_HOST=$NODE1_HOST
995
+ echo "OK. This is node 0."
996
+ else
997
+ echo "This is node 1."
998
+ ynQuestion "Installation on node 0 has finished already?"
999
+ if [ $? -eq 0 ]; then
1000
+ NODE_NO=1
1001
+ THIS_HOST=$NODE1_HOST
1002
+ DEST_HOST=$NODE0_HOST
1003
+ echo "OK. "
1004
+ else
1005
+ echo "Please install pgpool-II to node0 at first."
1006
+ exit 1
1007
+ fi
1008
+ fi
1009
+
1010
+ # -------------------------------------------------------------------
1011
+
1012
+ # 3. The user of PostgreSQL
1013
+ echo
1014
+ echo "* Check the user $PG_SUPER_USER"
1015
+ echo
1016
+
1017
+ id $PG_SUPER_USER >/dev/null 2>&1
1018
+ if [ $? -ne 0 ]; then
1019
+ echo "The user $PG_SUPER_USER doesn't exist on $THIS_HOST. Creating ..."
1020
+ useradd $PG_SUPER_USER > /dev/null 2>&1
1021
+ echo $PG_SUPER_USER:$PG_SUPER_USER_PASSWD | chpasswd
1022
+ if [ $? -eq 0 ]; then
1023
+ echo "OK."
1024
+ echo " Created \"$PG_SUPER_USER\" user with password \"$PG_SUPER_USER_PASSWD\"."
1025
+ echo " You must change the password after install."
1026
+ else
1027
+ echo "Failed."
1028
+ exit 1
1029
+ fi
1030
+ else
1031
+ echo "The user $PG_SUPER_USER exists on $THIS_HOST (this host) ... OK."
1032
+ fi
1033
+
1034
+ ynQuestion "The user $PG_SUPER_USER exists on $DEST_HOST (another host)?"
1035
+ if [ $? -ne 0 ]; then
1036
+ echo "Please create $PG_SUPER_USER on $DEST_HOST before the installation."
1037
+ exit 1
1038
+ fi
1039
+
1040
+ # -------------------------------------------------------------------
1041
+
1042
+ # 3. password-less access over ssh
1043
+ echo
1044
+ echo "* Setup password-less access over ssh"
1045
+ echo
1046
+ echo "Try ssh: $PG_SUPER_USER@$THIS_HOST (this host) -> $PG_SUPER_USER@$DEST_HOST (another host)"
1047
+ sshWithoutPass $PG_SUPER_USER
1048
+ if [ $? -ne 0 ]; then
1049
+ echo "Failed to ssh $PG_SUPER_USER@$DEST_HOST (another host)."
1050
+ exit 1
1051
+ else
1052
+ echo "OK."
1053
+ fi
1054
+
1055
+ echo
1056
+ echo "Try ssh: $APACHE_USER@$THIS_HOST (this host) -> $PG_SUPER_USER@$DEST_HOST (another host)"
1057
+ makeApacheLoginable
1058
+ if [ $? -ne 0 ]; then
1059
+ echo "Failed to make apache loginable. For configuring apache user, httpd must be stopped."
1060
+ exit 1
1061
+ fi
1062
+ sshWithoutPass $APACHE_USER
1063
+ if [ $? -ne 0 ]; then
1064
+ echo "Failed to ssh $PG_SUPER_USER@$DEST_HOST."
1065
+ exit 1
1066
+ else
1067
+ echo "OK."
1068
+ fi
1069
+
1070
+ # -------------------------------------------------------------------
1071
+
1072
+ # 4. netmask (in only node 0)
1073
+ if [ $NODE_NO -eq 0 ]; then
1074
+ echo
1075
+
1076
+ fixNetmask
1077
+ fi
1078
+
1079
+ echo
1080
+ echo $BOLD"----------------------------------------------------------------------"$SPAN_END
1081
+ echo " ... end."
1082
+
1083
+ # -------------------------------------------------------------------
1084
+ # [3] Editting conf files
1085
+ # -------------------------------------------------------------------
1086
+
1087
+ # create temporary config files in editted directory
1088
+ rm -rf editted/
1089
+ mkdir editted/
1090
+
1091
+ # node 0
1092
+ if [ $NODE_NO -eq 0 ]; then
1093
+ doConfigPcp
1094
+ doConfigPgpool
1095
+ doConfigAdmin
1096
+ doConfigPostgres
1097
+
1098
+ if [ $SKIPPED -eq 0 ]; then
1099
+ createConfForScript
1100
+ fi
1101
+
1102
+ if [ $MODE = "stream" ]; then
1103
+ createRecoveryConf
1104
+ cp templates/basebackup-stream.sh editted/
1105
+ cp templates/failover.sh editted/
1106
+ else
1107
+ cp templates/basebackup-replication.sh editted/
1108
+ cp templates/pgpool_recovery_pitr editted/
1109
+ fi
1110
+ cp templates/pgpool_remote_start editted/
1111
+
1112
+ echo
1113
+ echo "Save configuration information for installation on node 1."
1114
+ writeValList
1115
+ rm -rf $TEMP_CONF
1116
+ mkdir $TEMP_CONF
1117
+ cp editted/* $TEMP_CONF
1118
+ chown -R postgres:postgres $TEMP_CONF
1119
+ chmod 700 $TEMP_CONF
1120
+ chmod 600 $TEMP_CONF/*
1121
+
1122
+ # node 1
1123
+ else
1124
+ echo
1125
+ echo "Copy configuration information from node 0."
1126
+ su $PG_SUPER_USER -c "rm -rf $TEMP_CONF; mkdir $TEMP_CONF; scp $PG_SUPER_USER@$DEST_HOST:$TEMP_CONF/* $TEMP_CONF"
1127
+ cp $TEMP_CONF/* editted
1128
+ rm -rf $TEMP_CONF
1129
+ readValList
1130
+ if [ $USE_WATCHDOG -eq 1 ]; then
1131
+ rewriteWatchdog
1132
+ fi
1133
+ fi
1134
+
1135
+ # -------------------------------------------------------------------
1136
+ # [3-1] install RPMs
1137
+ # -------------------------------------------------------------------
1138
+
1139
+ echo
1140
+ echo $BOLD"================================================================="$SPAN_END
1141
+ echo "* Installation"
1142
+ echo $BOLD"================================================================="$SPAN_END
1143
+
1144
+ echo
1145
+ echo "* Setup pgpool-II"
1146
+
1147
+ # 1. install pgpool-II and pgpoolAdmin
1148
+ ynQuestion "Do you install pgpool really?"
1149
+ if [ $? -ne 0 ]; then
1150
+ exit 1
1151
+ fi
1152
+
1153
+ echo
1154
+ doInstall
1155
+ if [ $? -ne 0 ]; then exit 1; fi
1156
+
1157
+ # -------------------------------------------------------------------
1158
+
1159
+ # 2. rewrite pgpool.conf
1160
+ echo
1161
+ echo -n "- rewrite pgpool.conf ... "
1162
+ cp editted/pgpool.conf $PGPOOL_CONF_DIR
1163
+ if [ $? -ne 0 ]; then
1164
+ echo "Failed."
1165
+ echo " Please put pgpool.conf in the current directory to $PGPOOL_CONF_DIR manually. Continuing anyway."
1166
+ else
1167
+ echo "OK."
1168
+ fi
1169
+
1170
+ # -------------------------------------------------------------------
1171
+
1172
+ # 3. rewrite pcp.conf
1173
+ echo -n "- rewrite pcp.conf ... "
1174
+ if [ "$PG_ADMIN_USER_PASSWD" = "" ]; then
1175
+ echo "Skipped."
1176
+ else
1177
+ MD5_PASSWD=`$PGPOOL_BIN_DIR/pg_md5 $PG_ADMIN_USER_PASSWD`
1178
+ echo "${PG_ADMIN_USER}:${MD5_PASSWD}" >> editted/pcp.conf
1179
+
1180
+ cp editted/pcp.conf $PGPOOL_CONF_DIR
1181
+ if [ $? -ne 0 ]; then
1182
+ echo "Failed."
1183
+ echo " Please put pgpool.conf in the current directory to $PGPOOL_CONF_DIR manually. Continuing anyway."
1184
+ else
1185
+ echo "OK."
1186
+ fi
1187
+ fi
1188
+
1189
+ # -------------------------------------------------------------------
1190
+
1191
+ # 4. setuid for watchdog
1192
+ echo -n "- setup watchdog ... "
1193
+ if [ $USE_WATCHDOG -eq 1 ]; then
1194
+ copySbin
1195
+ echo "OK."
1196
+ else
1197
+ echo "Skipped."
1198
+ fi
1199
+
1200
+ # -------------------------------------------------------------------
1201
+ # [3-3] Setup pgpoolAdmin
1202
+ # -------------------------------------------------------------------
1203
+
1204
+ echo
1205
+ echo "* Setup pgpoolAdmin"
1206
+
1207
+ # 1. put conf file
1208
+ echo -n "- rewrite pgmgt.conf.php ... "
1209
+ cp editted/pgmgt.conf.php $ADMIN_DIR/conf/
1210
+ if [ $? -ne 0 ]; then
1211
+ echo "Failed."
1212
+ echo " Please put pgmgt.conf.php in the current directory to $ADMIN_DIR/conf manually. Continuing anyway."
1213
+ else
1214
+ echo "OK."
1215
+ chmod 666 $ADMIN_DIR/conf/pgmgt.conf.php
1216
+ fi
1217
+
1218
+ # -------------------------------------------------------------------
1219
+
1220
+ # 2. create log directories
1221
+ echo "- create log directries ... OK."
1222
+ if [ ! -d $PID_FILE_DIR ]; then
1223
+ mkdir $PID_FILE_DIR
1224
+ fi
1225
+ if [ ! -d $PGPOOL_LOG_DIR ]; then
1226
+ mkdir $PGPOOL_LOG_DIR
1227
+ fi
1228
+
1229
+ # -------------------------------------------------------------------
1230
+
1231
+ # 3. set permission
1232
+ chownToApache $PID_FILE_DIR
1233
+ chownToApache $PGPOOL_LOG_DIR
1234
+ chmod 777 $PGPOOL_LOG_DIR
1235
+ chmod 777 $ADMIN_DIR/templates_c/
1236
+
1237
+ # -------------------------------------------------------------------
1238
+ # [4-1] initdb and put config files
1239
+ # -------------------------------------------------------------------
1240
+
1241
+ INITDB_OK=0
1242
+ if [ $NODE_NO -eq 0 ]; then
1243
+ echo
1244
+ echo "* Create node 0 (localhost) 's database cluster"
1245
+ echo
1246
+
1247
+ echo -n "- initdb ... "
1248
+
1249
+ # 1. stop existing PostgreSQL
1250
+ chown $PG_SUPER_USER $PGHOME
1251
+ su - $PG_SUPER_USER -c "$PGHOME/bin/pg_ctl -D $PGDATA stop -m immediate" > /dev/null 2>&1
1252
+ rm -rf $PGDATA
1253
+ mkdir $PGDATA
1254
+ chown $PG_SUPER_USER:$PG_SUPER_USER $PGDATA
1255
+
1256
+ # -------------------------------------------------------------------
1257
+
1258
+ # 2. initdb
1259
+ su - $PG_SUPER_USER -c "$PGHOME/bin/initdb -D $PGDATA $INITDB_OPTION" > /dev/null 2>&1
1260
+
1261
+ if [ $? -ne 0 ]; then
1262
+ echo "Failed."
1263
+ echo " Please initdb manually like \"$PGHOME/bin/initdb -D $PGDATA $INITDB_OPTION\"".
1264
+
1265
+ # -------------------------------------------------------------------
1266
+
1267
+ else
1268
+ echo "OK."
1269
+ INITDB_OK=1
1270
+
1271
+ # 3. put conf files
1272
+ echo "- rewrite postgresql.conf and pcp.conf ... OK."
1273
+ cp editted/postgresql.conf $PGDATA
1274
+ cp editted/pg_hba.conf $PGDATA
1275
+
1276
+ # -------------------------------------------------------------------
1277
+
1278
+ # 4. setup online recovery
1279
+ echo "- put scripts for online recovery ... OK."
1280
+ cp editted/basebackup*.sh $PGDATA
1281
+ cp templates/pgpool_remote_start $PGDATA
1282
+ chmod 755 $PGDATA/*.sh $PGDATA/pgpool_remote_start
1283
+ chown $PG_SUPER_USER:$PG_SUPER_USER $PGDATA/*
1284
+
1285
+ if [ $MODE = "stream" ]; then
1286
+ cp editted/recovery.conf $PGDATA/recovery.done
1287
+ else
1288
+ cp editted/pgpool_recovery_pitr $PGDATA
1289
+ chmod 755 $PGDATA/pgpool_recovery_pitr
1290
+ fi
1291
+ fi
1292
+ fi
1293
+
1294
+ # -------------------------------------------------------------------
1295
+ # [4-2] Setup database
1296
+ # -------------------------------------------------------------------
1297
+
1298
+ echo
1299
+ echo "* Setup database"
1300
+
1301
+ # 1. setup failover
1302
+ echo "- put scripts for failover ... OK."
1303
+ cp editted/config_for_script $PGPOOL_CONF_DIR
1304
+ if [ $MODE = "stream" ]; then
1305
+ cp templates/failover*.sh $PGPOOL_CONF_DIR
1306
+ chmod 755 $PGPOOL_CONF_DIR/failover.sh
1307
+ fi
1308
+
1309
+ # -------------------------------------------------------------------
1310
+
1311
+ # 2. set permissions to conf files
1312
+ chownToApache "$PGPOOL_CONF_DIR/*.conf"
1313
+ chownToApache $PGPOOL_CONF_DIR
1314
+ chmod 444 $PGPOOL_CONF_DIR/config_for_script
1315
+ chmod 600 $PGPOOL_CONF_DIR/*.conf
1316
+ chmod 755 $PGPOOL_CONF_DIR
1317
+
1318
+
1319
+ # -------------------------------------------------------------------
1320
+
1321
+ # 3. setup WAL archiving
1322
+ echo "- create archive directory ... OK."
1323
+ mkdir -p $ARCHIVE_DIR
1324
+ chown $PG_SUPER_USER:$PG_SUPER_USER $ARCHIVE_DIR
1325
+
1326
+ if [ $INITDB_OK -eq 1 ]; then
1327
+ doQueries
1328
+ fi
1329
+
1330
+ # -------------------------------------------------------------------
1331
+ # [4-3] Cleaning
1332
+ # -------------------------------------------------------------------
1333
+
1334
+ if [ $NODE_NO -eq 1 ]; then
1335
+ echo
1336
+ echo "* Cleaning"
1337
+ echo "Remove configuration information on node 0."
1338
+ su $PG_SUPER_USER -c "ssh $PG_SUPER_USER@$DEST_HOST rm -rf $TEMP_CONF"
1339
+ fi
1340
+
1341
+ # -------------------------------------------------------------------
1342
+
1343
+ echo
1344
+ echo "----------------------------------------------------------------------"
1345
+ echo
1346
+ echo "Completed!"
1347
+ echo
1348
+ echo " * See pgpoolAdmin."
1349
+ echo " http://$THIS_HOST/pgpoolAdmin/"
1350
+ echo
1351
+ if [ $NODE_NO -eq 0 ]; then
1352
+ echo " * Start PostgreSQL by the user $PG_SUPER_USER"
1353
+ echo " ex.) $PGHOME/bin/pg_ctl start -D $PGDATA"
1354
+ echo
1355
+ echo " * Start pgppool from pgpoolAdmin"
1356
+ echo
1357
+ echo " * Install pgpool-II to $NODE1_HOST using install.sh"
1358
+ echo
1359
+ else
1360
+ echo " * Do online recovery of node 1 from pgpoolAdmin"
1361
+ fi
1362
+
1363
+ exit 0