简单说明:

  • Nacos是一个微服务配置中心,能够发现、配置和管理微服务
  • Nacos可以方便和有效的实现动态服务发现,服务配置,服务的元数据和负载管理
  • 官方文档链接:https://nacos.io/zh-cn/docs/what-is-nacos.html
  • 官方github:https://github.com/alibaba/nacos
  • 最新正式包:https://github.com/alibaba/nacos/releases
  • 一个较为简单的生产高可用架构方案如下:
    在这里插入图片描述
  • 该架构有一个缺点:数据库为简单的主从复制,当主库宕机时需要控制数据写入,否则需要重新构建主从复制,以备库数据为主
  • 建议生产环境使用MySQL的高可用集群而非简单的主从复制

数据库层,MySQL主从部署:

  • 数据库版本要求为5.6.5+,参见官方文档中部署手册页的单机模式支持mysql部分说明
  • 本次实验以两台CentOS6部署安装MySQL5.6的主从复制
  • 依据文档《CentOS6u9 二进制软件包安装MySQL 5.6》部署安装两台实验主机:
hostname mysqlm
# hostname mysqls
echo "$(grep -E '127|::1' /etc/hosts)">/etc/hosts
cat >>/etc/hosts<<EOF
192.168.77.121 mysqlm
192.168.77.122 mysqls
EOF
sed -i "s/^HOSTNAME.*$/HOSTNAME=$(hostname)/g" /etc/sysconfig/network
  • 构建MySQL5.6主从复制:
# 主库和备库均操作:
# 修改server-id和server-uuid并添加配置参数
SERVERID=$RANDOM
sed -i "s/server-id = .*/server-id = $SERVERID/g" /etc/my.cnf
Uuid=$(mysql -uroot -pvincent -e 'select uuid();'|sed -n '$p') 
echo $Uuid
Ufile=$(mysql -uroot -pvincent -e "show variables like 'datadir';"|sed -n '$p'|awk '{print $2}')auto.cnf
echo $Ufile
sed -i "s/^server-uuid=.*/server-uuid=$Uuid/g" $Ufile
sed -i "/^\[mysqld\]/a\report-host=$(hostname)" /etc/my.cnf
sed -i "/^\[mysqld\]/a\binlog-rows-query-log_events=1" /etc/my.cnf
sed -i "/^\[mysqld\]/a\slave-sql-verify-checksum=1" /etc/my.cnf
sed -i "/^\[mysqld\]/a\master-verify-checksum=1" /etc/my.cnf
sed -i "/^\[mysqld\]/a\binlog-checksum=CRC32" /etc/my.cnf
sed -i "/^\[mysqld\]/a\sync-master-info=1" /etc/my.cnf
sed -i "/^\[mysqld\]/a\relay-log-info-repository=TABLE" /etc/my.cnf
sed -i "/^\[mysqld\]/a\master-info-repository=TABLE" /etc/my.cnf
# 重启库,创建同步用户
mysqladmin -uroot -pvincent shutdown
/usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf &
mysql -uroot -pvincent
GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO 'repluser'@'192.168.77.%' IDENTIFIED BY 'replpass';
flush privileges;
exit
# 主库操作:
mysqldump -uroot -pvincent --single-transaction --master-data=2 -A >/tmp/fulldb.sql
head -30 /tmp/fulldb.sql|grep '^-- CHANGE MASTER TO MASTER_LOG_FILE'
# -- CHANGE MASTER TO MASTER_LOG_FILE='binlog3306.000005', MASTER_LOG_POS=432;
scp /tmp/fulldb.sql  192.168.77.122:/tmp/
# 备库操作:
mysql -uroot -pvincent </tmp/fulldb.sql
mysql -uroot -pvincent
CHANGE MASTER TO MASTER_HOST='192.168.77.121',
MASTER_USER='repluser',MASTER_PASSWORD='replpass',
MASTER_LOG_FILE='binlog3306.000005',MASTER_LOG_POS=432;
START SLAVE;
show slave status\G
show variables like '%gtid%';
# 主库建库备库验证主从
# 主库操作:
# 下载nacos部署包,初始化数据库
cd /tmp
wget https://github.com/alibaba/nacos/releases/download/1.1.4/nacos-server-1.1.4.tar.gz
tar -xf nacos-server-1.1.4.tar.gz
cd nacos/conf
# 建库,创建用户,初始化库:
mysql -uroot -pvincent
CREATE DATABASE nacos DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
grant all privileges on nacos.* to nacos@localhost   identified by 'nacos';
grant all privileges on nacos.* to nacos@'127.0.0.1' identified by 'nacos';
grant all privileges on nacos.* to nacos@'%'         identified by 'nacos';
flush privileges;
exit
mysql -unacos -pnacos -Dnacos < nacos-mysql.sql
mysql -unacos -pnacos -Dnacos -e 'show tables;'
  • 依据《MySQL简单备份脚本》部署备份脚本

