强一致性
、无同步延迟如何实现数据强一致性?
服务器执行客户端的SQL命令时,向集群发送广播,你们能不能执行这个命令?如果能,回复能,所有服务器都能时,所有服务器存储数据,如果有一台服务器回复不能,则不存储该数据,回复客户端存储失败
端口 | 说明 |
---|---|
3306 | 数据库服务端口 |
4444 | SST端口 |
4567 | 集群通信端口 |
4568 | IST端口 |
SST | State Snapshot Transfer 全量同步 |
IST | Incremental State Transfer 增量同步 |
本次案例:
主机名 | IP地址 | 角色 |
---|---|---|
pxc1 | 192.168.4.71 | 数据库服务器 |
pxc2 | 192.168.4.72 | 数据库服务器 |
pxc2 | 192.168.4.73 | 数据库服务器 |
[root@pxc1,pxc2,pxc3] vim /etc/hosts
192.168.4.71 pxc1
192.168.4.72 pxc2
192.168.4.73 pxc3
[root@pxc1,pxc2,pxc3] rpm -ivh libev-4.15-1.el6.rf.x86_64.rpm
[root@pxc1,pxc2,pxc3] yum -y install percona-xtrabackup-24-2.4.13-1.el7.x86_64.rpm #在线热备工具
[root@pxc1,pxc2,pxc3] rpm -ivh qpress-1.1-14.11.x86_64.rpm #递归压缩工具
[root@pxc1,pxc2,pxc3] tar -xvf Percona-XtraDB-Cluster-5.7.25-31.35-r463-el7-x86_64-bundle.tar -C . #集群服务程序
[root@pxc1,pxc2,pxc3] yum -y install Percona-XtraDB-Cluster-*.rpm
/etc/percona-xtradb-cluster.conf.d/
配置文件 | 说明 |
---|---|
mysqld.cnf | 数据库服务运行参数配置文件 |
mysqld_safe.cnf | Percona Server 5.7配置文件 |
wsrep.cnf | PXC集群配置文件 |
[root@pxc1,pxc2,pxc3] cd /etc/percona-xtradb-cluster.conf.d/
[root@pxc1,pxc2,pxc3] vim mysqld.cnf
[mysqld]
server-id=71 #server-id 不允许重复
datadir=/var/lib/mysql #数据库目录
socket=/var/lib/mysql/mysql.sock #socket文件
log-error=/var/log/mysqld.log #日志文件
pid-file=/var/run/mysqld/mysqld.pid #pid文件
log-bin #启用binlog日志
log_slave_updates #启用链式复制
expire_logs_days=7 #日志文件保留天数
[root@pxc1,pxc2,pxc3] vim mysqld_safe.cnf #不需要改动
[mysqld_safe]
pid-file = /var/run/mysqld/mysqld.pid #pid配置文件位置及名称
socket = /var/lib/mysql/mysql.sock #socket文件位置及名称
nice = 0 #优先级
[root@pxc1,pxc2,pxc3] vim wsrep.cnf
wsrep_cluster_address=gcomm://192.168.4.71,192.168.4.72,192.168.4.73 #成员列表,所有服务器必须一样
wsrep_node_address=192.168.4.71 #本机ip
wsrep_cluster_name=pxc-cluster #集群名称,所有服务器必须一样
wsrep_node_name=pxc1 #本机主机名
wsrep_sst_auth="sstuser:123qqq...A" #sst数据同步用户名:密码, 所有服务器都一样
在一台
服务器上执行初始化
即可,其余服务器启动时会同步
该服务器的所有数据
初始化操作:
] systemctl start [email protected] #启动集群服务
] grep root@ /var/log/mysqld.log #查看初始密码
] mysql -uroot -p’W.HiOb8(ok)_’ #初始密码登录
mysql> alter user root@”localhost” identified by “123456”; #修改登录密码
mysql> grant reload,lock tables,replication client,process on *.* to sstuser@"localhost” identified by “123qqq...A”; #添加授权用户
如果启动失败:
] vim /var/log/mysqld.log #查看报错信息
其他服务器:
] systemctl start mysql #启动数据库服务
mysql> show status like '%wsrep%'; #查看集群状态,每台服务器都可以查看
wsrep_incoming_addresses 192.168.4.72:3306,192.168.4.73:3306,192.168.4.71:3306
#成员列表
wsrep_cluster_size 3 #集群服务器数量
wsrep_cluster_status Primary #集群状态
wsrep_connected ON #连接状态
wsrep_ready ON #服务状态
任何1台数据库服务器宕机都不影响用户存取数据,服务器运行以后,自动同步
宕机期间数据,3台服务器同时损坏
,集群崩溃
执行了初始化的主机:
] systemctl stop [email protected]
再次启动时,需要用systemctl start mysql启动
没有执行初始化的主机:
] systemctl stop mysql
yum -y install haproxy
vim /etc/haproxy/haproxy.cfg
Global #全局配置默认即可
log 127.0.0.1 local2
chroot /var/lib/haproxy
pidfile /var/run/haproxy.pid
maxconn 4000
user haproxy
group haproxy
daemon
stats socket /var/lib/haproxy/stats
defaults #默认配置(不需要修改)
mode http
log global
option httplog
option dontlognull
option http-server-close
option forwardfor except 127.0.0.0/8
option redispatch
retries 3
timeout http-request 10s
timeout queue 1m
timeout connect 10s
timeout client 1m
timeout server 1m
timeout http-keep-alive 10s
timeout check 10s
maxconn 3000
listen status #定义监控页面
mode http #模式为http
bind *:80 #端口80
stats enable #启用配置
stats uri /admin #访问目录名
stats auth admin:admin #登录用户与密码
listen mysql_3306 *:3306 #定义haproxy服务名称与端口号
mode tcp #mysql服务 得使用 tcp 协议
option tcpka #使用长连接
balance roundrobin #调度算法
server mysql_01 192.168.4.66:3306 check #第1台pxc服务器
server mysql_02 192.168.4.10:3306 check #第2台pxc服务器
server mysql_03 192.168.4.88:3306 check #第3台pxc服务器
# 使用一台备用haproxy服务器,与主haproxy服务器相同配置
# 两台haproxy服务器上相同操作:
yum -y install keepalived
vim /etc/keepalived/keepalived.conf
global_defs {
……
……
vrrp_iptables #禁止iptables
}
vrrp_instance VI_1 {
state MASTER #主服务器标识
interface eth0
virtual_router_id 51
priority 150 #haproxy99 主机做主服务器,优先级要比 haproxy88主机高
advert_int 1
authentication {
auth_type PASS #主备服务器连接方式
auth_pass 1111 #连接密码
}
virtual_ipaddress {
192.168.4.100 #定义vip地址
}
}