reformat
[edozvola] / edozvola-dpavlin.txt
1 yum install etckeeper\r
2 cd /etc/\r
3 git config --global user.email "dpavlin@rot13.org"\r
4 git config --global user.name "Dobrica Pavlinusic"\r
5 git commit -m base\r
6 \r
7 \r
8 \r
9 https://www.postgresql.org/docs/9.6/static/warm-standby.html\r
10 \r
11 # napraviti ssh autorizaciju za postgresql korisnika bez passworda\r
12 \r
13 [root@edozvola-db-01 pgsql]# sudo -u postgres bash\r
14 bash-4.2$ pwd\r
15 /var/lib/pgsql\r
16 bash-4.2$ ssh-keygen\r
17 Generating public/private rsa key pair.\r
18 Enter file in which to save the key (/var/lib/pgsql/.ssh/id_rsa):\r
19 Created directory '/var/lib/pgsql/.ssh'.\r
20 Enter passphrase (empty for no passphrase):\r
21 Enter same passphrase again:\r
22 Your identification has been saved in /var/lib/pgsql/.ssh/id_rsa.\r
23 \r
24 \r
25 bash-4.2$ cp -v .ssh/id_rsa.pub .ssh/authorized_keys\r
26 ‘.ssh/id_rsa.pub’ -> ‘.ssh/authorized_keys’\r
27 \r
28 \r
29 prekopirati isti kljuc i authoriorized keys na slave:\r
30 \r
31 \r
32 [root@edozvola-db-01 pgsql]# rsync -rav .ssh edozvola-db-02:`pwd`\r
33 root@edozvola-db-02's password:\r
34 sending incremental file list\r
35 .ssh/\r
36 .ssh/id_rsa\r
37 .ssh/id_rsa.pub\r
38 .ssh/known_hosts\r
39 \r
40 \r
41 \r
42 \r
43 \r
44 \r
45 \r
46 \r
47 # kreirati testnu bazu i tablicu\r
48 \r
49 [root@edozvola-db-01 ~]# sudo -u postgres createdb test\r
50 [root@edozvola-db-01 ~]# sudo -u postgres psql test\r
51 test=# create table test1 ( id serial, a text, b int ) ;\r
52 test=# insert into test1 (a,b) values ('foo',42) ;\r
53 INSERT 0 1\r
54 test=# insert into test1 (a,b) values ('bar',1234) ;\r
55 INSERT 0 1\r
56 \r
57 \r
58 \r
59 # nfs share za wal fileove\r
60 \r
61 [root@edozvola-db-pgpool ~]# yum install nfs-utils nfs4-acl-tools\r
62 [root@edozvola-db-pgpool ~]# systemctl enable nfs-server.service\r
63 Created symlink from /etc/systemd/system/multi-user.target.wants/nfs-server.service to /usr/lib/systemd/system/nfs-server.service.\r
64 [root@edozvola-db-pgpool ~]# systemctl start nfs-server.service\r
65 \r
66 [root@edozvola-db-pgpool ~]# mkdir -p /shared/pgsql\r
67 [root@edozvola-db-pgpool ~]# chown postgres /shared/pgsql/\r
68 \r
69 [root@edozvola-db-pgpool ~]# vi /etc/exports\r
70 \r
71 [root@edozvola-db-pgpool ~]# cat /etc/exports\r
72 /shared/pgsql edozvola-db-01(rw,no_root_squash) edozvola-db-02(rw,no_root_squash)\r
73 \r
74 [root@edozvola-db-pgpool ~]# exportfs -va\r
75 exporting edozvola-db-01:/shared/pgsql\r
76 exporting edozvola-db-02:/shared/pgsql\r
77 \r
78 \r
79 \r
80 # mount na database serverima\r
81 \r
82 [root@edozvola-db-01 ~]# yum install nfs-utils nfs4-acl-tools\r
83 [root@edozvola-db-01 ~]# mkdir -p /shared/pgsql\r
84 [root@edozvola-db-01 ~]# vi /etc/fstab\r
85 \r
86 [root@edozvola-db-01 ~]# grep shared /etc/fstab\r
87 edozvola-db-pgpool:/shared/pgsql        /shared/pgsql   nfs     defaults        0 0\r
88 \r
89 [root@edozvola-db-01 ~]# mount /shared/pgsql/\r
90 \r
91 ## provjeriti da li postgresql korisnik moze pisati po nfs share-u\r
92 \r
93 [root@edozvola-db-01 ~]# sudo -u postgres touch /shared/pgsql/test-01\r
94 [root@edozvola-db-01 ~]# ls -al /shared/pgsql/test-01\r
95 -rw-r--r-- 1 postgres postgres 0 Aug 18 13:57 /shared/pgsql/test-01\r
96 [root@edozvola-db-01 ~]# rm -f /shared/pgsql/test-01\r
97 \r
98 ## isto ponoviti na edozvola-db-02!\r
99 \r
100 \r
101 \r
102 \r
103 \r
104 # podesiti wal archiving\r
105 \r
106 https://www.postgresql.org/docs/9.6/static/continuous-archiving.html\r
107 \r
108 \r
109 [root@edozvola-db-01 ~]# vi /var/lib/pgsql/9.6/data/postgresql.conf\r
110 wal_level = replica\r
111 archive_mode = on\r
112 max_wal_senders = 3 \r
113 max_replication_slots = 3\r
114 archive_command = 'test ! -f /shared/pgsql/%f && cp %p /shared/pgsql/%f'\r
115 hot_standby = on\r
116 \r
117 \r
118 \r
119 \r
120 \r
121 \r
122 \r
123 \r
124 [root@edozvola-db-01 ~]# systemctl restart postgresql-9.6.service\r
125 \r
126 \r
127 \r
128 \r
129 \r
130 \r
131 \r
132 \r
133 \r
134 \r
135 \r
136 \r
137 \r
138 \r
139 \r
140 \r
141 kreirati replication korisnika\r
142 [root@edozvola-db-01 ~]# sudo -u postgres psql\r
143 \r
144 \r
145 postgres=# create user replication with password 'replication123' login replication ;\r
146 CREATE ROLE\r
147 \r
148 \r
149 [root@edozvola-db-01 ~]# vi /var/lib/pgsql/9.6/data/pg_hba.conf\r
150 \r
151 \r
152 host    replication     replication     10.200.1.62/24          md5\r
153 \r
154 \r
155 netmask je /24 da mozemo imati istu konfiguraciju na oba node-a\r
156 \r
157 \r
158 \r
159 \r
160 \r
161 \r
162 testirati replikaciju\r
163 [root@edozvola-db-01 ~]# sudo -u postgres psql test\r
164 test=# insert into test1 (a,b) values ('baz',3);\r
165 INSERT 0 1\r
166 \r
167 \r
168 \r
169 \r
170 napraviti slave instancu\r
171 db-01 => db-02\r
172 \r
173 \r
174 [root@edozvola-db-02 ~]# systemctl stop postgresql-9.6.service\r
175 \r
176 \r
177 \r
178 \r
179 [root@edozvola-db-01 data]# sudo -u postgres psql -c "select pg_start_backup('to-slave')"\r
180 \r
181 \r
182 [root@edozvola-db-01 data]# rsync -rav --delete /var/lib/pgsql/9.6/data/ edozvola-db-02:/var/lib/pgsql/9.6/data/\r
183 \r
184 \r
185 [root@edozvola-db-01 data]# sudo -u postgres psql -c "select pg_stop_backup()"\r
186 \r
187 \r
188 \r
189 \r
190 [root@edozvola-db-02 data]# cp ~/recovery.conf .\r
191 [root@edozvola-db-02 data]# chown postgres recovery.conf\r
192 \r
193 \r
194 [root@edozvola-db-02 data]# systemctl start postgresql-9.6.service\r
195 # ili ovo dolje za bolji debugging:\r
196 [root@edozvola-db-02 data]# sudo -u postgres /usr/pgsql-9.6/bin/pg_ctl --pgdata=/var/lib/pgsql/9.6/data start\r
197 server starting\r
198 \r
199 \r
200 promote slave to master\r
201 da bi svi podaci zavrsili na slave-u, na masteru je dobro izvrsiti komandu checkpoint\r
202 \r
203 \r
204 \r
205 \r
206 [root@edozvola-db-02 data]# sudo -u postgres /usr/pgsql-9.6/bin/pg_ctl --pgdata=/var/lib/pgsql/9.6/data promote\r
207 \r
208 \r
209 \r
210 \r
211 \r
212 \r
213 \r
214 \r
215 \r
216 \r
217 \r
218 \r
219 \r
220 \r
221 \r
222 \r
223 \r
224 \r
225 [root@edozvola-db-02 ~]# cat recovery.conf\r
226 standby_mode = 'on'\r
227 primary_conninfo = 'host=10.200.1.61 port=5432 user=replication password=replication123'\r
228 restore_command = 'cp /shared/pgsql/%f %p'\r
229 archive_cleanup_command = 'pg_archivecleanup /shared/pgsql %r'\r
230 \r
231 \r
232 \r
233 \r
234 skripte\r
235 promoviranje slave-a u master\r
236 \r
237 \r
238 [root@edozvola-db-01 pgsql]# pwd\r
239 /var/lib/pgsql\r
240 [root@edozvola-db-01 pgsql]# cat promote-slave-to-master.sh\r
241 #!/bin/sh -xe\r
242 \r
243 \r
244 \r
245 \r
246 /usr/pgsql-9.6/bin/pg_ctl --pgdata=/var/lib/pgsql/9.6/data promote\r
247 \r
248 \r
249 \r
250 \r
251 \r
252 \r
253 kreiranje slave instance od mastera\r
254 [root@edozvola-db-01 pgsql]# cat create-pgsql-slave.sh\r
255 #!/bin/sh -e\r
256 \r
257 \r
258 # WARNING: this script depends that two database nodes have IPs which and in x1 and x2\r
259 # tr 12 21 does swap from currnet node number/ip to other one!\r
260 \r
261 \r
262 test "`whoami`" != "postgres" && echo "$0 needs to be run as postgres user!" && exit 1\r
263 \r
264 \r
265 here=`hostname -s`\r
266 there=`hostname -s | tr 12 21`\r
267 \r
268 \r
269 my_ip=`ip addr | grep 10.200.1. | sed 's/^.*\(10\.200\.1\.[0-9]*\)\/.*$/\1/'`\r
270 other_ip=`echo $my_ip | tr 12 21`\r
271 \r
272 \r
273 echo "Create slave on $here $my_ip using data from master on $there $other_ip"\r
274 echo "[enter] to start"\r
275 read\r
276 \r
277 \r
278 #systemctl stop postgresql-9.6.service || true\r
279 /usr/pgsql-9.6/bin/pg_ctl --pgdata=/var/lib/pgsql/9.6/data stop || true\r
280 \r
281 \r
282 echo "select pg_start_backup('slave')" | ssh $there psql\r
283 \r
284 \r
285 rsync -rav --delete --exclude pg_xlog $there:/var/lib/pgsql/9.6/data/ /var/lib/pgsql/9.6/data/\r
286 \r
287 \r
288 echo "select pg_stop_backup()" | ssh $there psql\r
289 \r
290 \r
291 test -e /var/lib/pgsql/9.6/data/recovery.done || ( echo "ERROR: no recovery.done !" && exit 1 )\r
292 cat /var/lib/pgsql/9.6/data/recovery.done | sed -e s/$my_ip/$other_ip/ > /var/lib/pgsql/9.6/data/recovery.conf\r
293 \r
294 \r
295 \r
296 \r
297 #systemctl start postgresql-9.6.service\r
298 /usr/pgsql-9.6/bin/pg_ctl --pgdata=/var/lib/pgsql/9.6/data start\r
299 \r
300 \r
301 \r
302 \r
303 \r
304 \r
305 hot_standby?\r