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