安装部署Phxsql

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了安装部署Phxsql相关的知识,希望对你有一定的参考价值。

。需求:公司某软件使用phxsql已经部署在3个机房,现需要在新的机房增加一个phxsql节点,以下为操作过程,因为保护隐私把4台IP用

1.1.1.1

2.2.2.2

3.3.3.3

新的ip为4.4.4.4


。安装Phxsql需要Python2.7版本,Centos默认为2.6版本,需要进行升级

cd /opt
wget --no-check-certificate https://www.python.org/ftp/python/2.7.6/Python-2.7.6.tar.xz
tar xf Python-2.7.6.tar.xz
cd Python-2.7.6
./configure --prefix=/usr/local
make && make install


。Phxsql需要升级glibc包,Centos6.5默认为2.12版本,升级为2.20版本。因为glic是操作系统底层库,谨慎操作

glibc-common-2.12-1.149.el6_6.5.x86_64
glibc-2.12-1.149.el6_6.5.i686
glibc-2.12-1.149.el6_6.5.x86_64
glibc-headers-2.12-1.149.el6_6.5.x86_64
glibc-devel-2.12-1.149.el6_6.5.x86_64

升级操作

rpm -Uvh --aid --force --nodeps glibc-headers-2.20-8.fc21.x86_64.rpm
rpm -Uvh --aid --force --nodeps glibc-devel-2.20-8.fc21.x86_64.rpm
rpm -Uvh --aid --force --nodeps glibc-2.20-8.fc21.x86_64.rpm
rpm -Uvh --aid --force --nodeps glibc-common-2.20-8.fc21.x86_64.rpm


。四个phxsql节点的服务器,防火墙需要开放如下几个端口

iptables -A INPUT -p tcp -m multiport --dports 11111,54321,54322 -s 4.4.4.4 -j ACCEPT


。在phxsql集群里任意一个节点,在新节点还没有开始安装部署phxsql时,把新节点IP添加到集群里面

phxbinlogsvr_tools_phxrpc -f AddMember -h1.1.1.1 -p17000 -m 4.4.4.4

加后使用命令行检查

phxbinlogsvr_tools_phxrpc -f GetMemberList -h1.1.1.1 -p 17000

。设置phxsql的数据目录,官网教程定义目录为/tmp/data,这里改为/data1/

cd /data1/phxsql/tools/
mkdir -p /data1/phxsql/tmp/data/log
chown -R mysql:mysql /data1/phxsql/tmp/data/log
python2.7 install.py -i"4.4.4.4" -p 54321 -g 6000 -y 11111 -P 17000 -a 8001 -f /data1/phxsql/tmp/data/

安装过程会出现如下信息