配置中心层,三个Nacos实例构建集群

  • Nacos集群至少包含3个节点,参见官档集群部署说明页的配置集群配置文件部分
  • 使用三台linux主机部署集群,CentOS6或者CentOS7均可,其他发行版也是可以的
  • 依据《CentOS7实验机模板搭建部署》部署三台实验主机:
HOSTNAME=nacos1
# HOSTNAME=nacos2
# HOSTNAME=nacos3
hostnamectl set-hostname "$HOSTNAME"
echo "$HOSTNAME">/etc/hostname
echo "$(grep -E '127|::1' /etc/hosts)">/etc/hosts
cat >>/etc/hosts<<EOF
192.168.77.111 nacos1
192.168.77.112 nacos2
192.168.77.113 nacos3
EOF
# 三台主机均操作:
# 部署java8环境
cd /usr/local
tar -xf /tmp/jdk-8u181-linux-x64.tar.gz
chown root: /usr/local/jdk1.8.0_181/ -R
echo 'export JAVA_HOME=/usr/local/jdk1.8.0_181'>>/etc/profile
echo 'export PATH=$JAVA_HOME/bin:$PATH'>>/etc/profile
source /etc/profile
java -version
# 下载nacos,配置集群和库链接地址
cd /tmp
wget https://github.com/alibaba/nacos/releases/download/1.1.4/nacos-server-1.1.4.tar.gz
cd /usr/local
tar -xf /tmp/nacos-server-1.1.4.tar.gz
echo 'source /etc/profile;/usr/local/nacos/bin/startup.sh'>>/etc/rc.local
cd nacos/conf
cat >cluster.conf<<EOF
192.168.77.111:8848
192.168.77.112:8848
192.168.77.113:8848
EOF
cat >>application.properties<<EOF
db.num=2
db.url.0=jdbc:mysql://192.168.77.121:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.url.1=jdbc:mysql://192.168.77.122:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=nacos
db.password=nacos
management.endpoints.web.exposure.include=*
EOF
reboot
# 浏览器访问 http://192.168.77.111:8848/nacos
# http://192.168.77.112:8848/nacos
# http://192.168.77.113:8848/nacos
# 用户名和密码均为nacos
# 手动在第一个主机中发布配置,在三个网页中刷新验证:
curl -X POST "http://192.168.77.111:8848/nacos/v1/cs/configs?dataId=nacos.cfg.dataId&group=test&content=helloWorld"
# 进一步可以验证mysql备库的相应表存入数据:
# mysql -unacos -pnacos -e 'select * from nacos.config_info\G'

负载层,两个Nginx构建负载均衡集群

  • 使用CentOS6或者CentOS7均可,本实验使用CentOS6
  • 生产环境是内网,并不跨公网,因此使用http即可
  • 依据文档《CentOS6实验机模板搭建部署》部署安装两台实验主机:
hostname nginx1
# hostname nginx2
echo "$(grep -E '127|::1' /etc/hosts)">/etc/hosts
cat >>/etc/hosts<<EOF
192.168.77.101 nginx1
192.168.77.102 nginx2
EOF
sed -i "s/^HOSTNAME.*$/HOSTNAME=$(hostname)/g" /etc/sysconfig/network
# 两台主机均操作
# 使用官方yum源安装nginx
cat >/etc/yum.repos.d/nginx.repo<<EOF
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/6/\$basearch/
# baseurl=http://nginx.org/packages/centos/7/\$basearch/
# baseurl=http://nginx.org/packages/rhel/6/\$basearch/
# baseurl=http://nginx.org/packages/rhel/7/\$basearch/
gpgcheck=0
enabled=1
EOF
# 根据发行版选择centos或者rhel,根据系统大版本选择6或者7
yum -y install nginx
# 简单部署负载均衡
cd /usr/share/nginx/html
rm -rf *
cat >/etc/nginx/conf.d/default.conf<<EOF

upstream nacos {
    server 192.168.77.111:8848;
    server 192.168.77.112:8848;
    server 192.168.77.113:8848;

}
server{
        listen 8848;
        server_name $(hostname -i);
        location / {
            proxy_pass http://nacos;
            index index.html index.htm;
        }
}
EOF
/etc/init.d/nginx restart
# 浏览器分别访问两台nginx进行验证
# http://192.168.77.101:8848/nacos/
# http://192.168.77.102:8848/nacos/

# 使用nginx跳转地址进行注册测试,网页验证:
# curl -X POST "http://192.168.77.101:8848/nacos/v1/cs/configs?dataId=nacos.cfg.dataId&group=test2&content=helloWorld2"
# curl -X POST "http://192.168.77.102:8848/nacos/v1/cs/configs?dataId=nacos.cfg.dataId&group=test3&content=helloWorld3"

应用层

  • 可以使用硬件AD设备,对两台nginx做负载轮询
  • 所有需要使用配置中心的应用最好配置一个连接池指向两台nginx和三台nacos
  • 当数据库层面发生故障时,最好设置应用层关闭写入行为

[TOC]

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