1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266
| a. 清理环境 pkill mysqld rm -rf /data/83306/* \mv /etc/my.cnf /etc/my.cnf.sin
b. 创建目录 mkdir -p /data/83306/data mkdir -p /data/83306/binlog chown -R mysql.mysql /data/*
c. 配置文件 [root@db01 data]# cat /proc/sys/kernel/random/uuid ca842376-1c50-42ac-bb57-a5adc7da7a12
# db01: cat > /etc/my.cnf <<EOF [mysqld] basedir=/data/app/mysql8/ datadir=/data/83306/data socket=/tmp/mysql.sock server_id=51 port=3306 secure-file-priv=/tmp log_bin=/data/83306/binlog/mysql-bin binlog_format=row gtid-mode=on enforce-gtid-consistency=true log-slave-updates=1 port=3306 skip_name_resolve master_info_repository=TABLE relay_log_info_repository=TABLE report_host=10.0.0.51 report_port=3306 socket=/tmp/mysql83306.sock default_authentication_plugin=mysql_native_password binlog_checksum=NONE
binlog_transaction_dependency_tracking = WRITESET transaction_write_set_extraction=XXHASH64 loose-group_replication_group_name="ca842376-1c50-42ac-bb57-a5adc7da7a12" loose-group_replication_start_on_boot=OFF loose-group_replication_local_address= "10.0.0.51:33061" loose-group_replication_group_seeds= "10.0.0.51:33061,10.0.0.52:33062,10.0.0.53:33063" loose-group_replication_bootstrap_group=OFF
[mysql] prompt=db01 [\\d]> EOF
#db02: cat > /etc/my.cnf <<EOF [mysqld] basedir=/data/app/mysql8/ datadir=/data/83306/data socket=/tmp/mysql.sock server_id=52 port=3306 secure-file-priv=/tmp log_bin=/data/83306/binlog/mysql-bin binlog_format=row gtid-mode=on enforce-gtid-consistency=true log-slave-updates=1 port=3306 skip_name_resolve master_info_repository=TABLE relay_log_info_repository=TABLE report_host=10.0.0.52 report_port=3306 socket=/tmp/mysql83306.sock default_authentication_plugin=mysql_native_password binlog_checksum=NONE
binlog_transaction_dependency_tracking = WRITESET transaction_write_set_extraction=XXHASH64 loose-group_replication_group_name="ca842376-1c50-42ac-bb57-a5adc7da7a12" loose-group_replication_start_on_boot=OFF loose-group_replication_local_address= "10.0.0.52:33062" loose-group_replication_group_seeds= "10.0.0.51:33061,10.0.0.52:33062,10.0.0.53:33063" loose-group_replication_bootstrap_group=OFF [mysql] prompt=db02 [\\d]> EOF
# db03 : cat > /etc/my.cnf <<EOF [mysqld] basedir=/data/app/mysql8/ datadir=/data/83306/data socket=/tmp/mysql.sock server_id=53 port=3306 secure-file-priv=/tmp log_bin=/data/83306/binlog/mysql-bin binlog_format=row gtid-mode=on enforce-gtid-consistency=true log-slave-updates=1 port=3306 skip_name_resolve master_info_repository=TABLE relay_log_info_repository=TABLE report_host=10.0.0.53 report_port=3306 socket=/tmp/mysql83306.sock default_authentication_plugin=mysql_native_password binlog_checksum=NONE
binlog_transaction_dependency_tracking = WRITESET transaction_write_set_extraction=XXHASH64 loose-group_replication_group_name="ca842376-1c50-42ac-bb57-a5adc7da7a12" loose-group_replication_start_on_boot=OFF loose-group_replication_local_address= "10.0.0.53:33063" loose-group_replication_group_seeds= "10.0.0.51:33061,10.0.0.52:33062,10.0.0.53:33063" loose-group_replication_bootstrap_group=OFF [mysql] prompt=db03 [\\d]> EOF
d. 初始化数据 mysqld --initialize-insecure --user=mysql --basedir=/data/app/mysql8 --datadir=/data/83306/data e. 启动数据库 /etc/init.d/mysqld start
f. 组复制部分,配置文件介绍: // group_replication变量使用的loose-前缀是指示Server启用时尚未加载复制插件也将继续启动 ##指示Server必须为每个事务收集写集合,并使用XXHASH64哈希算法将其编码为散列 transaction_write_set_extraction = XXHASH64
##表示将加入或者创建的复制组命名为01e5fb97-be64-41f7-bafd-3afc7a6ab555 ##可自定义(通过cat /proc/sys/kernel/random/uuid) loose-group_replication_group_name="01e5fb97-be64-41f7-bafd-3afc7a6ab555"
##设置为Server启动时不自动启动组复制 loose-group_replication_start_on_boot=off
##绑定本地的192.168.29.128及33061端口接受其他组成员的连接,IP地址必须为其他组成员可正常访问 loose-group_replication_local_address="192.168.29.128:33061"
##本行为告诉服务器当服务器加入组时,应当连接到 ##这些种子服务器进行配置。本设置可以不是全部的组成员服务地址。 loose-group_replication_group_seeds="192.168.29.128:33061,192.168.29.128:33062,192.168.29.128:33063"
##配置是否自动引导组 loose-group_replication_bootstrap_group = off
##配置白名单,默认情况下只允许192.168.29.128连接到复制组,如果是其他IP则需要配置。 loose-group_replication_ip_whitelist=”10.30.0.0/16,10.31.0..0/16,10.27.0.0/16″
g. 设置本地root用户密码和密码插件(所有节点) mysql -S /tmp/mysql83306.sock -e "ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123';"
h. 安装MGR插件(所有节点) mysql -uroot -p123 -S /tmp/mysql83306.sock -e "INSTALL PLUGIN group_replication SONAME 'group_replication.so';" i. 设置复制账号(所有节点) [root@db03 83306]# mysql -uroot -p123 -S /tmp/mysql83306.sock SET SQL_LOG_BIN=0; CREATE USER repl@'%' IDENTIFIED BY '123'; CREATE USER repl@'localhost' IDENTIFIED BY '123'; CREATE USER repl@'127.0.0.1' IDENTIFIED BY '123'; GRANT REPLICATION SLAVE,replication client ON *.* TO repl@'%'; grant replication slave,replication client on *.* to repl@'localhost' ; grant replication slave,replication client on *.* to repl@'127.0.0.1' ; FLUSH PRIVILEGES; SET SQL_LOG_BIN=1; j. 启动MGR单主模式 # 启动MGR,在主库(10.0.0.51)上执行 CHANGE MASTER TO MASTER_USER='repl', MASTER_PASSWORD='123' FOR CHANNEL 'group_replication_recovery'; SET GLOBAL group_replication_bootstrap_group=ON; START GROUP_REPLICATION; SET GLOBAL group_replication_bootstrap_group=OFF; SELECT * FROM performance_schema.replication_group_members; +---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+ | CHANNEL_NAME | MEMBER_ID | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE | MEMBER_ROLE | MEMBER_VERSION | +---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+ | group_replication_applier | 5e46b750-c834-11ea-ab1a-000c29ea9d83 | 10.0.0.51 | 65535 | ONLINE | PRIMARY | 8.0.20 | +---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+
# 其他节点加入MGR,在从库上执行 reset master; CHANGE MASTER TO MASTER_USER='repl', MASTER_PASSWORD='123' FOR CHANNEL 'group_replication_recovery'; START GROUP_REPLICATION; # 查看MGR组信息 db03 [(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 | 60aec22c-c83d-11ea-9560-000c29a5e781 | 10.0.0.53 | 65535 | ONLINE | SECONDARY | 8.0.20 | | group_replication_applier | 627fde7d-c83d-11ea-9a66-000c29f2d9fe | 10.0.0.52 | 3306 | ONLINE | SECONDARY | 8.0.20 | | group_replication_applier | 7c612d78-c83d-11ea-b17b-000c29ea9d83 | 10.0.0.51 | 3306 | ONLINE | PRIMARY | 8.0.20 | +---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+ 3 rows in set (0.00 sec)
// 可以看到,3个节点状态为online,并且主节点为192.168.56.101,只有主节点可以写入,其他节点只读,MGR单主模式搭建成功。 如果需要重置,那么需要执行如下命令: STOP GROUP_REPLICATION; reset master; SET SQL_LOG_BIN=1; CHANGE MASTER TO MASTER_USER='repl', MASTER_PASSWORD='123' FOR CHANNEL 'group_replication_recovery'; start GROUP_REPLICATION; k. 切换到多主模式 MGR切换模式需要重新启动组复制,因些需要在所有节点上先关闭组复制,设置 group_replication_single_primary_mode=OFF 等参数,再启动组复制。 1、该模式启用需设置两个参数 group_replication_single_primary_mode=0 #这个参数很好理解,就是关闭单master模式 group_replication_enforce_update_everywhere_checks=1 #这个参数设置多主模式下各个节点严格一致性检查 ================ db02 [(none)]>stop GROUP_REPLICATION; db02 [(none)]>set global group_replication_single_primary_mode=OFF; db02 [(none)]>set global group_replication_enforce_update_everywhere_checks=1; db03 [(none)]>stop GROUP_REPLICATION; db03 [(none)]>set global group_replication_single_primary_mode=OFF; db03 [(none)]>set global group_replication_enforce_update_everywhere_checks=1; select @@group_replication_single_primary_mode,@@group_replication_enforce_update_everywhere_checks; ===============
2、 默认启动的都是单master模式,其他节点都设置了read_only、super_read_only这两个参数,需要修改这两个配置 =========== db03 [(none)]>set global read_only=0; db03 [(none)]>set global super_read_only=0; =========== 3、 完成上面的配置后就可以执行多点写入了,多点写入会存在冲突检查,这耗损性能挺大的,官方建议采用网络分区功能,在程序端把相同的业务定位到同一节点,尽量减少冲突发生几率。 # 停止组复制(所有节点执行): stop group_replication; set global group_replication_single_primary_mode=OFF; set global group_replication_enforce_update_everywhere_checks=ON; # 随便选择某个节点执行 SET GLOBAL group_replication_bootstrap_group=ON; START GROUP_REPLICATION; SET GLOBAL group_replication_bootstrap_group=OFF; # 其他节点执行 START GROUP_REPLICATION; # 查看组信息,所有节点的 MEMBER_ROLE 都为 PRIMARY, SELECT * FROM performance_schema.replication_group_members;
切回单主模式 # 所有节点执行 stop group_replication; set global group_replication_enforce_update_everywhere_checks=OFF; set global group_replication_single_primary_mode=ON; # 主节点执行 SET GLOBAL group_replication_bootstrap_group=ON; START GROUP_REPLICATION; SET GLOBAL group_replication_bootstrap_group=OFF;
# 从节点执行 START GROUP_REPLICATION; # 查看MGR组信息,SELECT * FROM performance_schema.replication_group_members;
|