1. Contexte
Sharding-proxy positionné en tant que base de données client proxy transparent, paquet de base de données fournit une version binaire serveur de protocole pour un support complet pour les langues hétérogènes. PostgreSQL offre actuellement la première version, il peut utiliser des protocoles d'accès client PostgreSQL compatibles (tels que: PostgreSQL commande client, Navicat, etc.), les données d'exploitation plus convivial pour le DBA.
- Est complètement transparent pour l'application, il peut être utilisé directement comme l'utilisation de PostgreSQL.
- Il applique à tout accord MySQL / PostgreSQL compatible du client.
2, l'installation docker, cette étape est rien à proprement parler
3, ce qui rend sharding proxy Miroir
Premier profil de production: feuilles divisées config-sharding.yaml utilisés, la fin du texte
schemaName: sharding_db DataSources: Ds0: url: jdbc: postgresql: // 127.0.0.1:5432/ds0 Nom d' utilisateur: Postgres Mot de passe: 123456 connectionTimeoutMilliseconds: 30000 idleTimeoutMilliseconds: 60000 maxLifetimeMilliseconds: 1800000 MaxPoolSize: 65 DS1: url: jdbc: postgresql: // 127.0.0.1:5432/ds1 Nom d' utilisateur: postgres Mot de passe: 123456 connectionTimeoutMilliseconds: 30000 idleTimeoutMilliseconds: 60000 maxLifetimeMilliseconds:1800000 MaxPoolSize: 65 shardingRule: tables: t_order: actualDataNodes: ds $ { 0 .. 1 } .t_order $ { 0 .. 1 } databaseStrategy: en ligne: shardingColumn: user_id algorithmExpression: ds $ {user_id % 2 } tableStrategy: en ligne: shardingColumn : order_id algorithmExpression: t_order $ {order_id % 2 } KeyGenerator: Type: Snowflake colonne: order_id t_order_item: actualDataNodes: ds $ { 0 .. 1 } .t_order_item $ { 0 .. 1 } databaseStrategy: en ligne: shardingColumn: user_id algorithmExpression: ds $ {user_id % 2 } tableStrategy: en ligne: shardingColumn: order_id algorithmExpression: t_order_item $ {order_id % 2 } KeyGenerator: Type: Snowflake colonne: order_item_id bindingTables: - t_order, t_order_item defaultTableStrategy: none: encryptRule: chiffreurs: encryptor_aes: Type: aes accessoires: aes.key.value: 123456ABC tables: t_order: colonnes: order_id: plainColumn: order_plain cipherColumn: order_cipher chiffreur: encryptor_aes
Le fichier de configuration ci-dessus est divisé en trois: schemaName, sources de données, shardingRule
schemaName défini sharding nom de base de données proxy;
DataSource source de données de définition peut être ajoutée une pluralité de, chaque source de données;
shardingRule défini fragmentation des règles.
Par l'exemple qui doit être coupé en tranches bibliothèque Ds0 et DS1, une table logique pour chaque fragment bibliothèque et t_order_item t_order deux tables, règles de fragmentation Tableau sont order_id% 2, de sorte que chaque banque a quatre table de vérité, bibliothèque postgres construite à l'avance et tables: t_order_0, t_order_1, t_order_item_0, t_order_item_1, règle de la fragmentation des bibliothèques user_id% 2.
La production de fichiers server.yaml, fichier de changement est une configuration commune, certaines des informations de connexion de sharding peoxy
authentification: les utilisateurs: root: Mot de passe: root sharding: Mot de passe: sharding authorizedSchemas: sharding_db props: max.connections.size.per.query: 1 acceptor.size: 16 executor.size: 16 proxy.transaction.enabled: faux proxy.opentracing .Enabled: faux sql.show: vrai
Ecrire dockerfile
DE sharding- proxy ADD config -sharding.yaml / opt / sharding-proxy / conf / config- sharding.yaml ADD server.yaml /opt/sharding-proxy/conf/server.yaml
Mirrored
build docker -t sharding-proxy: v1.
4, ce qui rend miroir postgresql, et initialiser la base de données
De la config-sharding.yaml fichier de configuration ci-dessus, le besoin pgsql construire deux bibliothèques Ds0 DS1, et chaque bibliothèque a quatre vraie table, vous avez besoin d'avance dans les bibliothèques et les tables Postgres construites: t_order_0, t_order_1, t_order_item_0, t_order_item_1
L'écriture des scripts shell pour initialiser la base de données
#! / bin / bash dbname = Ds0 # sql pour vérifier l'existence éventuelle de la base de données donnée sql1 = " select count (1) à partir pg_catalog.pg_database où datname = 'dbname $' " n selon la façon dont PATH est psql ensemble peut nécessiter un qualifié chemin cmd = " psql -t -c \" $ sql1 \ » " db_exists = `eval $ cmd` si [$ db_exists -eq 0 ]; puis psql -v ON_ERROR_STOP = 1 --username " $ POSTGRES_USER " --dbname " $ POSTGRES_DB "EOSQL CREATE DATABASE Ds0; CREATE DATABASE DS1; \ c DS0; CREATE TABLE t_order_0 (order_id INT NOT NULL, NULL user_id INT NOT, état CHAR ( 10 )); CREATE TABLE t_order_1 (order_id INT NOT NULL, NULL user_id INT NOT, état CHAR ( 10 )); CREATE TABLE t_order_item_0 (order_id INT NOT NULL, NULL user_id INT NOT, état CHAR ( 10 )); CREATE TABLE t_order_item_1 (order_id INT NOT NULL, NULL user_id INT NOT, état CHAR ( 10 )); \ c ds1; CREATE TABLE t_order_0 (order_id INT NOT NULL, NULL user_id INT NOT, état CHAR ( 10 )); CREATE TABLE t_order_1 (order_id INT NOT NULL, NULL user_id INT NOT, état CHAR ( 10 )); CREATE TABLE t_order_item_0 (order_id INT NOT NULL, NULL user_id INT NOT, état CHAR ( 10 )); CREATE TABLE t_order_item_1 (order_id INT NOT NULL, NULL user_id INT NOT, état CHAR ( 10 )); EOSQL fi
Ecrire dockerfile
DE 10.1 . 11.71 / boutique en ligne / postgres: 9.4 ADD init de -user-db. sh /docker-entrypoint-initdb.d/init-user-db. sh
Mirrored
construction docker -t postfres: 9.4 . 1
5, image de démarrage
docker run - id -d -e POSTGRES_PASSWORD = 123456 -p 5432 : 5432 postgres: 9.4 . 2
docker run -it -d -p 3307 : 3307 -v /root/sharding-proxy/config-sharding.yaml:/opt/sharding-proxy/conf/config-sharding.yaml sharding-proxy: v1
6, test de connexion
connexion Pgsql et afficher la table de bibliothèque par défaut est créé
Connexion proxy sharding, Rom nacicat temporairement ne sais pas pourquoi, même avec pgsql cli est possible
psql -U sharding_db -h postgres -p 3307
Insérer des données de test
En vue des données de journal sharding conteneur proxy qui est inséré dans une base de données spécifique tableau
Respectivement, pour vérifier les données pour voir Ds0 DS1
Accès direct au proxy sharding dans