此搭建试验为5.7GR刚出三天左右搭建的,可能现在又有变化,最近京东出了个搭建文档可以瞅一下



多台服务器相比单台服务器搭建  group replication 需要注意几个点:

1、各个服务器之间需要添加解析:

127.0.0.1 VM-172-31-102-3 localhost localhost.localdomain localhost4 localhost4.localdomain4

172.31.102.243 VM-172-31-102-243

172.31.102.3 VM-172-31-102-3 

172.31.102.86 VM-172-31-102-86

2、需要添加白名单参数:

loose-group_replication_ip_whitelist='172.31.102.243/24,172.31.102.3/24,172.31.102.86/24,127.0.0.1/8'

3、 两种模式

mysql5.7.17 Group Replication提供了single-primary和multi-primary两种模式。single-primary mode 组内只有一个节点负责写入,

读可以从任意一个节点读取,组内数据保持强一致;而multi-primary mode 为多写,即写会下发到组内所有节点,组内所有节点同时可读,

也是能够保证组内数据强一致性。一个group的所有节点必须配置使用同一种模式,不可混用。

Single-Primary Mode

这个模式下,group内只有一台节点可写可读,其他节点只可以读。对于group的部署,

需要先跑起primary节点(即那个可写可读的节点),然后再跑起其他的节点,并把这些节点一一加进group。

其他的节点就会自动同步primary节点上面的变化,然后将自己设置为只读模式。

当primary节点意外宕机或者下线,在满足大多数机器存活的情况下,group内部发起选举,选出下一个可用的读节点,提升为primary节点

multi-primary模式:

1、该模式启用需设置两个参数

group_replication_single_primary_mode=0  #这个参数很好理解,就是关闭单master模式

group_replication_enforce_update_everywhere_checks=1 #这个参数设置检查对RP又影响的参数在各个节点是否一致

2、默认启动的都是单master模式,其他节点都设置了read_only、super_read_only这两个参数,需要修改这两个配置

3、完成上面的配置后就可以执行多点写入了,多点写入会存在冲突检查,这耗损性能挺大的,官方建议采用网络分区功能,

在程序端把相同的业务定位到同一节点,尽量减少冲突发生几率

--------------------------------------------------搭建:

一、初始化数据库:

-----5.7安装配置

yum install gcc gcc-c++ -y

yum install -y ncurses-devel.x86_64

yum install -y cmake.x86_64

yum install -y libaio.x86_64

yum install -y bison.x86_64

yum install -y gcc-c++.x86_64

yum install –y autoconf automake imake libxml2-devel expat-devel cmake gcc gcc-c++ libaio libaio-devel bzr bison libtool ncurses5-devel ncurses-devle

yum install -y libaio*

安装boost

./bootstrap.sh

./b2 install

vi /etc/my.cnf

以下为搭建GA的最基本参数,其他优化参数可根据具体情况添加:

##############################################################################

[mysqld]

basedir = /usr/local/mysql

datadir = /data/mysql

user=mysql

explicit_defaults_for_timestamp

port = 3306

server_id = 2

socket = /tmp/mysql.sock

pid-file = /tmp/mysql.pid

# log settings #

log-error = /data/log/3306.err

#binlog binlog

log-bin=mysql-bin

binlog-format = ROW

gtid-mode = ON

enforce-gtid-consistency = ON

log-slave-updates = ON

master-info-repository = TABLE

relay-log-info-repository = TABLE

binlog-checksum = NONE

#group replication

transaction_write_set_extraction=XXHASH64

loose-group_replication_start_on_boot=off

loose-group_replication_group_name="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"

loose-group_replication_local_address= '172.31.102.243:6606'

loose-group_replication_group_seeds= '172.31.102.243:6606,172.31.102.3:6606,172.31.102.86:6606'

loose-group_replication_ip_whitelist='172.31.102.243/24,172.31.102.3/24,172.31.102.86/24,127.0.0.1/8'

loose-group_replication_bootstrap_group= off

#loose-group-group_replication_single_primary_mode=0

#loose-group-group_replication_enforce_update_everywhere_checks=1

##############################################################################

---注册服务

useradd mysql

cp ./support-files/mysql.server /etc/init.d/mysqld

mkdir -p /data/mysql

mkdir -p /data/log

mkdir -p /data/binlog

mkdir -p /data/undolog

chmod 755 /etc/init.d/mysqld

chown -R mysql:mysql /opt/mysql

chown -R mysql:mysql /data

