新网创想网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
# yum install
创新互联建站-专业网站定制、快速模板网站建设、高性价比上街网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式上街网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖上街地区。费用合理售后完善,十多年实体公司更值得信赖。
# yum list postgres*
# yum install postgresql94-server
# su - postgres
$ /usr/pgsql-9.4/bin/initdb -D /var/lib/pgsql/9.4/data
# systemctl enable postgresql-9.4
# systemctl start postgresql-9.4
#su - postgres
$createuser -W zabbix
$createdb -U postgres -O zabbix -E UTF8 zabbix
$psql
# cp -f /var/lib/pgsql/9.4/data/pg_hba.conf /var/lib/pgsql/9.4/data/pg_hba.conf.bk
#vi /var/lib/pgsql/9.4/data/pg_hba.conf
#service postgresql-9.4 restart
#ps ax | grep postgres
#psql -U zabbix -d zabbix -h 127.0.0.1 -p 5432
#\q
#exit
# rpm -ivh
# yum-config-manager --enable rhel-7-server-optional-rpms
# yum install zabbix-server-pgsql zabbix-web-pgsql
# yum install zabbix-agent
# yum install zabbix-get
# zcat /usr/share/doc/zabbix-server-pgsql*/create.sql.gz | sudo -u zabbix psql zabbix
#cp -f /etc/zabbix/zabbix_server.conf /etc/zabbix/zabbix_server.conf.bk
#vi /etc/zabbix/zabbix_server.conf
#systemctl enable zabbix-server.service
#systemctl restart zabbix-server.service
# yum install httpd php php-pgsql php-mbstring php-bcmath php-xml php-gd
# yum install readline-devel zlib-devel
# cp /etc/php.ini /etc/php.ini.org
# vi /etc/php.ini
# cd /var/www/html/
# ln -s /usr/share/zabbix .
# systemctl enable httpd.service'.
# systemctl status httpd
# cp -f /etc/zabbix/zabbix_agentd.conf /etc/zabbix/zabbix_agentd.conf.org
# vi /etc/zabbix/zabbix_agentd.conf
# systemctl enable zabbix-agent.service
# systemctl start zabbix-agent.service
接下来就是登录Web端初始化设定及添加Agent啦
现在就动手----阿里云ECS
docker、docker-compose 安装 - 简书 (jianshu.com)
volumes:将本地/user/local/docker/postgre/data挂在到容器中/var/lib/postgresql/data/pgdata
需要修改两个地方:容器内pg_hba.conf 和postgresql.conf 配置文件
由于我们做了映射,只需要修改宿主机的配置即可:
修改pg_hba.conf
修改postgresql.conf
END!
创建主备的环境变量文件, 因为是在同一台机上起两个PG实例, 环境变量要各自设置。
vi master.env
vi slave.env
新开一个shell终端(后续称为 terminal_master )
新开一个shell终端(后续称为 terminal_slave )
经过上面几步, 一个一主一备的集群就搭建好了, 下面开始验证流复制是否工作正常。
切换到 terminal_master 终端
切换到 terminal_slave 终端
一个false一个tree, 证明目前主备状态正常。
切换到 terminal_slave 终端
切换到 terminal_master 终端
切换到 terminal_slave 终端
DDL能顺利同步。
切换到 terminal_slave 终端
切换到 terminal_master 终端
切换到 terminal_slave 终端
切换到 terminal_master 终端
切换到 terminal_slave 终端
切换到 terminal_master 终端
主备切换完成, 且数据同步工作正常。
目前虽然工作正常, 但是角色是互换了的, 后续可以停掉 slave ,再做一次主备切换, 恢复成原始状态。
这个就作为练习了, 不再贴出操作步骤。
目前是靠手工切换主备的, 线上系统一般都要配置成自动切换, 这个时候就需要引入一些其他手段了, 譬如 patroni 之类的HA工具。
虽然 kubernetes 社区一直在努力使得有状态应用成为一等公民,也推出了 statefulset 控制器支持 pod 的顺序部署,稳定的域名访问和存储访问。但鉴于 MySQL 部署运维的多样性和复杂性,在 kubernetes 上部署 MySQL 仍然要面临众多挑战。
1、业务流量入口的配置方式
传统虚拟机环境下,我们通过虚IP的方式,让业务应用都配置事先定义的一个虚IP为链接数据库的地址,然后由高可用服务保证虚IP始终能被路由到master数据库。在kubernetes中,出现了一层网络插件屏蔽了底层网络拓扑,高可用服务管理虚IP的方式需要随之适应调整,比如通过service结合标签完成虚IP的漂移,但service本身是kubernetes提供的一项功能,其可靠性和性能都取决于kubernetes服务的稳定。以性能来说,service是kubeproxy组件通过配置iptables实现的,当iptables规则较多时不可避免的会产生时延,需要我们针对性的解决。
2、容器隔离带来的监控视野问题
在 kubernetes 中,如果将 MySQL 制作为 container 运行在一个 pod 中,container 会将 MySQL 进程和运行环境隔离在一个单独的 namespace 中。监控组件在获取 MySQL 的一些 metirc 时,可能不得不进入与 MySQL 同一个 namespace 中,在部署和设计监控组件时需要考虑到这些限制。
3、存储在 kubernetes 中,支持配置各种不同的存储。
如果使用本地存储 local persistent volume,则需要绑定 MySQL 在一个固定的节点,这就完全浪费了 kubernetes 灵活调度的天然优势;而如果使用远程共享存储,确实是将 MySQL 进程与其存储完全解耦,使得 MySQL 进程可以在任意节点调度,然而考虑到高 I/O 吞吐量的情况,就不是那么美好了。设计时需要考量远程存储是否能够满足 MySQL 的带宽要求。
4、高可用/备份恢复
kubernetes 提供的 statefulset 控制器只能提供最基本的部署,删除功能,无法实现完善的 MySQL 集群高可用/备份恢复操作。对于有状态应用的部署,仍需要定制开发,所以多数公司提供了定制的 operator 来完成应用容器的管理。比如 etcd operator,MySQL operator,后文将为大家详述我测试使用 MySQL operator 的一些记录。