From 8cca38dd8f971cf3cf4cc7db4886467894632296 Mon Sep 17 00:00:00 2001 From: Ye Jinrong Date: Wed, 30 Mar 2022 14:42:42 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E5=87=86=E5=A4=87=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E5=88=B0GreatSQL=208.0.27?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- GreatSQL/Dockerfile | 12 ++- GreatSQL/Dockerfile-aarch64 | 11 ++- GreatSQL/README.md | 14 ++- GreatSQL/greatsql-init.sh | 38 +++++++- GreatSQL/my.cnf | 15 ++- README.en.md | 166 +++++++++++++++++--------------- README.md | 173 +++++++++++++++++++--------------- docker-compose/mgr-3nodes.yml | 51 ++++------ 8 files changed, 281 insertions(+), 199 deletions(-) diff --git a/GreatSQL/Dockerfile b/GreatSQL/Dockerfile index 8360129..240cbde 100644 --- a/GreatSQL/Dockerfile +++ b/GreatSQL/Dockerfile @@ -11,11 +11,12 @@ ENV MYSQL_EXTRACT_DIR=/usr/local ENV TMP_DIR=/tmp ENV MYSQL_PORT=3306 #for centos8 -ENV GREATSQL="GreatSQL-8.0.25-15-Linux-glibc2.28-x86_64-minimal" +ENV GREATSQL="GreatSQL-8.0.27-18-Linux-glibc2.28-x86_64" ENV MYSQL_BASEDIR=${MYSQL_EXTRACT_DIR}/${GREATSQL} ENV DEP_LIBS="numactl-libs libaio readline-devel ncurses-devel" #for centos8 -ENV JEMALLOC_RPM="jemalloc-3.6.0-1.el8.x86_64.rpm" +#get jemalloc package from https://centos.pkgs.org/8/epel-x86_64/jemalloc-5.2.1-2.el8.x86_64.rpm.html +ENV JEMALLOC_RPM="jemalloc-5.2.1-2.el8.x86_64.rpm" ENV GREATSQL_INIT="greatsql-init.sh" #Creating user mysql @@ -28,12 +29,17 @@ COPY ${GREATSQL} ${MYSQL_EXTRACT_DIR}/${GREATSQL} COPY ${JEMALLOC_RPM} ${TMP_DIR} #Installing jemalloc & depend libs +RUN rm -f /etc/yum.repos.d/CentOS-Linux-AppStream.repo /etc/yum.repos.d/CentOS-Linux-BaseOS.repo ; \ +curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo && \ +sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo && \ +yum clean all && \ +yum makecache RUN yum install -y ${TMP_DIR}/${JEMALLOC_RPM} RUN yum install -y ${DEP_LIBS} RUN cd ${MYSQL_BASEDIR}/support-files && \ cp -f my.cnf /etc/my.cnf ; \ - echo "LD_PRELOAD=/usr/lib64/libjemalloc.so.1" >> /etc/sysconfig/mysql ; \ + echo "LD_PRELOAD=/usr/lib64/libjemalloc.so.2" >> /etc/sysconfig/mysql ; \ echo "THP_SETTING=never" >> /etc/sysconfig/mysql ; \ echo "export PATH=\$PATH:${MYSQL_BASEDIR}/bin" >> /etc/profile.d/mysql.sh ; \ source /etc/profile.d/mysql.sh diff --git a/GreatSQL/Dockerfile-aarch64 b/GreatSQL/Dockerfile-aarch64 index a46b902..046c19b 100644 --- a/GreatSQL/Dockerfile-aarch64 +++ b/GreatSQL/Dockerfile-aarch64 @@ -10,9 +10,11 @@ ENV MYSQL_UID_GID=3306 ENV MYSQL_EXTRACT_DIR=/usr/local ENV TMP_DIR=/tmp ENV MYSQL_PORT=3306 -ENV GREATSQL="GreatSQL-8.0.25-15-Linux-glibc2.28-aarch64-minimal" +#for centos8 +ENV GREATSQL="GreatSQL-8.0.27-18-Linux-glibc2.28-aarch64" ENV MYSQL_BASEDIR=${MYSQL_EXTRACT_DIR}/${GREATSQL} ENV DEP_LIBS="numactl-libs libaio readline-devel ncurses-devel" +#for centos8 ENV GREATSQL_INIT="greatsql-init.sh" #Creating user mysql @@ -23,7 +25,12 @@ RUN groupadd -g ${MYSQL_UID_GID} ${MYSQL_USER}; \ #Copying files COPY ${GREATSQL} ${MYSQL_EXTRACT_DIR}/${GREATSQL} -#Installing depend libs +#Installing depend libs +RUN rm -f /etc/yum.repos.d/CentOS-Linux-AppStream.repo /etc/yum.repos.d/CentOS-Linux-BaseOS.repo ; \ +curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo && \ +sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo && \ +yum clean all && \ +yum makecache RUN yum install -y ${DEP_LIBS} RUN cd ${MYSQL_BASEDIR}/support-files && \ diff --git a/GreatSQL/README.md b/GreatSQL/README.md index 9fd907d..59d5a1d 100644 --- a/GreatSQL/README.md +++ b/GreatSQL/README.md @@ -10,7 +10,8 @@ $ rm -fr comp_err ibd2sdi innochecksum ldb lz4_decompress myisamchk myisam_ftdum mysqlcheck mysql_client_test mysqld_multi mysqld_safe mysqldumpslow mysqlimport mysql_keyring_encryption_test \ mysql_ldb mysql_migrate_keyring mysqlrouter mysqlrouter_keyring mysqlrouter_passwd mysqlrouter_plugin_info \ mysql_secure_installation mysqlslap mysqltest mysqltest_safe_process mysql_upgrade mysqlxtest ps-admin \ - ps_mysqld_helper sst_dump zlib_decompress + ps_mysqld_helper sst_dump zlib_decompress mysqlpump mysqldump mysqlshow mysqladmin mysqlbinlog mysql_tzinfo_to_sql \ + mysql_config mysql_config_editor perror my_print_defaults mysql_ssl_rsa_setup mysqld_pre_systemd #裁剪lib目录 $ cd lib @@ -46,5 +47,14 @@ $ rm -fr auth_pam_compat.so auth_pam.so component_keyring_file.so component_mysq libtest_x_sessions_deinit.so libtest_x_sessions_init.so pfs_example_plugin_employee.so \ procfs.so qa_auth_client.so qa_auth_interface.so qa_auth_server.so \ replication_observers_example_plugin.so test_security_context.so test_services_plugin_registry.so \ - test_udf_services.so tokudb_backup.so udf_example.so + test_udf_services.so tokudb_backup.so udf_example.so \ + semisync_master.so semisync_replica.so semisync_slave.so semisync_source.so test_* *test* +``` + +最后,对二进制文件执行 `strip` 缩减文件尺寸: +``` +$ strip bin/* +$ strip lib/* +$ strip lib/plugin/* +$ strip lib/private/* ``` diff --git a/GreatSQL/greatsql-init.sh b/GreatSQL/greatsql-init.sh index 3920c6d..f009c6c 100755 --- a/GreatSQL/greatsql-init.sh +++ b/GreatSQL/greatsql-init.sh @@ -85,7 +85,7 @@ if [ "$1" = 'mysqld' -a -z "$wantHelp" ]; then _check_config "$@" if [ -n "$INIT_TOKUDB" ]; then - export LD_PRELOAD=/usr/lib64/libjemalloc.so.1 + export LD_PRELOAD=/usr/lib64/libjemalloc.so.2 fi # Get config DATADIR="$(_get_config 'datadir' "$@")" @@ -113,6 +113,13 @@ if [ "$1" = 'mysqld' -a -z "$wantHelp" ]; then sed -i "s/MYSQL_IBP/128M/ig" /etc/my.cnf fi + file_env 'MYSQL_MGR_VIEWID' + if [ "$MYSQL_MGR_VIEWID" ] ; then + sed -i "s/MYSQL_MGR_VIEWID/${MYSQL_MGR_VIEWID}/ig" /etc/my.cnf + else + sed -i "s/MYSQL_MGR_VIEWID/'AUTOMATIC'/ig" /etc/my.cnf + fi + file_env 'MYSQL_MGR_NAME' if [ "$MYSQL_MGR_NAME" ] ; then sed -i "s/MYSQL_MGR_NAME/${MYSQL_MGR_NAME}/ig" /etc/my.cnf @@ -123,8 +130,11 @@ if [ "$1" = 'mysqld' -a -z "$wantHelp" ]; then file_env 'MYSQL_MGR_LOCAL' if [ "${MYSQL_MGR_LOCAL}" ] ; then sed -i "s/MYSQL_MGR_LOCAL/${MYSQL_MGR_LOCAL}/ig" /etc/my.cnf + REPORT_HOST=`echo $MYSQL_MGR_LOCAL|awk -F ':' '{print $1}'` + sed -i "s/REPORT_HOST/${REPORT_HOST}/g" /etc/my.cnf else sed -i "s/MYSQL_MGR_LOCAL/'172.17.0.2:33061'/ig" /etc/my.cnf + sed -i "s/REPORT_HOST/'172.17.0.2'/g" /etc/my.cnf fi file_env 'MYSQL_MGR_SEEDS' @@ -134,6 +144,13 @@ if [ "$1" = 'mysqld' -a -z "$wantHelp" ]; then sed -i "s/MYSQL_MGR_SEEDS/'172.17.0.2:33061,172.17.0.3:33061'/ig" /etc/my.cnf fi + file_env 'MYSQL_MGR_ARBITRATOR' + if [ "${MYSQL_MGR_ARBITRATOR}" ] ; then + sed -i "s/MYSQL_MGR_ARBITRATOR/${MYSQL_MGR_ARBITRATOR}/ig" /etc/my.cnf + else + sed -i "s/MYSQL_MGR_ARBITRATOR/0/ig" /etc/my.cnf + fi + mkdir -p "$DATADIR" echo 'Initializing database' @@ -205,16 +222,13 @@ if [ "$1" = 'mysqld' -a -z "$wantHelp" ]; then fi read -r -d '' mgrInit <<-EOSQL || true - CREATE USER ${MYSQL_MGR_USER} IDENTIFIED WITH mysql_native_password BY '${MYSQL_MGR_USER_PWD}'; + CREATE USER IF NOT EXISTS ${MYSQL_MGR_USER} IDENTIFIED WITH mysql_native_password BY '${MYSQL_MGR_USER_PWD}'; GRANT REPLICATION SLAVE, BACKUP_ADMIN ON *.* TO ${MYSQL_MGR_USER}; CHANGE MASTER TO MASTER_USER='${MYSQL_MGR_USER}', MASTER_PASSWORD='${MYSQL_MGR_USER_PWD}' FOR CHANNEL 'group_replication_recovery'; - RESET MASTER; EOSQL fi "${mysql[@]}" <<-EOSQL - -- What's done in this file shouldn't be replicated - -- or products like mysql-fabric won't work SET @@SESSION.SQL_LOG_BIN=0; DELETE FROM mysql.user WHERE user NOT IN ('mysql.sys', 'mysqlxsys', 'mysql.infoschema', 'mysql.session', 'root') OR host NOT IN ('localhost') ; ALTER USER 'root'@'localhost' IDENTIFIED BY '${MYSQL_ROOT_PASSWORD}' ; @@ -258,6 +272,7 @@ if [ "$1" = 'mysqld' -a -z "$wantHelp" ]; then ALTER USER 'root'@'%' PASSWORD EXPIRE; EOSQL fi + if ! kill -s TERM "$pid" || ! wait "$pid"; then echo >&2 'MySQL init process failed.' exit 1 @@ -275,4 +290,17 @@ if [ "$1" = 'mysqld' -a -z "$wantHelp" ]; then fi fi +if [ ${MYSQL_INIT_MGR} -eq 1 ]; then + if [ $MYSQL_MGR_START_AS_PRIMARY -eq 1 ]; then + sed -i "s/START_MGR/ON/ig" /etc/my.cnf + sed -i "s/BOOTSTRAP_MGR/ON/ig" /etc/my.cnf + else + sed -i "s/START_MGR/ON/ig" /etc/my.cnf + sed -i "s/BOOTSTRAP_MGR/OFF/ig" /etc/my.cnf + fi +else + sed -i "s/START_MGR/OFF/ig" /etc/my.cnf + sed -i "s/BOOTSTRAP_MGR/OFF/ig" /etc/my.cnf +fi + exec "$@" diff --git a/GreatSQL/my.cnf b/GreatSQL/my.cnf index 0e6caa9..26b3242 100644 --- a/GreatSQL/my.cnf +++ b/GreatSQL/my.cnf @@ -9,7 +9,7 @@ no-auto-rehash user = mysql port = 3306 server_id = MYSQL_SID -basedir = /usr/local/GreatSQL-8.0.25-15-Linux-glibc2.28-x86_64-minimal +basedir = /usr/local/GreatSQL-8.0.27-18-Linux-glibc2.28-x86_64 datadir = /data/GreatSQL socket = /data/GreatSQL/mysql.sock pid-file = mysql.pid @@ -74,28 +74,33 @@ myisam_sort_buffer_size = 128M relay_log_recovery = 1 slave_parallel_type = LOGICAL_CLOCK #可以设置为逻辑CPU数量的2倍 -slave_parallel_workers = 64 +slave_parallel_workers = 4 binlog_transaction_dependency_tracking = WRITESET slave_preserve_commit_order = 1 slave_checkpoint_period = 2 #parallel query -force_parallel_execute = ON +loose-force_parallel_execute = ON #mgr settings loose-plugin_load_add = 'mysql_clone.so' loose-plugin_load_add = 'group_replication.so' loose-group_replication_group_name = MYSQL_MGR_NAME +loose-group_replication_view_change_uuid = MYSQL_MGR_VIEWID #MGR本地节点IP:PORT,请自行替换 loose-group_replication_local_address = MYSQL_MGR_LOCAL #MGR集群所有节点IP:PORT,请自行替换 loose-group_replication_group_seeds = MYSQL_MGR_SEEDS -loose-group_replication_start_on_boot = OFF -loose-group_replication_bootstrap_group = OFF +loose-group_replication_start_on_boot = START_MGR +loose-group_replication_bootstrap_group = BOOTSTRAP_MGR loose-group_replication_exit_state_action = READ_ONLY loose-group_replication_flow_control_mode = "DISABLED" loose-group_replication_single_primary_mode = ON loose-group_replication_communication_max_message_size = 10M +loose-group_replication_arbitrator = MYSQL_MGR_ARBITRATOR +loose-group_replication_single_primary_fast_mode = 0 +loose-group_replication_request_time_threshold = 20000 +report_host = REPORT_HOST #innodb settings transaction_isolation = REPEATABLE-READ diff --git a/README.en.md b/README.en.md index 1b2fc4f..8a1f337 100644 --- a/README.en.md +++ b/README.en.md @@ -20,7 +20,8 @@ If you find any problems or bugs related to the GreatSQL-Docker, you can [submit - Where to get help: send mail to greatsql@greatdb.com ## Supported tags -- [8.0.25](https://hub.docker.com/layers/158734159/greatsql/greatsql/8.0.25/images/sha256-d9e0f455e3412127ed59ecc5f69b36a717303ff868cac128fe4d8a0ad6545a4a?context=repo), [latest](https://hub.docker.com/layers/156877878/greatsql/greatsql/latest/images/sha256-d9e0f455e3412127ed59ecc5f69b36a717303ff868cac128fe4d8a0ad6545a4a?context=repo) +- [8.0.27](https://hub.docker.com/layers/158734159/greatsql/greatsql/8.0.27/images/sha256-d9e0f455e3412127ed59ecc5f69b36a717303ff868cac128fe4d8a0ad6545a4a?context=repo), [latest](https://hub.docker.com/layers/156877878/greatsql/greatsql/latest/images/sha256-d9e0f455e3412127ed59ecc5f69b36a717303ff868cac128fe4d8a0ad6545a4a?context=repo) +- [8.0.27-aarch64](https://hub.docker.com/layers/greatsql/greatsql/greatsql/8.0.27-aarch64/images/sha256-304b9d1bfc10898ffdab859399f02a6f929b51ca2d49e866d49f821cdfb59de9?context=explore), [latest-aarch64](https://hub.docker.com/layers/greatsql/greatsql/greatsql/latest-aarch64/images/sha256-304b9d1bfc10898ffdab859399f02a6f929b51ca2d49e866d49f821cdfb59de9?context=explore) ## How to use this image Starting a GreatSQL instance is simple: @@ -44,36 +45,26 @@ $ docker exec -it mgr1 bash You can execute client programs such as mysql or mysqladmin ``` -[root@mgr1 /]# mysqladmin ping -mysqld is alive -[root@mgr1 /]# mysqladmin ver -mysqladmin Ver 8.0.25 for Linux on x86_64 (MySQL Community Server - GPL) -Copyright (c) 2018-2021 GreatOpenSource and/or its affiliates -Copyright (c) 2009-2021 Percona LLC and/or its affiliates -Copyright (c) 2000, 2021, Oracle and/or its affiliates. - -Oracle is a registered trademark of Oracle Corporation and/or its -affiliates. Other names may be trademarks of their respective -owners. - -Server version 8.0.25-15 -Protocol version 10 -Connection Localhost via UNIX socket -UNIX socket /data/GreatSQL/mysql.sock -Uptime: 2 hours 56 min 47 sec - -Threads: 70 Questions: 68 Slow queries: 0 Opens: 155 Flush tables: 3 Open tables: 72 Queries per second avg: 0.006 - [root@mgr1 /]# mysql Welcome to the MySQL monitor. Commands end with ; or \g. +Your MySQL connection id is 34 +Server version: 8.0.27-18 GreatSQL (GPL), Release 18, Revision 202203211301 +... +mysql Ver 8.0.27-18 for Linux on x86_64 (GreatSQL (GPL), Release 18, Revision 202203211301) +... + +[root@GreatSQL][(none)]>\s +... +Server version: 8.0.27-18 GreatSQL (GPL), Release 18, Revision 202203211301 ... [root@GreatSQL][(none)]>select version(); +-----------+ | version() | +-----------+ -| 8.0.25-15 | +| 8.0.27-18 | +-----------+ 1 row in set (0.00 sec) + ``` ## How to use this image via docker-compose @@ -111,38 +102,63 @@ Example for docker-compose `/data/docker/mgr.yml`: version: '2' services: - mgr1: + mgr2: image: greatsql/greatsql - container_name: mgr1 - hostname: mgr1 - network_mode: bridge + container_name: mgr2 + hostname: mgr2 + networks: + mgr_net: + ipv4_address: 172.18.0.2 + restart: unless-stopped + environment: + TZ: Asia/Shanghai + MYSQL_ALLOW_EMPTY_PASSWORD: 1 + MYSQL_INIT_MGR: 1 + MYSQL_MGR_LOCAL: '172.18.0.2:33061' + MYSQL_MGR_SEEDS: '172.18.0.2:33061,172.18.0.3:33061,172.18.0.4:33061' + MYSQL_MGR_START_AS_PRIMARY: 1 #Specify the current node as the PRIMARY + MYSQL_MGR_ARBITRATOR: 0 + mgr3: + image: greatsql/greatsql + container_name: mgr3 + hostname: mgr3 + networks: + mgr_net: + ipv4_address: 172.18.0.3 restart: unless-stopped + depends_on: + - "mgr2" environment: TZ: Asia/Shanghai MYSQL_ALLOW_EMPTY_PASSWORD: 1 MYSQL_INIT_MGR: 1 - MYSQL_MGR_LOCAL: '172.17.0.2:33061' - MYSQL_MGR_SEEDS: '172.17.0.2:33061,172.17.0.3:33061' - extra_hosts: - - "mgr1:172.17.0.2" - - "mgr2:172.17.0.3" - mgr2: + MYSQL_MGR_LOCAL: '172.18.0.3:33061' + MYSQL_MGR_SEEDS: '172.18.0.2:33061,172.18.0.3:33061,172.18.0.4:33061' + MYSQL_MGR_START_AS_PRIMARY: 0 + MYSQL_MGR_ARBITRATOR: 0 #Neither primary nor arbitrator, then it is the SECONDARY + mgr4: image: greatsql/greatsql - container_name: mgr2 - hostname: mgr2 - network_mode: bridge + container_name: mgr4 + hostname: mgr4 + networks: + mgr_net: + ipv4_address: 172.18.0.4 restart: unless-stopped depends_on: - - "mgr1" + - "mgr3" environment: TZ: Asia/Shanghai MYSQL_ALLOW_EMPTY_PASSWORD: 1 MYSQL_INIT_MGR: 1 - MYSQL_MGR_LOCAL: '172.17.0.3:33061' - MYSQL_MGR_SEEDS: '172.17.0.2:33061,172.17.0.3:33061' - extra_hosts: - - "mgr1:172.17.0.2" - - "mgr2:172.17.0.3" + MYSQL_MGR_LOCAL: '172.18.0.4:33061' + MYSQL_MGR_SEEDS: '172.18.0.2:33061,172.18.0.3:33061,172.18.0.4:33061' + MYSQL_MGR_START_AS_PRIMARY: 0 + MYSQL_MGR_ARBITRATOR: 1 #Specify the current node as ARBITRATOR. It cannot be specified as the PRIMARY/SECONDARY at the same time +networks: + mgr_net: + ipam: + config: + - subnet: 172.18.0.0/24 ``` Start all the containers: @@ -155,36 +171,16 @@ Enter the first contaniner, and setup it as MGR PRIMARY node: $ docker exec -it mgr1 bash [root@mgr1 /]# mysql ... -[root@GreatSQL][(none)]> SET GLOBAL group_replication_bootstrap_group=ON; - -[root@GreatSQL][(none)]> start group_replication; - [root@GreatSQL][(none)]> select * from performance_schema.replication_group_members; -+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+ -| CHANNEL_NAME | MEMBER_ID | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE | MEMBER_ROLE | MEMBER_VERSION | -+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+ -| group_replication_applier | 202eb70c-e13a-11eb-b390-0242ac110002 | mgr1 | 3306 | ONLINE | PRIMARY | 8.0.25 | -+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+ -1 rows in set (0.00 sec) -``` - -Enter the second contaniner, and setup it as MGR SECONDARY node: -``` -$ docker exec -it mgr2 bash -[root@mgr2 /]# mysql -... -[root@GreatSQL][(none)]> start group_replication; - -[root@GreatSQL][(none)]>select * from performance_schema.replication_group_members; -+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+ -| CHANNEL_NAME | MEMBER_ID | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE | MEMBER_ROLE | MEMBER_VERSION | -+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+ -| group_replication_applier | 202eb70c-e13a-11eb-b390-0242ac110002 | mgr1 | 3306 | ONLINE | PRIMARY | 8.0.25 | -| group_replication_applier | 20851760-e13a-11eb-91e1-0242ac110003 | mgr2 | 3306 | ONLINE | SECONDARY | 8.0.25 | -+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+ -2 rows in set (0.00 sec) ++---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+----------------------------+ +| CHANNEL_NAME | MEMBER_ID | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE | MEMBER_ROLE | MEMBER_VERSION | MEMBER_COMMUNICATION_STACK | ++---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+----------------------------+ +| group_replication_applier | d17d165a-ab7a-11ec-a8c0-0242ac120002 | 172.18.0.2 | 3306 | ONLINE | PRIMARY | 8.0.27 | XCom | +| group_replication_applier | d28c3916-ab7a-11ec-ab60-0242ac120003 | 172.18.0.3 | 3306 | ONLINE | SECONDARY | 8.0.27 | XCom | +| group_replication_applier | d3dc6855-ab7a-11ec-98a0-0242ac120004 | 172.18.0.4 | 3306 | ONLINE | ARBITRATOR | 8.0.27 | XCom | ++---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+----------------------------+ ``` -It looks ok. +The mgr cluster has been built, it contains an arbitrator node. ## Environment Variables - **MYSQL_ROOT_PASSWORD** @@ -207,32 +203,54 @@ This is an optional variable. Set to a non-empty value, like yes, to generate a This is an optional variable. Set innodb_buffer_pool_size=1G, default value: 128M. +- **MYSQL_INIT_MGR** + +This is an optional variable. If it set to 1(default value is 0), it will create a new user for mgr, and create 'group_replication_recovery' mgr channel. +Optional. + - **MYSQL_MGR_NAME** This is an optional variable. Set group_replication_group_name=X, default value: "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaa1". +Optional. - **MYSQL_MGR_LOCAL** This is an optional variable. Set group_replication_local_address=X, default value: "172.17.0.2:33061". +Required, if MYSQL_INIT_MGR=1. - **MYSQL_MGR_SEEDS** This is an optional variable. Set group_replication_group_seeds=X, default value: "172.17.0.2:33061,172.17.0.3:33061". - -- **MYSQL_INIT_MGR** - -This is an optional variable. If it set to 1(default value is 0), it will create a new user for mgr, and create 'group_replication_recovery' mgr channel. +Required, if MYSQL_INIT_MGR=1. - **MYSQL_MGR_USER** This is an optional variable. Set the mgr user name, default value: repl; +Optional. - **MYSQL_MGR_USER_PWD** This is an optional variable. Set the mgr user password, default value: repl4MGR; +Optional. + +- **MYSQL_SID** +Set up server_id option, which requires the server_id is unique of each node when building an mgr. The default value is 3306 + random number. +Optional. + +- **MYSQL_MGR_START_AS_PRIMARY** +Specify that the current node as PRIMARY. Default: 0. +If MYSQL_INIT_MGR = 1, at least one node must be designated as primary role. + +- **MYSQL_MGR_ARBITRATOR** +Specifies that the current node as ARBITRATOR node. This option is exclusive with **MYSQL_MGR_START_AS_PRIMARY**, cannot be set to 1 at the same time. Default: 0. +Optional. + +- **MYSQL_MGR_VIEWID** +As of MySQL 8.0.26, you can select an alternative UUID to form part of the GTIDs that are used when Group Replication’s internally generated transactions for view changes (View_change_log_event) are written to the binary log. Default: AUTOMATIC. +Optional. ## Contact Us please scan the qr code -![输入图片说明](https://images.gitee.com/uploads/images/2021/0802/143402_f9d6cb61_8779455.jpeg "greatsql社区-wx-qrcode-0.5m.jpg") \ No newline at end of file +![输入图片说明](https://images.gitee.com/uploads/images/2021/0802/143402_f9d6cb61_8779455.jpeg "greatsql社区-wx-qrcode-0.5m.jpg") diff --git a/README.md b/README.md index 570401d..3ab4fd1 100644 --- a/README.md +++ b/README.md @@ -19,7 +19,8 @@ Dockerfiles可用于自定义和构建docker映像。[戳此阅读更多关于Do - 联系人: greatsql@greatdb.com ## 支持哪些tag -- [8.0.25](https://hub.docker.com/layers/158734159/greatsql/greatsql/8.0.25/images/sha256-d9e0f455e3412127ed59ecc5f69b36a717303ff868cac128fe4d8a0ad6545a4a?context=repo), [latest](https://hub.docker.com/layers/156877878/greatsql/greatsql/latest/images/sha256-d9e0f455e3412127ed59ecc5f69b36a717303ff868cac128fe4d8a0ad6545a4a?context=repo) +- [8.0.27](https://hub.docker.com/layers/158734159/greatsql/greatsql/8.0.27/images/sha256-d9e0f455e3412127ed59ecc5f69b36a717303ff868cac128fe4d8a0ad6545a4a?context=repo), [latest](https://hub.docker.com/layers/156877878/greatsql/greatsql/latest/images/sha256-d9e0f455e3412127ed59ecc5f69b36a717303ff868cac128fe4d8a0ad6545a4a?context=repo) +- [8.0.27-aarch64](https://hub.docker.com/layers/greatsql/greatsql/greatsql/8.0.27-aarch64/images/sha256-304b9d1bfc10898ffdab859399f02a6f929b51ca2d49e866d49f821cdfb59de9?context=explore), [latest-aarch64](https://hub.docker.com/layers/greatsql/greatsql/greatsql/latest-aarch64/images/sha256-304b9d1bfc10898ffdab859399f02a6f929b51ca2d49e866d49f821cdfb59de9?context=explore) ## 如何使用GreatSQL镜像 例如: @@ -41,36 +42,25 @@ greatsql/greatsql $ docker exec -it mgr1 bash ``` -可以使用mysql 或 mysqladmin等客户端工具 +可以使用mysql 客户端工具(在docker镜像中,只保留了mysql这个客户端工具) ``` -[root@mgr1 /]# mysqladmin ping -mysqld is alive -[root@mgr1 /]# mysqladmin ver -mysqladmin Ver 8.0.25 for Linux on x86_64 (MySQL Community Server - GPL) -Copyright (c) 2018-2021 GreatOpenSource and/or its affiliates -Copyright (c) 2009-2021 Percona LLC and/or its affiliates -Copyright (c) 2000, 2021, Oracle and/or its affiliates. - -Oracle is a registered trademark of Oracle Corporation and/or its -affiliates. Other names may be trademarks of their respective -owners. - -Server version 8.0.25-15 -Protocol version 10 -Connection Localhost via UNIX socket -UNIX socket /data/GreatSQL/mysql.sock -Uptime: 2 hours 56 min 47 sec - -Threads: 70 Questions: 68 Slow queries: 0 Opens: 155 Flush tables: 3 Open tables: 72 Queries per second avg: 0.006 - [root@mgr1 /]# mysql Welcome to the MySQL monitor. Commands end with ; or \g. +Your MySQL connection id is 34 +Server version: 8.0.27-18 GreatSQL (GPL), Release 18, Revision 202203211301 +... +mysql Ver 8.0.27-18 for Linux on x86_64 (GreatSQL (GPL), Release 18, Revision 202203211301) +... + +[root@GreatSQL][(none)]>\s +... +Server version: 8.0.27-18 GreatSQL (GPL), Release 18, Revision 202203211301 ... [root@GreatSQL][(none)]>select version(); +-----------+ | version() | +-----------+ -| 8.0.25-15 | +| 8.0.27-18 | +-----------+ 1 row in set (0.00 sec) ``` @@ -112,38 +102,63 @@ $ docker exec -it mgr1 bash version: '2' services: - mgr1: + mgr2: + image: greatsql/greatsql #指定镜像 + container_name: mgr2 #设定容器名字 + hostname: mgr2 #设定容器中的主机名 + networks: #指定容器使用哪个专用网络 + mgr_net: + ipv4_address: 172.18.0.2 #设置容器使用固定IP地址,避免重启后IP变化 + restart: unless-stopped #设定重启策略 + environment: #设置多个环境变量 + TZ: Asia/Shanghai #时区 + MYSQL_ALLOW_EMPTY_PASSWORD: 1 #允许root账户空密码 + MYSQL_INIT_MGR: 1 #初始化MGR集群 + MYSQL_MGR_LOCAL: '172.18.0.2:33061' #当前MGR节点的local_address + MYSQL_MGR_SEEDS: '172.18.0.2:33061,172.18.0.3:33061,172.18.0.4:33061' #MGR集群seeds + MYSQL_MGR_START_AS_PRIMARY: 1 #指定当前MGR节点为Primary角色 + MYSQL_MGR_ARBITRATOR: 0 + mgr3: image: greatsql/greatsql - container_name: mgr1 - hostname: mgr1 - network_mode: bridge + container_name: mgr3 + hostname: mgr3 + networks: + mgr_net: + ipv4_address: 172.18.0.3 restart: unless-stopped + depends_on: + - "mgr2" environment: TZ: Asia/Shanghai MYSQL_ALLOW_EMPTY_PASSWORD: 1 MYSQL_INIT_MGR: 1 - MYSQL_MGR_LOCAL: '172.17.0.2:33061' - MYSQL_MGR_SEEDS: '172.17.0.2:33061,172.17.0.3:33061' - extra_hosts: - - "mgr1:172.17.0.2" - - "mgr2:172.17.0.3" - mgr2: + MYSQL_MGR_LOCAL: '172.18.0.3:33061' + MYSQL_MGR_SEEDS: '172.18.0.2:33061,172.18.0.3:33061,172.18.0.4:33061' + MYSQL_MGR_START_AS_PRIMARY: 0 + MYSQL_MGR_ARBITRATOR: 0 #既非Primary,也非Arbitrator,那么就是Secondary角色了 + mgr4: image: greatsql/greatsql - container_name: mgr2 - hostname: mgr2 - network_mode: bridge + container_name: mgr4 + hostname: mgr4 + networks: + mgr_net: + ipv4_address: 172.18.0.4 restart: unless-stopped depends_on: - - "mgr1" + - "mgr3" environment: TZ: Asia/Shanghai MYSQL_ALLOW_EMPTY_PASSWORD: 1 MYSQL_INIT_MGR: 1 - MYSQL_MGR_LOCAL: '172.17.0.3:33061' - MYSQL_MGR_SEEDS: '172.17.0.2:33061,172.17.0.3:33061' - extra_hosts: - - "mgr1:172.17.0.2" - - "mgr2:172.17.0.3" + MYSQL_MGR_LOCAL: '172.18.0.4:33061' + MYSQL_MGR_SEEDS: '172.18.0.2:33061,172.18.0.3:33061,172.18.0.4:33061' + MYSQL_MGR_START_AS_PRIMARY: 0 + MYSQL_MGR_ARBITRATOR: 1 #指定当前MGR节点为Arbitrator角色,此时不能同时指定其为Primary/Secondary角色 +networks: + mgr_net: #创建独立MGR专属网络 + ipam: + config: + - subnet: 172.18.0.0/24 ``` 启动所有容器: @@ -151,43 +166,25 @@ services: $ docker-compse -f /data/docker/mgr.yml up -d ``` -进入第一个容器,将其设置为MGR的PRIMARY节点 -``` -$ docker exec -it mgr1 bash -[root@mgr1 /]# mysql -... -[root@GreatSQL][(none)]> SET GLOBAL group_replication_bootstrap_group=ON; - -[root@GreatSQL][(none)]> start group_replication; - -[root@GreatSQL][(none)]> select * from performance_schema.replication_group_members; -+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+ -| CHANNEL_NAME | MEMBER_ID | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE | MEMBER_ROLE | MEMBER_VERSION | -+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+ -| group_replication_applier | 202eb70c-e13a-11eb-b390-0242ac110002 | mgr1 | 3306 | ONLINE | PRIMARY | 8.0.25 | -+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+ -1 rows in set (0.00 sec) -``` +容器启动后,会自行进行MySQL实例的初始化并自动构建MGR集群。 -进入第二个容器,将其设置为SECONDARY节点 +进入第一个容器,确认实例启动并成为MGR的Primary节点: ``` -$ docker exec -it mgr2 bash -[root@mgr2 /]# mysql +$ docker exec -it mgr1 bash +$ mysql ... -[root@GreatSQL][(none)]> start group_replication; - [root@GreatSQL][(none)]>select * from performance_schema.replication_group_members; -+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+ -| CHANNEL_NAME | MEMBER_ID | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE | MEMBER_ROLE | MEMBER_VERSION | -+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+ -| group_replication_applier | 202eb70c-e13a-11eb-b390-0242ac110002 | mgr1 | 3306 | ONLINE | PRIMARY | 8.0.25 | -| group_replication_applier | 20851760-e13a-11eb-91e1-0242ac110003 | mgr2 | 3306 | ONLINE | SECONDARY | 8.0.25 | -+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+ -2 rows in set (0.00 sec) ++---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+----------------------------+ +| CHANNEL_NAME | MEMBER_ID | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE | MEMBER_ROLE | MEMBER_VERSION | MEMBER_COMMUNICATION_STACK | ++---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+----------------------------+ +| group_replication_applier | d17d165a-ab7a-11ec-a8c0-0242ac120002 | 172.18.0.2 | 3306 | ONLINE | PRIMARY | 8.0.27 | XCom | +| group_replication_applier | d28c3916-ab7a-11ec-ab60-0242ac120003 | 172.18.0.3 | 3306 | ONLINE | SECONDARY | 8.0.27 | XCom | +| group_replication_applier | d3dc6855-ab7a-11ec-98a0-0242ac120004 | 172.18.0.4 | 3306 | ONLINE | ARBITRATOR | 8.0.27 | XCom | ++---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+----------------------------+ ``` -看起来这就好了。 +可以看到,一个三节点的MGR集群已自动构建完毕,并且其中还包含一个ARBITRATOR节点(仲裁节点/投票节点)。 -## 环境变量/参数介绍 +## Docker-Compose环境变量/参数介绍 - **MYSQL_ROOT_PASSWORD** 设置MySQL root账号的密码。如果下面指定了MYSQL_ALLOW_EMPTY_PASSWORD=1,则本参数无效。 @@ -203,25 +200,47 @@ $ docker exec -it mgr2 bash - **MYSQL_IBP** 设置innodb_buffer_pool_size,默认值:128M。 +- **MYSQL_INIT_MGR** +是否初始化MGR相关设置,默认值:0(否)。如果设置为1(是),则会创建MGR服务所需账号,并设定运行 CHANGE MASTER TO 设置好MGR复制通道。 +非必选项。 + - **MYSQL_MGR_NAME** 设置group_replication_group_name,默认值:"aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaa1"。 +非必选项。 - **MYSQL_MGR_LOCAL** 设置 group_replication_local_address,默认值:"172.17.0.2:33061"。 +如果 MYSQL_INIT_MGR=1 则为必选项。 - **MYSQL_MGR_SEEDS** 设置 group_replication_group_seeds,默认值:"172.17.0.2:33061,172.17.0.3:33061"。 - -- **MYSQL_INIT_MGR** -是否初始化MGR相关设置,默认值:0(否)。如果设置为1(是),则会创建MGR服务所需账号,并设定运行 CHANGE MASTER TO 设置好MGR复制通道。 +如果 MYSQL_INIT_MGR=1 则为必选项。 - **MYSQL_MGR_USER** 设置MGR服务所需账号,默认值:repl。 +非必选项。 - **MYSQL_MGR_USER_PWD** 设置MGR服务所需账号的密码,默认值:repl4MGR。 +非必选项。 + +- **MYSQL_SID** +设置server_id选项,构建MGR集群时要求每个节点的server_id是唯一的,默认值:3306+随机数 +非必选项。 + +- **MYSQL_MGR_START_AS_PRIMARY** +指定当前节点在MGR中以PRIMARY角色启动,每次都会进行MGR初始化引导操作。默认值:0。 +如果 MYSQL_INIT_MGR=1 则至少要有一个节点指定为PRIMARY角色。 + +- **MYSQL_MGR_ARBITRATOR** +指定当前节点在MGR中以ARBITRATOR角色启动,该选项和**MYSQL_MGR_START_AS_PRIMARY**是互斥的,不能同时设置为1。默认值:0。 +非必选项。 + +- **MYSQL_MGR_VIEWID** +MySQL 8.0.26开始,可以为view change单独指定一个GTID前缀,避免和正常的事务GTID混杂一起,产生问题。默认值:AUTOMATIC。 +非必选项。 ## 联系我们 扫码关注微信公众号 -![输入图片说明](https://images.gitee.com/uploads/images/2021/0802/143402_f9d6cb61_8779455.jpeg "greatsql社区-wx-qrcode-0.5m.jpg") \ No newline at end of file +![输入图片说明](https://images.gitee.com/uploads/images/2021/0802/143402_f9d6cb61_8779455.jpeg "greatsql社区-wx-qrcode-0.5m.jpg") diff --git a/docker-compose/mgr-3nodes.yml b/docker-compose/mgr-3nodes.yml index e8302e7..f85fe74 100644 --- a/docker-compose/mgr-3nodes.yml +++ b/docker-compose/mgr-3nodes.yml @@ -2,25 +2,23 @@ version: '2' services: mgr2: - image: greatsql/greatsql - container_name: mgr2 - hostname: mgr2 - networks: + image: greatsql/greatsql #指定镜像 + container_name: mgr2 #设定容器名字 + hostname: mgr2 #设定容器中的主机名 + networks: #指定容器使用哪个专用网络 mgr_net: - ipv4_address: 172.18.0.2 - restart: unless-stopped - environment: - TZ: Asia/Shanghai - MYSQL_ALLOW_EMPTY_PASSWORD: 1 - MYSQL_IBP: 512M - MYSQL_INIT_MGR: 1 - MYSQL_MGR_NAME: aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaa1 - MYSQL_MGR_LOCAL: '172.18.0.2:33061' - MYSQL_MGR_SEEDS: '172.18.0.2:33061,172.18.0.3:33061,172.18.0.4:33061' - extra_hosts: - - "mgr2:172.18.0.2" - - "mgr3:172.18.0.3" - - "mgr4:172.18.0.4" + ipv4_address: 172.18.0.2 #设置容器使用固定IP地址,避免重启后IP变化 + restart: unless-stopped #设定重启策略 + environment: #设置多个环境变量 + TZ: Asia/Shanghai #时区 + MYSQL_ALLOW_EMPTY_PASSWORD: 1 #允许root账户空密码 + MYSQL_INIT_MGR: 1 #初始化MGR集群 + #MYSQL_MGR_NAME: "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaa1" #MGR group_name + #MYSQL_MGR_VIEWID: "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbb1" #MGR view_change_uuid + MYSQL_MGR_LOCAL: '172.18.0.2:33061' #当前MGR节点的local_address + MYSQL_MGR_SEEDS: '172.18.0.2:33061,172.18.0.3:33061,172.18.0.4:33061' #MGR集群seeds + MYSQL_MGR_START_AS_PRIMARY: 1 #指定当前MGR节点为Primary角色 + MYSQL_MGR_ARBITRATOR: 0 #指定当前MGR节点为Arbitrator角色,此时不能同时指定其为Primary/Secondary角色 mgr3: image: greatsql/greatsql container_name: mgr3 @@ -34,15 +32,11 @@ services: environment: TZ: Asia/Shanghai MYSQL_ALLOW_EMPTY_PASSWORD: 1 - MYSQL_IBP: 512M MYSQL_INIT_MGR: 1 - MYSQL_MGR_NAME: aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaa1 MYSQL_MGR_LOCAL: '172.18.0.3:33061' MYSQL_MGR_SEEDS: '172.18.0.2:33061,172.18.0.3:33061,172.18.0.4:33061' - extra_hosts: - - "mgr2:172.18.0.2" - - "mgr3:172.18.0.3" - - "mgr4:172.18.0.4" + MYSQL_MGR_START_AS_PRIMARY: 0 + MYSQL_MGR_ARBITRATOR: 0 #既非Primary,也非Arbitrator,那么就是Secondary角色了 mgr4: image: greatsql/greatsql container_name: mgr4 @@ -56,17 +50,12 @@ services: environment: TZ: Asia/Shanghai MYSQL_ALLOW_EMPTY_PASSWORD: 1 - MYSQL_IBP: 512M MYSQL_INIT_MGR: 1 - MYSQL_MGR_NAME: aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaa1 MYSQL_MGR_LOCAL: '172.18.0.4:33061' MYSQL_MGR_SEEDS: '172.18.0.2:33061,172.18.0.3:33061,172.18.0.4:33061' - extra_hosts: - - "mgr2:172.18.0.2" - - "mgr3:172.18.0.3" - - "mgr4:172.18.0.4" + MYSQL_MGR_ARBITRATOR: 1 #指定当前MGR节点为Arbitrator角色,此时不能同时指定其为Primary/Secondary角色 networks: - mgr_net: + mgr_net: #创建独立MGR专属网络 ipam: config: - subnet: 172.18.0.0/24 -- Gitee From 5c4059a207584de4924ac96b1a56ec086bdabd71 Mon Sep 17 00:00:00 2001 From: Ye Jinrong Date: Wed, 20 Apr 2022 10:05:09 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E5=8E=BB=E6=8E=89=E4=BA=8B=E5=8A=A1?= =?UTF-8?q?=E9=9A=94=E7=A6=BB=E7=BA=A7=E5=88=AB=E8=AE=BE=E7=BD=AE=EF=BC=8C?= =?UTF-8?q?=E8=AE=A9=E7=94=A8=E6=88=B7=E8=87=AA=E8=A1=8C=E9=80=89=E6=8B=A9?= =?UTF-8?q?=EF=BC=8C=E4=B8=8D=E8=BF=87=E8=BF=98=E6=98=AF=E6=8E=A8=E8=8D=90?= =?UTF-8?q?=E7=94=A8RR?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- GreatSQL/my.cnf | 1 - 1 file changed, 1 deletion(-) diff --git a/GreatSQL/my.cnf b/GreatSQL/my.cnf index 26b3242..d4733b5 100644 --- a/GreatSQL/my.cnf +++ b/GreatSQL/my.cnf @@ -103,7 +103,6 @@ loose-group_replication_request_time_threshold = 20000 report_host = REPORT_HOST #innodb settings -transaction_isolation = REPEATABLE-READ innodb_buffer_pool_size = MYSQL_IBP innodb_buffer_pool_instances = 8 innodb_data_file_path = ibdata1:12M:autoextend -- Gitee From 5824519c745a1fa0b9bd2f2acf7b8c33f483732d Mon Sep 17 00:00:00 2001 From: Ye Jinrong Date: Mon, 16 May 2022 14:47:56 +0800 Subject: [PATCH 3/3] greatsql-8.0.25-16 --- GreatSQL/CentOS-Base.repo | 56 +++++++++++++++++++++++++++++++++++ GreatSQL/Dockerfile | 37 +++++++++++------------ GreatSQL/Dockerfile-aarch64 | 32 ++++++++++---------- GreatSQL/greatsql-shrink.sh | 9 ++++++ GreatSQL/my.cnf | 4 +-- docker-compose/mgr-3nodes.yml | 2 +- 6 files changed, 101 insertions(+), 39 deletions(-) create mode 100644 GreatSQL/CentOS-Base.repo create mode 100755 GreatSQL/greatsql-shrink.sh diff --git a/GreatSQL/CentOS-Base.repo b/GreatSQL/CentOS-Base.repo new file mode 100644 index 0000000..298f9d9 --- /dev/null +++ b/GreatSQL/CentOS-Base.repo @@ -0,0 +1,56 @@ +# CentOS-Base.repo +# +# The mirror system uses the connecting IP address of the client and the +# update status of each mirror to pick mirrors that are updated to and +# geographically close to the client. You should use this for CentOS updates +# unless you are manually picking other mirrors. +# +# If the mirrorlist= does not work for you, as a fall back you can try the +# remarked out baseurl= line instead. +# +# + +[base] +name=CentOS-8.5.2111 - Base - mirrors.aliyun.com +baseurl=http://mirrors.aliyun.com/centos-vault/8.5.2111/BaseOS/$basearch/os/ + http://mirrors.aliyuncs.com/centos-vault/8.5.2111/BaseOS/$basearch/os/ + http://mirrors.cloud.aliyuncs.com/centos-vault/8.5.2111/BaseOS/$basearch/os/ +gpgcheck=0 +gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-Official + +#additional packages that may be useful +[extras] +name=CentOS-8.5.2111 - Extras - mirrors.aliyun.com +baseurl=http://mirrors.aliyun.com/centos-vault/8.5.2111/extras/$basearch/os/ + http://mirrors.aliyuncs.com/centos-vault/8.5.2111/extras/$basearch/os/ + http://mirrors.cloud.aliyuncs.com/centos-vault/8.5.2111/extras/$basearch/os/ +gpgcheck=0 +gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-Official + +#additional packages that extend functionality of existing packages +[centosplus] +name=CentOS-8.5.2111 - Plus - mirrors.aliyun.com +baseurl=http://mirrors.aliyun.com/centos-vault/8.5.2111/centosplus/$basearch/os/ + http://mirrors.aliyuncs.com/centos-vault/8.5.2111/centosplus/$basearch/os/ + http://mirrors.cloud.aliyuncs.com/centos-vault/8.5.2111/centosplus/$basearch/os/ +gpgcheck=0 +enabled=0 +gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-Official + +[PowerTools] +name=CentOS-8.5.2111 - PowerTools - mirrors.aliyun.com +baseurl=http://mirrors.aliyun.com/centos-vault/8.5.2111/PowerTools/$basearch/os/ + http://mirrors.aliyuncs.com/centos-vault/8.5.2111/PowerTools/$basearch/os/ + http://mirrors.cloud.aliyuncs.com/centos-vault/8.5.2111/PowerTools/$basearch/os/ +gpgcheck=0 +enabled=0 +gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-Official + + +[AppStream] +name=CentOS-8.5.2111 - AppStream - mirrors.aliyun.com +baseurl=http://mirrors.aliyun.com/centos-vault/8.5.2111/AppStream/$basearch/os/ + http://mirrors.aliyuncs.com/centos-vault/8.5.2111/AppStream/$basearch/os/ + http://mirrors.cloud.aliyuncs.com/centos-vault/8.5.2111/AppStream/$basearch/os/ +gpgcheck=0 +gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-Official diff --git a/GreatSQL/Dockerfile b/GreatSQL/Dockerfile index 240cbde..4d44ac3 100644 --- a/GreatSQL/Dockerfile +++ b/GreatSQL/Dockerfile @@ -11,12 +11,11 @@ ENV MYSQL_EXTRACT_DIR=/usr/local ENV TMP_DIR=/tmp ENV MYSQL_PORT=3306 #for centos8 -ENV GREATSQL="GreatSQL-8.0.27-18-Linux-glibc2.28-x86_64" -ENV MYSQL_BASEDIR=${MYSQL_EXTRACT_DIR}/${GREATSQL} -ENV DEP_LIBS="numactl-libs libaio readline-devel ncurses-devel" +#ENV DEPS="numactl-libs libaio readline-devel ncurses-devel openssl openssl-devel net-tools perl" +ENV DEPS="numactl-libs libaio readline-devel ncurses-devel" #for centos8 -#get jemalloc package from https://centos.pkgs.org/8/epel-x86_64/jemalloc-5.2.1-2.el8.x86_64.rpm.html ENV JEMALLOC_RPM="jemalloc-5.2.1-2.el8.x86_64.rpm" +ENV GREATSQL_SHRINK="greatsql-shrink.sh" ENV GREATSQL_INIT="greatsql-init.sh" #Creating user mysql @@ -25,33 +24,33 @@ RUN groupadd -g ${MYSQL_UID_GID} ${MYSQL_USER}; \ -c "MySQL User" ${MYSQL_USER} #Copying files -COPY ${GREATSQL} ${MYSQL_EXTRACT_DIR}/${GREATSQL} +COPY greatsql-802516.tgz ${TMP_DIR} COPY ${JEMALLOC_RPM} ${TMP_DIR} #Installing jemalloc & depend libs +#curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo && \ +COPY CentOS-Base.repo /etc/yum.repos.d/ RUN rm -f /etc/yum.repos.d/CentOS-Linux-AppStream.repo /etc/yum.repos.d/CentOS-Linux-BaseOS.repo ; \ -curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo && \ sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo && \ yum clean all && \ yum makecache RUN yum install -y ${TMP_DIR}/${JEMALLOC_RPM} -RUN yum install -y ${DEP_LIBS} +RUN yum install -y ${DEPS} +RUN cd ${TMP_DIR}; tar zxvf greatsql-802516.tgz; rpm -ivh greatsql*rpm --nodeps +RUN unlink /etc/localtime; ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime -RUN cd ${MYSQL_BASEDIR}/support-files && \ - cp -f my.cnf /etc/my.cnf ; \ - echo "LD_PRELOAD=/usr/lib64/libjemalloc.so.2" >> /etc/sysconfig/mysql ; \ - echo "THP_SETTING=never" >> /etc/sysconfig/mysql ; \ - echo "export PATH=\$PATH:${MYSQL_BASEDIR}/bin" >> /etc/profile.d/mysql.sh ; \ - source /etc/profile.d/mysql.sh -RUN PATH="\$PATH:${MYSQL_BASEDIR}/bin" -RUN export PATH +COPY my.cnf /etc/my.cnf + +RUN echo "LD_PRELOAD=/usr/lib64/libjemalloc.so.2" >> /etc/sysconfig/mysql ; \ + echo "THP_SETTING=never" >> /etc/sysconfig/mysql #Creating datadir -RUN mkdir -p ${MYSQL_DATA_DIR} && chown -R ${MYSQL_USER}:${MYSQL_USER} ${MYSQL_BASEDIR} ; \ - chmod -R ug+rwX ${MYSQL_BASEDIR} ; \ - chmod -R ug+rwX /etc/my.cnf +RUN mkdir -p ${MYSQL_DATA_DIR} && chown -R ${MYSQL_USER}:${MYSQL_USER} ${MYSQL_DATA_DIR}; chmod -R ug+rwX /etc/my.cnf + +RUN rm -f ${TMP_DIR}/${JEMALLOC_RPM} ${TMP_DIR}/greatsql-802516.tgz -RUN rm -f ${TMP_DIR}/${JEMALLOC_RPM} +COPY ${GREATSQL_SHRINK} ${TMP_DIR} +RUN /bin/sh -ex ${TMP_DIR}/${GREATSQL_SHRINK} COPY ${GREATSQL_INIT} /docker-entrypoint.sh ENTRYPOINT ["/docker-entrypoint.sh"] diff --git a/GreatSQL/Dockerfile-aarch64 b/GreatSQL/Dockerfile-aarch64 index 046c19b..d164aa8 100644 --- a/GreatSQL/Dockerfile-aarch64 +++ b/GreatSQL/Dockerfile-aarch64 @@ -11,10 +11,9 @@ ENV MYSQL_EXTRACT_DIR=/usr/local ENV TMP_DIR=/tmp ENV MYSQL_PORT=3306 #for centos8 -ENV GREATSQL="GreatSQL-8.0.27-18-Linux-glibc2.28-aarch64" -ENV MYSQL_BASEDIR=${MYSQL_EXTRACT_DIR}/${GREATSQL} -ENV DEP_LIBS="numactl-libs libaio readline-devel ncurses-devel" +ENV DEPS="numactl-libs libaio readline-devel ncurses-devel" #for centos8 +ENV GREATSQL_SHRINK="greatsql-shrink.sh" ENV GREATSQL_INIT="greatsql-init.sh" #Creating user mysql @@ -23,28 +22,27 @@ RUN groupadd -g ${MYSQL_UID_GID} ${MYSQL_USER}; \ -c "MySQL User" ${MYSQL_USER} #Copying files -COPY ${GREATSQL} ${MYSQL_EXTRACT_DIR}/${GREATSQL} +COPY greatsql-802516.tgz ${TMP_DIR} -#Installing depend libs +#Installing jemalloc & depend libs +COPY CentOS-Base.repo /etc/yum.repos.d/ RUN rm -f /etc/yum.repos.d/CentOS-Linux-AppStream.repo /etc/yum.repos.d/CentOS-Linux-BaseOS.repo ; \ -curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo && \ sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo && \ yum clean all && \ yum makecache -RUN yum install -y ${DEP_LIBS} +RUN yum install -y ${DEPS} +RUN cd ${TMP_DIR}; tar zxvf greatsql-802516.tgz; rpm -ivh greatsql*rpm --nodeps +RUN unlink /etc/localtime; ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime -RUN cd ${MYSQL_BASEDIR}/support-files && \ - cp -f my.cnf /etc/my.cnf ; \ - echo "THP_SETTING=never" >> /etc/sysconfig/mysql ; \ - echo "export PATH=\$PATH:${MYSQL_BASEDIR}/bin" >> /etc/profile.d/mysql.sh ; \ - source /etc/profile.d/mysql.sh -RUN PATH="\$PATH:${MYSQL_BASEDIR}/bin" -RUN export PATH +COPY my.cnf /etc/my.cnf +RUN echo "LD_PRELOAD=/usr/lib64/libjemalloc.so.2" >> /etc/sysconfig/mysql ; \ + echo "THP_SETTING=never" >> /etc/sysconfig/mysql #Creating datadir -RUN mkdir -p ${MYSQL_DATA_DIR} && chown -R ${MYSQL_USER}:${MYSQL_USER} ${MYSQL_BASEDIR} ; \ - chmod -R ug+rwX ${MYSQL_BASEDIR} ; \ - chmod -R ug+rwX /etc/my.cnf +RUN mkdir -p ${MYSQL_DATA_DIR} && chown -R ${MYSQL_USER}:${MYSQL_USER} ${MYSQL_DATA_DIR}; chmod -R ug+rwX /etc/my.cnf + +COPY ${GREATSQL_SHRINK} ${TMP_DIR} +RUN /bin/sh -ex ${TMP_DIR}/${GREATSQL_SHRINK} COPY ${GREATSQL_INIT} /docker-entrypoint.sh ENTRYPOINT ["/docker-entrypoint.sh"] diff --git a/GreatSQL/greatsql-shrink.sh b/GreatSQL/greatsql-shrink.sh new file mode 100755 index 0000000..d0f96b1 --- /dev/null +++ b/GreatSQL/greatsql-shrink.sh @@ -0,0 +1,9 @@ +#!/bin/sh +cd /usr/bin +rm -fr comp_err ibd2sdi innochecksum ldb lz4_decompress myisamchk myisam_ftdump myisamlog myisampack mysqlcheck mysql_client_test mysqld_multi mysqld_safe mysqldumpslow mysqlimport mysql_keyring_encryption_test mysql_ldb mysql_migrate_keyring mysql_secure_installation mysqlslap mysqltest mysqltest_safe_process mysql_upgrade mysqlxtest ps-admin ps_mysqld_helper sst_dump zlib_decompress mysqlpump mysql_tzinfo_to_sql mysql_config mysql_config_editor perror + +cd /usr/lib64/mysql +rm -rf libHotBackup.so libmysqlservices.a libperconaserverclient.* libcoredumper.a libnspr4.so private/libnspr4.so libnss3.so private/libnss3.so libnssutil3.so private/libnssutil3.so libplc4.so private/libplc4.so libplds4.so private/libplds4.so libsmime3.so private/libsmime3.so libssl3.so private/libssl3.so mecab/ + +cd /usr/lib64/mysql/plugin +rm -fr debug/ auth_pam_compat.so auth_pam.so component_keyring_file.so component_mysqlx_global_reset.so component_pfs_example_component_population.so component_pfs_example.so component_test_backup_lock_service.so component_test_mysql_current_thread_reader.so component_test_mysql_runtime_error.so component_test_pfs_notification.so component_test_pfs_resource_group.so component_test_status_var_service_int.so component_test_status_var_service_reg_only.so component_test_status_var_service.so component_test_status_var_service_str.so component_test_status_var_service_unreg_only.so component_test_string_service_charset.so component_test_string_service_long.so component_test_string_service.so component_test_system_variable_source.so component_test_sys_var_service_int.so component_test_sys_var_service_same.so component_test_sys_var_service.so component_test_sys_var_service_str.so component_test_udf_registration.so component_udf_reg_3_func.so component_udf_reg_avg_func.so component_udf_reg_int_func.so component_udf_reg_int_same_func.so component_udf_reg_only_3_func.so component_udf_reg_real_func.so component_udf_unreg_3_func.so component_udf_unreg_int_func.so component_udf_unreg_real_func.so daemon_example.ini dialog.so ha_rocksdb.so innodb_engine.so libdaemon_example.so libmemcached.so libpluginmecab.so libtest_framework.so libtest_services.so libtest_services_threaded.so libtest_session_attach.so libtest_session_detach.so libtest_session_info.so libtest_session_in_thd.so libtest_sql_2_sessions.so libtest_sql_all_col_types.so libtest_sql_cmds_1.so libtest_sql_commit.so libtest_sql_complex.so libtest_sql_errors.so libtest_sql_lock.so libtest_sql_processlist.so libtest_sql_replication.so libtest_sql_reset_connection.so libtest_sql_shutdown.so libtest_sql_sleep_is_connected.so libtest_sql_sqlmode.so libtest_sql_stmt.so libtest_sql_stored_procedures_functions.so libtest_sql_views_triggers.so libtest_x_sessions_deinit.so libtest_x_sessions_init.so pfs_example_plugin_employee.so procfs.so qa_auth_client.so qa_auth_interface.so qa_auth_server.so replication_observers_example_plugin.so test_security_context.so test_services_plugin_registry.so test_udf_services.so tokudb_backup.so udf_example.so semisync_master.so semisync_replica.so semisync_slave.so semisync_source.so test_* *test* diff --git a/GreatSQL/my.cnf b/GreatSQL/my.cnf index d4733b5..c7fc934 100644 --- a/GreatSQL/my.cnf +++ b/GreatSQL/my.cnf @@ -9,7 +9,7 @@ no-auto-rehash user = mysql port = 3306 server_id = MYSQL_SID -basedir = /usr/local/GreatSQL-8.0.27-18-Linux-glibc2.28-x86_64 +basedir = /usr/ datadir = /data/GreatSQL socket = /data/GreatSQL/mysql.sock pid-file = mysql.pid @@ -99,7 +99,7 @@ loose-group_replication_single_primary_mode = ON loose-group_replication_communication_max_message_size = 10M loose-group_replication_arbitrator = MYSQL_MGR_ARBITRATOR loose-group_replication_single_primary_fast_mode = 0 -loose-group_replication_request_time_threshold = 20000 +loose-group_replication_request_time_threshold = 50 report_host = REPORT_HOST #innodb settings diff --git a/docker-compose/mgr-3nodes.yml b/docker-compose/mgr-3nodes.yml index f85fe74..34a9838 100644 --- a/docker-compose/mgr-3nodes.yml +++ b/docker-compose/mgr-3nodes.yml @@ -53,7 +53,7 @@ services: MYSQL_INIT_MGR: 1 MYSQL_MGR_LOCAL: '172.18.0.4:33061' MYSQL_MGR_SEEDS: '172.18.0.2:33061,172.18.0.3:33061,172.18.0.4:33061' - MYSQL_MGR_ARBITRATOR: 1 #指定当前MGR节点为Arbitrator角色,此时不能同时指定其为Primary/Secondary角色 + MYSQL_MGR_ARBITRATOR: 0 #指定当前MGR节点为Arbitrator角色,此时不能同时指定其为Primary/Secondary角色 networks: mgr_net: #创建独立MGR专属网络 ipam: -- Gitee