1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/wl4g-shardingproxy

Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Групповая репликация сети для демонстрации. См.: 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

  • Выберите операцию. (Смоделируйте 100 операций запроса и просмотрите интерфейс трассировки).*
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

Тестирование доступа к панели мониторинга трассировки

1.4 Развёртывание в Kubernetes (рекомендуется для производства)

  • Установка с помощью helm (charts/README.md)*

2. Руководство по эксплуатации

2.1 Настройка аварийного переключения

2.1.1 Групповая репликация MySQL (https://dev.mysql.com/doc/refman/5.7/en/group-replication.html)

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/

https://github.com/open-telemetry/opentelemetry-java/tree/v1.3.0/sdk-extensions/autoconfigure#sampler

Пример конфигурации:

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>

Конфигурирование шифрования столбца (необязательно)

Пример аудита. ```

  • Testing effect
$ 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>
  • ShardingSphere logging
[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 и где находится исходный код?

/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 )

Вы можете оставить комментарий после Вход в систему

Введение

Описание недоступно Развернуть Свернуть
Apache-2.0
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/wl4g-shardingproxy.git
git@api.gitlife.ru:oschina-mirror/wl4g-shardingproxy.git
oschina-mirror
wl4g-shardingproxy
wl4g-shardingproxy
master