Namespace(agent_port=6000, base_dir=‘/data1/phxsql/‘, data_dir=‘/data1/phxsql/tmp/data/‘, inner_ip=‘183.36.122.100‘, ip_list=‘4.4.4.4‘, module_name=‘test‘, mysql_port=11111, paxos_port=8001, phxbinlogsvr_port=17000, phxsqlproxy_port=54321, process_name=‘all‘, skip_data=0)
kill all binaries success....
mkdir: cannot create directory `/data1/phxsql/etc‘: File exists
generate all configs success....
mkdir: cannot create directory `/data1/phxsql/tmp/data/log‘: File exists
/data1/phxsql/tmp/data/phxbinlogsvr
skip data 0
mkdir: cannot create directory `/data1/phxsql/tmp/data/log‘: File exists
/data1/phxsql/tmp/data/percona.workspace
cd /data1/phxsql/percona.src; ./scripts/mysql_install_db --defaults-file=/data1/phxsql/etc/my.cnf --user=mysql
WARNING: The host ‘centos‘ could not be looked up with /data1/phxsql/percona.src/bin/resolveip.
This probably means that your libc libraries are not 100 % compatible
with this binary MySQL version. The MySQL daemon, mysqld, should work
normally with the exception that host name resolving will not work.
This means that you should use IP addresses instead of hostnames
when specifying MySQL privileges !
Installing MySQL system tables...2017-05-04 04:07:27 0 [Warning] ‘THREAD_CONCURRENCY‘ is deprecated and will be removed in a future release.
2017-05-04 04:07:27 0 [Note] ./bin/mysqld (mysqld 5.6.31-77.0-log) starting as process 55454 ...
OK
Filling help tables...2017-05-04 04:07:32 0 [Warning] ‘THREAD_CONCURRENCY‘ is deprecated and will be removed in a future release.
2017-05-04 04:07:32 0 [Note] ./bin/mysqld (mysqld 5.6.31-77.0-log) starting as process 55496 ...
OK
To start mysqld at boot time you have to copy
support-files/mysql.server to the right place for your system
PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !
To do so, start the server, then issue the following commands:
  /data1/phxsql/percona.src/bin/mysqladmin -u root password ‘new-password‘
  /data1/phxsql/percona.src/bin/mysqladmin -u root -h centos password ‘new-password‘
Alternatively you can run:
  /data1/phxsql/percona.src/bin/mysql_secure_installation
which will also give you the option of removing the test
databases and anonymous user created by default.  This is
strongly recommended for production servers.
See the manual for more instructions.
You can start the MySQL daemon with:
  cd . ; /data1/phxsql/percona.src/bin/mysqld_safe &
You can test the MySQL daemon with mysql-test-run.pl
  cd mysql-test ; perl mysql-test-run.pl
Please report any problems at
 https://bugs.launchpad.net/percona-server/+filebug
The latest information about Percona Server is available on the web at
  http://www.percona.com/software/percona-server
Support Percona by buying support at
 http://www.percona.com/products/mysql-support
install all success....
nohup: appending output to `nohup.out‘
nohup: appending output to `nohup.out‘
WARNING: Logging before InitGoogleLogging() is written to STDERR
W0504 04:07:39.378021 55555 phx_glog.cpp:74] GetDefaultPath get debuf path /data1/phxsql/etc/
W0504 04:07:39.385524 55555 phx_glog.cpp:74] RealReadFile  read path /data1/phxsql/etc/phxsqlproxy.conf done
W0504 04:07:39.385609 55555 phx_glog.cpp:74] read plugin config []
W0504 04:07:39.385701 55555 phx_glog.cpp:74] RealReadFile  read path /data1/phxsql/etc/phxsqlproxy.conf done
W0504 04:07:39.385752 55555 phx_glog.cpp:74] read plugin config []
start master worker finished ...
start slave worker finished ...
init pid 55580 env 0x7f77780008c0
init pid 55582 env 0x7f777c0008c0
init pid 55583 env 0x7f77700008c0
init pid 55585 env 0x7f77800008c0
init pid 55586 env 0x7f77740008c0
init pid 55587 env 0x7f77840008c0
init pid 55588 env 0x7f77780008c0
init pid 55589 env 0x7f777c0008c0
init pid 55592 env 0x7f77680008c0
init pid 55593 env 0x7f776c0008c0
init pid 55598 env 0x7f77700008c0
init pid 55602 env 0x7f77680008c0
init pid 55600 env 0x7f77600008c0
init pid 55608 env 0x7f77640008c0
init pid 55605 env 0x7f77600008c0


。如果安装成功,如下3个进程会启动

ps -ef|grep -v grep | grep phxsqlproxy

ps -ef|grep -v grep | grep mysql 

ps -ef|grep -v grep | grep phxbinlogsvr 

偶尔phxbinlogsvr不会启动,不过没有关系,因为如果phxbinlogsvr 启动了,就需要把它kill掉

killall -9 phxbinlogsvr_phxrpc


。添加环境变量

vi /etc/profile
export PATH=/data1/phxsql/sbin:$PATH
. /etc/profile


。phxsql安装好了,目前是空的,需要从一个有数据的节点上把数据导过来,通常会选择从点,通过命令查询哪个是master,然后避开master,我这边数据量是200G,对于导出大量的数据会很消耗磁盘资源,需要让业务切换到其他点。

phxbinlogsvr_tools_phxrpc -f GetMemberList -h1.1.1.1 -p 17000

。使用mysqldump导出数据,需要加一个--quick参数,目的是导出数据时不经过buffer pool,而是直接从磁盘取数,然后保存到文件,建议使用脚本,为了知道导数到底用了多少时间。注意导出的是全量数据 --all-database,因为phxsql下所有节点的数据量都是一致的,相当于多点冗余

function output_data(){
    start_date=$(date +%s)
    /data1/phxsql/percona.src/bin/mysqldump  --quick -uroot -S /data1/phxsql/tmp/data/percona.workspace/tmp/percona.sock --all-databases > phxsql.alldata
    end_date=$(date +%s)
    backup_time=$(( $end_date - $start_date ))
    echo "导出耗时:"${backup_time}"秒"
}

200G的数据,导出文件67G,大概3倍的压缩,一共2393秒,平均11秒可以导出1G


。一直有个困惑,iostat占用率和负载到底临界值是多少,才不需要切业务呢?导数的时候是否有必要去迁业务呢?

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           2.31    0.00    1.13    1.76    0.00   94.79
Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda               0.00     0.00    0.00    1.00     0.00     8.00     8.00     0.00    3.00    0.00    3.00   3.00   0.30
sdb               0.00   117.00 2048.00  362.00 65536.00  3832.00    28.78     0.67    0.28    0.23    0.56   0.23  56.40


。数据导出来以后,使用rsync传输到另外一个机房的服务器上

 rsync -av --port=8732  --password-file=/home/lijunda/rsyncd_ccopy_passwd1 --progress  [email protected]::item/data1/phxsql.alldata /data1/
receiving incremental file list
phxsql.alldata
 30137810944  42%  113.03MB/s    0:05:52


。在新机房DB导入数据,phxsql不管在哪个节点写入数据,都会通过proxy路由到主库进行写入,而现在要往从库导入数据,需要把只读功能停止掉

mysql -uroot -S /data1/phxsql/tmp/data/percona.workspace/tmp/percona.sock
-e "set global super_read_only=off; set global read_only=off;reset master;";
mysql -uroot -S /data1/phxsql/tmp/data/percona.workspace/tmp/percona.sock < phxsql.alldata





本文出自 “DBA运维总结” 博客,转载请与作者联系!

以上是关于安装部署Phxsql的主要内容,如果未能解决你的问题,请参考以下文章

PhxSQL 教程:兼容MySQL的数据库集群

phxsql问题 - phxsql突然连接不上了

phxsql问题 - 17000挂掉了

微信最新开源的PhxSQL

Gitlab代码管理仓库安装部署

GitLab安装部署