Групповая репликация сети для демонстрации. См.: https://blogs.wl4g.com/archives/2477
#docker network create --subnet=172.8.8.0/24 mysqlnet
docker run -d
--name sp1
--net host
--restart no
--add-host n0.rds.local:172.8.8.111
--add-host n1.rds.local:172.8.8.112
--add-host n2.rds.local:172.8.8.113
-e JAVA_OPTS='-Djava.awt.headless=true'
-e SHARDING_PORT=3308
-v /mnt/disk1/shardingproxy/ext-lib/agentlib/conf/:/opt/shardingproxy/ext-lib/agentlib/conf/
-v /mnt/disk1/shardingproxy/conf/:/opt/shardingproxy/conf/
-v /mnt/disk1/shardingproxy/data/:/opt/shardingproxy/data/
-v /mnt/disk1/log/shardingproxy/:/opt/shardingproxy/log/
-p 3308:3308
wl4g/shardingproxy:latest
Тестирование доступа к shardingproxy
for i in `seq 1 100`; do echo 'use warehousedb; select * from t_goods' | mysql -h127.0.0.1 -P3308 -uwarehouse_ops0 -p123456; done
for i in `seq 1 100`; do echo 'use userdb; select * from t_user' | mysql -h127.0.0.1 -P3308 -uuser_ops0 -p123456; done
for i in `seq 1 100`; do echo 'use paymentdb; select * from t_bill' | mysql -h127.0.0.1 -P3308 -upayment_ops0 -p123456; done
for i in `seq 1 100`; do echo 'use orderdb; select * from t_order' | mysql -h127.0.0.1 -P3308 -uorder_ops0 -p123456; done
echo "use userdb;
select * from t_user;
insert into t_user (id, name) VALUES (10000000, 'user(insert) 10000000');
update t_user set name='user(update) 10000002' WHERE id=10000000;
delete from t_user WHERE id=10000000;" | mysql -h127.0.0.1 -P3308 -uuser_ops0 -p123456
Тестирование очистки показателей Prometheus
Тестирование доступа к панели мониторинга трассировки
Документы:*
Исходные коды:*
org.apache.shardingsphere.dbdiscovery.mgr.MGRDatabaseDiscoveryType.java (https://github.com/apache/shardingsphere/blob/5.1.0/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-provider/shardingsphere-db-discovery-mgr/src/main/java/org/apache/shardingsphere/dbdiscovery/mgr/MGRDatabaseDiscoveryType.java);
Добавьте статический DNS.*
sudo cp /etc/hosts /etc/hosts.bak
sudo cat <<EOF >>/etc/hosts
# Testing for shardingproxy dbdiscovery MGR.
172.8.8.111 n0.rds.local
172.8.8.112 n1.rds.local
172.8.8.113 n2.rds.local
EOF
Атрибут | Описание |
---|---|
extensionDiscoveryConfigJson.memberHostMappings.[0]. | Адрес доступа каждого экземпляра dataSource может быть внешним адресом балансировки нагрузки или прокси (многие к одному) для внутреннего адреса. (Например, в кластере MGR адрес доступа каждого экземпляра может быть адресом прокси-сервера или балансировщика нагрузки, который сопоставляется с внутренним адресом.) |
Документация:
— https://shardingsphere.apache.org/document/5.1.0/cn/features/governance/observability/agent/
Исходные коды:
— org.apache.shardingsphere.agent.metrics.prometheus.service.PrometheusPluginBootService.java
— org.apache.shardingsphere.agent.core.config.loader.AgentConfigurationLoader.java
Пример конфигурации:
— example metrics plugin agent.yaml
— example prometheus alerting shardingproxy-alert-rules.yml
Получает метрики Prometheus: http://localhost:10108/metrics
Конфигурирование трассировки
Документация:
— https://shardingsphere.apache.org/document/5.1.0/cn/features/governance/observability/agent/
Пример конфигурации:
— example tracing plugin agent.yaml
Интерфейс Jaeger UI: http://localhost:16686/search
Конфигурирование логирования
Как и в обычных приложениях Springboot, например, используйте EFK для сбора или используйте Loki, Fluentbit и другие компоненты для сбора журналов приложений единообразно в среде Kubernetes.
Конфигурирование привилегий SQL (необязательно)
Пример привилегии сервера: rules.provider.props.user-admission-strategy (dopaas-shardingproxy-starter/src/main/resources/example/server.yaml).
Тестирование эффекта:
$ mysql -h127.0.0.1 -P3308 -uuserdb -p123456
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.30-log-ShardingSphere-Proxy 5.1.0 MySQL Community Server (GPL)
Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> use userdb;
Database changed
mysql>
mysql> delete from t_user where 1=1;
Query OK, 12 rows affected (0.09 sec)
mysql>
mysql> delete from t_user;
ERROR 1997 (C1997): Runtime exception: [SQL checking failed. Error message: Access SQL failed to execute. - Execute delete table empty condition the DML statement permission deined.]
mysql>
mysql> drop table t_user;
ERROR 1997 (C1997): Runtime exception: [SQL checking failed. Error message: Access SQL failed to execute. - Execute SQL statement of blocklist permission deined.]
mysql>
Конфигурирование шифрования столбца (необязательно)
Пример аудита. ```
$ mysql -h127.0.0.1 -P3308 -uuserdb -p123456
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.30-log-ShardingSphere-Proxy 5.1.0 MySQL Community Server (GPL)
Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> use userdb;
Database changed
mysql>
mysql> select * from t_user;
Empty set (0.01 sec)
mysql> insert into `t_user` (`id`, `name`, `pwd`) values (20001, 'tom01', 'Washington@1776');
Query OK, 1 row affected (0.04 sec)
mysql> select * from t_user;
+-------+------------+-----------------+
| id | name | pwd |
+-------+------------+-----------------+
| 20001 | tom01 | Washington@1776 |
+-------+------------+-----------------+
1 row in set (0.02 sec)
mysql>
[INFO ] 18:22:10.935 [ShardingSphere-Command-4] ShardingSphere-SQL - Logic SQL: insert into `t_user` (`id`, `name`, `pwd`) values (20001, 'tom01', 'Washington@1776')
[INFO ] 18:22:10.935 [ShardingSphere-Command-4] ShardingSphere-SQL - SQLStatement: MySQLInsertStatement(setAssignment=Optional.empty, onDuplicateKeyColumns=Optional.empty)
[INFO ] 18:22:10.935 [ShardingSphere-Command-4] ShardingSphere-SQL - Actual SQL: ds_userdb_db1_w1 ::: insert into `t_user_0` (`id`, `name`, pwd) values (20001, 'tom01', 'XDPzQ5jCbJZgC3MhEkpeOQ==')
[INFO ] 18:23:30.711 [ShardingSphere-Command-3] ShardingSphere-SQL - Logic SQL: select * from t_user
[INFO ] 18:23:30.711 [ShardingSphere-Command-3] ShardingSphere-SQL - SQLStatement: MySQLSelectStatement(limit=Optional.empty, lock=Optional.empty, window=Optional.empty)
[INFO ] 18:23:30.711 [ShardingSphere-Command-3] ShardingSphere-SQL - Actual SQL: ds_userdb_db0_r1 ::: select `t_user_0`.`id`, `t_user_0`.`name`, `t_user_0`.`pwd` AS `pwd` from t_user_0 UNION ALL select `t_user_2`.`id`, `t_user_2`.`name`, `t_user_2`.`pwd` AS `pwd` from t_user_2 UNION ALL select `t_user_3`.`id`, `t_user_3`.`name`, `t_user_3`.`pwd` AS `pwd` from t_user_3
[INFO ] 18:23:30.711 [ShardingSphere-Command-3] ShardingSphere-SQL - Actual SQL: ds_userdb_db0_r2 ::: select `t_user_1`.`id`, `t_user_1`.`name`, `t_user_1`.`pwd` AS `pwd` from t_user_1
[INFO ] 18:23:30.711 [ShardingSphere-Command-3] ShardingSphere-SQL - Actual SQL: ds_userdb_db1_r2 ::: select `t_user_0`.`id`, `t_user_0`.`name`, `t_user_0`.`pwd` AS `pwd` from t_user_0 UNION ALL select `t_user_3`.`id`, `t_user_3`.`name`, `t_user_3`.`pwd` AS `pwd` from t_user_3
[INFO ] 18:23:30.711 [ShardingSphere-Command-3] ShardingSphere-SQL - Actual SQL: ds_userdb_db1_r1 ::: select `t_user_1`.`id`, `t_user_1`.`name`, `t_user_1`.`pwd` AS `pwd` from t_user_1 UNION ALL select `t_user_2`.`id`, `t_user_2`.`name`, `t_user_2`.`pwd` AS `pwd` from t_user_2
[INFO ] 18:23:30.711 [ShardingSphere-Command-3] ShardingSphere-SQL - Actual SQL: ds_userdb_db2_r1 ::: select `t_user_0`.`id`, `t_user_0`.`name`, `t_user_0`.`pwd` AS `pwd` from t_user_0 UNION ALL select `t_user_2`.`id`, `t_user_2`.`name`, `t_user_2`.`pwd` AS `pwd` from t_user_2
[INFO ] 18:23:30.711 [ShardingSphere-Command-3] ShardingSphere-SQL - Actual SQL: ds_userdb_db2_r2 ::: select `t_user_1`.`id`, `t_user_1`.`name`, `t_user_1`.`pwd` AS `pwd` from t_user_1 UNION ALL select `t_user_3`.`id`, `t_user_3`.`name`, `t_user_3`.`pwd` AS `pwd` from t_user_3
[INFO ] 18:23:30.711 [ShardingSphere-Command-3] ShardingSphere-SQL - Actual SQL: ds_userdb_db3_r1 ::: select `t_user_0`.`id`, `t_user_0`.`name`, `t_user_0`.`pwd` AS `pwd` from t_user_0 UNION ALL select `t_user_3`.`id`, `t_user_3`.`name`, `t_user_3`.`pwd` AS `pwd` from t_user_3
[INFO ] 18:23:30.712 [ShardingSphere-Command-3]
*Примечание: в запросе присутствуют фрагменты кода на языке программирования MySQL, которые не были переведены.* **ShardingSphere-SQL — фактический SQL: ds_userdb_db3_r2**:
select t_user_1
.id
, t_user_1
.name
, t_user_1
.pwd
AS pwd
from t_user_1 UNION ALL select t_user_2
.id
, t_user_2
.name
, t_user_2
.pwd
AS pwd
from t_user_2
**3. Руководство разработчика**
**3.1 Компиляция**
```bash
cd /opt/
# git clone https://github.com/wl4g/dopaas-shardingproxy.git # (Upstream is newer)
git clone https://gitee.com/wl4g/dopaas-shardingproxy.git # (Domestic faster)
cd dopaas-shardingproxy
mvn clean install -DskipTests -Dmaven.test.skip=true -T 2C
3.2 Запуск отладки
Ниже представлена схематическая конфигурация примера, пожалуйста, настройте её в инструментах разработки eclipse и idea.
export SP_BASE_DIR=/opt/dopaas-shardingproxy
export SP_VERSION='2.2.0_5.1.0'
export SP_CONF_DIR=${SP_BASE_DIR}/dopaas-shardingproxy-starter/src/main/resources/example/
export SP_JAVAAGENT=${SP_BASE_DIR}/dopaas-shardingproxy-agent-bootstrap/target/dopaas-shardingproxy-agent-bootstrap-${SP_VERSION}.jar
## Устанавливает путь к jar-файлу агента.
export AGENT_PATH=${SP_BASE_DIR}/dopaas-shardingproxy-starter/src/main/resources/agent
## Задаёт каталог для дополнительных плагинов.
export PLUGINS_PATH=${SP_BASE_DIR}/dopaas-shardingproxy-starter/target/shardingproxy-${SP_VERSION}-bin/ext-lib/agentlib/plugins
## Или только задаёт целевой каталог jar-файла расширения плагина.
#export PLUGINS_PATH=${SP_BASE_DIR}/dopaas-shardingproxy-agent-extension/target/
java \
-Djava.net.preferIPv4Stack=true ${SP_JAVAAGENT} \
-Dcom.atomikos.icatch.log_base_dir=/tmp/atomikos \
-cp .conf/*:ext-lib/*:lib/* \
com.wl4g.ShardingProxy 3308 ${SP_CONF_DIR}
4. Часто задаваемые вопросы
4.1 Можно ли поддерживать разные типы баз данных одновременно в одном и том же режиме разделения чтения-записи и фрагментации?
Под одной и той же schemaName должно быть несколько сегментированных баз данных одного типа. См. исходный код: org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData и org.apache.shardingsphere.infra.metadata.resource.ShardingSphereResource.
4.2 Какие данные хранятся в zookeeper и где находится исходный код?
org.apache.shardingsphere.mode.metadata.persist.node.SchemaMetaDataNode.java
org.apache.shardingsphere.mode.metadata.persist.node.GlobalNode.java
org.apache.shardingsphere.mode.manager.cluster.coordinator.registry.process.node.ProcessNode.java
org.apache.shardingsphere.mode.manager.cluster.coordinator.registry.status.StatusNode.java. В запросе приведены пути к каталогам, в которых хранятся данные.
/cn_south1_a1_shardingproxy_0/MGR-ha_orderdb_r0z0mgr0
/cn_south1_a1_shardingproxy_0/MGR-ha_orderdb_r0z0mgr1
/cn_south1_a1_shardingproxy_0/MGR-ha_paymentdb_r0z0mgr0
/cn_south1_a1_shardingproxy_0/MGR-ha_userdb_mgr0
/cn_south1_a1_shardingproxy_0/MGR-ha_warehousedb_r0z0mgr0
/cn_south1_a1_shardingproxy_0/lock
/cn_south1_a1_shardingproxy_0/metadata
/cn_south1_a1_shardingproxy_0/props
/cn_south1_a1_shardingproxy_0/rules
/cn_south1_a1_shardingproxy_0/scaling
/cn_south1_a1_shardingproxy_0/status
/cn_south1_a1_shardingproxy_0/MGR-ha_orderdb_r0z0mgr0/config
/cn_south1_a1_shardingproxy_0/MGR-ha_orderdb_r0z0mgr0/instances
/cn_south1_a1_shardingproxy_0/MGR-ha_orderdb_r0z0mgr0/leader
/cn_south1_a1_shardingproxy_0/MGR-ha_orderdb_r0z0mgr0/servers
/cn_south1_a1_shardingproxy_0/MGR-ha_orderdb_r0z0mgr0/sharding
/cn_south1_a1_shardingproxy_0/MGR-ha_orderdb_r0z0mgr0/instances/192.168.1.5@-@20562
/cn_south1_a1_shardingproxy_0/MGR-ha_orderdb_r0z0mgr0/leader/election
/cn_south1_a1_shardingproxy_0/MGR-ha_orderdb_r0z0mgr0/leader/sharding
/cn_south1_a1_shardingproxy_0/MGR-ha_orderdb_r0z0mgr0/leader/election/instance
/cn_south1_a1_shardingproxy_0/MGR-ha_orderdb_r0z0mgr0/servers/192.168.1.5
/cn_south1_a1_shardingproxy_0/MGR-ha_orderdb_r0z0mgr0/sharding/0
/cn_south1_a1_shardingproxy_0/MGR-ha_orderdb_r0z0mgr0/sharding/0/instance
/cn_south1_a1_shardingproxy_0/MGR-ha_orderdb_r0z0mgr1/config
/cn_south1_a1_shardingproxy_0/MGR-ha_orderdb_r0z0mgr1/instances
/cn_south1_a1_shardingproxy_0/MGR-ha_orderdb_r0z0mgr1/leader
/cn_south1_a1_shardingproxy_0/MGR-ha_orderdb_r0z0mgr1/servers
/cn_south1_a1_shardingproxy_0/MGR-ha_orderdb_r0z0mgr1/sharding
/cn_south1_a1_shardingproxy_0/MGR-ha_orderdb_r0z0mgr1/instances/192.168.1.5@-@20562
/cn_south1_a1_shardingproxy_0/MGR-ha_orderdb_r0z0mgr1/leader/election
/cn_south1_a1_shardingproxy_0/MGR-ha_orderdb_r0z0mgr1/leader/sharding
/cn_south1_a1_shardingproxy_0/MGR-ha_orderdb_r0z0mgr1/leader/election/instance
/cn_south1_a1_shardingproxy_0/MGR-ha_orderdb_r0z0mgr1/servers/192.168.1.5
/cn_south1_a1_shardingproxy_0/MGR-ha_orderdb_r0z0mgr1/sharding/0
/cn_south1_a1_shardingproxy_0/MGR-ha_orderdb_r0z0mgr1/sharding/0/instance
/cn_south1_a1_shardingproxy_0/MGR-ha_paymentdb_r0z0mgr0/config
/cn_south1_a1_shardingproxy_0/MGR-ha_paymentdb_r0z0mgr0/instances
/cn_south1_a1_shardingproxy_0/MGR-ha_paymentdb_r0z0mgr0/leader
/cn_south1_a1_shardingproxy_0/MGR-ha_paymentdb_r0z0mgr0/servers
/cn_south1_a1_shardingproxy_0/MGR-ha_paymentdb_r0z0mgr0/sharding
/cn_south1_a1_shardingproxy_0/MGR-ha_paymentdb_r0z0mgr0/instances/192.168.1.5@-@20562
/cn_south1_a1_shardingproxy_0/MGR-ha_paymentdb_r0z0mgr0/leader/election
/cn_south1_a1_shardingproxy_0/MGR-ha_paymentdb_r0z0mgr0/leader/sharding
/cn_south1_a1_shardingproxy_0/MGR-ha_paymentdb_r0z0mgr0/leader/election/instance
/cn_south1_a1_shardingproxy_0/MGR-ha_paymentdb_r0z0mgr0/servers/192.168.1.5
/cn_south1_a1_shardingproxy_0/MGR-ha_paymentdb_r0z0mgr0/sharding/0
/cn_south1_a1_shardingproxy_0/MGR-ha_paymentdb_r0z0mgr0/sharding/0/instance
/cn_south1_a1_shardingproxy_0/MGR-ha_userdb_mgr0/config
/cn_south1_a1_shardingproxy_0/MGR-ha_userdb_mgr0/instances
/cn_south1_a1_shardingproxy_0/MGR-ha_userdb_mgr0/leader
/cn_south1_a1_shardingproxy_0/MGR-ha_userdb_mgr0/servers
/cn_south1_a1_shardingproxy_0/MGR-ha_userdb_mgr0/sharding
/cn_south1_a1_shardingproxy_0/MGR-ha_userdb_mgr0/instances/192.168.1.5@-@20562
/cn_south1_a1_shardingproxy_0/MGR-ha_userdb_mgr0/leader/election
Это похоже на путь к файлам и папкам в операционной системе. Данный текст представляет собой набор путей к файлам и каталогам, которые могут быть использованы в контексте разработки и тестирования программного обеспечения.
В тексте присутствуют ключевые слова, связанные с архитектурой и конфигурацией системы, такие как «sharding», «leader», «election», «instances», «servers» и другие. Однако без контекста сложно определить, о чём именно идёт речь.
Возможно, это пути к компонентам системы или конфигурациям серверов. Также можно предположить, что это часть сценария тестирования, где указаны различные состояния системы.
Для более точного перевода необходимо знать контекст использования этих путей.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )