Más contenido relacionado Similar a PostgreSQL Replication Solutions (20) Más de elliando dias (20) PostgreSQL Replication Solutions1. PostgreSQL
Replication Solutions
BRUCE MOMJIAN,
ENTERPRISEDB
December, 2008
Abstract
Replication is a complex feature. POSTGRESQL supports a variety
of replication options.
http://momjian.us/presentations
3. 2
©¨ ©¨ §¦ §¦ §¦ §¦
©¨ ©¨ §¦ §¦ §¦ §¦
¨©¨© §§
§ ¦¦§ ¦¦
©¨ ©¨ §¦ §¦ §¦ §¦
©¨ ©¨ §¦ §¦ §¦ §¦
Fail Over
¡ ¡ £¢ £¢ £¢ £¢ ¤ ¥¤ ¥¤ ¥¤ ¥¤ ¥¤ ¥¤ ¥¤ ¥¤
¡ ¡ £¢ £¢ £¢ £¢ ¤ ¥¤ ¥¤ ¥¤ ¥¤ ¥¤ ¥¤ ¥¤ ¥¤
PostgreSQL Replication Solutions
¡ ¡ £¢ £¢ £¢ £¢ ¤ ¥¤ ¥¤ ¥¤ ¥¤ ¥¤ ¥¤ ¥¤ ¥¤
¡ ¡ £¢ £¢ £¢ £¢ ¤ ¥¤ ¥¤ ¥¤ ¥¤ ¥¤ ¥¤ ¥¤ ¥¤
¡ ¡ £¢ £¢ £¢ £¢ ¤ ¥¤ ¥¤ ¥¤ ¥¤ ¥¤ ¥¤ ¥¤ ¥¤
4. 3
©¨ ©¨ §¦ §¦ §¦ §¦
©¨ ©¨ §¦ §¦ §¦ §¦
©¨ ©¨ §¦ §¦ §¦ §¦
©¨ ©¨ §¦ §¦ §¦ §¦
¨© ¨© §§§§
¦ ¦ ¦ ¦
Load Balancing
¡ ¡ £¢ £¢ £¢ £¢ ¤ ¥¤ ¥¤ ¥¤ ¥¤ ¥¤ ¥¤ ¥¤
¡ ¡ ¤ ¥¤ ¥¤ ¥¤ ¥¤ ¥¤ ¥¤ ¥¤
PostgreSQL Replication Solutions
£¢ £¢ £¢ £¢
¡ ¡ ££££¤¥¤¥¤¥¤¥¤¥¤¥¤¥¤
¢ ¢ ¢ ¢
¡ ¡ £¢ £¢ £¢ £¢ ¤ ¥¤ ¥¤ ¥¤ ¥¤ ¥¤ ¥¤ ¥¤
¡ ¡ ££££¤¥¤¥¤¥¤¥¤¥¤¥¤¥¤
¢ ¢ ¢ ¢
5. 4
©¨ ©¨ ©¨ ©¨ ¦ §¦ §¦ §¦ §¦ §¦ §¦ §¦ §¦
©¨ ©¨ ©¨ ©¨ ¦ §¦ §¦ §¦ §¦ §¦ §¦ §¦ §¦
©¨ ©¨ ©¨ ©¨ ¦ §¦ §¦ §¦ §¦ §¦ §¦ §¦ §¦
©¨ ©¨ ©¨ ©¨ ¦ §¦ §¦ §¦ §¦ §¦ §¦ §¦ §¦
©©©©§§¦ §¦ §§§§¦ ¦ § ¦
¨ ¨¨¨ ¦ ¦ ¦ ¦
Data Warehousing
¥¤ ¥¤ £¢ £¢ £¢ £¢ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡
¥¤ ¥¤ £¢ £¢ £¢ £¢ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡
¤¥¤¥ ££££¡¡ ¡ ¡¡¡¡ ¡
PostgreSQL Replication Solutions
¢ ¢¢¢
¥¤ ¥¤ £¢ £¢ £¢ £¢ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡
¤¥¤¥ ££££¡¡ ¡ ¡¡¡¡ ¡
¢ ¢¢¢
6. ©¨ ©¨ ¡ ¡ ¡ ¡ 5
©¨ ©¨ ¡ ¡ ¡ ¡
©¨ ©¨ ¡ ¡ ¡ ¡
©¨ ©¨ ¡ ¡ ¡ ¡
©¨ ©¨ ¡ ¡ ¡ ¡
Remote Servers
£¢ £¢ ¥¤ ¥¤ ¥¤ ¥¤ §¦ §¦ §¦ §¦ §¦ §¦ §¦
£¢ £¢ ¥¤ ¥¤ ¥¤ ¥¤ §¦ §¦ §¦ §¦ §¦ §¦ §¦
PostgreSQL Replication Solutions
¢£ ¢£¥¥¥¥¦§¦§¦§¦§ ¦§¦§¦§
¤ ¤¤ ¤
£¢ £¢ ¥¤ ¥¤ ¥¤ ¥¤ §¦ §¦ §¦ §¦ §¦ §¦ §¦
£¢ £¢ ¥¤ ¥¤ ¥¤ ¥¤ §¦ §¦ §¦ §¦ §¦ §¦ §¦
7. 6
Mobile Servers
PostgreSQL Replication Solutions
¡ ¡ ¥¤ ¥¤ ¥¤ ¥¤ £¢ £¢ £¢ £¢ £¢ £¢ £¢
¡ ¡ ¥¤ ¥¤ ¥¤ ¥¤ £¢ £¢ £¢ £¢ £¢ £¢ £¢
¡ ¡ ¥¤ ¥¤ ¥¤ ¥¤ £¢ £¢ £¢ £¢ £¢ £¢ £¢
¡ ¡ ¥¤ ¥¤ ¥¤ ¥¤ £¢ £¢ £¢ £¢ £¢ £¢ £¢
§§ ¡¨ ¦ §§ ¡¨ §§§§¥§¥§¥§¥§§§§§§¢£§§¢£§§¢£§§¢£§§¢£§§¢£§§¢£§¨ ¦
¦ ¦ ¨ §¨ §¨ §¨ ¤§¨ ¤§¨ ¤§¨ ¤§¨ §¨ §¨ §¨ §¨ ¦ ¨ ¦ ¨ ¦ ¨ ¦ ¨ ¦ ¨ ¦ ¨ ¦
¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦
9. 8
Slave cannot execute queries
No data loss on fail-over
No overhead
Shared Storage
Network−Attached
Storage (NAS)
©¨ ©¨ ©¨ ¦ §¦ §¦ §¦ §¦ §¦
©¨ ©¨ ©¨ ¦ §¦ §¦ §¦ §¦ §¦
¨© ¨© ¨© § ¦
§ § § §
¦ ¦ ¦ ¦ ¦
©¨ ©¨ ©¨ ¦ §¦ §¦ §¦ §¦ §¦
PostgreSQL Replication Solutions
¥¤ ¥¤ £¢ £¢ £¢ ¡ ¡ ¡ ¡ ¡
¥¤ ¥¤ £¢ £¢ £¢ ¡ ¡ ¡ ¡ ¡
¢£ ¢£ ¢£ ¡
¥ ¥ ¡ ¡ ¡ ¡
¤ ¤
¥¤ ¥¤ £¢ £¢ £¢ ¡ ¡ ¡ ¡ ¡
¡ ¡ ¡ ¡ ¡
10. 9
Synchronous or asynchronous
Possible data loss on fail-over
Slave cannot execute queries
when using asynchronous
No overhead on master
Storage Mirroring
©¨ ©¨ ©¨ §¦ §¦ §¦ §¦ §¦
©¨ ©¨ ©¨ §¦ §¦ §¦ §¦ §¦
¨© ¨© ¨© § ¦
§ § § §
¦ ¦ ¦ ¦
©¨ ©¨ ©¨ §¦ §¦ §¦ §¦ §¦
PostgreSQL Replication Solutions
DRBD
¤¥ ¥ ¤ £ ¢ £ ¢ £ ¢ ¡ ¡ ¡ ¡ ¡
¥¤ ¥¤ £¢ £¢ £¢ ¡ ¡ ¡ ¡ ¡
¡ ¡ ¡ ¡
¥ ¥
¤ ¤ ¢£¢£ ¢£ ¡
¥¤ ¥¤ £¢ £¢ £¢ ¡ ¡ ¡ ¡ ¡
¡ ¡ ¡ ¡ ¡
11. 10
Allowing slaves to execute queries
Synchronous and auto-fail-over
Possible data loss on fail-over
modes under development
when using asychonous
No overhead on master
is under development
Point-In-Time Recovery (PITR)
©¨ ©¨ ©¨ ¦ §¦ §¦ §¦ §¦ §¦
¨© © ¨ © ¨ ¦ § ¦ § ¦ § ¦ § ¦ § ¦
§ § § §
¨¨¨ § ¦
© © ©
¦ ¦ ¦ ¦ ¦
©¨ ©¨ ©¨ ¦ §¦ §¦ §¦ §¦ §¦
¦ §¦ §¦ §¦ §¦ §¦
Ahead
(WAL)
Write
PostgreSQL Replication Solutions
Log
¥¤ ¥¤ £¢ £¢ £¢ ¡ ¡ ¡ ¡ ¡
¥¤ ¥¤ £¢ £¢ £¢ ¡ ¡ ¡ ¡ ¡
¥ ¥ ¡ ¡ ¡ ¡ ¡
¤ ¤ £ ¢ £ ¢ £ ¢
¥¤ ¥¤ £¢ £¢ £¢ ¡ ¡ ¡ ¡ ¡
12. 11
Replication possible even over
Possible data loss on fail-over
Table-level granularity allows
Triggers add overhead to the
Slave can execute read-only
complex data partitioning
configurations
slow links
queries
master
Slony
¨ ©¨ ©¨ ¡ ¡ ¡ ¡
¨ ©¨ ©¨ ¡ ¡ ¡ ¡
¨ ¨© ¨© ¡¡¡¡
¨ ©¨ ©¨ ¡ ¡ ¡ ¡
¨ ¨©¨©¡¡¡¡
¡ ¡ ¡ ¡
Asynchronous
PostgreSQL Replication Solutions
¢ £¢ £¢ ¥¤ ¥¤ ¥¤ ¥¤ §¦ §¦ §¦ §¦ §¦ §¦ §¦
¢ £¢ £¢ ¥¤ ¥¤ ¥¤ ¥¤ §¦ §¦ §¦ §¦ §¦ §¦ §¦
¢ ¢£ ¢£ ¥¥¥¥§¦§¦§¦§¦§¦§¦§¦
¤ ¤ ¤ ¤
¢ £¢ £¢ ¥¤ ¥¤ ¥¤ ¥¤ §¦ §¦ §¦ §¦ §¦ §¦ §¦
¢ ¢£ ¢£ ¥¥¥¥§¦§¦§¦§¦§¦§¦§¦
¤ ¤ ¤ ¤
13. 12
Slony - Cascading Slaves
54 54 32 32 32 10 10 10 10 10 )( )( ' ' ' $ %$ %$ %$ %$ %$
54 54 32 32 32 10 10 10 10 10 )( )( ' ' ' $ %$ %$ %$ %$ %$
@ 5 7@ 5 7@ 79 9 9 @ 7@ 7@ 7@ 1 7@ 1 71 97@ 1 7
777723@ 7723@ 7723@ 777777@77@ 1 9 0
94 94 9 9 9 9 90 90 0 90 8 ) 7) 67 6 6 678 78 7% 678 % 78 % 78 % 7
78787677'8 77'8 787'678777877778 % 6 $
6( ( 6 6$ $ 6$ 6$ 6$
54 54 32 32 32 10 10 10 10 10 )( )( ' ' ' $ %$ %$ %$ %$ %$
# # ! ! !
# # ! ! !
7777777777777P I
P # 7P # 7P 7P !7P !7P !7P 7P 7P 7P 7P 7P 7P 7
I I I I I I I I I I I I I
# # ! ! ! ¨ ©¨ ©¨ ©¨ ¦ §¦ §¦ §¦ §¦ §¦
¨ ©¨ ©¨ ©¨ ¦ §¦ §¦ §¦ §¦ §¦
C77 G7C 7C 7BG77H7H77H7H7H7
H7HC7HC7¨B77¨©H77¨©H7HC7¨©7HC777HC7777HC § BG ¦
7 BG7 BG BG BG7C 7C 7§ BG7C § 7C § 7C § 7
BG BG BG ¦ ¦ BG ¦ BG ¦ BG ¦
¨ ©¨ ©¨ ©¨ ¦ §¦ §¦ §¦ §¦ §¦
¦ §¦ §¦ §¦ §¦ §¦
¥¤ ¥¤ £¢ £¢ £¢
¥¤ ¥¤ £¢ £¢ £¢
¥ 7¥ 77£7£7£7777 7 7 A7 7 A
A ¤ A ¤ A A ¢ A ¢ A ¢ A A A A A A
¥¤ ¥¤ £¢ £¢ £¢
¡ ¡
¡ ¡
F7F7F7DE77F 77F 7F7DE7F777F7777F DE
¡ 7¡ DE77D7D77DE7F 7F 7 DE7F 7F 7F 7
E
D77 E E 7D7D77D7D7D7 E E E E E
¡ ¡
PostgreSQL Replication Solutions
14. 13
Subscribers
Other
Subscriber
¥ ¥ ¥ ¥ ¥ ¥ ¥ ¥ ¥ ¥ ¥ ¥ ¥
¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤
¥ ¥ ¥ ¥ ¥ ¥ ¥ ¥ ¥ ¥ ¥ ¥ ¥
¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤
sl_log
¥ ¥ ¥ ¥ ¥ ¥ ¥ ¥ ¥ ¥ ¥ ¥ ¥
¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤
¥ ¥ ¥ ¥ ¥ ¥ ¥ ¥ ¥ ¥ ¥ ¥ ¥
¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤
¥ ¥ ¥ ¥ ¥ ¥ ¥ ¥ ¥ ¥ ¥ ¥ ¥
¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤
¥ ¥ ¥ ¥ ¥ ¥ ¥ ¥ ¥ ¥ ¥ ¥ ¥
¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤
¥ ¥ ¥ ¥ ¥ ¥ ¥ ¥ ¥ ¥ ¥ ¥ ¥
¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤
¥ ¥ ¥ ¥ ¥ ¥ ¥ ¥ ¥ ¥ ¥ ¥ ¥
¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤
modifications
CREATE
TRIGGER
prevents
Slony Internals
% % % % % % % % # # # # # # # #
$ $ $ $ $ $ $ $
© © © © © © © © § § § § § § § §
¨ ¨ ¨ ¨ ¨ ¨ ¨ ¨ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦
% % % % % % % % # # # # # # # #
$ $ $ $ $ $ $ $
© © © © © © © © § § § § § § § §
¨ ¨ ¨ ¨ ¨ ¨ ¨ ¨ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦
% % % % % % % % # # # # # # # #
$ $ $ $ $ $ $ $
© © © © © © © © § § § § § § § §
¨ ¨ ¨ ¨ ¨ ¨ ¨ ¨ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦
User
© © © © © © © © § § § § § § § §
¨ ¨ ¨ ¨ ¨ ¨ ¨ ¨ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦
© © © © © © © © § § § § § § § §
¨ ¨ ¨ ¨ ¨ ¨ ¨ ¨ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦
© © © © © © © © § § § § § § § §
¨ ¨ ¨ ¨ ¨ ¨ ¨ ¨ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦
© © © © © © © © § § § § § § § §
¨ ¨ ¨ ¨ ¨ ¨ ¨ ¨ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦
© © © © © © © © § § § § § § § §
¨ ¨ ¨ ¨ ¨ ¨ ¨ ¨ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦
© © © © © © © © § § § § § § § §
¨ ¨ ¨ ¨ ¨ ¨ ¨ ¨ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦
Slonik
fills sl_log
TRIGGER
CREATE
¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡
¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡
sl_log
¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡
Origin
¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡
¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡
CREATE
¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡
TABLE
PostgreSQL Replication Solutions
¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡
...
¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡
¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡
! ! ! ! ! ! ! ! ' ' ' ' ' ' ' '
£ £ £ £ £ £ £ £
¢ ¢ ¢ ¢ ¢ ¢ ¢ ¢
! ! ! ! ! ! ! ! ' ' ' ' ' ' ' '
£ £ £ £ £ £ £ £
¢ ¢ ¢ ¢ ¢ ¢ ¢ ¢
£ £ £ £ £ £ £ £
¢ ¢ ¢ ¢ ¢ ¢ ¢ ¢
User
£ £ £ £ £ £ £ £
¢ ¢ ¢ ¢ ¢ ¢ ¢ ¢
£ £ £ £ £ £ £ £
¢ ¢ ¢ ¢ ¢ ¢ ¢ ¢
£ £ £ £ £ £ £ £
¢ ¢ ¢ ¢ ¢ ¢ ¢ ¢
£ £ £ £ £ £ £ £
¢ ¢ ¢ ¢ ¢ ¢ ¢ ¢
£ £ £ £ £ £ £ £
¢ ¢ ¢ ¢ ¢ ¢ ¢ ¢
£ £ £ £ £ £ £ £
¢ ¢ ¢ ¢ ¢ ¢ ¢ ¢
15. 14
Subscriber
sl_log
@ @ @ @ @ @ @ @
@A @A @A @A @A @A @A @A % % % % % % % % 9 9 9 9 9 9 9 9
$ $ $ $ $ $ $ $ 8 8 8 8 8 8 8 8
© © © © © © © © ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡
¨ ¨ ¨ ¨ ¨ ¨ ¨ ¨
A A A A A A A A % % % % % % % % 9 9 9 9 9 9 9 9
$ $ $ $ $ $ $ $ 8 8 8 8 8 8 8 8
© © © © © © © © ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡
¨ ¨ ¨ ¨ ¨ ¨ ¨ ¨
© © © © © © © © ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡
¨ ¨ ¨ ¨ ¨ ¨ ¨ ¨
User
© © © © © © © © ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡
¨ ¨ ¨ ¨ ¨ ¨ ¨ ¨
© © © © © © © © ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡
¨ ¨ ¨ ¨ ¨ ¨ ¨ ¨
© © © © © © © © ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡
¨ ¨ ¨ ¨ ¨ ¨ ¨ ¨
© © © © © © © © ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡
¨ ¨ ¨ ¨ ¨ ¨ ¨ ¨
© © © © © © © © ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡
¨ ¨ ¨ ¨ ¨ ¨ ¨ ¨
© © © © © © © © ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡
¨ ¨ ¨ ¨ ¨ ¨ ¨ ¨
Slony Multi-Slave
Subscriber
sl_log
' ' ' ' ' ' ' ' 1 1 1 1 1 1 1 1 3 3 3 3 3 3 3 3
0 0 0 0 0 0 0 0 2 2 2 2 2 2 2 2
# # # # # # # # ! ! ! ! ! ! ! !
' ' ' ' ' ' ' ' 1 1 1 1 1 1 1 1 3 3 3 3 3 3 3 3
0 0 0 0 0 0 0 0 2 2 2 2 2 2 2 2
# # # # # # # # ! ! ! ! ! ! ! !
# # # # # # # # ! ! ! ! ! ! ! !
User
# # # # # # # # ! ! ! ! ! ! ! !
# # # # # # # # ! ! ! ! ! ! ! !
# # # # # # # # ! ! ! ! ! ! ! !
# # # # # # # # ! ! ! ! ! ! ! !
# # # # # # # # ! ! ! ! ! ! ! !
# # # # # # # # ! ! ! ! ! ! ! !
PostgreSQL Replication Solutions
sl_log
Origin
) ) ) ) ) ) ) ) 5 5 5 5 5 5 5 5 7 7 7 7 7 7 7 7
( ( ( ( ( ( ( ( 4 4 4 4 4 4 4 4 6 6 6 6 6 6 6 6
£ £ £ £ £ £ £ £ ¥ ¥ ¥ ¥ ¥ ¥ ¥ ¥ § § § § § § § §
¢ ¢ ¢ ¢ ¢ ¢ ¢ ¢ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦
) ) ) ) ) ) ) ) 5 5 5 5 5 5 5 5 7 7 7 7 7 7 7 7
( ( ( ( ( ( ( ( 4 4 4 4 4 4 4 4 6 6 6 6 6 6 6 6
£ £ £ £ £ £ £ £ ¥ ¥ ¥ ¥ ¥ ¥ ¥ ¥ § § § § § § § §
¢ ¢ ¢ ¢ ¢ ¢ ¢ ¢ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦
) ) ) ) ) ) ) ) 5 5 5 5 5 5 5 5 7 7 7 7 7 7 7 7
( ( ( ( ( ( ( ( 4 4 4 4 4 4 4 4 6 6 6 6 6 6 6 6
User
£ £ £ £ £ £ £ £ ¥ ¥ ¥ ¥ ¥ ¥ ¥ ¥ § § § § § § § §
¢ ¢ ¢ ¢ ¢ ¢ ¢ ¢ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦
£ £ £ £ £ £ £ £ ¥ ¥ ¥ ¥ ¥ ¥ ¥ ¥ § § § § § § § §
¢ ¢ ¢ ¢ ¢ ¢ ¢ ¢ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦
£ £ £ £ £ £ £ £ ¥ ¥ ¥ ¥ ¥ ¥ ¥ ¥ § § § § § § § §
¢ ¢ ¢ ¢ ¢ ¢ ¢ ¢ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦
£ £ £ £ £ £ £ £ ¥ ¥ ¥ ¥ ¥ ¥ ¥ ¥ § § § § § § § §
¢ ¢ ¢ ¢ ¢ ¢ ¢ ¢ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦
£ £ £ £ £ £ £ £ ¥ ¥ ¥ ¥ ¥ ¥ ¥ ¥ § § § § § § § §
¢ ¢ ¢ ¢ ¢ ¢ ¢ ¢ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦
£ £ £ £ £ £ £ £ ¥ ¥ ¥ ¥ ¥ ¥ ¥ ¥ § § § § § § § §
¢ ¢ ¢ ¢ ¢ ¢ ¢ ¢ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