ln -s /opt/mysql/bin/* /usr/bin/

--不生成随机密码

./mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql

三、启动数据库

service mysqld start

四、配置第一个节点

SET SQL_LOG_BIN=0;

alter user 'root'@'localhost' identified by 'root';

CREATE USER rpl_user@'%';

GRANT REPLICATION SLAVE ON *.* TO rpl_user@'%' IDENTIFIED BY 'rpl_pass';

SET SQL_LOG_BIN=1;

CHANGE MASTER TO MASTER_USER='rpl_user', MASTER_PASSWORD='rpl_pass' 

FOR CHANNEL 'group_replication_recovery';

INSTALL PLUGIN group_replication SONAME 'group_replication.so';

mysql> SHOW PLUGINS;

+----------------------------+----------+--------------------+----------------------+-------------+

| Name                       | Status   | Type               | Library              | License     |

+----------------------------+----------+--------------------+----------------------+-------------+

| binlog                     | ACTIVE   | STORAGE ENGINE     | NULL                 | PROPRIETARY |

(...)

| group_replication          | ACTIVE   | GROUP REPLICATION  | group_replication.so | PROPRIETARY |

+----------------------------+----------+--------------------+----------------------+-------------+

SET GLOBAL group_replication_bootstrap_group=ON;

START GROUP_REPLICATION;

SET GLOBAL group_replication_bootstrap_group=OFF;

mysql> SELECT * FROM performance_schema.replication_group_members;

+---------------------------+--------------------------------------+-------------------+-------------+--------------+

| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST       | MEMBER_PORT | MEMBER_STATE |

+---------------------------+--------------------------------------+-------------------+-------------+--------------+

| group_replication_applier | 0e39bfb1-c367-11e6-a5e4-0200621600c2 | VM-172-31-102-243 |        3306 | ONLINE       |

+---------------------------+--------------------------------------+-------------------+-------------+--------------+

1 row in set (0.00 sec)

mysql> CREATE DATABASE test;

Query OK, 1 row affected (0,00 sec)

mysql> use test

Database changed

mysql> CREATE TABLE t1 (c1 INT PRIMARY KEY, c2 TEXT NOT NULL);

Query OK, 0 rows affected (0,00 sec)

mysql> INSERT INTO t1 VALUES (1, 'Luis');

Query OK, 1 row affected (0,01 sec)

mysql> SELECT * FROM t1;

+----+------+

| c1 | c2   |

+----+------+

|  1 | Luis |

+----+------+

1 row in set (0,00 sec)

mysql> SHOW BINLOG EVENTS;

+---------------+-----+----------------+-----------+-------------+--------------------------------------------------------------------+

| Log_name      | Pos | Event_type     | Server_id | End_log_pos | Info                                                               |

+---------------+-----+----------------+-----------+-------------+--------------------------------------------------------------------+

| binlog.000001 |   4 | Format_desc    |         1 |         123 | Server ver: 5.7.17-gr080-log, Binlog ver: 4                        |

| binlog.000001 | 123 | Previous_gtids |         1 |         150 |                                                                    |

| binlog.000001 | 150 | Gtid           |         1 |         211 | SET @@SESSION.GTID_NEXT= 'aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa:1'  |

| binlog.000001 | 211 | Query          |         1 |         270 | BEGIN                                                              |

| binlog.000001 | 270 | View_change    |         1 |         369 | view_id=14724817264259180:1                                        |

| binlog.000001 | 369 | Query          |         1 |         434 | COMMIT                                                             |

| binlog.000001 | 434 | Gtid           |         1 |         495 | SET @@SESSION.GTID_NEXT= 'aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa:2'  |

| binlog.000001 | 495 | Query          |         1 |         585 | CREATE DATABASE test                                               |

| binlog.000001 | 585 | Gtid           |         1 |         646 | SET @@SESSION.GTID_NEXT= 'aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa:3'  |

| binlog.000001 | 646 | Query          |         1 |         770 | use `test`; CREATE TABLE t1 (c1 INT PRIMARY KEY, c2 TEXT NOT NULL) |

| binlog.000001 | 770 | Gtid           |         1 |         831 | SET @@SESSION.GTID_NEXT= 'aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa:4'  |

| binlog.000001 | 831 | Query          |         1 |         899 | BEGIN                                                              |

| binlog.000001 | 899 | Table_map      |         1 |         942 | table_id: 108 (test.t1)                                            |

| binlog.000001 | 942 | Write_rows     |         1 |         984 | table_id: 108 flags: STMT_END_F                                    |

| binlog.000001 | 984 | Xid            |         1 |        1011 | COMMIT /* xid=38 */                                                |

+---------------+-----+----------------+-----------+-------------+--------------------------------------------------------------------+

15 rows in set (0,00 sec)

五、加入其它节点

--二三节点配置:

##############################################################################

[mysqld]

basedir = /usr/local/mysql

datadir = /data/mysql

user=mysql

explicit_defaults_for_timestamp

port = 3306

server_id = 2

socket = /tmp/mysql.sock

pid-file = /tmp/mysql.pid

# log settings #

log-error = /data/log/3306.err

#binlog binlog

log-bin=mysql-bin

binlog-format = ROW

gtid-mode = ON

enforce-gtid-consistency = ON

log-slave-updates = ON

master-info-repository = TABLE

relay-log-info-repository = TABLE

binlog-checksum = NONE

#relay-log=VM-172-31-102-3-relay-bin

#skip-name-resolve

#group replication

transaction_write_set_extraction=XXHASH64

loose-group_replication_start_on_boot=off

loose-group_replication_group_name="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"

loose-group_replication_local_address= '172.31.102.3:6606'

loose-group_replication_group_seeds= '172.31.102.243:6606,172.31.102.3:6606,172.31.102.86:6606'

loose-group_replication_ip_whitelist='172.31.102.243/24,172.31.102.3/24,172.31.102.86/24,127.0.0.1/8'

loose-group_replication_bootstrap_group= off

#loose-group-group_replication_single_primary_mode=0

#loose-group-group_replication_enforce_update_everywhere_checks=1

##############################################################################

##############################################################################

[mysqld]

basedir = /usr/local/mysql

datadir = /data/mysql

user=mysql

explicit_defaults_for_timestamp

port = 3306

server_id = 3

socket = /tmp/mysql.sock

pid-file = /tmp/mysql.pid

# log settings #

log-error = /data/log/3306.err

log-bin=/data/binlog/mysql-bin

#binlog binlog

log-bin=mysql-bin

binlog-format = ROW

gtid-mode = ON

enforce-gtid-consistency = ON

log-slave-updates = ON

master-info-repository = TABLE

relay-log-info-repository = TABLE

binlog-checksum = NONE

#group replication

transaction_write_set_extraction=XXHASH64

loose-group_replication_start_on_boot=off

loose-group_replication_group_name="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"

loose-group_replication_local_address= '172.31.102.86:6606'

loose-group_replication_group_seeds= '172.31.102.3:6606,172.31.102.243:6606,172.31.102.86:6606'

loose-group_replication_ip_whitelist='172.31.102.243/24,172.31.102.3/24,172.31.102.86/24'

loose-group_replication_bootstrap_group= off

#loose-group-group_replication_single_primary_mode=0

#loose-group-group_replication_enforce_update_everywhere_checks=1

##############################################################################

--加入节点:(二三节点依次执行)

INSTALL PLUGIN group_replication SONAME 'group_replication.so';

SET SQL_LOG_BIN=0;

alter user 'root'@'localhost' identified by 'root';

CREATE USER rpl_user@'%';

GRANT REPLICATION SLAVE ON *.* TO rpl_user@'%' IDENTIFIED BY 'rpl_pass';

FLUSH PRIVILEGES;

SET SQL_LOG_BIN=1;

CHANGE MASTER TO MASTER_USER='rpl_user', MASTER_PASSWORD='rpl_pass' FOR CHANNEL 'group_replication_recovery';

START GROUP_REPLICATION;

--下列抱错可能会因初始化参数执行顺序问题出现:

[ERROR] Plugin group_replication reported: 'This member has more executed transactions than those present in the group.

 Local transactions: 

--执行跳过该事物:

SET GLOBAL group_replication_allow_local_disjoint_gtids_join=ON;

搭建完毕:

mysql> SELECT * FROM performance_schema.replication_group_members;

+---------------------------+--------------------------------------+-------------------+-------------+--------------+

| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST       | MEMBER_PORT | MEMBER_STATE |

+---------------------------+--------------------------------------+-------------------+-------------+--------------+

| group_replication_applier | 69717cb5-c59d-11e6-b788-020027b4009a | VM-172-31-102-86  |        3306 | ONLINE       |

| group_replication_applier | b55a9513-c734-11e6-821a-02007de500c1 | VM-172-31-102-3   |        3306 | ONLINE       |

| group_replication_applier | c0d38ada-c730-11e6-8cdc-0200621600c2 | VM-172-31-102-243 |        3306 | ONLINE       |

+---------------------------+--------------------------------------+-------------------+-------------+--------------+

3 rows in set (0.00 sec)